From 6aa288ad2b505c25f55e2cf4c74f3b541c873e6b Mon Sep 17 00:00:00 2001 From: Kris Raney Date: Wed, 8 Jul 2026 09:45:41 -0700 Subject: [PATCH 1/2] Import meshnet under KNE maintenance (#709) --- .github/linters/.checkov.yaml | 2 + .github/linters/.codespellrc | 2 + .github/workflows/go.yml | 20 + .github/workflows/meshnet-e2e.yml | 49 + third_party/meshnet/.gitignore | 4 + third_party/meshnet/.mk/buf.mk | 15 + third_party/meshnet/.mk/ci.mk | 2 + third_party/meshnet/.mk/kind.mk | 33 + third_party/meshnet/.mk/kustomize.mk | 19 + third_party/meshnet/LICENSE | 29 + third_party/meshnet/Makefile | 128 +++ third_party/meshnet/README.md | 334 ++++++ .../api/clientset/v1beta1/fake/fake.go | 32 + .../meshnet/api/clientset/v1beta1/topology.go | 179 +++ .../api/clientset/v1beta1/topology_test.go | 414 +++++++ .../meshnet/api/types/v1beta1/gwire_types.go | 93 ++ .../meshnet/api/types/v1beta1/register.go | 41 + .../meshnet/api/types/v1beta1/topology.go | 63 + .../types/v1beta1/zz_generated.deepcopy.go | 141 +++ .../v1beta1/zz_generated_grpcwire.deepcopy.go | 127 ++ third_party/meshnet/arch.png | Bin 0 -> 75288 bytes third_party/meshnet/arch_v0_2_0.png | Bin 0 -> 95094 bytes third_party/meshnet/buf.gen.yaml | 8 + third_party/meshnet/buf.yaml | 17 + third_party/meshnet/daemon/cni/cni.go | 145 +++ .../meshnet/daemon/grpcwire/grpcwire.go | 390 +++++++ .../meshnet/daemon/grpcwire/gwire_map.go | 142 +++ .../meshnet/daemon/grpcwire/gwire_recon.go | 467 ++++++++ .../daemon/grpcwire/gwire_recon_test.go | 454 ++++++++ .../daemon/grpcwire/gwire_rpc_handlers.go | 164 +++ .../meshnet/daemon/grpcwire/wire-decode.go | 158 +++ third_party/meshnet/daemon/main.go | 62 + third_party/meshnet/daemon/meshnet/handler.go | 451 ++++++++ third_party/meshnet/daemon/meshnet/meshnet.go | 154 +++ .../proto/meshnet/v1beta1/meshnet.pb.go | 1019 +++++++++++++++++ .../proto/meshnet/v1beta1/meshnet.proto | 149 +++ .../proto/meshnet/v1beta1/meshnet_grpc.pb.go | 743 ++++++++++++ third_party/meshnet/daemon/vxlan/vxlan.go | 162 +++ .../meshnet/daemon/vxlan/vxlan_test.go | 57 + third_party/meshnet/docker/Dockerfile | 67 ++ third_party/meshnet/docker/entrypoint.sh | 29 + third_party/meshnet/docker/new-entrypoint.sh | 13 + third_party/meshnet/docs/implementation.md | 45 + .../meshnet/docs/meshnet-gwire-recon.pdf | Bin 0 -> 762705 bytes third_party/meshnet/docs/pics/crd.png | Bin 0 -> 33904 bytes third_party/meshnet/docs/pics/deployment.png | Bin 0 -> 144273 bytes third_party/meshnet/docs/pics/detail.png | Bin 0 -> 774150 bytes third_party/meshnet/go.mod | 76 ++ third_party/meshnet/go.sum | 437 +++++++ third_party/meshnet/kind.yaml | 15 + third_party/meshnet/manifests/base/crd.yaml | 81 ++ .../meshnet/manifests/base/daemonset.yaml | 76 ++ .../meshnet/manifests/base/gwire_crd.yaml | 121 ++ .../meshnet/manifests/base/kustomization.yaml | 12 + .../meshnet/manifests/base/namespace.yaml | 4 + third_party/meshnet/manifests/base/rbac.yaml | 31 + .../manifests/base/serviceaccount.yaml | 4 + .../manifests/overlays/e2e/kustomization.yaml | 7 + .../overlays/grpc-link-e2e/kustomization.yaml | 7 + .../overlays/grpc-link/kustomization.yaml | 18 + .../overlays/kops/kustomization.yaml | 8 + .../manifests/overlays/kops/patch.yaml | 13 + .../meshnet/plugin/grpcwires-plugin.go | 295 +++++ third_party/meshnet/plugin/meshnet.go | 576 ++++++++++ third_party/meshnet/tests/2node-sts.yml | 66 ++ third_party/meshnet/tests/2node.yml | 69 ++ third_party/meshnet/tests/3node-mlink.yml | 210 ++++ third_party/meshnet/tests/3node.yml | 91 ++ third_party/meshnet/tests/5node.yml | 175 +++ third_party/meshnet/tests/macvlan.yml | 60 + .../meshnet/utils/wireutil/wire-util.go | 51 + 71 files changed, 9126 insertions(+) create mode 100644 .github/linters/.codespellrc create mode 100644 .github/workflows/meshnet-e2e.yml create mode 100644 third_party/meshnet/.gitignore create mode 100644 third_party/meshnet/.mk/buf.mk create mode 100644 third_party/meshnet/.mk/ci.mk create mode 100644 third_party/meshnet/.mk/kind.mk create mode 100644 third_party/meshnet/.mk/kustomize.mk create mode 100644 third_party/meshnet/LICENSE create mode 100644 third_party/meshnet/Makefile create mode 100644 third_party/meshnet/README.md create mode 100644 third_party/meshnet/api/clientset/v1beta1/fake/fake.go create mode 100644 third_party/meshnet/api/clientset/v1beta1/topology.go create mode 100644 third_party/meshnet/api/clientset/v1beta1/topology_test.go create mode 100644 third_party/meshnet/api/types/v1beta1/gwire_types.go create mode 100644 third_party/meshnet/api/types/v1beta1/register.go create mode 100644 third_party/meshnet/api/types/v1beta1/topology.go create mode 100644 third_party/meshnet/api/types/v1beta1/zz_generated.deepcopy.go create mode 100644 third_party/meshnet/api/types/v1beta1/zz_generated_grpcwire.deepcopy.go create mode 100644 third_party/meshnet/arch.png create mode 100644 third_party/meshnet/arch_v0_2_0.png create mode 100644 third_party/meshnet/buf.gen.yaml create mode 100644 third_party/meshnet/buf.yaml create mode 100644 third_party/meshnet/daemon/cni/cni.go create mode 100644 third_party/meshnet/daemon/grpcwire/grpcwire.go create mode 100644 third_party/meshnet/daemon/grpcwire/gwire_map.go create mode 100644 third_party/meshnet/daemon/grpcwire/gwire_recon.go create mode 100644 third_party/meshnet/daemon/grpcwire/gwire_recon_test.go create mode 100644 third_party/meshnet/daemon/grpcwire/gwire_rpc_handlers.go create mode 100644 third_party/meshnet/daemon/grpcwire/wire-decode.go create mode 100644 third_party/meshnet/daemon/main.go create mode 100644 third_party/meshnet/daemon/meshnet/handler.go create mode 100644 third_party/meshnet/daemon/meshnet/meshnet.go create mode 100644 third_party/meshnet/daemon/proto/meshnet/v1beta1/meshnet.pb.go create mode 100644 third_party/meshnet/daemon/proto/meshnet/v1beta1/meshnet.proto create mode 100644 third_party/meshnet/daemon/proto/meshnet/v1beta1/meshnet_grpc.pb.go create mode 100644 third_party/meshnet/daemon/vxlan/vxlan.go create mode 100644 third_party/meshnet/daemon/vxlan/vxlan_test.go create mode 100644 third_party/meshnet/docker/Dockerfile create mode 100755 third_party/meshnet/docker/entrypoint.sh create mode 100755 third_party/meshnet/docker/new-entrypoint.sh create mode 100644 third_party/meshnet/docs/implementation.md create mode 100644 third_party/meshnet/docs/meshnet-gwire-recon.pdf create mode 100644 third_party/meshnet/docs/pics/crd.png create mode 100644 third_party/meshnet/docs/pics/deployment.png create mode 100644 third_party/meshnet/docs/pics/detail.png create mode 100644 third_party/meshnet/go.mod create mode 100644 third_party/meshnet/go.sum create mode 100644 third_party/meshnet/kind.yaml create mode 100644 third_party/meshnet/manifests/base/crd.yaml create mode 100644 third_party/meshnet/manifests/base/daemonset.yaml create mode 100644 third_party/meshnet/manifests/base/gwire_crd.yaml create mode 100644 third_party/meshnet/manifests/base/kustomization.yaml create mode 100644 third_party/meshnet/manifests/base/namespace.yaml create mode 100644 third_party/meshnet/manifests/base/rbac.yaml create mode 100644 third_party/meshnet/manifests/base/serviceaccount.yaml create mode 100644 third_party/meshnet/manifests/overlays/e2e/kustomization.yaml create mode 100644 third_party/meshnet/manifests/overlays/grpc-link-e2e/kustomization.yaml create mode 100644 third_party/meshnet/manifests/overlays/grpc-link/kustomization.yaml create mode 100644 third_party/meshnet/manifests/overlays/kops/kustomization.yaml create mode 100644 third_party/meshnet/manifests/overlays/kops/patch.yaml create mode 100644 third_party/meshnet/plugin/grpcwires-plugin.go create mode 100644 third_party/meshnet/plugin/meshnet.go create mode 100644 third_party/meshnet/tests/2node-sts.yml create mode 100644 third_party/meshnet/tests/2node.yml create mode 100644 third_party/meshnet/tests/3node-mlink.yml create mode 100644 third_party/meshnet/tests/3node.yml create mode 100644 third_party/meshnet/tests/5node.yml create mode 100644 third_party/meshnet/tests/macvlan.yml create mode 100644 third_party/meshnet/utils/wireutil/wire-util.go diff --git a/.github/linters/.checkov.yaml b/.github/linters/.checkov.yaml index cd392e19c..937b2a0b6 100644 --- a/.github/linters/.checkov.yaml +++ b/.github/linters/.checkov.yaml @@ -7,3 +7,5 @@ skip-path: - x/webhook - x/wire - init_wait + - "third_party/meshnet/tests/.*" + - "third_party/meshnet/manifests/.*" diff --git a/.github/linters/.codespellrc b/.github/linters/.codespellrc new file mode 100644 index 000000000..577b22986 --- /dev/null +++ b/.github/linters/.codespellrc @@ -0,0 +1,2 @@ +[codespell] +skip = *.pdf,*.png,*.jpg,*.gif,*.ico,go.sum diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index dcb1de91a..fddd790ef 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -28,3 +28,23 @@ jobs: permissions: contents: read packages: read + + meshnet: + name: Meshnet Go Tests + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - name: Check out code + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + with: + persist-credentials: false + - name: Set up Go + uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + with: + go-version: "1.26" + - name: Install dependencies + run: sudo apt-get install -y libpcap-dev + - name: Run Go tests + working-directory: ./third_party/meshnet + run: make test diff --git a/.github/workflows/meshnet-e2e.yml b/.github/workflows/meshnet-e2e.yml new file mode 100644 index 000000000..a1d6d7446 --- /dev/null +++ b/.github/workflows/meshnet-e2e.yml @@ -0,0 +1,49 @@ +--- +name: Meshnet E2E + +on: + push: + branches: [main] + pull_request: + branches: [main] + +permissions: {} + +jobs: + e2e: + name: E2E (${{ matrix.link }}) + runs-on: ubuntu-latest + permissions: + contents: read + strategy: + fail-fast: false + matrix: + link: [vxlan, grpc] + steps: + - name: Check out code + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 + with: + persist-credentials: false + - name: Set up Go + uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 + with: + go-version: "1.26" + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3.10.0 + - name: Build e2e test env + working-directory: ./third_party/meshnet + run: make up + - name: Build docker image + working-directory: ./third_party/meshnet + run: make docker + - name: Install meshnet (${{ matrix.link }}) + working-directory: ./third_party/meshnet + run: | + if [ "${{ matrix.link }}" = "grpc" ]; then + make grpc=1 install + else + make install + fi + - name: Run tests + working-directory: ./third_party/meshnet + run: make e2e diff --git a/third_party/meshnet/.gitignore b/third_party/meshnet/.gitignore new file mode 100644 index 000000000..bd6d44d83 --- /dev/null +++ b/third_party/meshnet/.gitignore @@ -0,0 +1,4 @@ +cache/ +main.go +.vscode +.envrc diff --git a/third_party/meshnet/.mk/buf.mk b/third_party/meshnet/.mk/buf.mk new file mode 100644 index 000000000..15e58e108 --- /dev/null +++ b/third_party/meshnet/.mk/buf.mk @@ -0,0 +1,15 @@ +# buf-specific targets. See https://github.com/bufbuild/buf +# NOTE: make sure you've got protoc-gen-go installed. See https://grpc.io/docs/languages/go/quickstart/ + +.PHONY: buf-ensure +buf-ensure: + @which buf >/dev/null 2>&1 || \ + echo 'Install buf with "go install github.com/bufbuild/buf/cmd/buf@latest"' + +.PHONY: lint +buf-lint: buf-ensure + buf lint + +.PHONY: buf-generate +buf-generate: buf-lint + buf generate -v diff --git a/third_party/meshnet/.mk/ci.mk b/third_party/meshnet/.mk/ci.mk new file mode 100644 index 000000000..f4b7197a7 --- /dev/null +++ b/third_party/meshnet/.mk/ci.mk @@ -0,0 +1,2 @@ +ci: + act -P ubuntu-latest=nektos/act-environments-ubuntu:20.04 diff --git a/third_party/meshnet/.mk/kind.mk b/third_party/meshnet/.mk/kind.mk new file mode 100644 index 000000000..b9fb2290f --- /dev/null +++ b/third_party/meshnet/.mk/kind.mk @@ -0,0 +1,33 @@ +# KIND cluster name +KIND_CLUSTER_NAME := "meshnet" + +.PHONY: kind-install +kind-install: + go install sigs.k8s.io/kind@v0.17.0 + +.PHONY: kind-stop +kind-stop: + @$(GOPATH)/bin/kind delete cluster --name $(KIND_CLUSTER_NAME) || \ + echo "kind cluster is not running" + +.PHONY: kind-ensure +kind-ensure: + @which $(GOPATH)/bin/kind >/dev/null 2>&1 || \ + make kind-install + +.PHONY: kind-start +kind-start: kind-ensure + @$(GOPATH)/bin/kind get clusters | grep $(KIND_CLUSTER_NAME) >/dev/null 2>&1 || \ + $(GOPATH)/bin/kind create cluster --name $(KIND_CLUSTER_NAME) --config ./kind.yaml + +.PHONY: kind-wait-for-cni +kind-wait-for-cni: + kubectl wait --timeout=60s --for condition=Ready pod -l app=kindnet -n kube-system + +.PHONY: kind-connect +kind-connect: + kubectl cluster-info --context kind-meshnet >/dev/null + +.PHONY: kind-load +kind-load: + $(GOPATH)/bin/kind load docker-image --name $(KIND_CLUSTER_NAME) ${DOCKER_IMAGE}:${COMMIT} diff --git a/third_party/meshnet/.mk/kustomize.mk b/third_party/meshnet/.mk/kustomize.mk new file mode 100644 index 000000000..6ed29a339 --- /dev/null +++ b/third_party/meshnet/.mk/kustomize.mk @@ -0,0 +1,19 @@ +.PHONY: kust-install +kust-install: + go install sigs.k8s.io/kustomize/kustomize/v5@v5.0.0 + +.PHONY: kust-ensure +kust-ensure: + @which $(GOPATH)/bin/kustomize >/dev/null 2>&1 || \ + make kust-install + +.PHONY: kustomize +kustomize: kust-ensure + cd manifests/overlays/e2e && $(GOPATH)/bin/kustomize edit set image ${DOCKER_IMAGE}:${COMMIT} + cd manifests/overlays/grpc-link-e2e && $(GOPATH)/bin/kustomize edit set image ${DOCKER_IMAGE}:${COMMIT} + cd manifests/overlays/grpc-link && $(GOPATH)/bin/kustomize edit set image ${DOCKER_IMAGE}:${COMMIT} + + +.PHONY: kustomize-kops +kustomize-kops: kust-ensure + kubectl apply -k manifests/overlays/kops/ diff --git a/third_party/meshnet/LICENSE b/third_party/meshnet/LICENSE new file mode 100644 index 000000000..ef428df13 --- /dev/null +++ b/third_party/meshnet/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2018, Michael Kashin +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/third_party/meshnet/Makefile b/third_party/meshnet/Makefile new file mode 100644 index 000000000..6c5c77f71 --- /dev/null +++ b/third_party/meshnet/Makefile @@ -0,0 +1,128 @@ +DOCKER_IMAGE := openconfig/meshnet +GOPATH ?= ${HOME}/go +ARCHS := "linux/amd64,linux/arm64" +#ARCHS := "linux/amd64" + +COMMIT := $(shell git describe --dirty --always) +TAG := $(shell git describe --tags --abbrev=0 || echo latest) + +include .mk/kind.mk +include .mk/ci.mk +include .mk/kustomize.mk +include .mk/buf.mk + +.PHONY: all +all: docker + +## Run unit tests +test: + go test ./... + +## Run unit tests for Reconciliation +recon-test: + sudo go test -count=1 -v -run '' github.com/openconfig/kne/third_party/meshnet/daemon/grpcwire + #sudo go test -count=1 -run '' github.com/openconfig/kne/third_party/meshnet/daemon/grpcwire + +# Build local binaries +local-build: + CGO_ENABLED=0 GOOS=linux go build -o meshnet github.com/openconfig/kne/third_party/meshnet/plugin + CGO_ENABLED=1 GOOS=linux go build -o meshnetd github.com/openconfig/kne/third_party/meshnet/daemon + +# Remove local binaries +local-clean: + @[ -f ./meshnet ] && rm meshnet || true + @[ -f ./meshnetd ] && rm meshnetd || true + + +.PHONY: docker +## Build the docker image +docker: + @echo 'Creating docker image ${DOCKER_IMAGE}:${COMMIT}' + docker buildx create --use --name=multiarch --driver-opt network=host --buildkitd-flags '--allow-insecure-entitlement network.host' --node multiarch && \ + docker buildx build --load \ + --build-arg LDFLAGS=${LDFLAGS} \ + --platform "linux/amd64" \ + --tag ${DOCKER_IMAGE}:${COMMIT} \ + -f docker/Dockerfile \ + . + + +.PHONY: release +## Release the current code with git tag and `latest` +release: + docker run --rm --privileged tonistiigi/binfmt --install all + docker buildx build --push \ + --build-arg LDFLAGS=${LDFLAGS} \ + --platform ${ARCHS} \ + -t ${DOCKER_IMAGE}:${TAG} \ + -t ${DOCKER_IMAGE}:latest \ + -f docker/Dockerfile \ + . + +## Generate GRPC code +proto: buf-generate + +## Targets below are for integration testing only + +.PHONY: up +## Build test environment +up: kind-start + +.PHONY: down +## Destroy test environment +down: kind-stop + +.PHONY: e2e +## Run the end-to-end test +e2e: wait-for-meshnet + kubectl apply -f tests/3node.yml + kubectl wait --timeout=120s --for condition=Ready pod -l test=3node + kubectl exec r1 -- ping -c 1 12.12.12.2 + kubectl exec r1 -- ping -c 1 13.13.13.3 + kubectl exec r2 -- ping -c 1 23.23.23.3 + +.PHONY: e2e-mlink +## Run the end-to-end test with multi-links between a pair of nodes. +e2e-mlink: wait-for-meshnet + kubectl apply -f tests/3node-mlink.yml + kubectl wait --timeout=120s --for condition=Ready pod -l test=3node-mlink --namespace=mlink + kubectl exec r1 -n mlink -- ping -c 1 10.10.10.2 + kubectl exec r1 -n mlink -- ping -c 1 11.11.11.2 + kubectl exec r1 -n mlink -- ping -c 1 12.12.12.2 + kubectl exec r1 -n mlink -- ping -c 1 13.13.13.2 + kubectl exec r1 -n mlink -- ping -c 1 20.20.20.2 + kubectl exec r1 -n mlink -- ping -c 1 21.21.21.2 + kubectl exec r1 -n mlink -- ping -c 1 22.22.22.2 + kubectl exec r1 -n mlink -- ping -c 1 23.23.23.2 + kubectl exec r2 -n mlink -- ping -c 1 30.30.30.2 + kubectl exec r2 -n mlink -- ping -c 1 31.31.31.2 + kubectl exec r2 -n mlink -- ping -c 1 32.32.32.2 + kubectl exec r2 -n mlink -- ping -c 1 33.33.33.2 + +wait-for-meshnet: + kubectl wait --for condition=Ready pod -l name=meshnet -n meshnet + sleep 5 + +.PHONY: install +## Install meshnet into a test cluster +install: kind-load kind-wait-for-cni kustomize kind-connect +ifdef grpc + kustomize build manifests/overlays/grpc-link-e2e | kubectl apply -f - +else + kustomize build manifests/overlays/e2e | kubectl apply -f - +endif + +.PHONY: uninstall +## Uninstall meshnet from a test cluster +uninstall: kind-connect +ifdef grpc + -kustomize build manifests/overlays/grpc-link-e2e | kubectl delete -f - +else + -kustomize build manifests/overlays/e2e | kubectl delete -f - +endif + +github-ci: kust-ensure build clean local upload install e2e + +# From: https://gist.github.com/klmr/575726c7e05d8780505a +help: + @echo "$$(tput sgr0)";sed -ne"/^## /{h;s/.*//;:d" -e"H;n;s/^## //;td" -e"s/:.*//;G;s/\\n## /---/;s/\\n/ /g;p;}" ${MAKEFILE_LIST}|awk -F --- -v n=$$(tput cols) -v i=15 -v a="$$(tput setaf 6)" -v z="$$(tput sgr0)" '{printf"%s%*s%s ",a,-i,$$1,z;m=split($$2,w," ");l=n-i;for(j=1;j<=m;j++){l-=length(w[j])+1;if(l<= 0){l=n-i-length(w[j])-1;printf"\n%*s ",-i," ";}printf"%s ",w[j];}printf"\n";}' diff --git a/third_party/meshnet/README.md b/third_party/meshnet/README.md new file mode 100644 index 000000000..e1b3d394a --- /dev/null +++ b/third_party/meshnet/README.md @@ -0,0 +1,334 @@ +# meshnet CNI (KNE Fork) + +> [!NOTE] +> This directory contains a fork of the archived [networkop/meshnet-cni](https://github.com/networkop/meshnet-cni) project, now integrated and maintained directly within the OpenConfig KNE repository. +> +> Future development, bug fixes, and CI/CD testing are managed as part of the parent [KNE project](https://github.com/openconfig/kne). Please file any issues or pull requests in the main KNE repository. + +**meshnet** is a (K8s) CNI plugin to create arbitrary network topologies out of point-to-point links with the help of [koko](https://github.com/redhat-nfvpe/koko). Heavily inspired by [Ratchet-CNI](https://github.com/dougbtv/ratchet-cni), [kokonet](https://github.com/s1061123/kokonet) and [Multus](https://github.com/intel/multus-cni). + +## New in version 0.2.0 + +- Using K8s etcd as datastore via Custom Resources +- All internal communication now happens over gRPC +- Support for macvlan links to connect to external resources + +## Architecture + +The goal of this plugin is to interconnect pods via direct point-to-point links according to a pre-define topology. To do that, the plugin uses three types of links: + +- **veth** - used to connect two pods running on the same host +- **vxlan** - used to connected two pods running on different hosts + - Optionally users can opt in to use **gRPC** instead, for this use case. Check [Installation](#installation). +- **macvlan** - used to connect to external resources, i.e. any physical or virtual device outside of the Kubernetes cluster + +Topology information, represented as a list of links per pod, is stored in k8s's etcd datastore as custom resources: + +```yaml +apiVersion: networkop.co.uk/v1beta1 +kind: Topology +metadata: + name: r1 +spec: + links: + - uid: 1 + peer_pod: r2 + local_intf: eth1 + local_ip: 12.12.12.1/24 + peer_intf: eth1 + peer_ip: 12.12.12.2/24 +``` + +The plugin configuration file contains a "chained" `meshnet` in the list of plugins: + +```yaml +{ + "cniVersion": "0.3.1", + "name": "kindnet", + "plugins": + [ + { + "ipMasq": false, + "ipam": + { + "dataDir": "/run/cni-ipam-state", + "ranges": [[{ "subnet": "10.244.0.0/24" }]], + "routes": [{ "dst": "0.0.0.0/0" }], + "type": "host-local", + }, + "mtu": 1500, + "type": "ptp", + }, + { "capabilities": { "portMappings": true }, "type": "portmap" }, + { "name": "meshnet", "type": "meshnet", "ipam": {}, "dns": {} }, + ], +} +``` + +The plugin consists of three main components: + +- **datastore** - a k8s native etcd backend cluster storing topology information and runtime pod metadata (e.g. pod IP address and NetNS) +- **meshnet** - a CNI binary responsible for pod's network configuration +- **meshnetd** - a daemon responsible for communication with k8s and vxlan (or grpc) link configuration updates + +![architecture](arch_v0_2_0.png) + +Below is the order of operation of the plugin from the perspective of kube-node-1: + +1. Kubernetes cluster gets populated with the topology information via custom resources +2. pod-1/pod-2 come up, local kubelet calls the `meshnet` binary for each pod to setup their networking. +3. Based on the CNI configuration file, Kubelet calls meshnet to set up additional interfaces. + + > Note that `eth0` is **always** setup by one of the existing CNI plugins. It is used to provide external connectivity to and from the pod + +4. meshnet binary updates the topology data with pod's runtime metadata (namespace filepath and primary IP address). +5. meshnet binary (via a local meshnet daemon) retrieves the list of `links` and looks up peer pod's metadata to identify what kind of link to setup - veth, vxlan or macvlan. +6. If the peer is on the same node, it calls koko to setup a `veth` link between the two pods. +7. If the peer is on the remote node, it does two things: + - 7.1 It calls koko to setup a local `vxlan` link. + - 7.2 It makes a gRPC `Update` call to the remote node's meshnet daemon, specifying this link's metadata (e.g. VTEP IP and VNI). +8. Upon receipt of this information, remote node's `meshnetd` idepmotently updates the local vxlan link, i.e. it creates a new link, updates the existing link if there's a change or does nothing if the link attributes are the same. + +## Local Demo + +Clone this project and build a local 3-node Kubernetes cluster + +```sh +make up +``` + +Build the meshnet docker image + +```sh +make docker +``` + +Install meshnet plugin + +```sh +# install meshnet with VXLAN link +make install +# or install meshnet with gRPC link +make grpc=1 install +``` + +Verify that meshnet is up and `READY` + +```sh +kubectl get daemonset -n meshnet +``` + +Install a 3-node test topology + +```sh +kubectl apply -f tests/3node.yml +``` + +Check that all pods are running + +```sh +kubectl get pods -l test=3node +NAME READY STATUS RESTARTS AGE +r1 1/1 Running 0 40m +r2 1/1 Running 0 40m +r3 1/1 Running 0 40s +``` + +Test connectivity between pods + +```sh +kubectl exec r1 -- ping -c 1 12.12.12.2 +kubectl exec r2 -- ping -c 1 23.23.23.3 +kubectl exec r3 -- ping -c 1 13.13.13.1 +``` + +Cleanup + +```sh +kubectl delete --grace-period=0 --force -f tests/3node.yml +``` + +Destroy the local kind cluster + +```sh +make down +``` + +## Installation + +The following manifest will create all that's required for meshnet plugin to function, i.e.: + +- A `meshnet` namespace +- A Custom Resource Definition for network topologies +- A set of RBAC rules to allow meshnet to interact with new custom resources +- A daemonset with meshnet plugin and configuration files + +```sh +# to install meshnet with VXLAN link +kubectl apply -k manifests/base +# to install meshnet with gRPC link +kubectl apply -k manifests/overlays/grpc-link +``` + +#### Interaction with existing resources + +Meshnet plugin was designed to work alongside any other existing or future Kubernetes resources that may not require any special topology to be set up for them. Every pod coming up will have its first interface setup by an existing CNI plugin (e.g. flannel, weave, calico) and will only have additional interfaces connected if there's a matching custom `Topology` resource. + +During the initial installation process, meshnet will try to insert itself into the list of CNI plugins. For example, assuming the following configuration is present in `/etc/cni/net.d/weave.conf`: + +```json +{ + "cniVersion": "0.2.0", + "name": "weave", + "type": "weave-net" +} +``` + +Meshnet will convert the above to conflist and produce the file `/etc/cni/net.d/00-meshnet.conflist` with the following content: + +```json +{ + "cniVersion": "0.2.0", + "name": "weave", + "plugins": [ + { + "cniVersion": "0.2.0", + "name": "weave", + "type": "weave-net" + }, + { + "name": "meshnet", + "type": "meshnet", + "ipam": {}, + "dns": {} + } + ] +} +``` + +### Customising installation paths + +In some cases, Kubernetes distros may store CNI configuration files and binaries in non-standard directories and override them with `--cni-bin-dir` and `--cni-conf-dir` flags. In order to install meshnet into the right directories, create a new overlay under `manifests/overlays` and patch the `cni-dir` or `cni-bin` volumes with the correct location. See [kops overlay](manifests/overlays/kops) for an example. + +### Resilient topologies + +If you need to have Pods restarted and re-scheduled by the kube-controller, it's possible to deploy them as StatefulSets with replica number = 1. See [this example](/tests/2node-sts.yml). + +### Examples + +Inside the `tests` directory there are 4 manifests with the following test topologies: + +- A simple point-to-point 2-node topology +- A 3-node topology connected as a triangle +- A 5-node topology connected as [quincunx](https://en.wikipedia.org/wiki/Quincunx) +- A 2-node topology with 2nd node connected to a macvlan interface + +#### Use k8s-topo to orchestrate network topologies + +Login the K8s master node and + +```sh +git clone https://github.com/networkop/k8s-topo.git && cd k8s-topo +``` + +Deploy k8s-topo pod + +```sh +kubectl create -f manifest.yml +``` + +Connect to the k8s-topo pod + +```sh +kubectl exec -it k8s-topo sh +``` + +Create a random 20-node network topology + +```text +./examples/builder/builder 20 0 +Total number of links generated: 19 +``` + +Create the topology inside K8s + +```sh +k8s-topo --create examples/builder/random.yml +``` + +Optionally, you can generate a D3.js network topology graph + +```sh +k8s-topo --graph examples/builder/random.yml +``` + +View the generated topology graph at `http://:32000` + +Verify that the topology has been deployed (from the master node) + +```text +kubectl get pods -o wide | grep qrtr +qrtr-1 1/1 Running 0 11s 10.233.65.231 node3 +qrtr-10 1/1 Running 0 11s 10.233.65.234 node3 +qrtr-11 1/1 Running 0 10s 10.233.66.246 node4 +``` + +Login the first node and verify connectivity to every other loopback + +```text +$ qrtr-1 +/ # for i in `seq 0 20`; do echo "192.0.2.$i =>" $(ping -c 1 -W 1 192.0.2.$i|grep loss); done +192.0.2.0 => 1 packets transmitted, 1 packets received, 0% packet loss +192.0.2.1 => 1 packets transmitted, 1 packets received, 0% packet loss +192.0.2.2 => 1 packets transmitted, 1 packets received, 0% packet loss +192.0.2.3 => 1 packets transmitted, 1 packets received, 0% packet loss +192.0.2.4 => 1 packets transmitted, 1 packets received, 0% packet loss +192.0.2.5 => 1 packets transmitted, 1 packets received, 0% packet loss +192.0.2.6 => 1 packets transmitted, 1 packets received, 0% packet loss +192.0.2.7 => 1 packets transmitted, 1 packets received, 0% packet loss +192.0.2.8 => 1 packets transmitted, 1 packets received, 0% packet loss +192.0.2.9 => 1 packets transmitted, 1 packets received, 0% packet loss +192.0.2.10 => 1 packets transmitted, 1 packets received, 0% packet loss +192.0.2.11 => 1 packets transmitted, 1 packets received, 0% packet loss +192.0.2.12 => 1 packets transmitted, 1 packets received, 0% packet loss +192.0.2.13 => 1 packets transmitted, 1 packets received, 0% packet loss +192.0.2.14 => 1 packets transmitted, 1 packets received, 0% packet loss +192.0.2.15 => 1 packets transmitted, 1 packets received, 0% packet loss +192.0.2.16 => 1 packets transmitted, 1 packets received, 0% packet loss +192.0.2.17 => 1 packets transmitted, 1 packets received, 0% packet loss +192.0.2.18 => 1 packets transmitted, 1 packets received, 0% packet loss +192.0.2.19 => 1 packets transmitted, 1 packets received, 0% packet loss +``` + +Destroy the topology + +```sh +k8s-topo --destroy examples/builder/random.yml +``` + +## Troubleshooting + +There are two places to collect meshnet logs: + +1. Meshnet daemon logs can be collected outside of the Kubernetes cluster. For example, the below command will collect logs from all meshnet daemons using [stern](https://github.com/wercker/stern) + + ```sh + stern meshnet -n meshnet + ``` + +2. Meshnet plugin (binary) logs can be collected on the respective Kubernetes nodes, e.g. + + ```text + root@kind-worker:/# journalctl -u kubelet + ``` + +--- + +Each POD is supposed to run an `init-wait` container that waits for the right number of interface to be connected before passing the ball to the main container. However, sometimes, PODs restart resulting in the missing interfaces inside the main container process, since they may have been added _AFTER_ the process that reads the container interface list (e.g. qemu-kvm for VM-based containers). This is the procedure I use to identify the cause of the failure: + +1. Identify which POD is at fault. This will most likely be the incorrect number of interfaces. +2. Identify which interface is missing or was added last. +3. Identify the correlation between the pair of containers interconnected by the missing interface +4. Look for the peer container's failures using `kubectl get events --sort-by=.metadata.creationTimestamp'` +5. Identify which k8s node this POD is running on `kubectl get pods acme-scs1001-a -o yaml | grep node` +6. On that node check the `journalctl` for any errors associated with the POD diff --git a/third_party/meshnet/api/clientset/v1beta1/fake/fake.go b/third_party/meshnet/api/clientset/v1beta1/fake/fake.go new file mode 100644 index 000000000..91195787e --- /dev/null +++ b/third_party/meshnet/api/clientset/v1beta1/fake/fake.go @@ -0,0 +1,32 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package fake + +import ( + toplogyv1client "github.com/openconfig/kne/third_party/meshnet/api/clientset/v1beta1" + topologyv1 "github.com/openconfig/kne/third_party/meshnet/api/types/v1beta1" + "k8s.io/apimachinery/pkg/runtime" + dfake "k8s.io/client-go/dynamic/fake" + "k8s.io/client-go/rest" +) + +func NewSimpleClientset(objects ...runtime.Object) (*toplogyv1client.Clientset, error) { + cs, err := toplogyv1client.NewForConfig(&rest.Config{}) + if err != nil { + return nil, err + } + c := dfake.NewSimpleDynamicClient(topologyv1.Scheme, objects...) + cs.SetDynamicClient(c.Resource(toplogyv1client.GVR())) + return cs, nil +} diff --git a/third_party/meshnet/api/clientset/v1beta1/topology.go b/third_party/meshnet/api/clientset/v1beta1/topology.go new file mode 100644 index 000000000..4a0a7154e --- /dev/null +++ b/third_party/meshnet/api/clientset/v1beta1/topology.go @@ -0,0 +1,179 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package v1beta1 + +import ( + "context" + "fmt" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/watch" + "k8s.io/client-go/dynamic" + "k8s.io/client-go/kubernetes/scheme" + "k8s.io/client-go/rest" + "sigs.k8s.io/controller-runtime/pkg/client/apiutil" + + topologyv1 "github.com/openconfig/kne/third_party/meshnet/api/types/v1beta1" +) + +// TopologyInterface provides access to the Topology CRD. +type TopologyInterface interface { + List(ctx context.Context, opts metav1.ListOptions) (*topologyv1.TopologyList, error) + Get(ctx context.Context, name string, opts metav1.GetOptions) (*topologyv1.Topology, error) + Create(ctx context.Context, topology *topologyv1.Topology, opts metav1.CreateOptions) (*topologyv1.Topology, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Unstructured(ctx context.Context, name string, opts metav1.GetOptions, subresources ...string) (*unstructured.Unstructured, error) + Update(ctx context.Context, obj *unstructured.Unstructured, opts metav1.UpdateOptions) (*topologyv1.Topology, error) +} + +// Interface is the clientset interface for topology. +type Interface interface { + Topology(namespace string) TopologyInterface +} + +// Clientset is a client for the topology crds. +type Clientset struct { + dInterface dynamic.NamespaceableResourceInterface +} + +var gvr = schema.GroupVersionResource{ + Group: topologyv1.GroupName, + Version: topologyv1.GroupVersion, + Resource: "topologies", +} + +func GVR() schema.GroupVersionResource { + return gvr +} + +var ( + groupVersion = &schema.GroupVersion{ + Group: topologyv1.GroupName, + Version: topologyv1.GroupVersion, + } +) + +func GV() *schema.GroupVersion { + return groupVersion +} + +// NewForConfig returns a new Clientset based on c. +func NewForConfig(c *rest.Config) (*Clientset, error) { + config := *c + config.ContentConfig.GroupVersion = groupVersion + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + config.UserAgent = rest.DefaultKubernetesUserAgent() + dClient, err := dynamic.NewForConfig(c) + if err != nil { + return nil, err + } + dInterface := dClient.Resource(gvr) + return &Clientset{dInterface: dInterface}, nil +} + +// SetDynamicClient is only exposed for integration testing. +func (c *Clientset) SetDynamicClient(d dynamic.NamespaceableResourceInterface) { + c.dInterface = d +} + +func (c *Clientset) Topology(namespace string) TopologyInterface { + return &topologyClient{ + dInterface: c.dInterface, + ns: namespace, + } +} + +type topologyClient struct { + dInterface dynamic.NamespaceableResourceInterface + ns string +} + +func (t *topologyClient) List(ctx context.Context, opts metav1.ListOptions) (*topologyv1.TopologyList, error) { + u, err := t.dInterface.Namespace(t.ns).List(ctx, opts) + if err != nil { + return nil, err + } + result := topologyv1.TopologyList{} + if err := runtime.DefaultUnstructuredConverter.FromUnstructured(u.UnstructuredContent(), &result); err != nil { + return nil, fmt.Errorf("failed to type assert return to TopologyList: %w", err) + } + return &result, nil +} + +func (t *topologyClient) Get(ctx context.Context, name string, opts metav1.GetOptions) (*topologyv1.Topology, error) { + u, err := t.dInterface.Namespace(t.ns).Get(ctx, name, opts) + if err != nil { + return nil, err + } + result := topologyv1.Topology{} + if err := runtime.DefaultUnstructuredConverter.FromUnstructured(u.UnstructuredContent(), &result); err != nil { + return nil, fmt.Errorf("failed to type assert return to Topology: %w", err) + } + return &result, nil +} + +func (t *topologyClient) Create(ctx context.Context, topology *topologyv1.Topology, opts metav1.CreateOptions) (*topologyv1.Topology, error) { + gvk, err := apiutil.GVKForObject(topology, topologyv1.Scheme) + if err != nil { + return nil, fmt.Errorf("failed to get gvk for Topology: %w", err) + } + topology.TypeMeta = metav1.TypeMeta{ + Kind: gvk.Kind, + APIVersion: gvk.GroupVersion().String(), + } + obj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(topology) + if err != nil { + return nil, fmt.Errorf("failed to convert Topology to unstructured: %w", err) + } + u, err := t.dInterface.Namespace(t.ns).Create(ctx, &unstructured.Unstructured{Object: obj}, opts) + if err != nil { + return nil, err + } + result := topologyv1.Topology{} + if err := runtime.DefaultUnstructuredConverter.FromUnstructured(u.UnstructuredContent(), &result); err != nil { + return nil, fmt.Errorf("failed to type assert return to Topology: %w", err) + } + return &result, nil +} + +func (t *topologyClient) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + opts.Watch = true + return t.dInterface.Namespace(t.ns).Watch(ctx, opts) +} + +func (t *topologyClient) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return t.dInterface.Namespace(t.ns).Delete(ctx, name, opts) +} + +func (t *topologyClient) Update(ctx context.Context, obj *unstructured.Unstructured, opts metav1.UpdateOptions) (*topologyv1.Topology, error) { + obj, err := t.dInterface.Namespace(t.ns).UpdateStatus(ctx, obj, metav1.UpdateOptions{}) + if err != nil { + return nil, err + } + result := topologyv1.Topology{} + if err := runtime.DefaultUnstructuredConverter.FromUnstructured(obj.UnstructuredContent(), &result); err != nil { + return nil, fmt.Errorf("failed to type assert return to Topology: %w", err) + } + return &result, nil +} + +func (t *topologyClient) Unstructured(ctx context.Context, name string, opts metav1.GetOptions, subresources ...string) (*unstructured.Unstructured, error) { + return t.dInterface.Namespace(t.ns).Get(ctx, name, opts, subresources...) +} diff --git a/third_party/meshnet/api/clientset/v1beta1/topology_test.go b/third_party/meshnet/api/clientset/v1beta1/topology_test.go new file mode 100644 index 000000000..75555825d --- /dev/null +++ b/third_party/meshnet/api/clientset/v1beta1/topology_test.go @@ -0,0 +1,414 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package v1beta1 + +import ( + "context" + "fmt" + "testing" + + "github.com/google/go-cmp/cmp" + "github.com/google/go-cmp/cmp/cmpopts" + "github.com/h-fam/errdiff" + topologyv1 "github.com/openconfig/kne/third_party/meshnet/api/types/v1beta1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/watch" + dynamicfake "k8s.io/client-go/dynamic/fake" + "k8s.io/client-go/rest" + ktest "k8s.io/client-go/testing" +) + +var ( + objNew = &topologyv1.Topology{ + TypeMeta: metav1.TypeMeta{ + Kind: "Topology", + APIVersion: "networkop.co.uk/v1beta1", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "newObj", + Namespace: "test", + Generation: 1, + }, + Status: topologyv1.TopologyStatus{}, + Spec: topologyv1.TopologySpec{ + Links: []topologyv1.Link{{ + LocalIntf: "int1", + PeerIntf: "int1", + PeerPod: "obj2", + UID: 0, + }}, + }, + } + obj1 = &topologyv1.Topology{ + TypeMeta: metav1.TypeMeta{ + Kind: "Topology", + APIVersion: "networkop.co.uk/v1beta1", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "obj1", + Namespace: "test", + Generation: 1, + }, + Status: topologyv1.TopologyStatus{}, + Spec: topologyv1.TopologySpec{ + Links: []topologyv1.Link{{ + LocalIntf: "int1", + PeerIntf: "int1", + PeerPod: "obj2", + UID: 0, + }}, + }, + } + obj2 = &topologyv1.Topology{ + TypeMeta: metav1.TypeMeta{ + Kind: "Topology", + APIVersion: "networkop.co.uk/v1beta1", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "obj2", + Namespace: "test", + Generation: 1, + }, + Status: topologyv1.TopologyStatus{}, + Spec: topologyv1.TopologySpec{ + Links: []topologyv1.Link{{ + LocalIntf: "int1", + PeerIntf: "int1", + PeerPod: "obj1", + UID: 1, + }}, + }, + } +) + +type fakeWatch struct { + e []watch.Event + ch chan watch.Event + done chan struct{} +} + +func newFakeWatch(e []watch.Event) *fakeWatch { + f := &fakeWatch{ + e: e, + ch: make(chan watch.Event, 1), + done: make(chan struct{}), + } + go func() { + for len(f.e) != 0 { + e := f.e[0] + f.e = f.e[1:] + select { + case f.ch <- e: + case <-f.done: + return + } + } + }() + return f +} +func (f *fakeWatch) Stop() { + close(f.done) +} + +func (f *fakeWatch) ResultChan() <-chan watch.Event { + return f.ch +} + +func setUp(t *testing.T) *Clientset { + t.Helper() + objs := []runtime.Object{obj1, obj2} + cs, err := NewForConfig(&rest.Config{}) + if err != nil { + t.Fatalf("failed to create client set") + } + f := dynamicfake.NewSimpleDynamicClient(topologyv1.Scheme, objs...) + f.PrependWatchReactor("*", func(action ktest.Action) (bool, watch.Interface, error) { + wAction, ok := action.(ktest.WatchAction) + if !ok { + return false, nil, nil + } + if wAction.GetWatchRestrictions().ResourceVersion == "doesnotexist" { + return true, nil, fmt.Errorf("cannot watch unknown resource version") + } + f := newFakeWatch([]watch.Event{ + { + Type: watch.Added, + Object: obj1, + }, + }) + return true, f, nil + }) + cs.dInterface = f.Resource(gvr) + return cs +} + +func TestCreate(t *testing.T) { + cs := setUp(t) + objWithoutTypeMetaOut := objNew.DeepCopy() + objWithoutTypeMetaOut.Name = "newObjWithoutTypeMeta" + objWithoutTypeMetaIn := objWithoutTypeMetaOut.DeepCopy() + objWithoutTypeMetaIn.TypeMeta.Reset() + tests := []struct { + desc string + in *topologyv1.Topology + want *topologyv1.Topology + wantErr string + }{{ + desc: "already exists", + in: obj1, + wantErr: "already exists", + }, { + desc: "success", + in: objNew, + want: objNew, + }, { + desc: "success without typemeta", + in: objWithoutTypeMetaIn, + want: objWithoutTypeMetaOut, + }} + for _, tt := range tests { + t.Run(tt.desc, func(t *testing.T) { + tc := cs.Topology("test") + got, err := tc.Create(context.Background(), tt.in, metav1.CreateOptions{}) + if s := errdiff.Substring(err, tt.wantErr); s != "" { + t.Fatalf("unexpected error: %s", s) + } + if tt.wantErr != "" { + return + } + if s := cmp.Diff(tt.want, got); s != "" { + t.Fatalf("Create(%+v) failed: %s", tt.want, s) + } + }) + } +} + +func TestList(t *testing.T) { + cs := setUp(t) + tests := []struct { + desc string + want *topologyv1.TopologyList + wantErr string + }{{ + desc: "success", + want: &topologyv1.TopologyList{ + Items: []topologyv1.Topology{*obj1, *obj2}, + }, + }} + for _, tt := range tests { + t.Run(tt.desc, func(t *testing.T) { + tc := cs.Topology("test") + got, err := tc.List(context.Background(), metav1.ListOptions{}) + if s := errdiff.Substring(err, tt.wantErr); s != "" { + t.Fatalf("unexpected error: %s", s) + } + if tt.wantErr != "" { + return + } + if s := cmp.Diff(tt.want, got, cmpopts.IgnoreFields(topologyv1.TopologyList{}, "TypeMeta")); s != "" { + t.Fatalf("List() failed: %s", s) + } + }) + } +} + +func TestGet(t *testing.T) { + cs := setUp(t) + tests := []struct { + desc string + in string + want *topologyv1.Topology + wantErr string + }{{ + desc: "failure", + in: "doesnotexist", + wantErr: `"doesnotexist" not found`, + }, { + desc: "success 1", + in: "obj1", + want: obj1, + }, { + desc: "success 2", + in: "obj2", + want: obj2, + }} + for _, tt := range tests { + t.Run(tt.desc, func(t *testing.T) { + tc := cs.Topology("test") + got, err := tc.Get(context.Background(), tt.in, metav1.GetOptions{}) + if s := errdiff.Substring(err, tt.wantErr); s != "" { + t.Fatalf("unexpected error: %s", s) + } + if tt.wantErr != "" { + return + } + if s := cmp.Diff(tt.want, got); s != "" { + t.Fatalf("Get(%q) failed: %s", tt.in, s) + } + }) + } +} + +func TestDelete(t *testing.T) { + cs := setUp(t) + tests := []struct { + desc string + in string + wantErr string + }{{ + desc: "failure", + in: "doesnotexist", + wantErr: `"doesnotexist" not found`, + }, { + desc: "success", + in: "obj1", + }} + for _, tt := range tests { + t.Run(tt.desc, func(t *testing.T) { + tc := cs.Topology("test") + err := tc.Delete(context.Background(), tt.in, metav1.DeleteOptions{}) + if s := errdiff.Substring(err, tt.wantErr); s != "" { + t.Fatalf("unexpected error: %s", s) + } + if tt.wantErr != "" { + return + } + }) + } +} + +func TestWatch(t *testing.T) { + cs := setUp(t) + tests := []struct { + desc string + ver string + want watch.Event + wantErr string + }{{ + desc: "failure", + ver: "doesnotexist", + wantErr: "cannot watch unknown resource version", + }, { + desc: "success", + want: watch.Event{ + Type: watch.Added, + Object: obj1, + }, + }} + for _, tt := range tests { + t.Run(tt.desc, func(t *testing.T) { + tc := cs.Topology("test") + w, err := tc.Watch(context.Background(), metav1.ListOptions{ResourceVersion: tt.ver}) + if s := errdiff.Substring(err, tt.wantErr); s != "" { + t.Fatalf("unexpected error: %s", s) + } + if tt.wantErr != "" { + return + } + e := <-w.ResultChan() + if s := cmp.Diff(tt.want, e); s != "" { + t.Fatalf("Watch() failed: %s", s) + } + }) + } +} + +func TestUpdate(t *testing.T) { + cs := setUp(t) + tests := []struct { + desc string + want *topologyv1.Topology + wantErr string + }{{ + desc: "Error", + want: &topologyv1.Topology{ + TypeMeta: metav1.TypeMeta{ + Kind: "Topology", + APIVersion: "networkop.co.uk/v1beta1", + }, + ObjectMeta: metav1.ObjectMeta{ + Name: "doesnotexist", + Namespace: "test", + }, + }, + wantErr: "doesnotexist", + }, { + desc: "Valid Topology", + want: obj1, + }} + for _, tt := range tests { + t.Run(tt.desc, func(t *testing.T) { + tc := cs.Topology("test") + updateObj := tt.want.DeepCopy() + updateObj.Spec.Links = append(updateObj.Spec.Links, topologyv1.Link{UID: 1000}) + update, err := runtime.DefaultUnstructuredConverter.ToUnstructured(updateObj) + if err != nil { + t.Fatalf("failed to generate update: %v", err) + } + got, err := tc.Update(context.Background(), &unstructured.Unstructured{Object: update}, metav1.UpdateOptions{}) + if s := errdiff.Substring(err, tt.wantErr); s != "" { + t.Fatalf("unexpected error: %s", s) + } + if tt.wantErr != "" { + return + } + if s := cmp.Diff(updateObj, got); s != "" { + t.Fatalf("Update() failed: %s", s) + } + }) + } +} + +func TestUnstructured(t *testing.T) { + cs := setUp(t) + tests := []struct { + desc string + in string + want *topologyv1.Topology + wantErr string + }{{ + desc: "failure", + in: "missingObj", + wantErr: `"missingObj" not found`, + }, { + desc: "success 1", + in: "obj1", + want: obj1, + }, { + desc: "success 2", + in: "obj2", + want: obj2, + }} + for _, tt := range tests { + t.Run(tt.desc, func(t *testing.T) { + tc := cs.Topology("test") + got, err := tc.Unstructured(context.Background(), tt.in, metav1.GetOptions{}) + if s := errdiff.Substring(err, tt.wantErr); s != "" { + t.Fatalf("unexpected error: %s", s) + } + if tt.wantErr != "" { + return + } + uObj1 := &topologyv1.Topology{} + if err := runtime.DefaultUnstructuredConverter.FromUnstructured(got.Object, uObj1); err != nil { + t.Fatalf("failed to turn response into a topology: %v", err) + } + if s := cmp.Diff(uObj1, tt.want); s != "" { + t.Fatalf("Unstructured(%q) failed: %s", tt.in, s) + } + }) + } +} diff --git a/third_party/meshnet/api/types/v1beta1/gwire_types.go b/third_party/meshnet/api/types/v1beta1/gwire_types.go new file mode 100644 index 000000000..aaf7032ad --- /dev/null +++ b/third_party/meshnet/api/types/v1beta1/gwire_types.go @@ -0,0 +1,93 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This is required to generate CRD using controller-gen +// +groupName=networkop.co.uk + +package v1beta1 + +import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +//go:generate controller-gen object paths=$GOFILE + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +optional +type GWireKNodeSpec struct { + metav1.TypeMeta `json:",inline"` + // unique link id + // +optional + UIDs []int `json:"uids"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +optional +type GWireKNodeStatus struct { + metav1.TypeMeta `json:",inline"` + + // +optional + GWireKItems []GWireStatus `json:"grpcWireItems"` +} + +type GWireStatus struct { + // +optional + // Name of the node holding the wire end + LocalNodeName string `json:"node_name"` + // +optional + // Unique link id as assigned by meshnet + LinkId int64 `json:"link_id"` + // +optional + // The topology namespace. + TopoNamespace string `json:"topo_namespace"` + // +optional + //Network namespace of the local pod holding the wire end + LocalPodNetNs string `json:"local_pod_net_ns"` + // +optional + // Local pod name as specified in topology CR + LocalPodName string `json:"local_pod_name"` + // +optional + // Local pod ip as specified in topology CR + LocalPodIp string `json:"local_pod_ip"` + // +optional + // Local pod interface name that is specified in topology CR and is created by meshnet + LocalPodIfaceName string `json:"local_pod_iface_name"` + // +optional + // The interface(name) in the local node and is connected with local pod + WireIfaceNameOnLocalNode string `json:"wire_iface_name_on_local_node"` + // +optional + // The interface id, in the peer node and is connected with remote pod. + // This is used for de-multiplexing received packet from grpcwire + WireIfaceIdOnPeerNode int64 `json:"wire_iface_id_on_peer_node"` + // +optional + // peer node IP address + GWirePeerNodeIp string `json:"gwire_peer_node_ip"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +type GWireKObj struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // +optional + Status GWireKNodeStatus `json:"status"` + // +optional + Spec GWireKNodeSpec `json:"spec"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +type GWireKObjList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + + Items []GWireKObj `json:"items"` +} diff --git a/third_party/meshnet/api/types/v1beta1/register.go b/third_party/meshnet/api/types/v1beta1/register.go new file mode 100644 index 000000000..1be80c43f --- /dev/null +++ b/third_party/meshnet/api/types/v1beta1/register.go @@ -0,0 +1,41 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +const ( + GroupName = "networkop.co.uk" + GroupVersion = "v1beta1" + GWireResNamePlural = "gwirekobjs" +) + +var ( + SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: GroupVersion} + Scheme = runtime.NewScheme() +) + +func init() { + Scheme.AddKnownTypes(SchemeGroupVersion, + &Topology{}, + &TopologyList{}, + ) + metav1.AddToGroupVersion(Scheme, SchemeGroupVersion) + metav1.AddMetaToScheme(Scheme) +} diff --git a/third_party/meshnet/api/types/v1beta1/topology.go b/third_party/meshnet/api/types/v1beta1/topology.go new file mode 100644 index 000000000..745c3f32d --- /dev/null +++ b/third_party/meshnet/api/types/v1beta1/topology.go @@ -0,0 +1,63 @@ +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package v1beta1 + +import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +//go:generate controller-gen object paths=$GOFILE + +type TopologySpec struct { + metav1.TypeMeta `json:",inline"` + Links []Link `json:"links"` +} + +type TopologyStatus struct { + metav1.TypeMeta `json:",inline"` + Skipped []Skipped `json:"skipped"` + SrcIP string `json:"src_ip"` + NetNS string `json:"net_ns"` + ContainerID string `json:"container_id"` +} + +type Skipped struct { + PodName string `json:"pod_name"` + LinkId int64 `json:"link_id"` +} + +type Link struct { + LocalIntf string `json:"local_intf"` + LocalIP string `json:"local_ip"` + PeerIntf string `json:"peer_intf"` + PeerIP string `json:"peer_ip"` + PeerPod string `json:"peer_pod"` + UID int `json:"uid"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +type Topology struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Status TopologyStatus `json:"status"` + Spec TopologySpec `json:"spec"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +type TopologyList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + + Items []Topology `json:"items"` +} diff --git a/third_party/meshnet/api/types/v1beta1/zz_generated.deepcopy.go b/third_party/meshnet/api/types/v1beta1/zz_generated.deepcopy.go new file mode 100644 index 000000000..1137b08db --- /dev/null +++ b/third_party/meshnet/api/types/v1beta1/zz_generated.deepcopy.go @@ -0,0 +1,141 @@ +//go:build !ignore_autogenerated +// +build !ignore_autogenerated + +// Copyright 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by controller-gen. DO NOT EDIT. + +package v1beta1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Topology) DeepCopyInto(out *Topology) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Status.DeepCopyInto(&out.Status) + in.Spec.DeepCopyInto(&out.Spec) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Topology. +func (in *Topology) DeepCopy() *Topology { + if in == nil { + return nil + } + out := new(Topology) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Topology) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TopologyList) DeepCopyInto(out *TopologyList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Topology, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TopologyList. +func (in *TopologyList) DeepCopy() *TopologyList { + if in == nil { + return nil + } + out := new(TopologyList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *TopologyList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TopologySpec) DeepCopyInto(out *TopologySpec) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.Links != nil { + in, out := &in.Links, &out.Links + *out = make([]Link, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TopologySpec. +func (in *TopologySpec) DeepCopy() *TopologySpec { + if in == nil { + return nil + } + out := new(TopologySpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *TopologySpec) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TopologyStatus) DeepCopyInto(out *TopologyStatus) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.Skipped != nil { + in, out := &in.Skipped, &out.Skipped + *out = make([]Skipped, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TopologyStatus. +func (in *TopologyStatus) DeepCopy() *TopologyStatus { + if in == nil { + return nil + } + out := new(TopologyStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *TopologyStatus) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/third_party/meshnet/api/types/v1beta1/zz_generated_grpcwire.deepcopy.go b/third_party/meshnet/api/types/v1beta1/zz_generated_grpcwire.deepcopy.go new file mode 100644 index 000000000..4f0de4310 --- /dev/null +++ b/third_party/meshnet/api/types/v1beta1/zz_generated_grpcwire.deepcopy.go @@ -0,0 +1,127 @@ +//go:build !ignore_autogenerated +// +build !ignore_autogenerated + +// Code generated by controller-gen. DO NOT EDIT. + +package v1beta1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GWireKNodeSpec) DeepCopyInto(out *GWireKNodeSpec) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.UIDs != nil { + in, out := &in.UIDs, &out.UIDs + *out = make([]int, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GWireKNodeSpec. +func (in *GWireKNodeSpec) DeepCopy() *GWireKNodeSpec { + if in == nil { + return nil + } + out := new(GWireKNodeSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *GWireKNodeSpec) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GWireKNodeStatus) DeepCopyInto(out *GWireKNodeStatus) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.GWireKItems != nil { + in, out := &in.GWireKItems, &out.GWireKItems + *out = make([]GWireStatus, len(*in)) + copy(*out, *in) + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GWireKNodeStatus. +func (in *GWireKNodeStatus) DeepCopy() *GWireKNodeStatus { + if in == nil { + return nil + } + out := new(GWireKNodeStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *GWireKNodeStatus) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GWireKObj) DeepCopyInto(out *GWireKObj) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Status.DeepCopyInto(&out.Status) + in.Spec.DeepCopyInto(&out.Spec) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GWireKObj. +func (in *GWireKObj) DeepCopy() *GWireKObj { + if in == nil { + return nil + } + out := new(GWireKObj) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *GWireKObj) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GWireKObjList) DeepCopyInto(out *GWireKObjList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]GWireKObj, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GWireKObjList. +func (in *GWireKObjList) DeepCopy() *GWireKObjList { + if in == nil { + return nil + } + out := new(GWireKObjList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *GWireKObjList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} diff --git a/third_party/meshnet/arch.png b/third_party/meshnet/arch.png new file mode 100644 index 0000000000000000000000000000000000000000..a2153d0828f7606afe012a4091270762b981095a GIT binary patch literal 75288 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

-ONI?wcTd%ONu65Ld&Kvq}48iCM-jj84`8vU` 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 will become "12345678901234". + id := NextIndex() + + ifaceName := fmt.Sprintf("%.5s%.5s-%04d", podName, podIfaceName, id) + + return ifaceName, nil +} + +// ----------------------------------------------------------------------------------------------------------- +func RecvFrmLocalPodThread(wire *GRPCWire, locIfNm string) error { + + defaultPort := wireutil.GRPCDefaultPort + pktBuffSz := int32(1024 * 64 * 10) //keep buffer for MAX 10 64K frames + + url := strings.TrimSpace(fmt.Sprintf("%s:%d", wire.PeerNodeIP, defaultPort)) + /* Utilizing google gopacket for polling for packets from the node. This seems to be the + simplest way to get all packets. + As an alternative to google gopacket(pcap), a socket based implementation is possible. + Not sure if socket based implementation can bring any advantage or not. + + Near term will replace pcap by socket. + */ + + // in some rare cases by the time the thread starts K8S may decide to move the pod somewhere else. + // in that case the local interfaced will be cleaned up asynchronously. Detect the situation and return. + _, err := net.InterfaceByName(locIfNm) + if err != nil { + grpcOvrlyLogger.Errorf("[Packet Receive thread]For pod %s failed to retrieve interface %s/%d. error: %v", wire.LocalPodName, wire.LocalNodeIfaceName, wire.LocalNodeIfaceID, err) + return err + } + + rdHandl, err := pcap.OpenLive(wire.LocalNodeIfaceName, pktBuffSz, true, pcap.BlockForever) + if err != nil { + // let the caller handle the error + grpcOvrlyLogger.Errorf("Receive Thread for local pod failed to open interface: %s/%d, PCAP ERROR: %v", wire.LocalNodeIfaceName, wire.LocalNodeIfaceID, err) + return err + } + defer rdHandl.Close() + + err = rdHandl.SetDirection(pcap.Direction(pcap.DirectionIn)) + if err != nil { + // let the caller handle the error + grpcOvrlyLogger.Errorf("Receive Thread for local pod failed to set up capture direction: %s/%d, PCAP ERROR: %v", wire.LocalNodeIfaceName, wire.LocalNodeIfaceID, err) + return err + } + + remote, err := grpc.Dial(url, grpc.WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + grpcOvrlyLogger.Infof("RecvFrmLocalPodThread:Failed to connect to remote %s/%d", url, wire.LocalNodeIfaceID) + return err + } + defer remote.Close() + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + source := gopacket.NewPacketSource(rdHandl, rdHandl.LinkType()) + wireClient := mpb.NewWireProtocolClient(remote) + + in := source.Packets() + var packet gopacket.Packet + for { + select { + case <-wire.StopC: + grpcOvrlyLogger.Infof("RecvFrmLocalPodThread: closing connection with remote peer-iface@peer-node-ip: %d@%s/%d from %s@%s", + wire.WireIfaceIDOnPeerNode, wire.PeerNodeIP, wire.LocalNodeIfaceID, wire.LocalPodName, wire.LocalPodIfaceName) + return io.EOF + case packet = <-in: + data := packet.Data() + payload := &mpb.Packet{ + RemotIntfId: wire.WireIfaceIDOnPeerNode, + Frame: data, + } + + /*+++TODO: Ethernet has a minimum frame size of 64 bytes, comprising an 18-byte header and a payload of 46 bytes. + It also has a maximum frame size of 1518 bytes, in which case the payload is 1500 bytes. + This logic needs to be better, take the interface MTU not hardcoded value of 1518. + This is a very unusual condition to receive an packet from the pod with size > MTU. This can only happens if + things gets really messed up. */ + if len(data) > 1518 { + pktType := DecodeFrame(payload.Frame) + grpcOvrlyLogger.Infof("RecvFrmLocalPodThread: unusually large packet received from local pod (may be GRO enabled). size: %d, pkt:%s", len(data), pktType) + /* When Generic Receive Offload (GRO) is enabled then containers can send packets larger than MTU size packet. Do not drop these + packets, deliver it to the receiving container to process. + */ + //continue + } + + ok, err := wireClient.SendToOnce(ctx, payload) + if err != nil || !ok.Response { + grpcOvrlyLogger.Infof("RecvFrmLocalPodThread: Could not deliver pkt %s@%s@%s. Peer not ready, remote iface id %d. err=%v", + wire.LocalPodName, wire.LocalPodIfaceName, wire.LocalNodeIfaceName, wire.WireIfaceIDOnPeerNode, err) + /* we generate information and continue. As the above errors will happen when the remote end is not yet ready. + It will eventually get ready and if it can't then someone else will stop this thread. + */ + } + } + } +} diff --git a/third_party/meshnet/daemon/grpcwire/gwire_map.go b/third_party/meshnet/daemon/grpcwire/gwire_map.go new file mode 100644 index 000000000..b58fbc332 --- /dev/null +++ b/third_party/meshnet/daemon/grpcwire/gwire_map.go @@ -0,0 +1,142 @@ +package grpcwire + +import ( + "fmt" + "sync" + + "github.com/google/gopacket/pcap" +) + +type wireMap struct { + mu sync.Mutex + wires map[linkKey]*GRPCWire + handles map[int64]*pcap.Handle +} + +func (w *wireMap) GetWire(namespace string, linkUID int) (*GRPCWire, bool) { + w.mu.Lock() + defer w.mu.Unlock() + wire, ok := w.wires[linkKey{ + namespace: namespace, + linkUID: linkUID, + }] + return wire, ok +} + +func (w *wireMap) GetHandle(key int64) (*pcap.Handle, bool) { + w.mu.Lock() + defer w.mu.Unlock() + handle, ok := w.handles[key] + return handle, ok +} + +func (w *wireMap) AddInMem(wire *GRPCWire, handle *pcap.Handle) error { + w.mu.Lock() + defer w.mu.Unlock() + w.wires[linkKey{ + namespace: wire.LocalPodNetNS, + linkUID: wire.UID, + }] = wire + + w.handles[wire.LocalNodeIfaceID] = handle + return nil +} + +func (w *wireMap) AddInMemNDataStore(wire *GRPCWire, handle *pcap.Handle) error { + w.mu.Lock() + defer w.mu.Unlock() + w.wires[linkKey{ + namespace: wire.LocalPodNetNS, + linkUID: wire.UID, + }] = wire + + wire.K8sStoreGWire() + + w.handles[wire.LocalNodeIfaceID] = handle + return nil +} + +// Clear the in-memory wire map +func (w *wireMap) AtomicDelete(wire *GRPCWire) error { + w.mu.Lock() + defer w.mu.Unlock() + delete(w.wires, linkKey{ + namespace: wire.LocalPodNetNS, + linkUID: wire.UID, + }) + + delete(w.handles, wire.LocalNodeIfaceID) + + return nil +} + +// Delete a wire from the in-memory wire-map without a lock +func (w *wireMap) DeleteWoLock(wire *GRPCWire) error { + delete(w.wires, linkKey{ + namespace: wire.LocalPodNetNS, + linkUID: wire.UID, + }) + delete(w.handles, wire.LocalNodeIfaceID) + return nil +} + +/* A grpc-wire creation (between pod A and pod B) can be triggered by either host hosting pod A, B. They + * can even trigger it simultaneously. Irrespective of who triggers, successful wire creation needs + * activities at both hosts end. Our intention is to finish the wire creation at the first trigger. + * This map keeps the list of wires which are already created and must not be recreated, if any second + * trigger is received. This situation occurs when both the host triggers wire creation almost simultaneously. + */ +var wires = &wireMap{ + wires: map[linkKey]*GRPCWire{}, + /* Used when a packet is received, then we know the id of the interface to which the packet to be delivered. + This map take interface-id as key and returns the corresponding handle for delivering the packet. + map[interface-id]->handle */ + handles: map[int64]*pcap.Handle{}, +} + +// FindWiresByPod returns a list of wires matching the namespace and pod. +func GetWiresByPod(namespace string, podName string) ([]*GRPCWire, bool) { + wires.mu.Lock() + defer wires.mu.Unlock() + var rWires []*GRPCWire + + for _, wire := range wires.wires { + if wire.LocalPodName == podName && wire.TopoNamespace == namespace { + rWires = append(rWires, wire) + } + } + return rWires, true +} + +// For a given pod, this atomic function extracts and returns the first wire from the wire map. Note the wire is +// removed from the wire-map. This function is expected to be used for deleting and wire. +func ExtractOneWireByPod(namespace string, podName string) (*GRPCWire, bool) { + wires.mu.Lock() + defer wires.mu.Unlock() + //var rWires *GRPCWire + + for _, wire := range wires.wires { + if wire.LocalPodName == podName && wire.TopoNamespace == namespace { + // delete this wire from wire map. + delete(wires.wires, linkKey{ + namespace: wire.LocalPodNetNS, + linkUID: wire.UID, + }) + + // also clean up the pcap handle for the wire that is extracted from the wire-map + delete(wires.handles, wire.LocalNodeIfaceID) + return wire, true + } + } + return nil, true // no wire found is not a failure, so return true +} + +func GetHostIntfHndl(intfID int64) (*pcap.Handle, error) { + + val, ok := wires.GetHandle(intfID) + if ok { + return val, nil + } + return nil, fmt.Errorf("node interface %d is not found in local db", intfID) + +} diff --git a/third_party/meshnet/daemon/grpcwire/gwire_recon.go b/third_party/meshnet/daemon/grpcwire/gwire_recon.go new file mode 100644 index 000000000..a97cb8bd6 --- /dev/null +++ b/third_party/meshnet/daemon/grpcwire/gwire_recon.go @@ -0,0 +1,467 @@ +package grpcwire + +import ( + "context" + "fmt" + "net" + "os" + "reflect" + + "github.com/google/gopacket/pcap" + grpcwirev1 "github.com/openconfig/kne/third_party/meshnet/api/types/v1beta1" + mpb "github.com/openconfig/kne/third_party/meshnet/daemon/proto/meshnet/v1beta1" + log "github.com/sirupsen/logrus" + "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/fields" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/client-go/dynamic" + "k8s.io/client-go/util/retry" +) + +// GWireClient is dynamic client for grpc wire. it is used to read/write grpc wire info from/to k8s api data-store +type GWireClient struct { + di dynamic.NamespaceableResourceInterface + gvr schema.GroupVersionResource +} + +var gWClient GWireClient + +const ( + kStatus = "status" // json name of Status of gwire_type, +++TBD: can we make it dynamic + kGrpcWireItems = "grpcWireItems" // json name of GWireKItems of gwire_type, +++TBD: can we make it dynamic +) + +// ----------------------------------------------------------------------------------------------------------- +func SetGWireClient(gClient *dynamic.DynamicClient) { + // identifier of grpc wire object in k8s apis + gWClient.gvr = schema.GroupVersionResource{ + Group: grpcwirev1.GroupName, + Version: grpcwirev1.GroupVersion, + Resource: grpcwirev1.GWireResNamePlural, + } + gWClient.di = gClient.Resource(gWClient.gvr) +} + +// ----------------------------------------------------------------------------------------------------------- +func SetGWireClientInterface(gClient dynamic.NamespaceableResourceInterface) { + gWClient.di = gClient +} + +// ------------------------------------------------------------------------------------------------------------ +func (gc GWireClient) GetWireObjListUS(ctx context.Context, ndName string) (*unstructured.UnstructuredList, error) { + return gc.di.Namespace("").List(ctx, metav1.ListOptions{ + TypeMeta: metav1.TypeMeta{ + Kind: reflect.TypeOf(grpcwirev1.GWireKObj{}).Name(), + }, + FieldSelector: fields.SelectorFromSet( + fields.Set{metav1.ObjectNameField: ndName}, // need GRPC wire endpoint information for this node only + ).String(), + }) +} + +// ------------------------------------------------------------------------------------------------------------ +func (gc GWireClient) CreatWireObj(ctx context.Context, nSpace string, uWbj map[string]interface{}) (*unstructured.Unstructured, error) { + return gc.di.Namespace(nSpace).Create(ctx, &unstructured.Unstructured{Object: uWbj}, metav1.CreateOptions{}) +} + +// ------------------------------------------------------------------------------------------------------------ +func (gc GWireClient) UpdateWireObj(ctx context.Context, nSpace string, wObjsOnNd *unstructured.Unstructured) (*unstructured.Unstructured, error) { + return gc.di.Namespace(nSpace).Update(ctx, wObjsOnNd, metav1.UpdateOptions{}) + +} + +//------------------------------------------------------------------------------------------------------------ + +func (gc GWireClient) GetWireObjGrpUS(ctx context.Context, wStatus *grpcwirev1.GWireStatus) (*unstructured.Unstructured, error) { + return gc.di.Namespace(wStatus.TopoNamespace).Get(ctx, wStatus.LocalNodeName, metav1.GetOptions{}) +} + +// ----------------------------------------------------------------------------------------------------------- +// Create & populate "GWireStatus" from a "GRPCWire". GWireStatus is stored in K8S data-store +func CreateWireStatus(wire *GRPCWire, nodeName string) *grpcwirev1.GWireStatus { + + return &grpcwirev1.GWireStatus{ + LocalNodeName: nodeName, + LinkId: int64(wire.UID), + TopoNamespace: wire.TopoNamespace, + + //local pod information + LocalPodNetNs: wire.LocalPodNetNS, + WireIfaceNameOnLocalNode: wire.LocalNodeIfaceName, + LocalPodName: wire.LocalPodName, + LocalPodIfaceName: wire.LocalPodIfaceName, + LocalPodIp: wire.LocalPodIP, + + //peer information + WireIfaceIdOnPeerNode: wire.WireIfaceIDOnPeerNode, + GWirePeerNodeIp: wire.PeerNodeIP, + } + +} + +// ----------------------------------------------------------------------------------------------------------- +// K8sStoreGWire writes grpc wire info 'wire' for a specific topology namespace (wire.TopoNamespace) into k8s +// data-store for the current node. It calls updateGRPCWireStatus() to serve the purpose +func (wire *GRPCWire) K8sStoreGWire() error { + nodeName, err := findNodeName() + if err != nil { + grpcOvrlyLogger.Errorf("K8sStoreGWire: could not get node name: %v", err) + return err + } + + ctx := context.Background() + ws := CreateWireStatus(wire, nodeName) + err = updateGRPCWireStatus(ctx, ws) + + if err != nil { + grpcOvrlyLogger.Errorf("K8sStoreGWire: Failed to set status for node %s: %v", nodeName, err) + } + return nil +} + +// ----------------------------------------------------------------------------------------------------------- +// K8sDelGWire deletes grpc wire info 'wire' for a specific namespace from k8s api data-store for the current +// node. namespace is specified in given 'wire' argument. it calls deleteGRPCWireStatus() to serve the purpose +func (wire *GRPCWire) K8sDelGWire() error { + nodeName, err := findNodeName() + if err != nil { + grpcOvrlyLogger.Errorf("K8sDelGWire: could not get node name: %v", err) + } + ctx := context.Background() + + ws := CreateWireStatus(wire, nodeName) + err = deleteGRPCWireStatus(ctx, ws) + + if err != nil { + grpcOvrlyLogger.Errorf("Failed to delete wire status for node %s: %v", nodeName, err) + return err + } + return nil +} + +// ----------------------------------------------------------------------------------------------------------- +// On meshnet daemon reboot ReconGWires reconciles all grpc wires of all namespaces (topologies) in local memory. +// InK8S data store, it looks for +// - gwireKObj for all name-spaces +// - iterate over all wire info list present in gwireKObj +// - call reCreateGWire() with saved wire info to build up the in memory wire map +func ReconGWires() error { + nodeName, err := findNodeName() + if err != nil { + grpcOvrlyLogger.Errorf("ReconGWires: could not get node: %v", err) + return err + } + + ctx := context.Background() + retryErr := retry.RetryOnConflict(retry.DefaultRetry, func() error { + // retrieve list of grpc wire obj list for all namespaces for the current node-name + gwireKObjList, err := gWClient.GetWireObjListUS(ctx, nodeName) + if err != nil { + grpcOvrlyLogger.Errorf("reconGWires: could not get gWireKObjs from k8s: %v", err) + return err + } + // in the unlikely situation where one has multiple topologies running in the same cluster, + // gwireKObjList will have multiple items for this node. + // {(),(),...} + for _, node := range gwireKObjList.Items { + // a node is found and node-Status-GWireKItems exists, so reconcile + grpcWireItems, found, err := unstructured.NestedSlice(node.Object, kStatus, kGrpcWireItems) + if err != nil { + grpcOvrlyLogger.Errorf("ReconGWires: could not retrieve grpcWireItem: %v", err) + continue + } + if !found { + grpcOvrlyLogger.Errorf("ReconGWires: grpcWireItem not found in GWireKObj status, retrieved from k8s data-store") + continue + } + if grpcWireItems == nil { + grpcOvrlyLogger.Errorf("ReconGWires: grpcWireItem is nil in GWireKObj status, retrieved from k8s data-store") + continue + } + for _, grpcWireItem := range grpcWireItems { + wireStatusItem, ok := grpcWireItem.(map[string]interface{}) + if !ok { + grpcOvrlyLogger.Errorf("ReconGWires: unable to retrieve wire status item, %v is not a map", grpcWireItem) + continue + } + + // create the wire structure from the saved data in K8S data store + wireStatus := grpcwirev1.GWireStatus{} + if err := runtime.DefaultUnstructuredConverter.FromUnstructured(wireStatusItem, &wireStatus); err != nil { + grpcOvrlyLogger.Errorf("ReconGWires: unable to retrieve wire status: %v", err) + continue + } + reCreateGWire(wireStatus, ctx) + } + } + return nil + }) + if retryErr != nil { + grpcOvrlyLogger.Errorf("Failed to read status on node %s", nodeName) + return retryErr + } + + return nil +} + +// ----------------------------------------------------------------------------------------------------------- +// updateGRPCWireStatus writes grpc wire 'wStatus' into k8s data-store. 'wStatus' for all existing grpc wires are added +// under 'grpcWireItems' as part of status. Status is part of 'GWireKObj' and identified +// by name=. For the first write, this object for a node does not exist in k8s data- +// store. So for first write, it creates the object and then adds the 'wStatus'. For all subsequent 'wStatus' +// to be added, first get the object from data-store, append the 'wStatus' to the existing list of +// 'grpcWireItems' and write the updated 'grpcWireItems' list back to k8s api data-store. +func updateGRPCWireStatus(ctx context.Context, wStatus *grpcwirev1.GWireStatus) error { + grpcOvrlyLogger.Infof("Updating GRPC wire status on node %s, pod %s@%s", wStatus.LocalNodeName, wStatus.LocalPodName, wStatus.LocalPodIfaceName) + + retryErr := retry.RetryOnConflict(retry.DefaultRetry, func() error { + + // wires are grouped by node name. retrieve the group for this node 'wStatus.LocalNodeName' + wObjsOnNd, err := gWClient.GetWireObjGrpUS(ctx, wStatus) + if err != nil { + // if not found then create it + if errors.IsNotFound(err) { + // WireObj does not exist. add it first + err = CreateGWireStatInDS(ctx, wStatus) + if err != nil { + return err + } + grpcOvrlyLogger.Infof("updateGRPCWireStatus: Created node %s, pod %s@%s into k8s data-store", + wStatus.LocalNodeName, wStatus.LocalPodName, wStatus.LocalPodIfaceName) + return nil + } + + return err // for all error expect 'not found' return the error + } + + // extract status gwire items + gwireItems, found, err := unstructured.NestedSlice(wObjsOnNd.Object, kStatus, kGrpcWireItems) + if err != nil { + grpcOvrlyLogger.Errorf("updateGRPCWireStatus: could not retrieve gWireItems: %v", err) + return err + } + if !found { + grpcOvrlyLogger.Errorf("updateGRPCWireStatus: gwireItems not found in GWireKObj status") + return err + } + if gwireItems == nil { + grpcOvrlyLogger.Errorf("updateGRPCWireStatus: gwireItems is nil in GWireKObj status") + return err + } + newItem, err := runtime.DefaultUnstructuredConverter.ToUnstructured(wStatus) + if err != nil { + grpcOvrlyLogger.Errorf("updateGRPCWireStatus: could not convert to unstructured: %v\n", err) + return err + } + gwireItems = append(gwireItems, newItem) + + if err := unstructured.SetNestedField(wObjsOnNd.Object, gwireItems, kStatus, kGrpcWireItems); err != nil { + grpcOvrlyLogger.Errorf("updateGRPCWireStatus: could not set grpcwireitems status: %v", err) + return err + } + + _, err = gWClient.UpdateWireObj(ctx, wStatus.TopoNamespace, wObjsOnNd) + if err != nil { + grpcOvrlyLogger.Infof("updateGRPCWireStatus: Could not update GRPCWire status for node %s, pod %s@%s into K8s", + wObjsOnNd.GetName(), wStatus.LocalPodName, wStatus.LocalPodIfaceName) + return err + } + return nil + + }) + if retryErr != nil { + log.WithFields(log.Fields{ + "daemon": "meshnetd", + "err": retryErr, + "function": "updateGRPCWireStatus", + }).Errorf("Failed to update status on node %s, pod %s@%s", wStatus.LocalNodeName, wStatus.LocalPodName, wStatus.LocalPodIfaceName) + return retryErr + } + + return nil +} + +// ----------------------------------------------------------------------------------------------------------- +// CreateGWireStatInDS creates grpc wire unstructured object with gvr info populated in it. +func CreateGWireStatInDS(ctx context.Context, wStatus *grpcwirev1.GWireStatus) error { + wObj := &grpcwirev1.GWireKObj{ + TypeMeta: metav1.TypeMeta{ + Kind: reflect.TypeOf(grpcwirev1.GWireKObj{}).Name(), + APIVersion: grpcwirev1.GroupName + "/" + grpcwirev1.GroupVersion, + }, + ObjectMeta: metav1.ObjectMeta{ + Name: wStatus.LocalNodeName, + Namespace: wStatus.TopoNamespace, + }, + Status: grpcwirev1.GWireKNodeStatus{ + GWireKItems: []grpcwirev1.GWireStatus{*wStatus}, + }, + } + uWbj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(wObj) + if err != nil { + grpcOvrlyLogger.Errorf("CreateGWireStatInDS: could not create unstructured for new wire: %v", err) + return err + } + + _, err = gWClient.CreatWireObj(ctx, wStatus.TopoNamespace, uWbj) + if err != nil { + grpcOvrlyLogger.Errorf("CreateGWireStatInDS: Could not create node %s, pod %s@%s into k8s data-store: %v", + wStatus.LocalNodeName, wStatus.LocalPodName, wStatus.LocalPodIfaceName, err) + return err + } + return nil +} + +// ----------------------------------------------------------------------------------------------------------- +// deleteGRPCWireStatus deletes a grpc wire status from 'grpcWireItems' for a specific namespace +// for this node. Topology namespace is derived from given 'wStatus'. +func deleteGRPCWireStatus(ctx context.Context, wStatus *grpcwirev1.GWireStatus) error { + + retryErr := retry.RetryOnConflict(retry.DefaultRetry, func() error { + node, err := gWClient.GetWireObjGrpUS(ctx, wStatus) + if err != nil { + grpcOvrlyLogger.Errorf("deleteGRPCWireStatus: failed to read node %s, pod %s@%s from K8s to delete wire status: %v", + wStatus.LocalNodeName, wStatus.LocalPodName, wStatus.LocalPodIfaceName, err) + return err + } + + // TBD: think about a faster way to remove an entry + + newSList := []interface{}{} + gwireItems, found, err := unstructured.NestedSlice(node.Object, kStatus, kGrpcWireItems) + if err != nil { + grpcOvrlyLogger.Errorf("deleteGRPCWireStatus: could not retrieve gWireItems: %v", err) + return err + } + if !found { + grpcOvrlyLogger.Errorf("deleteGRPCWireStatus: gwireItems not found in GWireKObj status, retrieved from k8s data-store") + return err + } + if gwireItems == nil { + grpcOvrlyLogger.Errorf("deleteGRPCWireStatus: gwireItems is nil in GWireKObj status, retrieved from k8s data-store") + return err + } + + for _, gwireItem := range gwireItems { + gwireStatusItem, ok := gwireItem.(map[string]interface{}) + if !ok { + log.Errorf("deleteGRPCWireStatus: unable to retrieve status, %v is not a map", gwireItem) + continue + } + gwireStatus := grpcwirev1.GWireStatus{} + if err := runtime.DefaultUnstructuredConverter.FromUnstructured(gwireStatusItem, &gwireStatus); err != nil { + log.Errorf("deleteGRPCWireStatus: unable to convert status from object: %v", err) + continue + } + if gwireStatus.LinkId == wStatus.LinkId { + continue + } + newSList = append(newSList, gwireStatusItem) + } + + if err := unstructured.SetNestedField(node.Object, newSList, kStatus, kGrpcWireItems); err != nil { + grpcOvrlyLogger.Errorf("deleteGRPCWireStatus: could not update kGrpcWireItems in status: %v", err) + return err + } + _, err = gWClient.UpdateWireObj(ctx, wStatus.TopoNamespace, node) + if err == nil { + grpcOvrlyLogger.Infof("deleteGRPCWireStatus: Deleted GRPCWire status on node %s, for pod %s@%s", + node.GetName(), wStatus.LocalPodName, wStatus.LocalPodIfaceName) + } + return err + }) + if retryErr != nil { + log.WithFields(log.Fields{ + "daemon": "meshnetd", + "err": retryErr, + "function": "deleteGRPCWireStatus", + }).Errorf("Failed to update status on node %s, pod %s@%s", wStatus.LocalNodeName, wStatus.LocalPodName, wStatus.LocalPodIfaceName) + return retryErr + } + + return nil +} + +// ----------------------------------------------------------------------------------------------------------- +// reCreateGWire writes the wire status 'wStatus' retrieved from k8s data-store into local memory database +// 'in-memory wire-map' and starts pod to daemon packet receive thread for this wire. +func reCreateGWire(wStatus grpcwirev1.GWireStatus, _ context.Context) error { + + grpcWire, ok := GetWireByUID(wStatus.LocalPodNetNs, int(wStatus.LinkId)) + if ok && grpcWire.IsReady { + grpcOvrlyLogger.Infof("reCreateGWire: This grpc-wire is already present in local db, link id %d", wStatus.LinkId) + return nil + } + + wireDef := mpb.WireDef{ + LinkUid: wStatus.LinkId, + WireIfNameOnLocalNode: wStatus.WireIfaceNameOnLocalNode, + LocalPodIp: wStatus.LocalPodIp, + IntfNameInPod: wStatus.LocalPodIfaceName, + LocalPodName: wStatus.LocalPodName, + LocalPodNetNs: wStatus.LocalPodNetNs, + WireIfIdOnPeerNode: wStatus.WireIfaceIdOnPeerNode, + PeerNodeIp: wStatus.GWirePeerNodeIp, + TopoNs: wStatus.TopoNamespace, + } + err := reconLocalGRPCWire(&wireDef) + if err != nil { + return fmt.Errorf("reCreateGWire: Failed to reconciliate local end of the GRPC channel: %v", err) + } + + grpcOvrlyLogger.Infof("Reconciliated grpc-wire (local-pod:%s:%s@node:%s <----link uid: %d----> remote-peer:%s:%d)", + wStatus.LocalPodName, wStatus.LocalPodIfaceName, wStatus.WireIfaceNameOnLocalNode, + wStatus.LinkId, wStatus.GWirePeerNodeIp, wStatus.WireIfaceIdOnPeerNode) + + return nil +} + +// ----------------------------------------------------------------------------------------------------------- +// Recreate the wire in-memory wire-map and start the pod to daemon packet receive thread for this wire. +func reconLocalGRPCWire(wireDef *mpb.WireDef) error { + locInf, err := net.InterfaceByName(wireDef.WireIfNameOnLocalNode) + if err != nil { + grpcOvrlyLogger.Errorf("[RECONCILE:LOCAL-END]For pod %s failed to retrieve interface ID for interface %v. error:%v", wireDef.LocalPodName, wireDef.WireIfNameOnLocalNode, err) + return err + } + + //Using google gopacket for packet receive. An alternative could be using socket. Not sure it it provides any advantage over gopacket. + wrHandle, err := pcap.OpenLive(wireDef.WireIfNameOnLocalNode, 65365, true, pcap.BlockForever) + if err != nil { + grpcOvrlyLogger.Errorf("[RECONCILE:LOCAL-END]Could not open interface for send/recv packets for containers local iface id %d. error:%v", locInf.Index, err) + return err + } + aWire := CreateGWire(locInf.Index, wireDef.WireIfNameOnLocalNode, make(chan struct{}), wireDef) + aWire.IsReady = true + // reconciling, so add only in memory + wires.AddInMem(aWire, wrHandle) + + // TODO: handle error here + go RecvFrmLocalPodThread(aWire, aWire.LocalNodeIfaceName) + + return nil +} + +// Finds out the node name in which a pod is running. A running pod can call this function to find +// out the node in which it's currently running. This function must be called from within the cluster. +// Returns the "node name" and error +func findNodeName() (string, error) { + var err error + + //Ref - Expose Pod Information to Containers Through Environment Variables + //https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/ + + // NODE_NAME for meshnet daemon set it carries the "spec.nodeName" for the daemon set. + ndNm := os.Getenv("NODE_NAME") + if len(ndNm) == 0 { + //grpcOvrlyLogger.Infof("Couldn't find node name from environment. Check the daemonset.yaml has NODE_NAME env set to spec.nodeName. Retrieving it from OS.\n") + ndNm, err = os.Hostname() + if err != nil { + return "", fmt.Errorf("findNodeName: could not get node name from OS: %v", err) + } + } + return ndNm, nil +} diff --git a/third_party/meshnet/daemon/grpcwire/gwire_recon_test.go b/third_party/meshnet/daemon/grpcwire/gwire_recon_test.go new file mode 100644 index 000000000..bdbc6bffa --- /dev/null +++ b/third_party/meshnet/daemon/grpcwire/gwire_recon_test.go @@ -0,0 +1,454 @@ +package grpcwire + +import ( + "context" + "net" + "os" + "reflect" + "testing" + + "github.com/containernetworking/plugins/pkg/ns" + "github.com/google/go-cmp/cmp" + grpcwirev1 "github.com/openconfig/kne/third_party/meshnet/api/types/v1beta1" + "github.com/vishvananda/netlink" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/fields" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/client-go/dynamic" + dynamicfake "k8s.io/client-go/dynamic/fake" +) + +var ( + gWireKObj1 = &grpcwirev1.GWireKObj{ + TypeMeta: metav1.TypeMeta{ + Kind: reflect.TypeOf(grpcwirev1.GWireKObj{}).Name(), + APIVersion: grpcwirev1.GroupName + "/" + grpcwirev1.GroupVersion, + }, + ObjectMeta: metav1.ObjectMeta{ + Name: must(findNodeName()), + Namespace: "test", + }, + Status: grpcwirev1.GWireKNodeStatus{ + GWireKItems: []grpcwirev1.GWireStatus{ + { + LocalNodeName: must(findNodeName()), + LinkId: 1, + TopoNamespace: "test", + LocalPodNetNs: "testNetNs", + LocalPodName: "pod1", + LocalPodIp: "1.1.1.1", + LocalPodIfaceName: "eth1", + WireIfaceNameOnLocalNode: "eth1-node1", + WireIfaceIdOnPeerNode: 101, + GWirePeerNodeIp: "2.2.2.2", + }, + { + LocalNodeName: must(findNodeName()), + LinkId: 2, + TopoNamespace: "test", + LocalPodNetNs: "testNetNs", + LocalPodName: "pod2", + LocalPodIp: "1.1.1.2", + LocalPodIfaceName: "eth2", + WireIfaceNameOnLocalNode: "eth2-node1", + WireIfaceIdOnPeerNode: 102, + GWirePeerNodeIp: "2.2.2.2", + }, + }, + }, + Spec: grpcwirev1.GWireKNodeSpec{}, + } + gWireKObj2 = &grpcwirev1.GWireKObj{ + TypeMeta: metav1.TypeMeta{ + Kind: reflect.TypeOf(grpcwirev1.GWireKObj{}).Name(), + APIVersion: grpcwirev1.GroupName + "/" + grpcwirev1.GroupVersion, + }, + ObjectMeta: metav1.ObjectMeta{ + Name: must(findNodeName()), + Namespace: "test2", + }, + Status: grpcwirev1.GWireKNodeStatus{ + GWireKItems: []grpcwirev1.GWireStatus{ + { + LocalNodeName: must(findNodeName()), + LinkId: 3, + TopoNamespace: "test2", + LocalPodNetNs: "testNetNs", + LocalPodName: "pod3", + LocalPodIp: "2.1.1.1", + LocalPodIfaceName: "eth3", + WireIfaceNameOnLocalNode: "eth3-node2", + WireIfaceIdOnPeerNode: 201, + GWirePeerNodeIp: "2.2.2.2", + }, + }, + }, + Spec: grpcwirev1.GWireKNodeSpec{}, + } +) + +func must[T any](v T, err error) T { + if err != nil { + panic(err) + } + return v +} + +func setUp(t *testing.T, objs ...runtime.Object) dynamic.NamespaceableResourceInterface { + //t.Helper() + InitLogger() + //objs := []runtime.Object{} + + var gvr schema.GroupVersionResource = schema.GroupVersionResource{ + Group: grpcwirev1.GroupName, + Version: grpcwirev1.GroupVersion, + Resource: grpcwirev1.GWireResNamePlural, + } + f := dynamicfake.NewSimpleDynamicClient(grpcwirev1.Scheme, objs...) + resInterface := f.Resource(gvr) + SetGWireClientInterface(resInterface) + + return resInterface +} + +func createWireFromWireStatus(wireStatus *grpcwirev1.GWireStatus) *GRPCWire { + return &GRPCWire{ + // LocalNodeName: nodeName, + UID: int(wireStatus.LinkId), + TopoNamespace: wireStatus.TopoNamespace, + + // local pod information + LocalPodNetNS: wireStatus.LocalPodNetNs, + LocalNodeIfaceName: wireStatus.WireIfaceNameOnLocalNode, + LocalPodName: wireStatus.LocalPodName, + LocalPodIfaceName: wireStatus.LocalPodIfaceName, + LocalPodIP: wireStatus.LocalPodIp, + + // peer information + WireIfaceIDOnPeerNode: wireStatus.WireIfaceIdOnPeerNode, + PeerNodeIP: wireStatus.GWirePeerNodeIp, + } +} + +func getWireObjListUSForNs(cs dynamic.NamespaceableResourceInterface, ndName, ns string) (*unstructured.UnstructuredList, error) { + return cs.Namespace(ns).List(context.Background(), metav1.ListOptions{ + TypeMeta: metav1.TypeMeta{ + Kind: reflect.TypeOf(grpcwirev1.GWireKObj{}).Name(), + }, + FieldSelector: fields.SelectorFromSet( + fields.Set{metav1.ObjectNameField: ndName}, + ).String(), + }) +} + +// -------------------------------------------------------------------------------------------------- +func isRoot(t *testing.T) { + if os.Getuid() != 0 { + t.Skip("Test requires root privileges. Run test with sudo") + } +} + +// Create a veth pair in the current name space. It also makes the links up +func createVethPair(t *testing.T, name string, peerName string) error { + veth := &netlink.Veth{ + LinkAttrs: netlink.LinkAttrs{ + Name: name, + Flags: net.FlagUp, + }, + PeerName: peerName, + } + err := netlink.LinkAdd(veth) + if err != nil { + switch { + case os.IsExist(err): + t.Logf("veth name (%v) already exists", name) + default: + t.Logf("netlink failed to make veth pair: %v", err) + } + return err + } + link, err := netlink.LinkByName(name) + if err != nil { + t.Logf("failed to get interface %s, err:%v", name, err) + return err + } + + if err = netlink.LinkSetUp(link); err != nil { + t.Logf("failed to set interface %s up: %v", name, err) + return err + } + + link, err = netlink.LinkByName(peerName) + if err != nil { + t.Logf("failed to get interface %s, err:%v", peerName, err) + return err + } + + if err = netlink.LinkSetUp(link); err != nil { + t.Logf("failed to set interface %s up: %v", peerName, err) + return err + } + return nil +} + +// -------------------------------------------------------------------------------------------------- +func cleanupVethPair(t *testing.T, netNs ns.NetNS, ifaceName string) error { + var err error + + isRoot(t) + + err = netNs.Do(func(_ ns.NetNS) error { + // deleting only one will delete the pair. + link2, err := netlink.LinkByName(ifaceName) + if err != nil { + t.Errorf("failed to lookup %q in %q: %v", ifaceName, netNs.Path(), err) + return err + } + if err = netlink.LinkDel(link2); err != nil { + t.Errorf("failed to remove link %q in %q: %v", ifaceName, netNs.Path(), err) + return err + } + return nil + }) + + if err != nil { + t.Errorf("cleanup: failed to remove link : %v", err) + return err + } + return nil +} + +// TestK8sStoreGWire covers gwire status add, update and get commands +func TestK8sStoreGWire(t *testing.T) { + cs := setUp(t) + + test_cases := []struct { + desc string + store *GRPCWire + want *GRPCWire + wantErr string + }{ + { + desc: "Create", + store: &GRPCWire{ + UID: 1, + TopoNamespace: "testNs1", + LocalPodNetNS: "gwireNetNs", + LocalNodeIfaceName: "localNodeIfaceName", + LocalPodName: "pod1", + LocalPodIfaceName: "localPodIfaceName", + LocalPodIP: "10.10.10.1", + WireIfaceIDOnPeerNode: 100, + PeerNodeIP: "100.100.100.100", + }, + }, + { + desc: "Update", + store: &GRPCWire{ + UID: 2, + TopoNamespace: "testNs1", + LocalPodNetNS: "gwireNetNs", + LocalNodeIfaceName: "localNodeIfaceName1", + LocalPodName: "pod2", + LocalPodIfaceName: "localPodIfaceName1", + LocalPodIP: "10.10.10.2", + WireIfaceIDOnPeerNode: 101, + PeerNodeIP: "100.100.100.101", + }, + }, + } + + nodeName, err := findNodeName() + if err != nil { + t.Fatalf("could not retrieve node name") + } + //t.Logf("----------node name %s\n", nodeName) + var storedWStatus []interface{} + for _, tc := range test_cases { + t.Run(tc.desc, func(t *testing.T) { + err := tc.store.K8sStoreGWire() + if err != nil { + t.Fatalf("could not add gwire status into k8s data-store") + } + storedWStatus = append(storedWStatus, *CreateWireStatus(tc.store, nodeName)) + wObjsOnNd, err := cs.Namespace(tc.store.TopoNamespace).Get(context.Background(), nodeName, metav1.GetOptions{}) + if err != nil { + t.Fatalf("error in retrieving wire obj from k8s data-store: %v", err) + } + var retrievedWStatus []interface{} + grpcWireItems, _, _ := unstructured.NestedSlice(wObjsOnNd.Object, kStatus, kGrpcWireItems) + for _, gWireItem := range grpcWireItems { + var wireStatus = grpcwirev1.GWireStatus{} + err = runtime.DefaultUnstructuredConverter.FromUnstructured(gWireItem.(map[string]interface{}), &wireStatus) + if err != nil { + t.Fatalf("could not convert to wire status") + } + retrievedWStatus = append(retrievedWStatus, wireStatus) + } + if !cmp.Equal(storedWStatus, retrievedWStatus) { + t.Errorf("could not retrieve correct gwire info") + if s := cmp.Diff(storedWStatus, retrievedWStatus); s != "" { + t.Logf("Retrieved info:\n(%+v)\n", retrievedWStatus) + t.Logf("Stored info:\n(%+v)\n", storedWStatus) + t.Logf("Diff info:\n(%+v)\n", s) + } + } + }) + } + //t.Logf("TestK8sStoreGWire: passed") +} + +// TestK8sDelGWire covers gwire status delete, update and get commands +func TestK8sDelGWire(t *testing.T) { + //objs := []runtime.Object{gWireKObj1, gWireKObj2} + cs := setUp(t, gWireKObj1, gWireKObj2) + + test_cases := []struct { + desc string + stored *grpcwirev1.GWireKObj + exptCnt int + }{ + { + desc: "Multiple wires", + stored: gWireKObj1, + exptCnt: 2, + }, + { + desc: "Single wire", + stored: gWireKObj2, + exptCnt: 1, + }, + } + + for _, tc := range test_cases { + t.Run(tc.desc, func(t *testing.T) { + usObjList, err := getWireObjListUSForNs(cs, tc.stored.GetName(), tc.stored.GetNamespace()) + if err != nil || len(usObjList.Items) != 1 { + t.Fatalf("could not retrieve gwire status from k8s data-store") + } + // usObjList.Items[0] returns gwireKObj. there is only one kobj for this NS and name + grpcWireItems, _, _ := unstructured.NestedSlice(usObjList.Items[0].Object, kStatus, kGrpcWireItems) + if len(grpcWireItems) != tc.exptCnt { + t.Logf("stored wire status count (%d) is not matching with expected count (%d)", + len(grpcWireItems), tc.exptCnt) + t.FailNow() + } + for _, gWireStatus := range tc.stored.Status.GWireKItems { + gWire := createWireFromWireStatus(&gWireStatus) + err := gWire.K8sDelGWire() + if err != nil { + t.Fatalf("could not delete gwire status from k8s data-store") + } + } + usObjList2, err := getWireObjListUSForNs(cs, tc.stored.GetName(), tc.stored.GetNamespace()) + if err != nil || len(usObjList2.Items) != 1 { + t.Fatalf("could not retrieve gwire status from k8s data-store after delete") + } + grpcWireItems2, _, _ := unstructured.NestedSlice(usObjList2.Items[0].Object, kStatus, kGrpcWireItems) + if len(grpcWireItems2) != 0 { + t.Logf("stored wire status count (%d) is not matching with expected count (0) after delete", + len(usObjList2.Items)) + t.FailNow() + } + }) + } +} + +// TestReconGWires covers gwire reconciliation into local memory +func TestReconGWires(t *testing.T) { + cs := setUp(t, gWireKObj1, gWireKObj2) + + test_cases := []struct { + desc string + stored *grpcwirev1.GWireKObj + exptCnt int + }{ + { + desc: "Multiple wires", + stored: gWireKObj1, + }, + { + desc: "Single wire", + stored: gWireKObj2, + }, + } + + isRoot(t) + + // create interface first + for _, tc := range test_cases { + for _, gWireStatus := range tc.stored.Status.GWireKItems { + err := createVethPair(t, gWireStatus.LocalPodIfaceName, gWireStatus.WireIfaceNameOnLocalNode) + if err != nil { + t.Logf("createVethPair returned error: %v", err) + t.FailNow() + } + } + } + //clean up + currNs, err := ns.GetCurrentNS() + if err != nil { + t.Logf("failed to get current namespace : %v", err) + t.FailNow() + } + defer currNs.Close() + + // cleanup interfaces + defer func() { + for _, tc := range test_cases { + for _, gWireStatus := range tc.stored.Status.GWireKItems { + err := cleanupVethPair(t, currNs, gWireStatus.LocalPodIfaceName) + if err != nil { + t.Logf("cleanup: failed to remove link : %v", err) + t.FailNow() + } + } + } + }() + + err = ReconGWires() + if err != nil { + t.Logf("reconciliation fails: %v", err) + t.FailNow() + } + + //verify local memory database + for _, tc := range test_cases { + t.Run(tc.desc, func(t *testing.T) { + usObjList, err := getWireObjListUSForNs(cs, tc.stored.GetName(), tc.stored.GetNamespace()) + if err != nil { + t.Fatalf("could not retrieve gwire status from k8s data-store") + } + // usObjList.Items[0] returns gwireKObj. there is only one kobj for this NS and name + grpcWireItems, found, err := unstructured.NestedSlice(usObjList.Items[0].Object, kStatus, kGrpcWireItems) + if err != nil || !found { + t.Logf("GWire status item not found in k8s data store") + t.FailNow() + } + for _, gWireStatus := range grpcWireItems { + var wireStatus = grpcwirev1.GWireStatus{} + err = runtime.DefaultUnstructuredConverter.FromUnstructured(gWireStatus.(map[string]interface{}), &wireStatus) + if err != nil { + t.Fatalf("could not convert to wire status") + } + gWireLocal, found := wires.GetWire(wireStatus.LocalPodNetNs, int(wireStatus.LinkId)) + if !found { + t.Logf("could not write into local memory from k8s data-store") + t.FailNow() + } + gWireStatusLocal := CreateWireStatus(gWireLocal, tc.stored.GetName()) + if !cmp.Equal(wireStatus, *gWireStatusLocal) { + t.Errorf("could not retrieve correct gwire status") + if s := cmp.Diff(wireStatus, gWireStatusLocal); s != "" { + //t.Logf("Data-store info:\n(%+v)\n", wireStatus) + //t.Logf("Local memory info:\n(%+v)\n", gWireStatusLocal) + t.Logf("Diff info:\n(%+v)\n", s) + t.FailNow() + } + } + } + }) + } +} diff --git a/third_party/meshnet/daemon/grpcwire/gwire_rpc_handlers.go b/third_party/meshnet/daemon/grpcwire/gwire_rpc_handlers.go new file mode 100644 index 000000000..a5d91ebdd --- /dev/null +++ b/third_party/meshnet/daemon/grpcwire/gwire_rpc_handlers.go @@ -0,0 +1,164 @@ +package grpcwire + +import ( + "context" + "fmt" + "net" + + log "github.com/sirupsen/logrus" + + "github.com/containernetworking/plugins/pkg/ns" + "github.com/google/gopacket/pcap" + mpb "github.com/openconfig/kne/third_party/meshnet/daemon/proto/meshnet/v1beta1" + "github.com/openconfig/kne/third_party/meshnet/utils/wireutil" + koko "github.com/redhat-nfvpe/koko/api" +) + +func CreateGRPCWireLocal(ctx context.Context, wireDef *mpb.WireDef) (*mpb.BoolResponse, error) { + locInf, err := net.InterfaceByName(wireDef.WireIfNameOnLocalNode) + if err != nil { + log.WithFields(log.Fields{ + "daemon": "meshnetd", + "overlay": "gRPC", + }).Errorf("[ADD-WIRE:LOCAL-END]For pod %s failed to retrieve interface ID for interface %v. error:%v", wireDef.LocalPodName, wireDef.WireIfNameOnLocalNode, err) + return &mpb.BoolResponse{Response: false}, err + } + + // update tx checksumming to off + err = wireutil.SetTxChecksumOff(wireDef.IntfNameInPod, wireDef.LocalPodNetNs) + if err != nil { + log.Errorf("Error in setting tx checksum-off on interface %s, ns %s, pod %s: %v", wireDef.IntfNameInPod, wireDef.LocalPodNetNs, wireDef.LocalPodName, err) + // generate error and continue + } else { + log.Infof("Setting tx checksum-off on interface %s, pod %s is successful", wireDef.IntfNameInPod, wireDef.LocalPodName) + } + + //Using google gopacket for packet receive. An alternative could be using socket. Not sure it it provides any advantage over gopacket. + wrHandle, err := pcap.OpenLive(wireDef.WireIfNameOnLocalNode, 65365, true, pcap.BlockForever) + if err != nil { + log.WithFields(log.Fields{ + "daemon": "meshnetd", + "overlay": "gRPC", + }).Errorf("[ADD-WIRE:LOCAL-END]Could not open interface for send/recv packets for containers local iface id %d. error:%v", locInf.Index, err) + return &mpb.BoolResponse{Response: false}, err + } + + aWire := CreateGWire(locInf.Index, wireDef.WireIfNameOnLocalNode, make(chan struct{}), wireDef) + aWire.IsReady = false + aWire.Originator = HOST_CREATED_WIRE + aWire.OriginatorIP = "unknown" + + // Add the newly created wire in the in memory wire-map and k8S data store + AddWireInMemNDataStore(aWire, wrHandle) + + log.WithFields(log.Fields{ + "daemon": "meshnetd", + "overlay": "gRPC", + }).Infof("[ADD-WIRE:LOCAL-END]For pod %s@%s, node iface id %d starting the local packet receive thread", wireDef.LocalPodName, wireDef.IntfNameInPod, locInf.Index) + // TODO: handle error here + go RecvFrmLocalPodThread(aWire, aWire.LocalNodeIfaceName) + + return &mpb.BoolResponse{Response: true}, nil +} + +// A remote peer can tell the local node to create/update the local end of the grpc-wire. +// At the local end if the wire is already created then update the wire properties. +// This updation can happen when a pod is deleted and recreated again. This is not very uncommon in K8S to move +// a pod from node A to node B dynamically +func CreateUpdateGRPCWireRemoteTriggered(wireDef *mpb.WireDef, stopC chan struct{}) (*GRPCWire, error) { + + var err error + + // If this wire is already created, then only update the already created wire properties like stopC. + // This can happen due to a race between the local and remote peer. + // This can also happen when a pod in one end of the wire is deleted and created again. + // In all cases link creation happen only once but it can get updated multiple times. + grpcWire, ok := UpdateWireByUID(wireDef.LocalPodNetNs, int(wireDef.LinkUid), wireDef.WireIfIdOnPeerNode, stopC) + if ok { + grpcOvrlyLogger.Infof("[CREATE-UPDATE-WIRE] At remote end this grpc-wire is already created by %s. Local interface id : %d peer interface id : %d", grpcWire.Originator, grpcWire.LocalNodeIfaceID, grpcWire.WireIfaceIDOnPeerNode) + return grpcWire, nil + } + + outIfNm, err := GenNodeIfaceName(wireDef.LocalPodName, wireDef.IntfNameInPod) + if err != nil { + return nil, fmt.Errorf("[ADD-WIRE:REMOTE-END] could not get current network namespace: %v", err) + } + + currNs, err := ns.GetCurrentNS() + if err != nil { + return nil, fmt.Errorf("[ADD-WIRE:REMOTE-END] could not get current network namespace: %v", err) + } + + /* Create the veth to connect the pod with the meshnet daemon running on the node */ + hostEndVeth := koko.VEth{ + NsName: currNs.Path(), + LinkName: outIfNm, + } + + inIfNm := wireDef.IntfNameInPod + inContainerVeth := koko.VEth{ + NsName: wireDef.LocalPodNetNs, + LinkName: inIfNm, + } + + if wireDef.LocalPodIp != "" { + ipAddr, ipSubnet, err := net.ParseCIDR(wireDef.LocalPodIp) + if err != nil { + return nil, fmt.Errorf("failed to create remote end of GRPC wire(%s@%s), failed to parse CIDR %s: %w", + inIfNm, wireDef.LocalPodName, wireDef.LocalPodIp, err) + } + inContainerVeth.IPAddr = []net.IPNet{{ + IP: ipAddr, + Mask: ipSubnet.Mask, + }} + } + + if err = koko.MakeVeth(inContainerVeth, hostEndVeth); err != nil { + grpcOvrlyLogger.Errorf("[ADD-WIRE:REMOTE-END] Error creating vEth pair (in:%s <--> out:%s). Error-> %s", inIfNm, outIfNm, err) + return nil, err + } + if err := wireutil.SetTxChecksumOff(inContainerVeth.LinkName, inContainerVeth.NsName); err != nil { + grpcOvrlyLogger.Errorf("Error in setting tx checksum-off on interface %s, pod %s: %v", inContainerVeth.LinkName, wireDef.LocalPodName, err) + // not returning + } + locIface, err := net.InterfaceByName(hostEndVeth.LinkName) + if err != nil { + // let the caller handle the error + grpcOvrlyLogger.Errorf("[ADD-WIRE:REMOTE-END] Remote end could not get interface index for %s. error:%v", hostEndVeth.LinkName, err) + return nil, err + } + grpcOvrlyLogger.Infof("[ADD-WIRE:REMOTE-END] Trigger from %s:%d : Successfully created remote pod to node vEth pair %s@%s <--> %s(%d).", + wireDef.PeerNodeIp, wireDef.WireIfIdOnPeerNode, inIfNm, wireDef.LocalPodName, outIfNm, locIface.Index) + aWire := CreateGWire(locIface.Index, hostEndVeth.LinkName, stopC, wireDef) + /* Utilizing google gopacket for polling for packets from the node. This seems to be the + simplest way to get all packets. + As an alternative to google gopacket(pcap), a socket based implementation is possible. + Not sure if socket based implementation can bring any advantage or not. + + Near term will replace pcap by socket. + */ + wrHandle, err := pcap.OpenLive(hostEndVeth.LinkName, 65365, true, pcap.BlockForever) + if err != nil { + // let the caller handle the error + grpcOvrlyLogger.Errorf("[ADD-WIRE:REMOTE-END] At remote end could not open interface (%d) for sed/recv packets for containers. error:%v", locIface.Index, err) + return nil, err + } + + // Add the created wire in the in memory wire-map and k8S data store + AddWireInMemNDataStore(aWire, wrHandle) + + return aWire, nil +} + +// When the remote peer tells the local node to remove the local end of the grpc-wire info +func GRPCWireDownRemoteTriggered(wireDef *mpb.WireDef) error { + + err := WireDownByUID(wireDef.LocalPodNetNs, int(wireDef.LinkUid)) + if err != nil { + grpcOvrlyLogger.Infof("[WIRE-DOWN] Remote end failed in making down wire end in pod %s@%s,. Link uid : %d", + wireDef.LocalPodName, wireDef.IntfNameInPod, wireDef.LinkUid) + return nil + } + + return nil +} diff --git a/third_party/meshnet/daemon/grpcwire/wire-decode.go b/third_party/meshnet/daemon/grpcwire/wire-decode.go new file mode 100644 index 000000000..e3e73277c --- /dev/null +++ b/third_party/meshnet/daemon/grpcwire/wire-decode.go @@ -0,0 +1,158 @@ +package grpcwire + +import ( + "fmt" + + "github.com/google/gopacket" + "github.com/google/gopacket/layers" +) + +func DecodeFrame(frame []byte) string { + pktTypeStr := "" + numPkts := 1 + totalLen := len(frame) + etherHdrLen := 14 + totalDecodedLen := 0 + + for { + packet := gopacket.NewPacket(frame, layers.LayerTypeEthernet, gopacket.Default) + ethernetLayer := packet.Layer(layers.LayerTypeEthernet) + if ethernetLayer != nil { + ethernetPacket, _ := ethernetLayer.(*layers.Ethernet) + pktTypeStr += fmt.Sprintf("Pkt no %d: ", numPkts) + "Ethernet" + decodedLen, typeStr := DecodePkt(packet, ethernetPacket.NextLayerType(), ethernetPacket.Length) + pktTypeStr += typeStr + totalDecodedLen += etherHdrLen + decodedLen + remainingLen := totalLen - totalDecodedLen + if remainingLen >= 14 { + numPkts++ + frame = frame[totalDecodedLen:] + pktTypeStr += "\n " + } else { + break + } + } else { + break + } + } + if numPkts > 1 { + pktTypeStr = "Multi Pkts: " + pktTypeStr + } + + return pktTypeStr +} + +func DecodePkt(packet gopacket.Packet, layerType gopacket.LayerType, length uint16) (int, string) { + var typeStr, pktTypeStr string + decodedLen := 0 + + if layerType == layers.LayerTypeIPv4 { + decodedLen, typeStr = decodeIPv4Pkt(packet) + pktTypeStr += typeStr + } else if layerType == layers.LayerTypeIPv6 { + decodedLen, typeStr = decodeIPv6Pkt(packet) + pktTypeStr += typeStr + } else if layerType == layers.LayerTypeLLC { + llcLayer := packet.Layer(layers.LayerTypeLLC) + if llcLayer != nil { + pktTypeStr += ":LLC" + llcPacket, _ := llcLayer.(*layers.LLC) + if llcPacket.DSAP == 0xFE && llcPacket.SSAP == 0xFE && llcPacket.Control == 0x3 { + if llcPacket.Payload[0] == 0x83 { + pktTypeStr += ":ISIS" + } + } + } + decodedLen = int(length) + } else if layerType == layers.LayerTypeARP { + pktTypeStr += ":ARP" + decodedLen = 28 + } else if layerType == layers.LayerTypeDot1Q { + pktTypeStr += ":VLAN" + //fmt.Printf("VLAN\n") + vlanHdrLen := 4 + vlanLayer := packet.Layer(layers.LayerTypeDot1Q) + if vlanLayer != nil { + vlanPacket, _ := vlanLayer.(*layers.Dot1Q) + nextLayer := vlanPacket.NextLayerType() + if nextLayer == gopacket.LayerTypeZero { + // this may be LLC layer. try to match with known LLC 0xFEFE03 + if vlanPacket.Payload[0] == 0xFE && vlanPacket.Payload[1] == 0xFE && vlanPacket.Payload[2] == 0x03 { + packet := gopacket.NewPacket(vlanPacket.Payload, layers.LayerTypeLLC, gopacket.Default) + decodedLen, typeStr = DecodePkt(packet, layers.LayerTypeLLC, uint16(vlanPacket.Type)) + pktTypeStr += typeStr + decodedLen += vlanHdrLen + } + } else { + packet := gopacket.NewPacket(vlanPacket.Payload, nextLayer, gopacket.Default) + decodedLen, typeStr = DecodePkt(packet, nextLayer, 0) + pktTypeStr += typeStr + decodedLen += vlanHdrLen + } + } else { + pktTypeStr += ":No VLAN Hdr" + } + } + + return decodedLen, pktTypeStr +} + +func decodeIPv4Pkt(packet gopacket.Packet) (int, string) { + var decodedLen int = 0 + pktTypeStr := ":IPv4" + + ipLayer := packet.Layer(layers.LayerTypeIPv4) + if ipLayer != nil { + ipPacket, _ := ipLayer.(*layers.IPv4) + decodedLen = int(ipPacket.Length) + + pktTypeStr += fmt.Sprintf("[s:%s, d:%s]", ipPacket.SrcIP.String(), ipPacket.DstIP.String()) + if ipPacket.Protocol == layers.IPProtocolICMPv4 { + pktTypeStr += ":ICMP" + } else if ipPacket.Protocol == layers.IPProtocolTCP { + pktTypeStr += ":TCP" + tcpLayer := packet.Layer(layers.LayerTypeTCP) + if tcpLayer != nil { + tcpPkt := tcpLayer.(*layers.TCP) + if tcpPkt.DstPort == 179 { + pktTypeStr += ":BGP" + } else { + pktTypeStr += fmt.Sprintf(":[Port:%d]", tcpPkt.DstPort) + } + } + } else { + pktTypeStr += fmt.Sprintf(":IPv4 with protocol : %d", ipPacket.Protocol) + } + } + return decodedLen, pktTypeStr +} + +func decodeIPv6Pkt(packet gopacket.Packet) (int, string) { + var decodedLen int = 0 + pktTypeStr := ":IPv6" + + ipLayer := packet.Layer(layers.LayerTypeIPv6) + if ipLayer != nil { + ipPacket, _ := ipLayer.(*layers.IPv6) + decodedLen = int(ipPacket.Length) + + pktTypeStr += fmt.Sprintf("[s:%s, d:%s]", ipPacket.SrcIP.String(), ipPacket.DstIP.String()) + if ipPacket.NextHeader == layers.IPProtocolICMPv6 { + pktTypeStr += ":ICMPv6" + } else if ipPacket.NextHeader == layers.IPProtocolTCP { + pktTypeStr += ":TCP" + tcpLayer := packet.Layer(layers.LayerTypeTCP) + if tcpLayer != nil { + tcpPkt := tcpLayer.(*layers.TCP) + if tcpPkt.DstPort == 179 { + pktTypeStr += ":BGP" + } else { + pktTypeStr += fmt.Sprintf("[Port:%d]", tcpPkt.DstPort) + } + } + } else { + pktTypeStr += fmt.Sprintf(":IPv6 with protocol : %d", ipPacket.NextHeader) + } + } + return decodedLen, pktTypeStr +} diff --git a/third_party/meshnet/daemon/main.go b/third_party/meshnet/daemon/main.go new file mode 100644 index 000000000..ca86d66ff --- /dev/null +++ b/third_party/meshnet/daemon/main.go @@ -0,0 +1,62 @@ +package main + +import ( + "flag" + "os" + "strconv" + + "github.com/openconfig/kne/third_party/meshnet/daemon/cni" + "github.com/openconfig/kne/third_party/meshnet/daemon/grpcwire" + "github.com/openconfig/kne/third_party/meshnet/daemon/meshnet" + "github.com/openconfig/kne/third_party/meshnet/daemon/vxlan" + "github.com/openconfig/kne/third_party/meshnet/utils/wireutil" + log "github.com/sirupsen/logrus" +) + +func main() { + + if err := cni.Init(); err != nil { + log.Errorf("Failed to initialise CNI plugin: %v", err) + os.Exit(1) + } + defer cni.Cleanup() + + isDebug := flag.Bool("d", false, "enable degugging") + grpcPort, err := strconv.Atoi(os.Getenv("GRPC_PORT")) + if err != nil || grpcPort == 0 { + grpcPort = wireutil.GRPCDefaultPort + } + flag.Parse() + log.SetLevel(log.InfoLevel) + if *isDebug { + log.SetLevel(log.DebugLevel) + log.Debug("Verbose logging enabled") + } + + meshnet.InitLogger() + grpcwire.InitLogger() + vxlan.InitLogger() + + m, err := meshnet.New(meshnet.Config{ + Port: grpcPort, + }) + if err != nil { + log.Errorf("failed to create meshnet: %v", err) + os.Exit(1) + } + log.Info("Starting meshnet daemon...with grpc support") + + grpcwire.SetGWireClient(m.GWireDynClient) + + // read grpcwire info (if any) from data store and update local db + err = grpcwire.ReconGWires() + if err != nil { + log.Errorf("could not reconcile grpc wire: %v", err) + // generate error and continue + } + + if err := m.Serve(); err != nil { + log.Errorf("daemon exited badly: %v", err) + os.Exit(1) + } +} diff --git a/third_party/meshnet/daemon/meshnet/handler.go b/third_party/meshnet/daemon/meshnet/handler.go new file mode 100644 index 000000000..af57d29fb --- /dev/null +++ b/third_party/meshnet/daemon/meshnet/handler.go @@ -0,0 +1,451 @@ +package meshnet + +import ( + "context" + "os" + + "github.com/openconfig/kne/third_party/meshnet/api/types/v1beta1" + "github.com/openconfig/kne/third_party/meshnet/daemon/grpcwire" + "github.com/openconfig/kne/third_party/meshnet/daemon/vxlan" + + log "github.com/sirupsen/logrus" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/util/retry" + + mpb "github.com/openconfig/kne/third_party/meshnet/daemon/proto/meshnet/v1beta1" +) + +func (m *Meshnet) getPod(ctx context.Context, name, ns string) (*unstructured.Unstructured, error) { + mnetdLogger.Infof("Reading pod %s from K8s", name) + return m.tClient.Topology(ns).Unstructured(ctx, name, metav1.GetOptions{}) +} + +func (m *Meshnet) updateStatus(ctx context.Context, obj *unstructured.Unstructured, ns string) error { + mnetdLogger.Infof("Update pod status %s from K8s", obj.GetName()) + _, err := m.tClient.Topology(ns).Update(ctx, obj, metav1.UpdateOptions{}) + return err +} + +func (m *Meshnet) Get(ctx context.Context, pod *mpb.PodQuery) (*mpb.Pod, error) { + mnetdLogger.Infof("Retrieving %s's metadata from K8s...", pod.Name) + + result, err := m.getPod(ctx, pod.Name, pod.KubeNs) + if err != nil { + mnetdLogger.Errorf("Failed to read pod %s from K8s", pod.Name) + return nil, err + } + + remoteLinks, found, err := unstructured.NestedSlice(result.Object, "spec", "links") + if err != nil || !found || remoteLinks == nil { + mnetdLogger.Errorf("could not find 'Link' array in pod's spec") + return nil, err + } + + links := make([]*mpb.Link, len(remoteLinks)) + for i := range links { + remoteLink, ok := remoteLinks[i].(map[string]interface{}) + if !ok { + mnetdLogger.Errorf("Unrecognised 'Link' structure") + return nil, err + } + newLink := &mpb.Link{} + newLink.PeerPod, _, _ = unstructured.NestedString(remoteLink, "peer_pod") + newLink.PeerIntf, _, _ = unstructured.NestedString(remoteLink, "peer_intf") + newLink.LocalIntf, _, _ = unstructured.NestedString(remoteLink, "local_intf") + newLink.LocalIp, _, _ = unstructured.NestedString(remoteLink, "local_ip") + newLink.PeerIp, _, _ = unstructured.NestedString(remoteLink, "peer_ip") + newLink.Uid, _, _ = unstructured.NestedInt64(remoteLink, "uid") + links[i] = newLink + } + + srcIP, _, _ := unstructured.NestedString(result.Object, "status", "src_ip") + netNs, _, _ := unstructured.NestedString(result.Object, "status", "net_ns") + containerId, _, _ := unstructured.NestedString(result.Object, "status", "container_id") + nodeIP := os.Getenv("HOST_IP") + nodeIntf := os.Getenv("HOST_INTF") + + return &mpb.Pod{ + Name: pod.Name, + SrcIp: srcIP, + NetNs: netNs, + KubeNs: pod.KubeNs, + Links: links, + NodeIp: nodeIP, + NodeIntf: nodeIntf, + ContainerId: containerId, + }, nil +} + +func (m *Meshnet) SetAlive(ctx context.Context, pod *mpb.Pod) (*mpb.BoolResponse, error) { + mnetdLogger.Infof("Setting %s's SrcIp=%s and NetNs=%s", pod.Name, pod.SrcIp, pod.NetNs) + + retryErr := retry.RetryOnConflict(retry.DefaultRetry, func() error { + result, err := m.getPod(ctx, pod.Name, pod.KubeNs) + if err != nil { + mnetdLogger.Errorf("Failed to read pod %s from K8s", pod.Name) + return err + } + + if err = unstructured.SetNestedField(result.Object, pod.SrcIp, "status", "src_ip"); err != nil { + mnetdLogger.Errorf("Failed to update pod's src_ip") + } + + if err = unstructured.SetNestedField(result.Object, pod.NetNs, "status", "net_ns"); err != nil { + mnetdLogger.Errorf("Failed to update pod's net_ns") + } + + if err = unstructured.SetNestedField(result.Object, pod.ContainerId, "status", "container_id"); err != nil { + mnetdLogger.Errorf("Failed to update pod's container_id") + } + + return m.updateStatus(ctx, result, pod.KubeNs) + }) + + if retryErr != nil { + log.WithFields(log.Fields{ + "daemon": "meshnetd", + "err": retryErr, + "function": "SetAlive", + }).Errorf("Failed to update pod %s alive status", pod.Name) + return &mpb.BoolResponse{Response: false}, retryErr + } + + return &mpb.BoolResponse{Response: true}, nil +} + +// A point to point link between two pods is created only when both the pods are alive. +// While creating a link, when a pod does not find its peer, it marks the peer as skipped for this link UID. +// The pod stores the list of skipped peers and its corresponding link UID in it's skip list. +// For example - when a pod A want to create a link and it does not find it's peer B, +// then pod A adds the peer pod B and corresponding link UID in pod A's skip list. +func (m *Meshnet) Skip(ctx context.Context, skip *mpb.SkipQuery) (*mpb.BoolResponse, error) { + mnetdLogger.Infof("Pod %s, skipping peer pod %s for link UID %d ", skip.Pod, skip.Peer, skip.LinkId) + + retryErr := retry.RetryOnConflict(retry.DefaultRetry, func() error { + result, err := m.getPod(ctx, skip.Pod, skip.KubeNs) + if err != nil { + mnetdLogger.Errorf("Failed to read pod %s from K8s", skip.Pod) + return err + } + skipped, found, err := unstructured.NestedSlice(result.Object, "status", "skipped") + if found && err != nil { + mnetdLogger.Errorf("skip: error in retrieving skipped list from status, object found: %t, err: %v", found, err) + return err + } + // create a new skip item to append the peer in the skip list + newItem, err := runtime.DefaultUnstructuredConverter.ToUnstructured(&v1beta1.Skipped{PodName: skip.Peer, LinkId: skip.LinkId}) + if err != nil { + mnetdLogger.Errorf("skip: could not convert to unstructured: %v\n", err) + return err + } + //append the peer information in skip list and update the data store + newSkipped := append(skipped, newItem) + if err := unstructured.SetNestedField(result.Object, newSkipped, "status", "skipped"); err != nil { + mnetdLogger.Errorf("failed to updated skipped list") + return err + } + + return m.updateStatus(ctx, result, skip.KubeNs) + }) + if retryErr != nil { + log.WithFields(log.Fields{ + "daemon": "meshnetd", + "err": retryErr, + "function": "Skip", + }).Errorf("Failed to update skip pod %s status", skip.Pod) + return &mpb.BoolResponse{Response: false}, retryErr + } + + return &mpb.BoolResponse{Response: true}, nil +} + +// Clean up function SkipReverse is called when a pod is getting deleted. It gets called once for every link the pod has. +// Anytime a pod is destroyed, for a link, it inserts itself along with its link-id in the skip list of its' peers on the link. +// It removes the the peer (and connecting link UID) from its own skip list. +// This data update in "data-store" helps to recreate the links in future when the pod is recreated by K8S +func (m *Meshnet) SkipReverse(ctx context.Context, skip *mpb.SkipQuery) (*mpb.BoolResponse, error) { + mnetdLogger.Infof("Reverse-skip for pod %s on link uid %d with peer pod %s", skip.Pod, skip.LinkId, skip.Peer) + + var podName string + retryErr := retry.RetryOnConflict(retry.DefaultRetry, func() error { + // get the peer pod if it is alive + peerPod, err := m.getPod(ctx, skip.Peer, skip.KubeNs) + if err != nil { + mnetdLogger.Errorf("Failed to read pod %s from K8s", skip.Pod) + return err + } + srcIP, _, _ := unstructured.NestedString(peerPod.Object, "status", "src_ip") + netNs, _, _ := unstructured.NestedString(peerPod.Object, "status", "net_ns") + if srcIP == "" || netNs == "" { + // peer pod is not alive as container. so no need to update peer's skipped list in Topology CRD. + return nil + } + podName = peerPod.GetName() + + // Extracting peer pod's skipped list and insert this pod's name in it. + // This is needed as in future this pod comes back again, it will find out that it has + // been skipped by the peer. As a result this pod will re-initiate link creation. + peerSkipped, found, err := unstructured.NestedSlice(peerPod.Object, "status", "skipped") + if found && err != nil { + mnetdLogger.Errorf("skipReverse: error in retrieving skipped list from peer pod's status: object found: %t, err: %v", found, err) + return err + } + + // If the pod is already present in skipped list we don't need to append it again. + // For example - The pod can be already present in the Peer's skip list if this was a low priority + // pod and it came up after the high priority peer. + // For example :- when a pod is repeatedly destroyed (create->destroy->create->destroy.... while + // the topology is still alive), it try to insert itself multiple times in peers skip list. + // Prevent multiple entry of same pod. + found = false + for _, el := range peerSkipped { + elSkipped, ok := el.(map[string]interface{}) + if !ok { + mnetdLogger.Errorf("skipReverse: 'Skipped' not recognized") + continue + } + skipped := v1beta1.Skipped{} + if err := runtime.DefaultUnstructuredConverter.FromUnstructured(elSkipped, &skipped); err != nil { + mnetdLogger.Errorf("skipReverse: unable to retrieve Skipped: %v", err) + continue + } + if skip.Pod == skipped.PodName && skip.LinkId == skipped.LinkId { + found = true + break + } + } + newPeerSkipped := peerSkipped + if !found { + newItem, err := runtime.DefaultUnstructuredConverter.ToUnstructured(&v1beta1.Skipped{PodName: skip.Pod, LinkId: skip.LinkId}) + if err != nil { + mnetdLogger.Errorf("skipReverse: could not convert to unstructured: %v\n", err) + return err + } + newPeerSkipped = append(newPeerSkipped, newItem) + } + + // updating peer pod's skipped list locally + if err := unstructured.SetNestedField(peerPod.Object, newPeerSkipped, "status", "skipped"); err != nil { + mnetdLogger.Errorf("skipReverse: Failed to updated reverse-skipped list for peer pod %s", peerPod.GetName()) + return err + } + + // sending peer pod's updates to k8s + return m.updateStatus(ctx, peerPod, skip.KubeNs) + }) + if retryErr != nil { + log.WithFields(log.Fields{ + "daemon": "meshnetd", + "err": retryErr, + "function": "SkipReverse", + }).Errorf("Failed to update peer pod %s skipreverse status", podName) + return &mpb.BoolResponse{Response: false}, retryErr + } + + retryErr = retry.RetryOnConflict(retry.DefaultRetry, func() error { + // setting the value for this pod + thisPod, err := m.getPod(ctx, skip.Pod, skip.KubeNs) + if err != nil { + mnetdLogger.Errorf("skipReverse: Failed to read pod %s from K8s", skip.Pod) + return err + } + + // extracting this pod's skipped list and removing peer pod's name from it + thisSkipped, found, err := unstructured.NestedSlice(thisPod.Object, "status", "skipped") + if found && err != nil { + mnetdLogger.Errorf("skipreverse: error in retrieving skipped list from local pod's status: object found: %t, err: %v", found, err) + return err + } + newThisSkipped := make([]interface{}, 0) + + log.WithFields(log.Fields{ + "daemon": "meshnetd", + "SkipReverse": thisSkipped, + }).Info("THIS SkipReverse:") + + for _, el := range thisSkipped { + elSkipped, ok := el.(map[string]interface{}) + if !ok { + mnetdLogger.Errorf("skip-reverse: unrecongnized 'Skipped'") + continue + } + skipped := v1beta1.Skipped{} + if err := runtime.DefaultUnstructuredConverter.FromUnstructured(elSkipped, &skipped); err != nil { + mnetdLogger.Errorf("skipReverse : unable to retrieve Skipped: %v", err) + continue + } + if skipped.PodName != skip.Peer && skipped.LinkId != skip.LinkId { + mnetdLogger.Infof("Appending new element %s@%d", skipped.PodName, skipped.LinkId) + newThisSkipped = append(newThisSkipped, elSkipped) + } + } + + log.WithFields(log.Fields{ + "daemon": "meshnetd", + "SkipReverse": newThisSkipped, + }).Info("NEW THIS SkipReverse:") + + // updating this pod's skipped list locally after removing the peer from the current skip list. + // Length check for newThisSkipped is not needed even if it is empty. we should update data-store with empty list. + if err := unstructured.SetNestedField(thisPod.Object, newThisSkipped, "status", "skipped"); err != nil { + mnetdLogger.Errorf("skipReverse: Failed to cleanup skipped list for pod %s", thisPod.GetName()) + return err + } + + // sending this pod's updates to k8s + return m.updateStatus(ctx, thisPod, skip.KubeNs) + }) + if retryErr != nil { + log.WithFields(log.Fields{ + "daemon": "meshnetd", + "err": retryErr, + "function": "SkipReverse", + }).Error("Failed to update this pod skipreverse status") + return &mpb.BoolResponse{Response: false}, retryErr + } + + return &mpb.BoolResponse{Response: true}, nil +} + +func (m *Meshnet) IsSkipped(ctx context.Context, skip *mpb.SkipQuery) (*mpb.BoolResponse, error) { + // mnetdLogger.Infof("Checking if %s is skipped by %s", skip.Peer, skip.Pod) + mnetdLogger.Infof("Checking if %s, link id %d is skipped by %s", skip.Pod, skip.LinkId, skip.Peer) + + result, err := m.getPod(ctx, skip.Peer, skip.KubeNs) + if err != nil { + mnetdLogger.Errorf("isSkipped: Failed to read pod %s from K8s", skip.Pod) + return nil, err + } + + skipped, found, err := unstructured.NestedSlice(result.Object, "status", "skipped") + if found && err != nil { + mnetdLogger.Errorf("isSkipped: error in retrieving skipped list from peer pod's status, object found: %t, err: %v", found, err) + return nil, err + } + + for _, peerSkipped := range skipped { + elSkipped, ok := peerSkipped.(map[string]interface{}) + if !ok { + mnetdLogger.Errorf("isSkipped: 'Skipped' not recognized") + continue + } + skipped := v1beta1.Skipped{} + if err := runtime.DefaultUnstructuredConverter.FromUnstructured(elSkipped, &skipped); err != nil { + mnetdLogger.Errorf("isSkipped: unable to retrieve Skipped: %v", err) + continue + } + if skip.Pod == skipped.PodName && skip.LinkId == skipped.LinkId { + return &mpb.BoolResponse{Response: true}, nil + } + } + return &mpb.BoolResponse{Response: false}, nil +} + +func (m *Meshnet) Update(ctx context.Context, pod *mpb.RemotePod) (*mpb.BoolResponse, error) { + if err := vxlan.CreateOrUpdate(pod); err != nil { + mnetdLogger.Errorf("Failed to Update Vxlan") + return &mpb.BoolResponse{Response: false}, nil + } + return &mpb.BoolResponse{Response: true}, nil +} + +// ------------------------------------------------------------------------------------------------------ +func (m *Meshnet) RemGRPCWire(ctx context.Context, wireDef *mpb.WireDef) (*mpb.BoolResponse, error) { + //if err := grpcwire.DeleteWiresByPod(wireDef.KubeNs, wireDef.LocalPodName); err != nil + if err := grpcwire.DeletePodWires(wireDef.TopoNs, wireDef.LocalPodName); err != nil { + return &mpb.BoolResponse{Response: false}, err + } + return &mpb.BoolResponse{Response: true}, nil +} + +func (m *Meshnet) AddGRPCWireLocal(ctx context.Context, wireDef *mpb.WireDef) (*mpb.BoolResponse, error) { + return grpcwire.CreateGRPCWireLocal(ctx, wireDef) +} + +// ------------------------------------------------------------------------------------------------------ +func (m *Meshnet) SendToOnce(ctx context.Context, pkt *mpb.Packet) (*mpb.BoolResponse, error) { + wrHandle, err := grpcwire.GetHostIntfHndl(pkt.RemotIntfId) + if err != nil { + log.WithFields(log.Fields{ + "daemon": "meshnetd", + "overlay": "gRPC", + }).Errorf("SendToOnce (wire id - %v): Could not find local handle. err:%v", pkt.RemotIntfId, err) + return &mpb.BoolResponse{Response: false}, err + } + + // In case any per packet log need to be generated. + // pktType := grpcwire.DecodePkt(pkt.Frame) + // log.Printf("Daemon(SendToOnce): Received [pkt: %s, bytes: %d, for local interface id: %d]. Sending it to local container", pktType, len(pkt.Frame), pkt.RemotIntfId) + // log.Printf("Daemon(SendToOnce): Received [bytes: %d, for local interface id: %d]. Sending it to local container", len(pkt.Frame), pkt.RemotIntfId) + + err = wrHandle.WritePacketData(pkt.Frame) + if err != nil { + log.WithFields(log.Fields{ + "daemon": "meshnetd", + "overlay": "gRPC", + }).Errorf("SendToOnce (wire id - %v): Could not write packet(%d bytes) to local interface. err:%v", pkt.RemotIntfId, len(pkt.Frame), err) + return &mpb.BoolResponse{Response: false}, err + } + + return &mpb.BoolResponse{Response: true}, nil +} + +// --------------------------------------------------------------------------------------------------------------- +func (m *Meshnet) AddGRPCWireRemote(ctx context.Context, wireDef *mpb.WireDef) (*mpb.WireCreateResponse, error) { + stopC := make(chan struct{}) + wire, err := grpcwire.CreateUpdateGRPCWireRemoteTriggered(wireDef, stopC) + if err == nil { + log.WithFields(log.Fields{ + "daemon": "meshnetd", + "overlay": "gRPC", + }).Infof("[ADD-WIRE:REMOTE-END]For pod %s@%s starting the local packet receive thread", wireDef.LocalPodName, wireDef.IntfNameInPod) + go grpcwire.RecvFrmLocalPodThread(wire, wire.LocalNodeIfaceName) + + return &mpb.WireCreateResponse{Response: true, PeerIntfId: wire.LocalNodeIfaceID}, nil + } + log.WithFields(log.Fields{ + "daemon": "meshnetd", + "overlay": "gRPC", + }).Errorf("[ADD-WIRE:REMOTE-END] err: %v", err) + return &mpb.WireCreateResponse{Response: false, PeerIntfId: wireDef.WireIfIdOnPeerNode}, err +} + +// --------------------------------------------------------------------------------------------------------------- +func (m *Meshnet) GRPCWireDownRemote(ctx context.Context, wireDef *mpb.WireDef) (*mpb.WireDownResponse, error) { + err := grpcwire.GRPCWireDownRemoteTriggered(wireDef) + if err == nil { + log.WithFields(log.Fields{ + "daemon": "meshnetd", + "overlay": "gRPC", + }).Infof("[WIRE-DOWN]At remote end for pod %s@%s", wireDef.LocalPodName, wireDef.IntfNameInPod) + return &mpb.WireDownResponse{Response: true}, nil + } + log.WithFields(log.Fields{ + "daemon": "meshnetd", + "overlay": "gRPC", + }).Errorf("[WIRE-DOWN]Remote end err: %v", err) + return &mpb.WireDownResponse{Response: false}, err +} + +// --------------------------------------------------------------------------------------------------------------- +// GRPCWireExists will return the wire if it exists. +func (m *Meshnet) GRPCWireExists(ctx context.Context, wireDef *mpb.WireDef) (*mpb.WireCreateResponse, error) { + wire, ok := grpcwire.GetWireByUID(wireDef.LocalPodNetNs, int(wireDef.LinkUid)) + if !ok || wire == nil { + return &mpb.WireCreateResponse{Response: false, PeerIntfId: wireDef.WireIfIdOnPeerNode}, nil + } + return &mpb.WireCreateResponse{Response: ok, PeerIntfId: wire.WireIfaceIDOnPeerNode}, nil +} + +// --------------------------------------------------------------------------------------------------------------- +// Given the pod name and the pod interface, GenerateNodeInterfaceName generates the corresponding interface name in the node. +// This pod interface and the node interface later become the two end of a veth-pair +func (m *Meshnet) GenerateNodeInterfaceName(ctx context.Context, in *mpb.GenerateNodeInterfaceNameRequest) (*mpb.GenerateNodeInterfaceNameResponse, error) { + locIfNm, err := grpcwire.GenNodeIfaceName(in.PodName, in.PodIntfName) + if err != nil { + return &mpb.GenerateNodeInterfaceNameResponse{Ok: false, NodeIntfName: ""}, err + } + return &mpb.GenerateNodeInterfaceNameResponse{Ok: true, NodeIntfName: locIfNm}, nil +} diff --git a/third_party/meshnet/daemon/meshnet/meshnet.go b/third_party/meshnet/daemon/meshnet/meshnet.go new file mode 100644 index 000000000..a8342691c --- /dev/null +++ b/third_party/meshnet/daemon/meshnet/meshnet.go @@ -0,0 +1,154 @@ +package meshnet + +import ( + "fmt" + "io" + "net" + "os" + "path/filepath" + + grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" + grpc_ctxtags "github.com/grpc-ecosystem/go-grpc-middleware/tags" + + glogrus "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus" + log "github.com/sirupsen/logrus" + "google.golang.org/grpc" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/reflection" + "k8s.io/client-go/dynamic" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" + "k8s.io/client-go/util/homedir" + + topologyclientv1 "github.com/openconfig/kne/third_party/meshnet/api/clientset/v1beta1" + "github.com/openconfig/kne/third_party/meshnet/utils/wireutil" + + mpb "github.com/openconfig/kne/third_party/meshnet/daemon/proto/meshnet/v1beta1" +) + +type Config struct { + Port int + GRPCOpts []grpc.ServerOption +} + +type Meshnet struct { + mpb.UnimplementedLocalServer + mpb.UnimplementedRemoteServer + mpb.UnimplementedWireProtocolServer + config Config + kClient kubernetes.Interface + tClient topologyclientv1.Interface + GWireDynClient *dynamic.DynamicClient + rCfg *rest.Config + s *grpc.Server + lis net.Listener +} + +var mnetdLogger *log.Entry = nil + +func InitLogger() { + mnetdLogger = log.WithFields(log.Fields{"daemon": "meshnetd"}) +} + +func restConfig() (*rest.Config, error) { + mnetdLogger.Infof("Trying in-cluster configuration") + rCfg, err := rest.InClusterConfig() + if err != nil { + kubecfg := filepath.Join(".kube", "config") + if home := homedir.HomeDir(); home != "" { + kubecfg = filepath.Join(home, kubecfg) + } + mnetdLogger.Infof("Falling back to kubeconfig: %q", kubecfg) + rCfg, err = clientcmd.BuildConfigFromFlags("", kubecfg) + if err != nil { + mnetdLogger.Infof("error in Falling back to kubeconfig: %v", err) + return nil, err + } + } + return rCfg, nil +} + +func New(cfg Config) (*Meshnet, error) { + rCfg, err := restConfig() + if err != nil { + return nil, err + } + kClient, err := kubernetes.NewForConfig(rCfg) + if err != nil { + return nil, err + } + tClient, err := topologyclientv1.NewForConfig(rCfg) + if err != nil { + return nil, err + } + gwireDynClient, err := dynamic.NewForConfig(rCfg) + if err != nil { + return nil, err + } + + lis, err := net.Listen("tcp", fmt.Sprintf(":%d", cfg.Port)) + if err != nil { + return nil, err + } + // If the link type is GRPC then set the GRPC logging level to LevelNone + // Otherwise there will be GRPC log for every packet sent as for link type GRPC, GRPC is also the data-plane. This is too + // much of log that does not help in debugging and K8S does log rotation very frequently. + var svr *grpc.Server + lnkTyp := os.Getenv("INTER_NODE_LINK_TYPE") + if lnkTyp == wireutil.INTER_NODE_LINK_GRPC { + svr = grpc.NewServer(cfg.GRPCOpts...) + } else { + svr = newServerWithLogging(cfg.GRPCOpts...) + } + + m := &Meshnet{ + config: cfg, + rCfg: rCfg, + kClient: kClient, + tClient: tClient, + GWireDynClient: gwireDynClient, + lis: lis, + s: svr, + } + mpb.RegisterLocalServer(m.s, m) + mpb.RegisterRemoteServer(m.s, m) + mpb.RegisterWireProtocolServer(m.s, m) + reflection.Register(m.s) + + // After server is registered, reduce logging if link type is GRPC + if lnkTyp == wireutil.INTER_NODE_LINK_GRPC { + // Stop all Info, Warning, Error + grpclog.SetLoggerV2(grpclog.NewLoggerV2WithVerbosity(io.Discard, io.Discard, io.Discard, 0)) + // see Error/Fatal, but opt out on Info + //grpclog.SetLoggerV2(grpclog.NewLoggerV2WithVerbosity(ioutil.Discard, ioutil.Discard, os.Stderr, 0)) + mnetdLogger.Infof("Enabled GRPC logging for Error and Fatal only. Disabled Info & Warning logs.") + } + + return m, nil +} + +func (m *Meshnet) Serve() error { + mnetdLogger.Infof("GRPC server has started on port: %d", m.config.Port) + return m.s.Serve(m.lis) +} + +func (m *Meshnet) Stop() { + m.s.Stop() +} + +func newServerWithLogging(opts ...grpc.ServerOption) *grpc.Server { + lEntry := log.NewEntry(log.StandardLogger()) + lOpts := []glogrus.Option{} + glogrus.ReplaceGrpcLogger(lEntry) + opts = append(opts, + grpc_middleware.WithUnaryServerChain( + grpc_ctxtags.UnaryServerInterceptor(grpc_ctxtags.WithFieldExtractor(grpc_ctxtags.CodeGenRequestFieldExtractor)), + glogrus.UnaryServerInterceptor(lEntry, lOpts...), + ), + grpc_middleware.WithStreamServerChain( + grpc_ctxtags.StreamServerInterceptor(grpc_ctxtags.WithFieldExtractor(grpc_ctxtags.CodeGenRequestFieldExtractor)), + glogrus.StreamServerInterceptor(lEntry, lOpts...), + )) + return grpc.NewServer(opts...) +} diff --git a/third_party/meshnet/daemon/proto/meshnet/v1beta1/meshnet.pb.go b/third_party/meshnet/daemon/proto/meshnet/v1beta1/meshnet.pb.go new file mode 100644 index 000000000..902665c37 --- /dev/null +++ b/third_party/meshnet/daemon/proto/meshnet/v1beta1/meshnet.pb.go @@ -0,0 +1,1019 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc (unknown) +// source: daemon/proto/meshnet/v1beta1/meshnet.proto + +package v1beta1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Pod struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + SrcIp string `protobuf:"bytes,2,opt,name=src_ip,json=srcIp,proto3" json:"src_ip,omitempty"` + NetNs string `protobuf:"bytes,3,opt,name=net_ns,json=netNs,proto3" json:"net_ns,omitempty"` + KubeNs string `protobuf:"bytes,4,opt,name=kube_ns,json=kubeNs,proto3" json:"kube_ns,omitempty"` + Links []*Link `protobuf:"bytes,5,rep,name=links,proto3" json:"links,omitempty"` + NodeIp string `protobuf:"bytes,6,opt,name=node_ip,json=nodeIp,proto3" json:"node_ip,omitempty"` + NodeIntf string `protobuf:"bytes,7,opt,name=node_intf,json=nodeIntf,proto3" json:"node_intf,omitempty"` + ContainerId string `protobuf:"bytes,8,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Pod) Reset() { + *x = Pod{} + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Pod) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Pod) ProtoMessage() {} + +func (x *Pod) ProtoReflect() protoreflect.Message { + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Pod.ProtoReflect.Descriptor instead. +func (*Pod) Descriptor() ([]byte, []int) { + return file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDescGZIP(), []int{0} +} + +func (x *Pod) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Pod) GetSrcIp() string { + if x != nil { + return x.SrcIp + } + return "" +} + +func (x *Pod) GetNetNs() string { + if x != nil { + return x.NetNs + } + return "" +} + +func (x *Pod) GetKubeNs() string { + if x != nil { + return x.KubeNs + } + return "" +} + +func (x *Pod) GetLinks() []*Link { + if x != nil { + return x.Links + } + return nil +} + +func (x *Pod) GetNodeIp() string { + if x != nil { + return x.NodeIp + } + return "" +} + +func (x *Pod) GetNodeIntf() string { + if x != nil { + return x.NodeIntf + } + return "" +} + +func (x *Pod) GetContainerId() string { + if x != nil { + return x.ContainerId + } + return "" +} + +type Link struct { + state protoimpl.MessageState `protogen:"open.v1"` + PeerPod string `protobuf:"bytes,1,opt,name=peer_pod,json=peerPod,proto3" json:"peer_pod,omitempty"` + LocalIntf string `protobuf:"bytes,2,opt,name=local_intf,json=localIntf,proto3" json:"local_intf,omitempty"` + PeerIntf string `protobuf:"bytes,3,opt,name=peer_intf,json=peerIntf,proto3" json:"peer_intf,omitempty"` + LocalIp string `protobuf:"bytes,4,opt,name=local_ip,json=localIp,proto3" json:"local_ip,omitempty"` + PeerIp string `protobuf:"bytes,5,opt,name=peer_ip,json=peerIp,proto3" json:"peer_ip,omitempty"` + Uid int64 `protobuf:"varint,6,opt,name=uid,proto3" json:"uid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Link) Reset() { + *x = Link{} + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Link) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Link) ProtoMessage() {} + +func (x *Link) ProtoReflect() protoreflect.Message { + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Link.ProtoReflect.Descriptor instead. +func (*Link) Descriptor() ([]byte, []int) { + return file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDescGZIP(), []int{1} +} + +func (x *Link) GetPeerPod() string { + if x != nil { + return x.PeerPod + } + return "" +} + +func (x *Link) GetLocalIntf() string { + if x != nil { + return x.LocalIntf + } + return "" +} + +func (x *Link) GetPeerIntf() string { + if x != nil { + return x.PeerIntf + } + return "" +} + +func (x *Link) GetLocalIp() string { + if x != nil { + return x.LocalIp + } + return "" +} + +func (x *Link) GetPeerIp() string { + if x != nil { + return x.PeerIp + } + return "" +} + +func (x *Link) GetUid() int64 { + if x != nil { + return x.Uid + } + return 0 +} + +type PodQuery struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + KubeNs string `protobuf:"bytes,2,opt,name=kube_ns,json=kubeNs,proto3" json:"kube_ns,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PodQuery) Reset() { + *x = PodQuery{} + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PodQuery) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PodQuery) ProtoMessage() {} + +func (x *PodQuery) ProtoReflect() protoreflect.Message { + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PodQuery.ProtoReflect.Descriptor instead. +func (*PodQuery) Descriptor() ([]byte, []int) { + return file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDescGZIP(), []int{2} +} + +func (x *PodQuery) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *PodQuery) GetKubeNs() string { + if x != nil { + return x.KubeNs + } + return "" +} + +type SkipQuery struct { + state protoimpl.MessageState `protogen:"open.v1"` + Pod string `protobuf:"bytes,1,opt,name=pod,proto3" json:"pod,omitempty"` + Peer string `protobuf:"bytes,2,opt,name=peer,proto3" json:"peer,omitempty"` + KubeNs string `protobuf:"bytes,3,opt,name=kube_ns,json=kubeNs,proto3" json:"kube_ns,omitempty"` + LinkId int64 `protobuf:"varint,4,opt,name=link_id,json=linkId,proto3" json:"link_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SkipQuery) Reset() { + *x = SkipQuery{} + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SkipQuery) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SkipQuery) ProtoMessage() {} + +func (x *SkipQuery) ProtoReflect() protoreflect.Message { + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SkipQuery.ProtoReflect.Descriptor instead. +func (*SkipQuery) Descriptor() ([]byte, []int) { + return file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDescGZIP(), []int{3} +} + +func (x *SkipQuery) GetPod() string { + if x != nil { + return x.Pod + } + return "" +} + +func (x *SkipQuery) GetPeer() string { + if x != nil { + return x.Peer + } + return "" +} + +func (x *SkipQuery) GetKubeNs() string { + if x != nil { + return x.KubeNs + } + return "" +} + +func (x *SkipQuery) GetLinkId() int64 { + if x != nil { + return x.LinkId + } + return 0 +} + +type BoolResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Response bool `protobuf:"varint,1,opt,name=response,proto3" json:"response,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BoolResponse) Reset() { + *x = BoolResponse{} + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BoolResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BoolResponse) ProtoMessage() {} + +func (x *BoolResponse) ProtoReflect() protoreflect.Message { + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BoolResponse.ProtoReflect.Descriptor instead. +func (*BoolResponse) Descriptor() ([]byte, []int) { + return file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDescGZIP(), []int{4} +} + +func (x *BoolResponse) GetResponse() bool { + if x != nil { + return x.Response + } + return false +} + +type RemotePod struct { + state protoimpl.MessageState `protogen:"open.v1"` + NetNs string `protobuf:"bytes,1,opt,name=net_ns,json=netNs,proto3" json:"net_ns,omitempty"` + IntfName string `protobuf:"bytes,2,opt,name=intf_name,json=intfName,proto3" json:"intf_name,omitempty"` + IntfIp string `protobuf:"bytes,3,opt,name=intf_ip,json=intfIp,proto3" json:"intf_ip,omitempty"` + PeerVtep string `protobuf:"bytes,4,opt,name=peer_vtep,json=peerVtep,proto3" json:"peer_vtep,omitempty"` + KubeNs string `protobuf:"bytes,5,opt,name=kube_ns,json=kubeNs,proto3" json:"kube_ns,omitempty"` + Vni int64 `protobuf:"varint,6,opt,name=vni,proto3" json:"vni,omitempty"` + NodeIntf string `protobuf:"bytes,7,opt,name=node_intf,json=nodeIntf,proto3" json:"node_intf,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RemotePod) Reset() { + *x = RemotePod{} + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RemotePod) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RemotePod) ProtoMessage() {} + +func (x *RemotePod) ProtoReflect() protoreflect.Message { + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RemotePod.ProtoReflect.Descriptor instead. +func (*RemotePod) Descriptor() ([]byte, []int) { + return file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDescGZIP(), []int{5} +} + +func (x *RemotePod) GetNetNs() string { + if x != nil { + return x.NetNs + } + return "" +} + +func (x *RemotePod) GetIntfName() string { + if x != nil { + return x.IntfName + } + return "" +} + +func (x *RemotePod) GetIntfIp() string { + if x != nil { + return x.IntfIp + } + return "" +} + +func (x *RemotePod) GetPeerVtep() string { + if x != nil { + return x.PeerVtep + } + return "" +} + +func (x *RemotePod) GetKubeNs() string { + if x != nil { + return x.KubeNs + } + return "" +} + +func (x *RemotePod) GetVni() int64 { + if x != nil { + return x.Vni + } + return 0 +} + +func (x *RemotePod) GetNodeIntf() string { + if x != nil { + return x.NodeIntf + } + return "" +} + +// The proto describes both end of a grpc-wire, the local end and the remote +// end. +type WireDef struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The remote machine interface id, to which this wire is connected to. + // + // When local machine sends a packet to remote machine over grpc-wire, + // then along with the packet data, local machine also sends the interface id + // to which this packet needs to delivered in remote machine. It avoids any + // per packet interface lookup at the remote end. Packet delivery becomes + // an O(1) operation at remote end. + WireIfIdOnPeerNode int64 `protobuf:"varint,1,opt,name=wire_if_id_on_peer_node,json=wireIfIdOnPeerNode,proto3" json:"wire_if_id_on_peer_node,omitempty"` + // The remote machine interface IP, to which this grpc wire is connected to. + PeerNodeIp string `protobuf:"bytes,2,opt,name=peer_node_ip,json=peerNodeIp,proto3" json:"peer_node_ip,omitempty"` + // Interface name, which comes from topology definition and to be put + // inside container. + // This filed is used when grpc-wire to be created. + IntfNameInPod string `protobuf:"bytes,3,opt,name=intf_name_in_pod,json=intfNameInPod,proto3" json:"intf_name_in_pod,omitempty"` + // Network name space of the local pod which is connected to this + // grpc-wire + LocalPodNetNs string `protobuf:"bytes,4,opt,name=local_pod_net_ns,json=localPodNetNs,proto3" json:"local_pod_net_ns,omitempty"` + // Each meshnet link has a uid. + LinkUid int64 `protobuf:"varint,5,opt,name=link_uid,json=linkUid,proto3" json:"link_uid,omitempty"` + // Name of the local pod where this wire is getting added. + LocalPodName string `protobuf:"bytes,6,opt,name=local_pod_name,json=localPodName,proto3" json:"local_pod_name,omitempty"` + // Every interface inside a pod is one end of a veth pair. The other end of + // the veth pair is with the local node. This is the name of veth end, which + // is with the node. Packets coming from the pod will be picked up from this + // veth end and will be transported to the remote node over grpc wire. + WireIfNameOnLocalNode string `protobuf:"bytes,7,opt,name=wire_if_name_on_local_node,json=wireIfNameOnLocalNode,proto3" json:"wire_if_name_on_local_node,omitempty"` + TopoNs string `protobuf:"bytes,8,opt,name=topo_ns,json=topoNs,proto3" json:"topo_ns,omitempty"` + LocalPodIp string `protobuf:"bytes,9,opt,name=local_pod_ip,json=localPodIp,proto3" json:"local_pod_ip,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *WireDef) Reset() { + *x = WireDef{} + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WireDef) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WireDef) ProtoMessage() {} + +func (x *WireDef) ProtoReflect() protoreflect.Message { + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WireDef.ProtoReflect.Descriptor instead. +func (*WireDef) Descriptor() ([]byte, []int) { + return file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDescGZIP(), []int{6} +} + +func (x *WireDef) GetWireIfIdOnPeerNode() int64 { + if x != nil { + return x.WireIfIdOnPeerNode + } + return 0 +} + +func (x *WireDef) GetPeerNodeIp() string { + if x != nil { + return x.PeerNodeIp + } + return "" +} + +func (x *WireDef) GetIntfNameInPod() string { + if x != nil { + return x.IntfNameInPod + } + return "" +} + +func (x *WireDef) GetLocalPodNetNs() string { + if x != nil { + return x.LocalPodNetNs + } + return "" +} + +func (x *WireDef) GetLinkUid() int64 { + if x != nil { + return x.LinkUid + } + return 0 +} + +func (x *WireDef) GetLocalPodName() string { + if x != nil { + return x.LocalPodName + } + return "" +} + +func (x *WireDef) GetWireIfNameOnLocalNode() string { + if x != nil { + return x.WireIfNameOnLocalNode + } + return "" +} + +func (x *WireDef) GetTopoNs() string { + if x != nil { + return x.TopoNs + } + return "" +} + +func (x *WireDef) GetLocalPodIp() string { + if x != nil { + return x.LocalPodIp + } + return "" +} + +type WireCreateResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Response bool `protobuf:"varint,1,opt,name=response,proto3" json:"response,omitempty"` + // the interface id, that was created. + PeerIntfId int64 `protobuf:"varint,2,opt,name=peer_intf_id,json=peerIntfId,proto3" json:"peer_intf_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *WireCreateResponse) Reset() { + *x = WireCreateResponse{} + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WireCreateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WireCreateResponse) ProtoMessage() {} + +func (x *WireCreateResponse) ProtoReflect() protoreflect.Message { + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WireCreateResponse.ProtoReflect.Descriptor instead. +func (*WireCreateResponse) Descriptor() ([]byte, []int) { + return file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDescGZIP(), []int{7} +} + +func (x *WireCreateResponse) GetResponse() bool { + if x != nil { + return x.Response + } + return false +} + +func (x *WireCreateResponse) GetPeerIntfId() int64 { + if x != nil { + return x.PeerIntfId + } + return 0 +} + +type WireDownResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Response bool `protobuf:"varint,1,opt,name=response,proto3" json:"response,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *WireDownResponse) Reset() { + *x = WireDownResponse{} + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WireDownResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WireDownResponse) ProtoMessage() {} + +func (x *WireDownResponse) ProtoReflect() protoreflect.Message { + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WireDownResponse.ProtoReflect.Descriptor instead. +func (*WireDownResponse) Descriptor() ([]byte, []int) { + return file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDescGZIP(), []int{8} +} + +func (x *WireDownResponse) GetResponse() bool { + if x != nil { + return x.Response + } + return false +} + +type Packet struct { + state protoimpl.MessageState `protogen:"open.v1"` + // the remote machine interface id, to which this packet should be delivered. + RemotIntfId int64 `protobuf:"varint,1,opt,name=remot_intf_id,json=remotIntfId,proto3" json:"remot_intf_id,omitempty"` + Frame []byte `protobuf:"bytes,2,opt,name=frame,proto3" json:"frame,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Packet) Reset() { + *x = Packet{} + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Packet) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Packet) ProtoMessage() {} + +func (x *Packet) ProtoReflect() protoreflect.Message { + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Packet.ProtoReflect.Descriptor instead. +func (*Packet) Descriptor() ([]byte, []int) { + return file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDescGZIP(), []int{9} +} + +func (x *Packet) GetRemotIntfId() int64 { + if x != nil { + return x.RemotIntfId + } + return 0 +} + +func (x *Packet) GetFrame() []byte { + if x != nil { + return x.Frame + } + return nil +} + +type GenerateNodeInterfaceNameRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + PodIntfName string `protobuf:"bytes,1,opt,name=pod_intf_name,json=podIntfName,proto3" json:"pod_intf_name,omitempty"` + PodName string `protobuf:"bytes,2,opt,name=pod_name,json=podName,proto3" json:"pod_name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GenerateNodeInterfaceNameRequest) Reset() { + *x = GenerateNodeInterfaceNameRequest{} + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GenerateNodeInterfaceNameRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenerateNodeInterfaceNameRequest) ProtoMessage() {} + +func (x *GenerateNodeInterfaceNameRequest) ProtoReflect() protoreflect.Message { + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenerateNodeInterfaceNameRequest.ProtoReflect.Descriptor instead. +func (*GenerateNodeInterfaceNameRequest) Descriptor() ([]byte, []int) { + return file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDescGZIP(), []int{10} +} + +func (x *GenerateNodeInterfaceNameRequest) GetPodIntfName() string { + if x != nil { + return x.PodIntfName + } + return "" +} + +func (x *GenerateNodeInterfaceNameRequest) GetPodName() string { + if x != nil { + return x.PodName + } + return "" +} + +type GenerateNodeInterfaceNameResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Ok bool `protobuf:"varint,1,opt,name=ok,proto3" json:"ok,omitempty"` + NodeIntfName string `protobuf:"bytes,2,opt,name=node_intf_name,json=nodeIntfName,proto3" json:"node_intf_name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GenerateNodeInterfaceNameResponse) Reset() { + *x = GenerateNodeInterfaceNameResponse{} + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GenerateNodeInterfaceNameResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenerateNodeInterfaceNameResponse) ProtoMessage() {} + +func (x *GenerateNodeInterfaceNameResponse) ProtoReflect() protoreflect.Message { + mi := &file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenerateNodeInterfaceNameResponse.ProtoReflect.Descriptor instead. +func (*GenerateNodeInterfaceNameResponse) Descriptor() ([]byte, []int) { + return file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDescGZIP(), []int{11} +} + +func (x *GenerateNodeInterfaceNameResponse) GetOk() bool { + if x != nil { + return x.Ok + } + return false +} + +func (x *GenerateNodeInterfaceNameResponse) GetNodeIntfName() string { + if x != nil { + return x.NodeIntfName + } + return "" +} + +var File_daemon_proto_meshnet_v1beta1_meshnet_proto protoreflect.FileDescriptor + +const file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDesc = "" + + "\n" + + "*daemon/proto/meshnet/v1beta1/meshnet.proto\x12\x0fmeshnet.v1beta1\"\xe6\x01\n" + + "\x03Pod\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x15\n" + + "\x06src_ip\x18\x02 \x01(\tR\x05srcIp\x12\x15\n" + + "\x06net_ns\x18\x03 \x01(\tR\x05netNs\x12\x17\n" + + "\akube_ns\x18\x04 \x01(\tR\x06kubeNs\x12+\n" + + "\x05links\x18\x05 \x03(\v2\x15.meshnet.v1beta1.LinkR\x05links\x12\x17\n" + + "\anode_ip\x18\x06 \x01(\tR\x06nodeIp\x12\x1b\n" + + "\tnode_intf\x18\a \x01(\tR\bnodeIntf\x12!\n" + + "\fcontainer_id\x18\b \x01(\tR\vcontainerId\"\xa3\x01\n" + + "\x04Link\x12\x19\n" + + "\bpeer_pod\x18\x01 \x01(\tR\apeerPod\x12\x1d\n" + + "\n" + + "local_intf\x18\x02 \x01(\tR\tlocalIntf\x12\x1b\n" + + "\tpeer_intf\x18\x03 \x01(\tR\bpeerIntf\x12\x19\n" + + "\blocal_ip\x18\x04 \x01(\tR\alocalIp\x12\x17\n" + + "\apeer_ip\x18\x05 \x01(\tR\x06peerIp\x12\x10\n" + + "\x03uid\x18\x06 \x01(\x03R\x03uid\"7\n" + + "\bPodQuery\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x17\n" + + "\akube_ns\x18\x02 \x01(\tR\x06kubeNs\"c\n" + + "\tSkipQuery\x12\x10\n" + + "\x03pod\x18\x01 \x01(\tR\x03pod\x12\x12\n" + + "\x04peer\x18\x02 \x01(\tR\x04peer\x12\x17\n" + + "\akube_ns\x18\x03 \x01(\tR\x06kubeNs\x12\x17\n" + + "\alink_id\x18\x04 \x01(\x03R\x06linkId\"*\n" + + "\fBoolResponse\x12\x1a\n" + + "\bresponse\x18\x01 \x01(\bR\bresponse\"\xbd\x01\n" + + "\tRemotePod\x12\x15\n" + + "\x06net_ns\x18\x01 \x01(\tR\x05netNs\x12\x1b\n" + + "\tintf_name\x18\x02 \x01(\tR\bintfName\x12\x17\n" + + "\aintf_ip\x18\x03 \x01(\tR\x06intfIp\x12\x1b\n" + + "\tpeer_vtep\x18\x04 \x01(\tR\bpeerVtep\x12\x17\n" + + "\akube_ns\x18\x05 \x01(\tR\x06kubeNs\x12\x10\n" + + "\x03vni\x18\x06 \x01(\x03R\x03vni\x12\x1b\n" + + "\tnode_intf\x18\a \x01(\tR\bnodeIntf\"\xe9\x02\n" + + "\aWireDef\x123\n" + + "\x17wire_if_id_on_peer_node\x18\x01 \x01(\x03R\x12wireIfIdOnPeerNode\x12 \n" + + "\fpeer_node_ip\x18\x02 \x01(\tR\n" + + "peerNodeIp\x12'\n" + + "\x10intf_name_in_pod\x18\x03 \x01(\tR\rintfNameInPod\x12'\n" + + "\x10local_pod_net_ns\x18\x04 \x01(\tR\rlocalPodNetNs\x12\x19\n" + + "\blink_uid\x18\x05 \x01(\x03R\alinkUid\x12$\n" + + "\x0elocal_pod_name\x18\x06 \x01(\tR\flocalPodName\x129\n" + + "\x1awire_if_name_on_local_node\x18\a \x01(\tR\x15wireIfNameOnLocalNode\x12\x17\n" + + "\atopo_ns\x18\b \x01(\tR\x06topoNs\x12 \n" + + "\flocal_pod_ip\x18\t \x01(\tR\n" + + "localPodIp\"R\n" + + "\x12WireCreateResponse\x12\x1a\n" + + "\bresponse\x18\x01 \x01(\bR\bresponse\x12 \n" + + "\fpeer_intf_id\x18\x02 \x01(\x03R\n" + + "peerIntfId\".\n" + + "\x10WireDownResponse\x12\x1a\n" + + "\bresponse\x18\x01 \x01(\bR\bresponse\"B\n" + + "\x06Packet\x12\"\n" + + "\rremot_intf_id\x18\x01 \x01(\x03R\vremotIntfId\x12\x14\n" + + "\x05frame\x18\x02 \x01(\fR\x05frame\"a\n" + + " GenerateNodeInterfaceNameRequest\x12\"\n" + + "\rpod_intf_name\x18\x01 \x01(\tR\vpodIntfName\x12\x19\n" + + "\bpod_name\x18\x02 \x01(\tR\apodName\"Y\n" + + "!GenerateNodeInterfaceNameResponse\x12\x0e\n" + + "\x02ok\x18\x01 \x01(\bR\x02ok\x12$\n" + + "\x0enode_intf_name\x18\x02 \x01(\tR\fnodeIntfName2\xc0\x05\n" + + "\x05Local\x126\n" + + "\x03Get\x12\x19.meshnet.v1beta1.PodQuery\x1a\x14.meshnet.v1beta1.Pod\x12?\n" + + "\bSetAlive\x12\x14.meshnet.v1beta1.Pod\x1a\x1d.meshnet.v1beta1.BoolResponse\x12H\n" + + "\vSkipReverse\x12\x1a.meshnet.v1beta1.SkipQuery\x1a\x1d.meshnet.v1beta1.BoolResponse\x12A\n" + + "\x04Skip\x12\x1a.meshnet.v1beta1.SkipQuery\x1a\x1d.meshnet.v1beta1.BoolResponse\x12F\n" + + "\tIsSkipped\x12\x1a.meshnet.v1beta1.SkipQuery\x1a\x1d.meshnet.v1beta1.BoolResponse\x12O\n" + + "\x0eGRPCWireExists\x12\x18.meshnet.v1beta1.WireDef\x1a#.meshnet.v1beta1.WireCreateResponse\x12K\n" + + "\x10AddGRPCWireLocal\x12\x18.meshnet.v1beta1.WireDef\x1a\x1d.meshnet.v1beta1.BoolResponse\x12F\n" + + "\vRemGRPCWire\x12\x18.meshnet.v1beta1.WireDef\x1a\x1d.meshnet.v1beta1.BoolResponse\x12\x82\x01\n" + + "\x19GenerateNodeInterfaceName\x121.meshnet.v1beta1.GenerateNodeInterfaceNameRequest\x1a2.meshnet.v1beta1.GenerateNodeInterfaceNameResponse2\xf4\x01\n" + + "\x06Remote\x12C\n" + + "\x06Update\x12\x1a.meshnet.v1beta1.RemotePod\x1a\x1d.meshnet.v1beta1.BoolResponse\x12R\n" + + "\x11AddGRPCWireRemote\x12\x18.meshnet.v1beta1.WireDef\x1a#.meshnet.v1beta1.WireCreateResponse\x12Q\n" + + "\x12GRPCWireDownRemote\x12\x18.meshnet.v1beta1.WireDef\x1a!.meshnet.v1beta1.WireDownResponse2\x9e\x01\n" + + "\fWireProtocol\x12D\n" + + "\n" + + "SendToOnce\x12\x17.meshnet.v1beta1.Packet\x1a\x1d.meshnet.v1beta1.BoolResponse\x12H\n" + + "\fSendToStream\x12\x17.meshnet.v1beta1.Packet\x1a\x1d.meshnet.v1beta1.BoolResponse(\x01B&Z$github.com/networkop/meshnet/v1beta1b\x06proto3" + +var ( + file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDescOnce sync.Once + file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDescData []byte +) + +func file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDescGZIP() []byte { + file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDescOnce.Do(func() { + file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDesc), len(file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDesc))) + }) + return file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDescData +} + +var file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes = make([]protoimpl.MessageInfo, 12) +var file_daemon_proto_meshnet_v1beta1_meshnet_proto_goTypes = []any{ + (*Pod)(nil), // 0: meshnet.v1beta1.Pod + (*Link)(nil), // 1: meshnet.v1beta1.Link + (*PodQuery)(nil), // 2: meshnet.v1beta1.PodQuery + (*SkipQuery)(nil), // 3: meshnet.v1beta1.SkipQuery + (*BoolResponse)(nil), // 4: meshnet.v1beta1.BoolResponse + (*RemotePod)(nil), // 5: meshnet.v1beta1.RemotePod + (*WireDef)(nil), // 6: meshnet.v1beta1.WireDef + (*WireCreateResponse)(nil), // 7: meshnet.v1beta1.WireCreateResponse + (*WireDownResponse)(nil), // 8: meshnet.v1beta1.WireDownResponse + (*Packet)(nil), // 9: meshnet.v1beta1.Packet + (*GenerateNodeInterfaceNameRequest)(nil), // 10: meshnet.v1beta1.GenerateNodeInterfaceNameRequest + (*GenerateNodeInterfaceNameResponse)(nil), // 11: meshnet.v1beta1.GenerateNodeInterfaceNameResponse +} +var file_daemon_proto_meshnet_v1beta1_meshnet_proto_depIdxs = []int32{ + 1, // 0: meshnet.v1beta1.Pod.links:type_name -> meshnet.v1beta1.Link + 2, // 1: meshnet.v1beta1.Local.Get:input_type -> meshnet.v1beta1.PodQuery + 0, // 2: meshnet.v1beta1.Local.SetAlive:input_type -> meshnet.v1beta1.Pod + 3, // 3: meshnet.v1beta1.Local.SkipReverse:input_type -> meshnet.v1beta1.SkipQuery + 3, // 4: meshnet.v1beta1.Local.Skip:input_type -> meshnet.v1beta1.SkipQuery + 3, // 5: meshnet.v1beta1.Local.IsSkipped:input_type -> meshnet.v1beta1.SkipQuery + 6, // 6: meshnet.v1beta1.Local.GRPCWireExists:input_type -> meshnet.v1beta1.WireDef + 6, // 7: meshnet.v1beta1.Local.AddGRPCWireLocal:input_type -> meshnet.v1beta1.WireDef + 6, // 8: meshnet.v1beta1.Local.RemGRPCWire:input_type -> meshnet.v1beta1.WireDef + 10, // 9: meshnet.v1beta1.Local.GenerateNodeInterfaceName:input_type -> meshnet.v1beta1.GenerateNodeInterfaceNameRequest + 5, // 10: meshnet.v1beta1.Remote.Update:input_type -> meshnet.v1beta1.RemotePod + 6, // 11: meshnet.v1beta1.Remote.AddGRPCWireRemote:input_type -> meshnet.v1beta1.WireDef + 6, // 12: meshnet.v1beta1.Remote.GRPCWireDownRemote:input_type -> meshnet.v1beta1.WireDef + 9, // 13: meshnet.v1beta1.WireProtocol.SendToOnce:input_type -> meshnet.v1beta1.Packet + 9, // 14: meshnet.v1beta1.WireProtocol.SendToStream:input_type -> meshnet.v1beta1.Packet + 0, // 15: meshnet.v1beta1.Local.Get:output_type -> meshnet.v1beta1.Pod + 4, // 16: meshnet.v1beta1.Local.SetAlive:output_type -> meshnet.v1beta1.BoolResponse + 4, // 17: meshnet.v1beta1.Local.SkipReverse:output_type -> meshnet.v1beta1.BoolResponse + 4, // 18: meshnet.v1beta1.Local.Skip:output_type -> meshnet.v1beta1.BoolResponse + 4, // 19: meshnet.v1beta1.Local.IsSkipped:output_type -> meshnet.v1beta1.BoolResponse + 7, // 20: meshnet.v1beta1.Local.GRPCWireExists:output_type -> meshnet.v1beta1.WireCreateResponse + 4, // 21: meshnet.v1beta1.Local.AddGRPCWireLocal:output_type -> meshnet.v1beta1.BoolResponse + 4, // 22: meshnet.v1beta1.Local.RemGRPCWire:output_type -> meshnet.v1beta1.BoolResponse + 11, // 23: meshnet.v1beta1.Local.GenerateNodeInterfaceName:output_type -> meshnet.v1beta1.GenerateNodeInterfaceNameResponse + 4, // 24: meshnet.v1beta1.Remote.Update:output_type -> meshnet.v1beta1.BoolResponse + 7, // 25: meshnet.v1beta1.Remote.AddGRPCWireRemote:output_type -> meshnet.v1beta1.WireCreateResponse + 8, // 26: meshnet.v1beta1.Remote.GRPCWireDownRemote:output_type -> meshnet.v1beta1.WireDownResponse + 4, // 27: meshnet.v1beta1.WireProtocol.SendToOnce:output_type -> meshnet.v1beta1.BoolResponse + 4, // 28: meshnet.v1beta1.WireProtocol.SendToStream:output_type -> meshnet.v1beta1.BoolResponse + 15, // [15:29] is the sub-list for method output_type + 1, // [1:15] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_daemon_proto_meshnet_v1beta1_meshnet_proto_init() } +func file_daemon_proto_meshnet_v1beta1_meshnet_proto_init() { + if File_daemon_proto_meshnet_v1beta1_meshnet_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDesc), len(file_daemon_proto_meshnet_v1beta1_meshnet_proto_rawDesc)), + NumEnums: 0, + NumMessages: 12, + NumExtensions: 0, + NumServices: 3, + }, + GoTypes: file_daemon_proto_meshnet_v1beta1_meshnet_proto_goTypes, + DependencyIndexes: file_daemon_proto_meshnet_v1beta1_meshnet_proto_depIdxs, + MessageInfos: file_daemon_proto_meshnet_v1beta1_meshnet_proto_msgTypes, + }.Build() + File_daemon_proto_meshnet_v1beta1_meshnet_proto = out.File + file_daemon_proto_meshnet_v1beta1_meshnet_proto_goTypes = nil + file_daemon_proto_meshnet_v1beta1_meshnet_proto_depIdxs = nil +} diff --git a/third_party/meshnet/daemon/proto/meshnet/v1beta1/meshnet.proto b/third_party/meshnet/daemon/proto/meshnet/v1beta1/meshnet.proto new file mode 100644 index 000000000..40a65ccd0 --- /dev/null +++ b/third_party/meshnet/daemon/proto/meshnet/v1beta1/meshnet.proto @@ -0,0 +1,149 @@ +syntax = "proto3"; + +package meshnet.v1beta1; + +// The Go package name is the version. +option go_package = "github.com/networkop/meshnet/v1beta1"; + +message Pod { + string name = 1; + string src_ip = 2; + string net_ns = 3; + string kube_ns = 4; + repeated Link links = 5; + string node_ip = 6; + string node_intf = 7; + string container_id = 8; +} + +message Link { + string peer_pod = 1; + string local_intf = 2; + string peer_intf = 3; + string local_ip = 4; + string peer_ip = 5; + int64 uid = 6; +} + +message PodQuery { + string name = 1; + string kube_ns = 2; +} + +message SkipQuery { + string pod = 1; + string peer = 2; + string kube_ns = 3; + int64 link_id = 4; +} + +message BoolResponse { + bool response = 1; +} + +message RemotePod { + string net_ns = 1; + string intf_name = 2; + string intf_ip = 3; + string peer_vtep = 4; + string kube_ns = 5; + int64 vni = 6; + string node_intf = 7; +} + +// The proto describes both end of a grpc-wire, the local end and the remote +// end. +message WireDef { + // The remote machine interface id, to which this wire is connected to. + // When local machine sends a packet to remote machine over grpc-wire, + // then along with the packet data, local machine also sends the interface id + // to which this packet needs to delivered in remote machine. It avoids any + // per packet interface lookup at the remote end. Packet delivery becomes + // an O(1) operation at remote end. + int64 wire_if_id_on_peer_node = 1; + + // The remote machine interface IP, to which this grpc wire is connected to. + string peer_node_ip = 2; + + // Interface name, which comes from topology definition and to be put + // inside container. + // This filed is used when grpc-wire to be created. + string intf_name_in_pod = 3; + + // Network name space of the local pod which is connected to this + // grpc-wire + string local_pod_net_ns = 4; + + // Each meshnet link has a uid. + int64 link_uid = 5; + + // Name of the local pod where this wire is getting added. + string local_pod_name = 6; + + // Every interface inside a pod is one end of a veth pair. The other end of + // the veth pair is with the local node. This is the name of veth end, which + // is with the node. Packets coming from the pod will be picked up from this + // veth end and will be transported to the remote node over grpc wire. + string wire_if_name_on_local_node = 7; + + string topo_ns = 8; + + string local_pod_ip = 9; + +} + +message WireCreateResponse { + bool response = 1; + // the interface id, that was created. + int64 peer_intf_id = 2; +} + +message WireDownResponse { + bool response = 1; +} + +message Packet { + // the remote machine interface id, to which this packet should be delivered. + int64 remot_intf_id = 1; + bytes frame = 2; +} + +message GenerateNodeInterfaceNameRequest { + string pod_intf_name = 1; + string pod_name = 2; +} + + +message GenerateNodeInterfaceNameResponse { + bool ok = 1; + string node_intf_name = 2; +} + +service Local { + rpc Get (PodQuery) returns (Pod); + rpc SetAlive (Pod) returns (BoolResponse); + rpc SkipReverse (SkipQuery) returns (BoolResponse); + rpc Skip (SkipQuery) returns (BoolResponse); + rpc IsSkipped (SkipQuery) returns (BoolResponse); + + rpc GRPCWireExists(WireDef) returns (WireCreateResponse); + rpc AddGRPCWireLocal(WireDef) returns (BoolResponse); + rpc RemGRPCWire(WireDef) returns (BoolResponse); + + // A node is going to hold multiple veth to connect to multiple containers. + // Each veth name must be unique with in a node. Daemon generates an ID that + // is unique in this node. + rpc GenerateNodeInterfaceName(GenerateNodeInterfaceNameRequest) + returns (GenerateNodeInterfaceNameResponse); +} + +service Remote { + rpc Update (RemotePod) returns (BoolResponse); + rpc AddGRPCWireRemote(WireDef) returns (WireCreateResponse); + rpc GRPCWireDownRemote(WireDef) returns (WireDownResponse); +} + +service WireProtocol { + rpc SendToOnce (Packet) returns (BoolResponse); + rpc SendToStream (stream Packet) returns (BoolResponse); +} \ No newline at end of file diff --git a/third_party/meshnet/daemon/proto/meshnet/v1beta1/meshnet_grpc.pb.go b/third_party/meshnet/daemon/proto/meshnet/v1beta1/meshnet_grpc.pb.go new file mode 100644 index 000000000..6ca1fdc39 --- /dev/null +++ b/third_party/meshnet/daemon/proto/meshnet/v1beta1/meshnet_grpc.pb.go @@ -0,0 +1,743 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.6.0 +// - protoc (unknown) +// source: daemon/proto/meshnet/v1beta1/meshnet.proto + +package v1beta1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + Local_Get_FullMethodName = "/meshnet.v1beta1.Local/Get" + Local_SetAlive_FullMethodName = "/meshnet.v1beta1.Local/SetAlive" + Local_SkipReverse_FullMethodName = "/meshnet.v1beta1.Local/SkipReverse" + Local_Skip_FullMethodName = "/meshnet.v1beta1.Local/Skip" + Local_IsSkipped_FullMethodName = "/meshnet.v1beta1.Local/IsSkipped" + Local_GRPCWireExists_FullMethodName = "/meshnet.v1beta1.Local/GRPCWireExists" + Local_AddGRPCWireLocal_FullMethodName = "/meshnet.v1beta1.Local/AddGRPCWireLocal" + Local_RemGRPCWire_FullMethodName = "/meshnet.v1beta1.Local/RemGRPCWire" + Local_GenerateNodeInterfaceName_FullMethodName = "/meshnet.v1beta1.Local/GenerateNodeInterfaceName" +) + +// LocalClient is the client API for Local service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type LocalClient interface { + Get(ctx context.Context, in *PodQuery, opts ...grpc.CallOption) (*Pod, error) + SetAlive(ctx context.Context, in *Pod, opts ...grpc.CallOption) (*BoolResponse, error) + SkipReverse(ctx context.Context, in *SkipQuery, opts ...grpc.CallOption) (*BoolResponse, error) + Skip(ctx context.Context, in *SkipQuery, opts ...grpc.CallOption) (*BoolResponse, error) + IsSkipped(ctx context.Context, in *SkipQuery, opts ...grpc.CallOption) (*BoolResponse, error) + GRPCWireExists(ctx context.Context, in *WireDef, opts ...grpc.CallOption) (*WireCreateResponse, error) + AddGRPCWireLocal(ctx context.Context, in *WireDef, opts ...grpc.CallOption) (*BoolResponse, error) + RemGRPCWire(ctx context.Context, in *WireDef, opts ...grpc.CallOption) (*BoolResponse, error) + // A node is going to hold multiple veth to connect to multiple containers. + // Each veth name must be unique with in a node. Daemon generates an ID that + // is unique in this node. + GenerateNodeInterfaceName(ctx context.Context, in *GenerateNodeInterfaceNameRequest, opts ...grpc.CallOption) (*GenerateNodeInterfaceNameResponse, error) +} + +type localClient struct { + cc grpc.ClientConnInterface +} + +func NewLocalClient(cc grpc.ClientConnInterface) LocalClient { + return &localClient{cc} +} + +func (c *localClient) Get(ctx context.Context, in *PodQuery, opts ...grpc.CallOption) (*Pod, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(Pod) + err := c.cc.Invoke(ctx, Local_Get_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *localClient) SetAlive(ctx context.Context, in *Pod, opts ...grpc.CallOption) (*BoolResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(BoolResponse) + err := c.cc.Invoke(ctx, Local_SetAlive_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *localClient) SkipReverse(ctx context.Context, in *SkipQuery, opts ...grpc.CallOption) (*BoolResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(BoolResponse) + err := c.cc.Invoke(ctx, Local_SkipReverse_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *localClient) Skip(ctx context.Context, in *SkipQuery, opts ...grpc.CallOption) (*BoolResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(BoolResponse) + err := c.cc.Invoke(ctx, Local_Skip_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *localClient) IsSkipped(ctx context.Context, in *SkipQuery, opts ...grpc.CallOption) (*BoolResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(BoolResponse) + err := c.cc.Invoke(ctx, Local_IsSkipped_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *localClient) GRPCWireExists(ctx context.Context, in *WireDef, opts ...grpc.CallOption) (*WireCreateResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(WireCreateResponse) + err := c.cc.Invoke(ctx, Local_GRPCWireExists_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *localClient) AddGRPCWireLocal(ctx context.Context, in *WireDef, opts ...grpc.CallOption) (*BoolResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(BoolResponse) + err := c.cc.Invoke(ctx, Local_AddGRPCWireLocal_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *localClient) RemGRPCWire(ctx context.Context, in *WireDef, opts ...grpc.CallOption) (*BoolResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(BoolResponse) + err := c.cc.Invoke(ctx, Local_RemGRPCWire_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *localClient) GenerateNodeInterfaceName(ctx context.Context, in *GenerateNodeInterfaceNameRequest, opts ...grpc.CallOption) (*GenerateNodeInterfaceNameResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GenerateNodeInterfaceNameResponse) + err := c.cc.Invoke(ctx, Local_GenerateNodeInterfaceName_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// LocalServer is the server API for Local service. +// All implementations must embed UnimplementedLocalServer +// for forward compatibility. +type LocalServer interface { + Get(context.Context, *PodQuery) (*Pod, error) + SetAlive(context.Context, *Pod) (*BoolResponse, error) + SkipReverse(context.Context, *SkipQuery) (*BoolResponse, error) + Skip(context.Context, *SkipQuery) (*BoolResponse, error) + IsSkipped(context.Context, *SkipQuery) (*BoolResponse, error) + GRPCWireExists(context.Context, *WireDef) (*WireCreateResponse, error) + AddGRPCWireLocal(context.Context, *WireDef) (*BoolResponse, error) + RemGRPCWire(context.Context, *WireDef) (*BoolResponse, error) + // A node is going to hold multiple veth to connect to multiple containers. + // Each veth name must be unique with in a node. Daemon generates an ID that + // is unique in this node. + GenerateNodeInterfaceName(context.Context, *GenerateNodeInterfaceNameRequest) (*GenerateNodeInterfaceNameResponse, error) + mustEmbedUnimplementedLocalServer() +} + +// UnimplementedLocalServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedLocalServer struct{} + +func (UnimplementedLocalServer) Get(context.Context, *PodQuery) (*Pod, error) { + return nil, status.Error(codes.Unimplemented, "method Get not implemented") +} +func (UnimplementedLocalServer) SetAlive(context.Context, *Pod) (*BoolResponse, error) { + return nil, status.Error(codes.Unimplemented, "method SetAlive not implemented") +} +func (UnimplementedLocalServer) SkipReverse(context.Context, *SkipQuery) (*BoolResponse, error) { + return nil, status.Error(codes.Unimplemented, "method SkipReverse not implemented") +} +func (UnimplementedLocalServer) Skip(context.Context, *SkipQuery) (*BoolResponse, error) { + return nil, status.Error(codes.Unimplemented, "method Skip not implemented") +} +func (UnimplementedLocalServer) IsSkipped(context.Context, *SkipQuery) (*BoolResponse, error) { + return nil, status.Error(codes.Unimplemented, "method IsSkipped not implemented") +} +func (UnimplementedLocalServer) GRPCWireExists(context.Context, *WireDef) (*WireCreateResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GRPCWireExists not implemented") +} +func (UnimplementedLocalServer) AddGRPCWireLocal(context.Context, *WireDef) (*BoolResponse, error) { + return nil, status.Error(codes.Unimplemented, "method AddGRPCWireLocal not implemented") +} +func (UnimplementedLocalServer) RemGRPCWire(context.Context, *WireDef) (*BoolResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RemGRPCWire not implemented") +} +func (UnimplementedLocalServer) GenerateNodeInterfaceName(context.Context, *GenerateNodeInterfaceNameRequest) (*GenerateNodeInterfaceNameResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GenerateNodeInterfaceName not implemented") +} +func (UnimplementedLocalServer) mustEmbedUnimplementedLocalServer() {} +func (UnimplementedLocalServer) testEmbeddedByValue() {} + +// UnsafeLocalServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to LocalServer will +// result in compilation errors. +type UnsafeLocalServer interface { + mustEmbedUnimplementedLocalServer() +} + +func RegisterLocalServer(s grpc.ServiceRegistrar, srv LocalServer) { + // If the following call panics, it indicates UnimplementedLocalServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&Local_ServiceDesc, srv) +} + +func _Local_Get_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PodQuery) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LocalServer).Get(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Local_Get_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LocalServer).Get(ctx, req.(*PodQuery)) + } + return interceptor(ctx, in, info, handler) +} + +func _Local_SetAlive_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Pod) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LocalServer).SetAlive(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Local_SetAlive_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LocalServer).SetAlive(ctx, req.(*Pod)) + } + return interceptor(ctx, in, info, handler) +} + +func _Local_SkipReverse_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SkipQuery) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LocalServer).SkipReverse(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Local_SkipReverse_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LocalServer).SkipReverse(ctx, req.(*SkipQuery)) + } + return interceptor(ctx, in, info, handler) +} + +func _Local_Skip_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SkipQuery) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LocalServer).Skip(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Local_Skip_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LocalServer).Skip(ctx, req.(*SkipQuery)) + } + return interceptor(ctx, in, info, handler) +} + +func _Local_IsSkipped_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SkipQuery) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LocalServer).IsSkipped(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Local_IsSkipped_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LocalServer).IsSkipped(ctx, req.(*SkipQuery)) + } + return interceptor(ctx, in, info, handler) +} + +func _Local_GRPCWireExists_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(WireDef) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LocalServer).GRPCWireExists(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Local_GRPCWireExists_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LocalServer).GRPCWireExists(ctx, req.(*WireDef)) + } + return interceptor(ctx, in, info, handler) +} + +func _Local_AddGRPCWireLocal_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(WireDef) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LocalServer).AddGRPCWireLocal(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Local_AddGRPCWireLocal_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LocalServer).AddGRPCWireLocal(ctx, req.(*WireDef)) + } + return interceptor(ctx, in, info, handler) +} + +func _Local_RemGRPCWire_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(WireDef) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LocalServer).RemGRPCWire(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Local_RemGRPCWire_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LocalServer).RemGRPCWire(ctx, req.(*WireDef)) + } + return interceptor(ctx, in, info, handler) +} + +func _Local_GenerateNodeInterfaceName_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GenerateNodeInterfaceNameRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LocalServer).GenerateNodeInterfaceName(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Local_GenerateNodeInterfaceName_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LocalServer).GenerateNodeInterfaceName(ctx, req.(*GenerateNodeInterfaceNameRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Local_ServiceDesc is the grpc.ServiceDesc for Local service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Local_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "meshnet.v1beta1.Local", + HandlerType: (*LocalServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Get", + Handler: _Local_Get_Handler, + }, + { + MethodName: "SetAlive", + Handler: _Local_SetAlive_Handler, + }, + { + MethodName: "SkipReverse", + Handler: _Local_SkipReverse_Handler, + }, + { + MethodName: "Skip", + Handler: _Local_Skip_Handler, + }, + { + MethodName: "IsSkipped", + Handler: _Local_IsSkipped_Handler, + }, + { + MethodName: "GRPCWireExists", + Handler: _Local_GRPCWireExists_Handler, + }, + { + MethodName: "AddGRPCWireLocal", + Handler: _Local_AddGRPCWireLocal_Handler, + }, + { + MethodName: "RemGRPCWire", + Handler: _Local_RemGRPCWire_Handler, + }, + { + MethodName: "GenerateNodeInterfaceName", + Handler: _Local_GenerateNodeInterfaceName_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "daemon/proto/meshnet/v1beta1/meshnet.proto", +} + +const ( + Remote_Update_FullMethodName = "/meshnet.v1beta1.Remote/Update" + Remote_AddGRPCWireRemote_FullMethodName = "/meshnet.v1beta1.Remote/AddGRPCWireRemote" + Remote_GRPCWireDownRemote_FullMethodName = "/meshnet.v1beta1.Remote/GRPCWireDownRemote" +) + +// RemoteClient is the client API for Remote service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type RemoteClient interface { + Update(ctx context.Context, in *RemotePod, opts ...grpc.CallOption) (*BoolResponse, error) + AddGRPCWireRemote(ctx context.Context, in *WireDef, opts ...grpc.CallOption) (*WireCreateResponse, error) + GRPCWireDownRemote(ctx context.Context, in *WireDef, opts ...grpc.CallOption) (*WireDownResponse, error) +} + +type remoteClient struct { + cc grpc.ClientConnInterface +} + +func NewRemoteClient(cc grpc.ClientConnInterface) RemoteClient { + return &remoteClient{cc} +} + +func (c *remoteClient) Update(ctx context.Context, in *RemotePod, opts ...grpc.CallOption) (*BoolResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(BoolResponse) + err := c.cc.Invoke(ctx, Remote_Update_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *remoteClient) AddGRPCWireRemote(ctx context.Context, in *WireDef, opts ...grpc.CallOption) (*WireCreateResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(WireCreateResponse) + err := c.cc.Invoke(ctx, Remote_AddGRPCWireRemote_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *remoteClient) GRPCWireDownRemote(ctx context.Context, in *WireDef, opts ...grpc.CallOption) (*WireDownResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(WireDownResponse) + err := c.cc.Invoke(ctx, Remote_GRPCWireDownRemote_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// RemoteServer is the server API for Remote service. +// All implementations must embed UnimplementedRemoteServer +// for forward compatibility. +type RemoteServer interface { + Update(context.Context, *RemotePod) (*BoolResponse, error) + AddGRPCWireRemote(context.Context, *WireDef) (*WireCreateResponse, error) + GRPCWireDownRemote(context.Context, *WireDef) (*WireDownResponse, error) + mustEmbedUnimplementedRemoteServer() +} + +// UnimplementedRemoteServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedRemoteServer struct{} + +func (UnimplementedRemoteServer) Update(context.Context, *RemotePod) (*BoolResponse, error) { + return nil, status.Error(codes.Unimplemented, "method Update not implemented") +} +func (UnimplementedRemoteServer) AddGRPCWireRemote(context.Context, *WireDef) (*WireCreateResponse, error) { + return nil, status.Error(codes.Unimplemented, "method AddGRPCWireRemote not implemented") +} +func (UnimplementedRemoteServer) GRPCWireDownRemote(context.Context, *WireDef) (*WireDownResponse, error) { + return nil, status.Error(codes.Unimplemented, "method GRPCWireDownRemote not implemented") +} +func (UnimplementedRemoteServer) mustEmbedUnimplementedRemoteServer() {} +func (UnimplementedRemoteServer) testEmbeddedByValue() {} + +// UnsafeRemoteServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to RemoteServer will +// result in compilation errors. +type UnsafeRemoteServer interface { + mustEmbedUnimplementedRemoteServer() +} + +func RegisterRemoteServer(s grpc.ServiceRegistrar, srv RemoteServer) { + // If the following call panics, it indicates UnimplementedRemoteServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&Remote_ServiceDesc, srv) +} + +func _Remote_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RemotePod) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RemoteServer).Update(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Remote_Update_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RemoteServer).Update(ctx, req.(*RemotePod)) + } + return interceptor(ctx, in, info, handler) +} + +func _Remote_AddGRPCWireRemote_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(WireDef) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RemoteServer).AddGRPCWireRemote(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Remote_AddGRPCWireRemote_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RemoteServer).AddGRPCWireRemote(ctx, req.(*WireDef)) + } + return interceptor(ctx, in, info, handler) +} + +func _Remote_GRPCWireDownRemote_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(WireDef) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(RemoteServer).GRPCWireDownRemote(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Remote_GRPCWireDownRemote_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(RemoteServer).GRPCWireDownRemote(ctx, req.(*WireDef)) + } + return interceptor(ctx, in, info, handler) +} + +// Remote_ServiceDesc is the grpc.ServiceDesc for Remote service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Remote_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "meshnet.v1beta1.Remote", + HandlerType: (*RemoteServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Update", + Handler: _Remote_Update_Handler, + }, + { + MethodName: "AddGRPCWireRemote", + Handler: _Remote_AddGRPCWireRemote_Handler, + }, + { + MethodName: "GRPCWireDownRemote", + Handler: _Remote_GRPCWireDownRemote_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "daemon/proto/meshnet/v1beta1/meshnet.proto", +} + +const ( + WireProtocol_SendToOnce_FullMethodName = "/meshnet.v1beta1.WireProtocol/SendToOnce" + WireProtocol_SendToStream_FullMethodName = "/meshnet.v1beta1.WireProtocol/SendToStream" +) + +// WireProtocolClient is the client API for WireProtocol service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type WireProtocolClient interface { + SendToOnce(ctx context.Context, in *Packet, opts ...grpc.CallOption) (*BoolResponse, error) + SendToStream(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[Packet, BoolResponse], error) +} + +type wireProtocolClient struct { + cc grpc.ClientConnInterface +} + +func NewWireProtocolClient(cc grpc.ClientConnInterface) WireProtocolClient { + return &wireProtocolClient{cc} +} + +func (c *wireProtocolClient) SendToOnce(ctx context.Context, in *Packet, opts ...grpc.CallOption) (*BoolResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(BoolResponse) + err := c.cc.Invoke(ctx, WireProtocol_SendToOnce_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *wireProtocolClient) SendToStream(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[Packet, BoolResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &WireProtocol_ServiceDesc.Streams[0], WireProtocol_SendToStream_FullMethodName, cOpts...) + if err != nil { + return nil, err + } + x := &grpc.GenericClientStream[Packet, BoolResponse]{ClientStream: stream} + return x, nil +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type WireProtocol_SendToStreamClient = grpc.ClientStreamingClient[Packet, BoolResponse] + +// WireProtocolServer is the server API for WireProtocol service. +// All implementations must embed UnimplementedWireProtocolServer +// for forward compatibility. +type WireProtocolServer interface { + SendToOnce(context.Context, *Packet) (*BoolResponse, error) + SendToStream(grpc.ClientStreamingServer[Packet, BoolResponse]) error + mustEmbedUnimplementedWireProtocolServer() +} + +// UnimplementedWireProtocolServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedWireProtocolServer struct{} + +func (UnimplementedWireProtocolServer) SendToOnce(context.Context, *Packet) (*BoolResponse, error) { + return nil, status.Error(codes.Unimplemented, "method SendToOnce not implemented") +} +func (UnimplementedWireProtocolServer) SendToStream(grpc.ClientStreamingServer[Packet, BoolResponse]) error { + return status.Error(codes.Unimplemented, "method SendToStream not implemented") +} +func (UnimplementedWireProtocolServer) mustEmbedUnimplementedWireProtocolServer() {} +func (UnimplementedWireProtocolServer) testEmbeddedByValue() {} + +// UnsafeWireProtocolServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to WireProtocolServer will +// result in compilation errors. +type UnsafeWireProtocolServer interface { + mustEmbedUnimplementedWireProtocolServer() +} + +func RegisterWireProtocolServer(s grpc.ServiceRegistrar, srv WireProtocolServer) { + // If the following call panics, it indicates UnimplementedWireProtocolServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&WireProtocol_ServiceDesc, srv) +} + +func _WireProtocol_SendToOnce_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Packet) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WireProtocolServer).SendToOnce(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: WireProtocol_SendToOnce_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WireProtocolServer).SendToOnce(ctx, req.(*Packet)) + } + return interceptor(ctx, in, info, handler) +} + +func _WireProtocol_SendToStream_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(WireProtocolServer).SendToStream(&grpc.GenericServerStream[Packet, BoolResponse]{ServerStream: stream}) +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type WireProtocol_SendToStreamServer = grpc.ClientStreamingServer[Packet, BoolResponse] + +// WireProtocol_ServiceDesc is the grpc.ServiceDesc for WireProtocol service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var WireProtocol_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "meshnet.v1beta1.WireProtocol", + HandlerType: (*WireProtocolServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "SendToOnce", + Handler: _WireProtocol_SendToOnce_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "SendToStream", + Handler: _WireProtocol_SendToStream_Handler, + ClientStreams: true, + }, + }, + Metadata: "daemon/proto/meshnet/v1beta1/meshnet.proto", +} diff --git a/third_party/meshnet/daemon/vxlan/vxlan.go b/third_party/meshnet/daemon/vxlan/vxlan.go new file mode 100644 index 000000000..715d92c08 --- /dev/null +++ b/third_party/meshnet/daemon/vxlan/vxlan.go @@ -0,0 +1,162 @@ +package vxlan + +import ( + "fmt" + "net" + "strconv" + "strings" + + "github.com/containernetworking/plugins/pkg/ns" + "github.com/redhat-nfvpe/koko/api" + log "github.com/sirupsen/logrus" + "github.com/vishvananda/netlink" + + mpb "github.com/openconfig/kne/third_party/meshnet/daemon/proto/meshnet/v1beta1" +) + +var vxLanOvrlyLogger *log.Entry = nil + +func InitLogger() { + vxLanOvrlyLogger = log.WithFields(log.Fields{"daemon": "meshnetd", "overlay": "vxLAN"}) +} + +// CreateOrUpdate creates or updates the vxlan on the node. +func CreateOrUpdate(v *mpb.RemotePod) error { + var srcIntf string + var err error + srcIntf = v.NodeIntf + if srcIntf == "" { + /// Looking up default interface + _, srcIntf, err = getSource() + if err != nil { + return err + } + } + + // Creating koko Veth struct + veth := api.VEth{ + NsName: v.NetNs, + LinkName: v.IntfName, + } + + // Link IP is optional, only set it when it's provided + if v.IntfIp != "" { + ipAddr, ipSubnet, err := net.ParseCIDR(v.IntfIp) + if err != nil { + return fmt.Errorf(" MESHNETD: Error parsing CIDR %s: %s", v.IntfIp, err) + } + veth.IPAddr = []net.IPNet{{ + IP: ipAddr, + Mask: ipSubnet.Mask, + }} + } + vxLanOvrlyLogger.Infof("Created koko Veth struct %+v", veth) + + // Creating koko vxlan struct + vxlan := api.VxLan{ + ParentIF: srcIntf, + IPAddr: net.ParseIP(v.PeerVtep), + ID: int(v.Vni), + } + vxLanOvrlyLogger.Infof("Created koko vxlan struct %+v", vxlan) + + // Try to read interface attributes from netlink + link := getLinkFromNS(veth.NsName, veth.LinkName) + vxLanOvrlyLogger.Infof("Retrieved %s link from %s Netns: %+v", veth.LinkName, veth.NsName, link) + + // Check if interface already exists + vxlanLink, ok := link.(*netlink.Vxlan) + vxLanOvrlyLogger.Infof("Is link %+v a VXLAN?: %s", vxlanLink, strconv.FormatBool(ok)) + if ok { // the link we've found is a vxlan link + + if !(vxlanLink.VxlanId == vxlan.ID && vxlanLink.Group.Equal(vxlan.IPAddr)) { // If Vxlan attrs are different + + // We remove the existing link and add a new one + vxLanOvrlyLogger.Infof("Vxlan attrs are different: %d!=%d or %v!=%v", vxlanLink.VxlanId, vxlan.ID, vxlanLink.Group, vxlan.IPAddr) + if err = veth.RemoveVethLink(); err != nil { + return fmt.Errorf(" MESHNETD: Error when removing an old Vxlan interface with koko: %s", err) + } + + if err = api.MakeVxLan(veth, vxlan); err != nil { + if strings.Contains(err.Error(), "file exists") { + vxLanOvrlyLogger.Infof(" MESHNETD: Error when creating a Vxlan interface with koko, file exists") + } else { + return fmt.Errorf(" MESHNETD: Error when re-creating a Vxlan interface with koko: %s", err) + } + } + } // If Vxlan attrs are the same, do nothing + + } else { // the link we've found isn't a vxlan or doesn't exist + + vxLanOvrlyLogger.Infof("Link %+v we've found isn't a vxlan or doesn't exist", link) + // If link exists but wasn't matched as vxlan, we need to delete it + if link != nil { + vxLanOvrlyLogger.Infof("Attempting to remove link %+v", veth) + if err = veth.RemoveVethLink(); err != nil { + return fmt.Errorf(" MESHNETD: Error when removing an old non-Vxlan interface with koko: %s", err) + } + } + + // Then we simply create a new one + vxLanOvrlyLogger.Infof("Creating a VXLAN link: %v; inside the pod: %v", vxlan, veth) + if err = api.MakeVxLan(veth, vxlan); err != nil { + if strings.Contains(err.Error(), "file exists") { + vxLanOvrlyLogger.Warnf(" MESHNETD: Error when creating a Vxlan interface with koko, file exists") + } else { + vxLanOvrlyLogger.Errorf(" MESHNETD: Error when creating a new Vxlan interface with koko: %s", err) + return err + } + } + } + + return nil +} + +// getLinkFromNS retrieves netlink.Link from NetNS +func getLinkFromNS(nsName string, linkName string) netlink.Link { + // If namespace doesn't exist, do nothing and return empty result + vethNs, err := ns.GetNS(nsName) + if err != nil { + return nil + } + defer vethNs.Close() + // We can ignore the error returned here as we will create that interface instead + var result netlink.Link + err = vethNs.Do(func(_ ns.NetNS) error { + var err error + result, err = netlink.LinkByName(linkName) + return err + }) + if err != nil { + vxLanOvrlyLogger.Warnf("failed to get link: %s", linkName) + } + + return result +} + +// Uses netlink to query the IP and LinkName of the interface with default route +func getSource() (string, string, error) { + // Looking up a default route to get the intf and IP for vxlan + r, err := netlink.RouteGet(net.IPv4(1, 1, 1, 1)) + if (err != nil) && len(r) < 1 { + return "", "", fmt.Errorf(" MESHNETD: Error getting default route: %s\n%+v", err, r) + } + srcIP := r[0].Src.String() + + link, err := netlink.LinkByIndex(r[0].LinkIndex) + if err != nil { + return "", "", fmt.Errorf(" MESHNETD: Error looking up link by its index: %s", err) + } + srcIntf := link.Attrs().Name + return srcIP, srcIntf, nil +} + +func vxlanDifferent(l1 *netlink.Vxlan, l2 api.VxLan) bool { + if l1.VxlanId != l2.ID { + return false + } + if !l1.Group.Equal(l2.IPAddr) { + return false + } + return true +} diff --git a/third_party/meshnet/daemon/vxlan/vxlan_test.go b/third_party/meshnet/daemon/vxlan/vxlan_test.go new file mode 100644 index 000000000..1c504cb13 --- /dev/null +++ b/third_party/meshnet/daemon/vxlan/vxlan_test.go @@ -0,0 +1,57 @@ +package vxlan + +import ( + "net" + "testing" + + "github.com/redhat-nfvpe/koko/api" + "github.com/vishvananda/netlink" +) + +func TestVxlan(t *testing.T) { + tests := []struct { + expected api.VxLan + found *netlink.Vxlan + same bool + }{ + { + expected: api.VxLan{ + ID: 5001, + IPAddr: net.IPv4(1, 1, 1, 1), + }, + found: &netlink.Vxlan{ + VxlanId: 5001, + Group: net.IPv4(1, 1, 1, 1), + }, + same: true, + }, + { + expected: api.VxLan{ + ID: 5001, + IPAddr: net.IPv4(1, 1, 1, 1), + }, + found: &netlink.Vxlan{ + VxlanId: 5002, + Group: net.IPv4(1, 1, 1, 1), + }, + same: false, + }, + { + expected: api.VxLan{ + ID: 5001, + IPAddr: net.IPv4(1, 1, 1, 1), + }, + found: &netlink.Vxlan{ + VxlanId: 5001, + Group: net.IPv4(2, 2, 2, 2), + }, + same: false, + }, + } + for i, tt := range tests { + result := vxlanDifferent(tt.found, tt.expected) + if result != tt.same { + t.Errorf("#%d test failed", i) + } + } +} diff --git a/third_party/meshnet/docker/Dockerfile b/third_party/meshnet/docker/Dockerfile new file mode 100644 index 000000000..b6431f1b3 --- /dev/null +++ b/third_party/meshnet/docker/Dockerfile @@ -0,0 +1,67 @@ +# GRPC generation +FROM golang:1.25.11 AS proto_base + +WORKDIR /src + +RUN go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.36.11 && \ + go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.5.1 && \ + go install github.com/bufbuild/buf/cmd/buf@v1.13.1 + +COPY daemon/proto . +COPY buf.gen.yaml . +COPY buf.yaml . + +RUN buf lint && buf generate -v + +#---------------------------------------------- Stage 2: Build Base : Build meshnet binaries (Plugin & daemon) - --------------------------------- +# Building the binaries +FROM golang:1.25.11 AS build_base + + +WORKDIR /go/src/github.com/openconfig/kne/third_party/meshnet +ENV CGO_ENABLED=0 +COPY go.mod . +COPY go.sum . +# hadolint ignore=DL3008 +RUN go mod download && \ + apt-get update -y && \ + apt-get install -y --no-install-recommends \ + libpcap-dev \ + libsystemd-dev && \ + rm -rf /var/lib/apt/lists/* + +FROM --platform=${BUILDPLATFORM:-linux/amd64} build_base AS build + +ARG LDFLAGS +ARG TARGETOS +ARG TARGETARCH + +COPY daemon/ daemon/ +COPY api/ api/ +COPY plugin/ plugin/ +COPY utils/ utils/ +COPY --from=proto_base /src/ . + + +RUN GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -o meshnet plugin/meshnet.go plugin/grpcwires-plugin.go && \ + GOOS=${TARGETOS} CGO_ENABLED=1 GOARCH=${TARGETARCH} go build -ldflags="-s -w" -o meshnetd daemon/main.go + + +#----------------------------------------------------- Final Container --------------------------------- +# checkov:skip=CKV_DOCKER_2: CNI daemon image does not require healthcheck +# checkov:skip=CKV_DOCKER_3: CNI daemon must run as root to configure host network namespaces +FROM debian:13-slim +# hadolint ignore=DL3008 +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + jq \ + libpcap-dev && \ + rm -rf /var/lib/apt/lists/* + +COPY --from=build /go/src/github.com/openconfig/kne/third_party/meshnet/meshnet / +COPY --from=build /go/src/github.com/openconfig/kne/third_party/meshnet/meshnetd / +COPY docker/new-entrypoint.sh /entrypoint.sh +COPY LICENSE / +RUN chmod +x ./entrypoint.sh /meshnetd + +ENTRYPOINT ["./entrypoint.sh"] diff --git a/third_party/meshnet/docker/entrypoint.sh b/third_party/meshnet/docker/entrypoint.sh new file mode 100755 index 000000000..46a4209f3 --- /dev/null +++ b/third_party/meshnet/docker/entrypoint.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +echo "Distributing files" +if [ -d "/opt/cni/bin/" ] && [ -f "./meshnet" ]; then + cp ./meshnet /opt/cni/bin/ +fi + +if [ -d "/etc/cni/net.d/" ] && [ -f "./meshnet.conf" ]; then + cp ./meshnet.conf /etc/cni/net.d/ +fi + +if [ ! -f /etc/cni/net.d/00-meshnet.conf ]; then + echo "Merging existing CNI configuration with meshnet" + existing=$(find /etc/cni/net.d/ -maxdepth 1 -type f | grep -E "flannel|weave|bridge|calico|contiv|cilium|cni|kindnet" | head -n1) + has_plugin_section=$(jq 'has("plugins")' "$existing") + if [ "$has_plugin_section" = true ]; then + jq -s '.[1].delegate = (.[0].plugins[0])' "$existing" /etc/cni/net.d/meshnet.conf | jq '.[1]' >/etc/cni/net.d/00-meshnet.conf + else + jq -s '.[1].delegate = (.[0])' "$existing" /etc/cni/net.d/meshnet.conf | jq '.[1]' >/etc/cni/net.d/00-meshnet.conf + fi +else + echo "Reusing existing CNI config" +fi + +echo 'Making sure the name is set for the master plugin' +jq '.delegate.name = "masterplugin"' /etc/cni/net.d/00-meshnet.conf >/tmp/cni.conf && mv /tmp/cni.conf /etc/cni/net.d/00-meshnet.conf + +echo "Starting meshnetd daemon" +/meshnetd diff --git a/third_party/meshnet/docker/new-entrypoint.sh b/third_party/meshnet/docker/new-entrypoint.sh new file mode 100755 index 000000000..7b504d21c --- /dev/null +++ b/third_party/meshnet/docker/new-entrypoint.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +echo "Distributing files" +if [ -d "/opt/cni/bin/" ] && [ -f "./meshnet" ]; then + cp ./meshnet /opt/cni/bin/ +fi + +if [ -d "/etc/cni/net.d/" ] && [ -f "./meshnet.conf" ]; then + cp ./meshnet.conf /etc/cni/net.d/ +fi + +echo "Starting meshnetd daemon" +/meshnetd diff --git a/third_party/meshnet/docs/implementation.md b/third_party/meshnet/docs/implementation.md new file mode 100644 index 000000000..1f48ad3e9 --- /dev/null +++ b/third_party/meshnet/docs/implementation.md @@ -0,0 +1,45 @@ +# Motivation + +In K8S usually pods across nodes are connected using VxLAN/IPnIP/GRE overlay. Our objective is to connect these pods using grpc p2p overlay. One of the advantages is that there is **no reduction of MTU**. For example adding VXLAN will reduce virtual interface MTU by 20 bytes. With grpc-wire interface MTU remains 1500 (or can be made higher - not tried yet). Other advantages could be to add telemetry, generate wire up/down signal, etc. + +## Introduction + +Let's take an example CRD as given in the picture below +![CRD](./pics/crd.png) + +When this crd is deployed with grpc-wire CNI, then the nodes across the K8S pods will interact over a grpc channel. Each grpc channel will provide a point to point connection between pods. For example `POD-1:e1 <---> POD-2:e1` will be a dedicated grpc channel for POD1 & POD-2 communication via their `e1` virtual interfaces. + +![DEPLOYMENT](./pics/deployment.png) + +Each node in the cluster runs a CNI daemon set. The daemon in the node is responsible to maintain the GRPC channel and send/receive packets over it. In a node, each pod is connected with the node daemon using a veth-pair. One end of the veth pair is inside the pod and the other end is with the daemon. Pods always writes to or reads from the the interface it has got. Whereas the daemon is always listening on the other end of the veth pair. As soon as the pod writes a packet, the daemon gets it and transports it over the grpc channel to the remote node. Daemon in the remote node delivers it to the destination pod. + +## Details + +When a pod wants to send a packet to a remote pod, it writes it on the interface inside the pod. Pod is completely unaware of the grpc overlay being used. The interface that a pod sees is one end of a veth pair. The other end of the veth pair is with meshnet daemon. The meshnet daemon receives any packet that a pod wants to send. Meshnet daemon uses the following proto to deliver the packet to the destination pod (on a different node). + +```go +message Packet { + int64 remot_intf_id = 1; //remote machine interface id, to which packets to be delivered. + bytes frame = 2; //raw bytes +} +``` + +The packet itself carries the id of the destination interface. Destination interface is an interface in the remote node and the meshnet daemon in the remote machine has access to this interface. This destination interface is one end of the veth pair and the other end of this veth pair is within the destination pod. This is ensured during the wire creation time. So when the packet reaches the destination daemon, the demon simply writes the received packet on the interface carried by the packet itself. Since it's a veth pair the packet goes to the destination pod which is connected at the other end. It avoids any per packet lookup and packet delivery becomes an O(1) operation. + +Overall Tx/Rx mechanism is depicted in the picture below. + +![DETAIL](./pics/detail.png) + +As shown it the picture above :- + +- When the pod-1 in node-1 has to send a BGP packet, it just writes it on the pod interface eth1. (_point C1 in the picture_) +- Other end of this veth-pair (`eth1-out1`) is with the daemon, where a thread is always waiting on `go channel` to read packet. (_point 1 in the picture_) +- Since the wire creation time, the daemon in node-1 knows, any packet received on `eth1-out1` has to be delivered to the daemon running on node-2 and the destination interface in node-2 is `eth2-out1` who’s id is `X2`. +- The thread in node-1 (_point 1 in the picture_) makes a GRPC service call `SendToOnce` to deliver the packet to the service handler in node-2 (_point 2 in the picture_). During the creation time node-1 and node-2 has established the GRPC connection. +- `SendToOnce` service in node-2 receives the packet and it also receives the desired destination interface id along with it. In our case it’s `X2`. It simply writes the packet on `X2`. Packet reaches the destination pod, which is at the other end of the veth pair `eth2-out1 (X2) <---> eth1` in node-2. In this case the destination pod is pod-2 and its interface `eth2`. +- In reverse direction + - When pod-2 in node-2 wants to send a packet to pod-1 in node-1, the same process continues. Pod-2 writes it it’s interface `eth2`. (_point C2 in the picture_). The name `eth2` is assigned by meshnet CRD. + - The packet goes to the other end of the veth pair `eth2-out1` + - The daemon in node-2 receive the packet (_point 3 in the picture_) and makes a GRPC service call `SendToOnce` to deliver the packet to the service handler in node-1 (_point 4 in the picture_) + - Since the wire creation time, the daemon in node-2 knows, any packet received on `eth2-out1` has to be delivered to the daemon running on node-1 and the destination interface in node-1 is `eth1-out1` who’s id is `X1`. + - `SendToOnce` service in node-1 receives the packet and the desired destination interface id along with it. In our case it’s `X1`. It simply writes the packet on `X1`. Packet reaches the destination pod, which is at the other end of the veth pair `eth1-out1 (X1) <---> eth1` in node-1. diff --git a/third_party/meshnet/docs/meshnet-gwire-recon.pdf b/third_party/meshnet/docs/meshnet-gwire-recon.pdf new file mode 100644 index 0000000000000000000000000000000000000000..212695286c18757f4877a5aaf8dd0abf30ce2d3e GIT binary patch literal 762705 zcmdSC1zgnG_cyMDbO=bRLrB*QGYp`hbT^174MW2q4I&_2inJ0UC8ab-O1Fe`cM8&> zfbt)PWtCms-S6|;-}8UI`*L4X_kQj<_uPBpea}5yQxp|v2Xa91u&)&%{=>rt0=NKh zeKS1l8#g#rovmSdRvkY9rMkT2X^Cof2L0Nf`{xFIKBp0tD_sRQsHPl&P>;74MPpZ_Of5EFzT z-|n{=Qij>W?QIauAov%DTiG4I00GDWIK@E#Bo&=bF!0AvD34IAzDhP zKmjLnBcZ|z_-!sY6>Z=KDlofyoCuL|s=}P?IHfERG7&y`5jlC0I;Ipc$A+eQ!f>a1 z2tv64JU|ct$_LT{Ag0U84nd!^08LWAH4^5 z1*MS1)U^&%GZ)OlzU&F8YUxVSx24YNU6@{EQCrTy%iMMkyu}lQ=D@S0H*Q7TeYJ(l#n|4WA?8{CT#a z1TFcBd+t|cOW~RJ)n98T)h|n4^)y{E#<@|3ukTLk>O03tye2SwXgQ7dC^?T_`5RTX z-f*(41el(-Hk?BwVe<_Z(?M~E7{K+$%(qN7>#teVozTw)?jz(HO(mY!I7{zPhu?9$ zU*m-TnFCcmAgm5=N@U$l&?{GDWC5lXO)$3kO)+YRX>?0Yt--_yy_PGL_Id0d>WCKf(Ig-|CfG3lYacr6rq2inlD5x3MR*ZdX3 zNtF;kmPLr&0uPsXN&WS&JR zSusvh&*a6;K#b-r?f`6GD@6|8X?k8KKmJq(XY9B;20?pw6C@_n!zbyV5vAkE+YnJ_ z_;+#e?$h(4lrz80=SgXG*wXbPx*p(%pIM+pM!<8mR!X3^vMZnT3Z-6+@nF?8(N8mC z`Ug9E4K9Fhe>U4g zxk9YC$1tOKi;r>oh`g&#Q@wOdo&^+aP&EEE01mq!l4DS2>a@PtQ3cu!UBE^S{7S2> zJySR18zob#nu8O9`Q|~L15;sW?mcpmlF{pLQ5zaMfEBUkdfz(Q!-s~uo{+JUDqR=a z9dt8*2q?V0&6lO+6L4N|-p4e|+sfwKBGyEdTOW>tZ0_j6FePb3om|0c%iUFMGcu0b<&1#xo%hoO!p= z-L>IOru|iSUXvtPmI+@06{bk;Xwys7J7Ag?02_}c?Q*3G=WMymt18{K)*%}-h96l}xLP?*zX9oef5Ek275@u>_Vh4bNcsYd}jFF@O zz+fQ46g!=K0P*lZkOQfov;=c;ao+i@7YM?IP}F+IlK|l6MreDOfGaUYI-8hBiIOX9smUTpT;QH7H`Yw6IOn#R1dJb|m*18HxWcqkk@*6BqTncz(4p z5njmk;`xEJ{}st_pUnC%_UF$e!^;Oel?)j26UiXm;xo(ff9lAB0l?o} zS_lC6o1Xi3Jy{_uE4UrPvj?7d;~=EF3;><@?I0va0MLoweiBXqPGScD_eo1`WD~>^ z{acq9_;32eXA~Rq$*0TeFPvg-2;^8grv?q-6vtR9%r>E4*vU zd|<~Byaun)|#SC^^4QGYJn*I)Fo(z$49#q?3|*ZV5@AH$~Fq>9qp z#43l`sYHli^L`B-L{Mb_$?XmD{(;8rn?&8Uw!3UJ1XJp1&%VZ?x34aMDzyul@O@Z_GRAV2*&&)8YLpPkXSf|3 zqvE)qj7cz`qTSRGP^K3OZP`zed_+5zMQ-XxT&#{s+hnvLk~(KJ*ui6MCTvaQOi7cr z9Bj+F#yxK$&FOSOX62WXh7Xlfgp`J}$SD%_ zAvzj;|)GpaRpDbo#uFX=0rd`a2#arWn=psA83PjvxIw(W9F%OhY8|JJ6&2~+ZsbY==N zcfXWeVepTEjTxKN<@;YQ@PW~$dQn7X<;7zRzwy)D=tXG<#Z|%0tcvTFr<1DLrzq2m z(NS};K7g&&2iJ(#N}P!qlF8#@-&f^nH@by}=lo>I21-*FqUgLlgfZRo(?9`fx=z*d-$n}H zGk%E#!Y>g)_~QCDrvKbA`OAm_$n)KAL|URVhWa0e3<$sRN80|{GeJ0S|IBAZgfqWK z4nQcF`$wPgkCDS~o(bqjpAo{ved3t_LExYHj7S51hT$J0h|}0j*3`C6Da+C%y2CDBwrZ{(7_Vo!M+4(2oHc^oKB=2MGDT*}&Z3la2J3 zVE_;C$IS)=BQ^s&2;n1xczJjMP$(ieKNF!Lg?xtNV_*4{<6rMKFqnf25#jx|+mL(j zpY1jfQsW@F{@aiW z0TLYV!GB4eAWsZ_pR8kjcRE?W6c>aS!hz7jrwaxtykCmz#616%f#5l_VE$y2|3h&h z=sFovoDTpwu}H3CF9KL5Y05d`S_@9k&M83TZv&(k&Xf1>=p?L69=~rBu$^BQC_=`=gEno;i9)W-**n@ZTktlLh$i_z9ph zRvMYp@o!8Dr}$4a%>VrbjC8^Ntp$9>Msoj8{h8nO?mwE9I|}+{h)^C85hJr$5Doz1 z--+Y%Zzj4Rbl|_Jh|idGWUzd?w0;figLuHm75N?3AG@mrAK@i(BY1jrYf}4lr8ucr zXjowFt@z>x4@~kZd8!3hR=wET95@0}3sx?C*}Kk7!mJTx1`Q=BVO5kMVz%Lpd%hN% z*a(M?jEIF<4aGud-i}y?W#{u9Jai2wbAJMV5omG9r!k%#{>k#)75B0B;?Ij$H9(y_ z;aIWn%8ianE7mm$jv7Xduc)k3H42UxMw3;2t?!Q}>xpd(+Q8`Gb*%IlW8>iD-QFTM zPF! zIkJ-d6|`jY1qFw#&bFXEu7xTNPHkFhf`}|t72dE6qB*nbfRu&6ba>K)74&)C!^#fM zC)73ZYiZEFHAQ<}w15P-R9dpv4a!C=6JP z8jSR~mbYKsZ$A)u0mlHsr@mORkz2rn*-JRoZzZz|pjYWt4;c+@tmC}7hnuE5)sW4Y zz}jrfqkGPlFtqImr{CHoWhR?*h)$k~PF2ODmB>xj45jp_oukAKeXEp;o1)R0BFQ|Q zONSLW_}M)4wUV#GKvjjo_-BKB?R=$T2e-jV*PPDK8-zQG_C55K_pAVt^W{5-rH%Hy z%mj4M%>xF@PwLV5pK+OlWOLOI| z@SM+&7tm=At6nfw1T(4&ZNX=qm2bO$@jh6W^(|{B-p`p`pGd&uRt8UP-%%o??u(Vr zPUoxUC}!MS5?j@SXOuq^Vtwv3$lU84)ObD8TDa|1OtS176DIjS=`byYTBD}rfY(ve zSnNzZQw5U(lKg$#!>e4v>q1qY;aSozb2EyhaHHeaSY;;5UWLztUSFwfv>~x4j+DKf z_GWHMx2FExEM(jCc2eOB)jo`}*ibX29eJ_#rXCk%?h#d!FSGaVmMCf160-=%qLx1w zDPX*GPWy_Jr6&i(IQ5CzqF|%e)eoK9k9RY(ShCq)#-^g_B!w3 z57@;@9?O;^7HsZGG1KR2L6zH_tWS2`+8)M|uR(KHlqGCtgQXj{v!fk~U;1h) z(7SD11POh^q*FIX9tD1-8$y}l+lL=@-BzW06cr6(rjy)}|A{W&MtNIHTemm4(N6&2 znKm+oQaVdx#L;=riZyS^weO>f5bKQ6inIleWLbkk-CzM>a{+(DK-ep^ODXL`0-AH& ziVR~N=$hC3*H}CfFyRffn0%}L(Jm$TOcHO@Uai2(lkvY$S$+NnwHe2T9}nZCHHGdP zfa~G5EH5q}p(Rsd91s4ox!68tt!WCb#1J_XxwGom-p?;(IFm{bKha_PsszluqrI?m zX-Nh;uI_$wEcZdfBm9C}*wFcdsIF_))}*yf2H-~Hbp>bA`xWQZZ1|5v@iV><&mN$X z0!yee1WnCc%HIcz8a`>MtgGXHLCi6_1gPo)34Xz@6I!Sn( zBe1f$^@uiyi&i3kuaJQEY5@AUhB8(Qd3WbPN_O(~%#OTdqFT+vN~gkMqE^y+Wu0Zh z52%;=M|!C5E7ggiqh2cNfSw~W@F!mo#nus5CFdoY6vvGBCtLq#&7-C?c6lwmFRV4)OYQ%+=EK~bf+0L$J&$gSiG#*DCGV8xy zV(WuihbJ*(`f;0Sv{|tPW%5F?NMq9!1HTMd@yhTw?nws0Al_RI^#s*&WbnibnMP>O zB3VCHw#v47%`x*omKc#M4v-_=CA6@T>3@8;B@h!>-bfqJfb!K>PAKYuzJnJ5Yx=aX zWNHsFc(N3)JgqlQTiI!O0)0}55dYgv;Pm3K%dJ`rJ3?brEJ^#4!-@Aqz2n78hWBON z@)NY^2Fy|~cqZsh*Y&GiizZ2@!oGPWed=-tjbczZ3dCKif8rhq5B66qkI`Y-K`2c(?H$Ova zS47Wka1b)p8+tPuL_) zpse|PNVSjusAL?MF)A! z))84fD5ETY=X6_?7bk&~Fcszm=xlGr@&IuVl7{!XTq;my9y-7^Q~_L;yWWvD46!Qd zZ{I%*08o6`ZHW?Xjd}i&W?tSF^SUm)CN{HX`=iR&h?kXxoUvl$x10FmV=o#P(!Ui1 z_EdteHl+{o7akgT$IoAHV$oex!8mXF)Y0VgJfJHe(}n0hHT$O$nupRMN_pi6=eO*d z2_ip+%gJo`B^O{oq{A=ATl6zNv+uBd@0+5rguBOYuva26Y^_a^+$+JgJBFX>rqFB;nMYo{?IL1! zrxzP87?+NgS%!)Y3%<$^H06Jf@~vm+ei@`(&v_Zbr*^(c3g2Yi z$%JXwRDLM4MpcopAKoNj@IILHSiaWWTgM`5qyXx^6$R0v&QOC`DD zx2mUjgj?_Jq>vQQV%>mqs0;b{e23&3?gNlj#JQDx5v*rv7Of*h%`RQ9Lfb>mzn+M@ z6$N%@B$WBU>fjg0oSHlsC?9@6IF>S_LT%g<2xcB+(ddj1eE4ZY=UyT_R7Y$gZ{_l3 z@Wn)8)R={e9DD^czb=8?oF@iJAY($fDztc6H<`i(gLx3|nd7a`lMg|p5LNo!!c+!4 zbHnputT%;Qf*#%(4l2f8!P2q%1fNln4flXOmy-?CXn-JHdCeFYTl-Mxy|GBQg=`HFeLdLq0e+J zo%`ttC-MO5)I&u^glDtk5DAf7-w#?&vkiYwc$6|kq!*gnIkQXtc1mcdhe-26q2YE=BF*tPNa}mu7qSg<^m_orsUN}(*8+V175U96ZGTF_JjFFcq(qMg zJfIk}#NX?H>9kRzMWePTiFdIZ7B-80Ihzk$OFk@4MH}A|Ogt(gkJH7#7Z*6S> zvpi15JQI;4M>&1c@ALni4CJZIe_y8OkB3QIe>zM;o=cuGeJaNvj&8X@d>q^W9xyit zB3%sv25}(Lw|F4D9AKV5BOyYkmlK2x>`dWSh^q%`%2LPwGnv@gS=;h+avGc3nb_-d z7{Dz#tzdSJa2s>DHK!%a)&%j1-N4F}Q{Muv&uPf52jfA&#N0+;D3Hs5OJ5Jji@1Zp z4K+04(l>+{!oWZV{PDQY6JWI4TmwDP8JB}W+@FCzkr@Yn&pimrfjB<=P4>qxTzvlzaR1w`|4nUhn&?>>TEJ{h*Txpp@zqP?j$4SevT?J@b(TR9)`|~JSX0gk}LQOaCBnN*g&mLU)1wkvJB76@AoLb zSL1QK;ZW)8ye3#~@uG%%C@#BV`s0}Oy8U(yd7DxMJ1$=!9q+6!w|?WD$MXr3E6IuC z(T$D{Uz@DgFBpCkpuQo-mq@+JTizNf@53^Kk3Pf@tsVQ4vkeULP96Btk}F|-O+t^T zZolrD=0vUgVbB9_Up{r67<0?_^ZrYTej6Z?fd3xbxsZ4syu$HGyWO|&e*@IoiJok=d)spUVkCo$asf4P$w8?&NZGA6iTeDKTM%`S4_2*GnoKkP zy%f&{7y)VqJ(icJ>S9_Xg9v>Plb_D068R*$d^3x9#%Guo_dE(ka>>F4?jZ83va{>D zn2A?!W-ZdOFVWSSPI)GNZQwA^W6LD>+a4ziDU1*vA4NTf)|=f#aUgUzCfh@dhTP8I zZi;F2z0n5a)A$~oq377xolT3kc5gYz2|u7IHxeStEfDgh5`;+w&kbcygybz7hkWxq zQok0JE5Lw_Au$jKms#U1H}tPEBi|qqV9f1h_7}e_+oLdwF<$nDSi{e-?0pi;(*hL! zBwoB%B`-5k?olRTZqsKxm>E_a{wz`4FxTW9aod&9J3&yrA5bRH=QtY0sm>=}sO)3>+Dc!y3Esa^!NE67|>qbLQXh>N*qPKs;uK>g4 z+~~djbLYz^;AUNDl7o7++hi;EVQMiIkMT-T-|=%T7uBRPxLGf5)Vv6MD@57PePMu^Uo<>xTb9s&+aes)K?)_nK{ z)vK5HE9Odi?X9%yu}bz_YAQW(_dZ~n?Rgw9Bvwwo(@-=oF>6S1u-CG>&4oS4exZ}l z_>z*@Yy2zPD0yhFdYxWLk&IWjYYJpu&haGIA|gt@t_sRR{YaZxYxJdzH7k|Aj9`96 z!C##MXPUXZ;RD)^HViUma@Svar`z`eoNR;!-EnmOTMa%HWJ3-0D|g3|uE@pgGaA@N;#11Avi10kEKQ%eMNUCU z*wsY6Gz>~B#Ja|V;*@o3>{?~y)>*_nW~sXK@hY(`ZgYeRw{Z zmjXx%)T;mj^jU_SIl`dkr-R9^<$7ua%8r+D5(H;MsK!#nHUs>_c3mzU1W-jT4XVHV zChGUVTqb;k(aLh>L1S8lm*pP3XZnfj`>L@khviZxoZrUS(jOdUt9aY*fNqmv4Uf@i zqzBx-UZJvA>!}tm(L1i`%7*q_>u6~(=d4NncF2A_JVog?&1Q2~uh^(6&Z~M4v7wyWNjV zBo6{3a^9;Kisdfvb-~JX?@z$*9Wq-B9+f|m5ENJ9AOUL8%3M~HsjV?HRVRFV&R}aZ zrSII)`MCYdIX{I)kePC)Zou!M`L8aeLH~e~u%BGS{10x6LQVjOU))Oj@zUU*@Canr zKau)N6yZBYq$BfipUK|DTLjUq&+TUCpMfkvo+*AbU0_27qr(yr$ z;wUo3@RZk|fCoTs-s2=O9w;{l*LU=Q7vWGt{#P7oM12C-KSmG!94Ua#z(L5w$-iLk zH*f%ng&=BD@NyuovYl}H|0Hi`(z_8p{`Y*$U%S;{2;UzL!{@Y?;Z&s;kE{SksP}bP zE>G`-X|B##V?N~_0Jo>gg_C@FdVP|_lzmy>-2N_Kw$ipcr*ZScz(RE*W-=2G$pZjn z)_NXF(2?EwA_p22)M6*%cDS+f#fba4_B{9ImlcD&{hgJWF_xPTpwBs@!rPPXym(mh zCI69(dkbTM>(>azTyK)nIX6o5=rb?e)N0;h{c`o4-eV8o0Y2NOkRUN7LRj(ri;lSI z^&UNd00KsOs?db-7vbDN7FA3dUDvztcN81t8`ow*71*lvdV zhwY47ZwPeUD>2|AC;*Tg;2S2OTLbWK;4NNE(c|s@;DKd>gC>S;5$K^22Ww{FTb*dZ zx^$i~_yWa6DFy;!MN8`U7y`I9yLu3fTJrH1Rc=zX1qqC8d=ztS8yzT3!m+eIHt8d; zAH3zb?Li2`=i;a1+`W`*SqoOWW6BUGV^h zLDDg{dUXGA!w0;xs^cllbXU_7B*4~bV;ZDg&BDFR@;!>fm_~Hl;xQAkoXYPucR&+N zGI+1B@dij<_sW%qHnLK`nR=B!vUwxSNb^dRXyAp`g^%KHnu%iJl-QQ=qJTQzXv4UV zbnE9|QoXpu>U>-Ck;nO=FPAku9#>R9Sia9w=9>^xUHOl#+xM6>M(u& z59yxK?^se$3Y(#u(x4dmNi@m`NJ{TH+p+4QYq!Mvj7zN-Q&MRq!|B$;(lh`ds>DmV zQ$`$&SpFqwRy>4(6>X2gdt`h*Q5F~*qT(`}Rda4V)mF)X` zAW&C4a7W#gG-d9-zb07Di@qq>{G5|5=VUuy`nPea)9!OBvHkcTqESue%4fPJF(OEoR8Q6Ql(w z<(X$2Wws?n*D#uqm}xReeO-C=1_oZAUpNJqr4r4AzHE`Bcfm%khpKPNNH)Iyli+uH zxXs%wBs*{IGO~p;vYgRSw;`KJIePRWtp|vAFLM}@w72_Yn_pAE6y;!NeH;$Re^Qeg z9j4fFn=0`gtWu+$;iXZ!weuJ2JE&S~PX)S^sEV*k)$UTYHB0h4y0fqXgh|RZ`q>|4 z>O0|KwlBT9@CXYqiM61<~FC2P%-K;tTZ|OV6ZK@2U9IZlE3J! z`uhY)n0x;E^dC``*u0+vGDQJPBuH>*ymIi(+OjMf(UNHIVfN0cq7z-JFu7AL-YOQx z-y`K?(SMHc7Sqv%IF87-SNF8C&D@h-M<#qGB2 zscHp25YyFW$vjVbn9(86{KS%h19dSNT}q#-%dqFQZf7KFcDrsxTl@4h{^jm_vIP$6 zo2)jDx67Rw`rEqX@?#^O77`aJEOL!TTwy7a`(UaWd!bgkIipj~>)8nAL-UoTxt_q0 ziElnw?fhf@IHlPn(lCa!iCgh`k3}>|yD2DINy1G7E1$h$!v9>^VYN~Ne(vuAlrs{} zQBx#-yZr@}15xo(h&0ql|9nvtrtx-ZkC_oWIb2CT%E#L)UCO2Jiw$9}yexLEqANSU zJi|*)6y6j|$#^F9{8%{0bzjlCMzY8`jKP+R0hz&1Yl0ejaZ1vjiP$oa-@vV}PK5+G zPK#BPqWRAXZph#8KVG;SJj6Df-AOv+fSVR<;X^?WD&cI~0 z_@g+mluGeiaBAcBbB}%Br;iAFi5b2m)4o@XB7M*r7Hat3IzSG*7j=y;5nM>*+0xJ* z>eC`H!Hve%{XPkhTHMkuD6}zvGR2kiW}RJBF9?`Kj-q90Rug{Hom0Rw8j#&8qo{;7 zUcubdN>}1hAjV#%?jK{_GnKzVk4pr!9tv)t@QY}=gA+tc!PxcbaZJ^W)y3y>{Ey(* zr+p0Fm3q(jt0cd%Ez7F6^lE6{w!*r$m4>x z*jny~mwSd>4HPmL`)C9$ieLBk>$RD_3)P~yap_T#oOrrTdB3_roy36xGuKtBr zRAuOeAUx8ns-G-F7T9NL7-m#>hGix5hS?%Gi`=DJNgqCzA>9}GJXOq;I*k!-mS=gP zGfPfqG(Nkc{?I{o#%O_nZC56mN~*g-%973o3mqk~S~jh!X&^2K$hBgwt|psWBGzg) zqL;5!r101`6uN}*h4`FDK}=ToD+wC*u^+FN2hDJF_TRu0!m1Bf4m>D!ELnByB z1BknfuH<Y1sG)xoEaMeS5<>0TD;;4&og_S*)+2 z3BojNq%X+GM9T^`7o}Un4$I!RWbLhWU{Oy<-z=%WedPLeGy39{Zy*M;b*NU29O8@I_Is)g(Y8=q@)ukyIRX8wtOxn4M`RQ6m4U>QP8l1|~Q%icId}=;iV& zrI<>ABXsVBHuv(G%kr_lbb&KqDrly3v0+c*at?!i4rRFwC5bS=7W)ld=>wfiJ&h!Z zRL|$1pHm&&tuLwCPj0&gK--Wk;rPIp}CRms07SGBeh_8H^$^Ud9A6= z5Let9oXy1m334p0{cv{*O7!)uZIWg!;HsbmT?+l(MDyj$KG2kq}Y6j!;XM923CL1N4s%{P1hcRujgCC&-Dl^^o9Yoi2FdnHH zoo9X2z=wB7YS=4RdM_(4v#;|rt}pQ39A>6IzCB6^iW+-2YF`nAi-Oc*fgWE?R{TQ? z*T!st*d-zVO2$-2h9WQeQs%Tda#lNPb5ev(s({4)zcGAR|g zl9Rl{o~Fkt6iikf%%>y4!zB%%v2?h7G~)tMe)4r#)KLe|N&_#dnuwr-5)`5#!ckXm z0l&YT7H2|Y{jRRw_0 zC*8Wf@aR!6CjDmNLdAi;(O83_VrZ))0cNI~2r9}d5TL8*Ri^gdHm=?zwm7zaabjvF zsN%_${!aT|4VRX0OK;W4H5RWi20DA=4>)uLyr^~1{s>`|R%&?CaOv`SyOR8P;<38q zgAZRMVNHJGF4z$}5@t+hH%ZV%OxwZ^{HzDDKXgSz1gsEk7?Atk6p)!CgLTT69?H{w zeVF}D5R?T)bV&c!XZS|g3Ya_YSfv9HTfLaA^1GZqiAA1Bf}eQdW48NVTe<}qquSQwlVlHdv_m@#SD!~byf zb@t#K^ZkUvx{}1YbS)dPHy^(4KG0xu|Gdf^WzCU8x@f#GQQC>w@23C>)QM6iB&H4cxuqo!9emnRB$B9G?q&M=Cl?kXf8#;jI;M z^MT|e!`Ga6#Uzq~zfhr){iNd^t56+45){S&v<`EMv>AYLQ@VyW(rUYS@(-A;^BD(3L9C z%_5X9lfq-OD6QGwmZD?V&^P_MH*`ySpO>&M4ZbbOUX+8I8M4cim9vkxD=A<_1B$BM z;%XX`h7*rHgs?R{Wb=-;D&B=%O=o=Ky4s?2p?u;%jw@+QPTJ{Eem~gDF^(>z^zM4c zg-Ycn-n?--6>w_&CE`7JlK7P^VO7d#f9EkNcXXZHAh)ceClXTCOf&NQH?E*d*!JmE z_SPy`jK5e~WgX1ge3|Dl5V02Qp;ncMN$wonGSy&qkM?28*DW5)g@c7`KQ`Lj6>*0z z{-_2{&dz>92bPfunVzyY@6GY^3R0@5T8~Zz9yR%?ep;X8qkL31E&PEA6+C?TmR(iN zx#BkP9zneP&c#+GrSom zr#=RLlAN-+r_NdPIYQaJWY(q=jTJ^AsOpwi_K_MW zZQfa5+1J9Eape*-7G=koy|F{US&qj(dw2c*#~V{ueLfFg&jRo>Mpx@J`+D#Vso=Y5#d%2ET1QI*hp&fNzx8!hkJ54jW7qE3Q?XSG5%W zyBZ`@SZ6%>Bzl@?Zs}9a#rR&C#|@Vo-=e2pzVO0Efx4GK_G*AvWWvDoO9N=mN|1IP zpL|ybRd|(83*eEYhWt;V&_o=K+O%)~sy{;W-h=t^I^$>^)q7WBpt#Ezt z)3e}S>%Hg6Gn<=eXqb#%!m{$QY6&8jsa`pKUE36!vk}9DR*qfBK77N&=p%!xH;p;; z5!Moei||+R%Dq-I{jxldw}U+FJ0)oKBcJqY)*y5}Z(|?Te0tD~eQWTeeKGSl=5ur! z0tRCw#_yd`tTaOy*TW8Y^EVA|5l49CvSWM|Hw$}{SKU5tZ5Qhs5pdCqGBM(i%y{dG z&d>4KKixh-CVHJhfPX04$NNV-_PBuCe}cxI)H(PEXe=_%?Z@meM7@dcK-cfU@vqU? z-zfVj7WxRc2?+9g#fForUuR@;-1Sei{!Au+ zB<`=pa$M=;_$kMUeTb5G&>sPE#82OA>LE%ye6NoJdPB-}fJkgWq5#XqeM^SD5p>QeY5;x0iKb?f9nGLXK+7=7lh1_`+oPWT}uZ}1toHa zPOjbBmg49jIpQewOS%3wSg!q62F7hrl~O2?7|2pQ)Xrl z^(-xA?l_8$5blDu?WzYcPpmKoRJPlpU)Nss)a=0PsO*NSp51U;)j8bZT}dEV6`!fG z15@nXe0TT&JKBvJ-^y2E!YxR<()lsM^3y)6t_lN*D(XGSG+Z=wa@}4sN091bf8VwD z=n<_n@Z#e1?q~lP2Q;M=at2wzHF^$knG@HiaW~b))uBU%vVw`igWcWFi}`!2vk`l~ zomKJc<4z{{J>f}y^73M9t6qH9Z(gh%U`+VXaPvvXJ1E$lPjJ|mj|E$kgvK_Cv8mP6 z&zrtRvkCJdr2w7+Q&!`bDbd~c(DCvY!R?=OB<2q)zj!HhUBom}Y23b{Ba6w_O0JWB z{k#+RBuSS31L0Q}_rHyq_l6AaX0_PyJNw7(5rnrC5^v3WPleGXj}xs{mvBL$dGtPf zEJ7c8wAva797e?)QRY+XMXg$!8L$_tsY@E|F#4aaE-@JqJv{HJ?DY%{GpL|Dux0)0 zb^atG+j=IBP}NjEHLfCd?yF>jPOx_rJ|^UG6gC;?L=k%0v`S2}LgtO{yavC?+ag;mVZp(RI`64H6F~< z-V{&d(z7s)CKSqc$HJAwZ%s`#B@D6$H}M)B)1lM}?_a4<9z{Awq=VzYZ;~m!X=|UQ zzlE`i9+*C!b;l9UzoygVH?PU#NZt9U%5!51AB zdTU+0OfsRB=YWT>*^N6vi(?hJWkv&lgemSM7Bujf5cHiG!Si_sCV5&28wCzFt2swX z_+ssxbb1wvPL(>qU}KS_mVfNvdYmh|UzOTtSWawRWhvhQ4|u{NOQ-w_<$}==>r9fu z#yzom`18no+|j7SxY^=NtD*tyvLa{p$PeaHJ`^J%1K5)ALVS=PqXD?UzDq;kVa>BE zo39;%yG_amZC*QKn+ljSWxg`Tv$OwFYP;FW5YE#ZVWrYrTiZ*$`C9fXwy8wsCO$Yq zZ2*7Us&vO3emK9b==gCwArR&8cE0Y&VaAisDje05{W=(BZW+tfpk#?lBn5*kOzQqu ziL~yKMTkb!Ffk3XdKu)=!oz^~mAL{MUNwpjX|e<`z22roZF}zbk|br-H7mb`kE+!&{y;tHG;}r&f%%8C`>|v@h%}23hWaS4O``;Y;mV zb1j=ofs5#6whZ(i>P#M_?xVy2nIfL%JX5Ir#MDmGJk{+V51FRZ1(GF5mDaVQy*6!ae=Ru1}jVKHVDVtYr;o~US*OCJ=Q-Ov+ zp1o>T?P5ePYI7Bh}-L%FW z6fww$l6-lvjBu&+XYuK+FeA$xT``~YO*ZREkj|c`jgW3S2aHd6A*1iNP&QP}*Z^uI z@nj0RB9*W0dqo%(pFUY)c1W_N@N(m@kk4{7rD|?446EfDgX_(~i%-Y-XY9stohBZL z#Pu(wuW}FKUmvC?58$P z%FSMHSjF6$ewBvLAz=~O?CE72Rydng%77|kltN3;sPZ03-r z5L}TA+X1a`ZD+_fJ&_E(N8T8zdG)$$mElUW#ykVHZRyn&Oi9PbmyLN~eMLCYDB4RF zmxf^VB5Q0bl3fPxa_M?!$IsIto_n6oNbLDJx`@_y=M7YK{8q;Xcw}X2h_6-PGGO{Z z$1clu<*TxW(kkze4r>lhIx|ghQZR#VSNhy0Ect}WEZoiabeg9*cHiT3+-ca?bN0?y>xa*gV{ko*>iEADDeV|eV8y7jn#>r(f-SAEZg z*t|+=c@{gRi*uv*WY`_In?v24g7kRUK8C}E(eE(M#{-3fA&p~l2$3$_GeX_gK%2dS$L zb=-onfRcv?CY+08Psd%#W4DI+{l4uBQ#*X*sb6}xu4)PEV`*!6^BOdVqs|H<>t217 zAKR3O{^_zQf)3vCUyVigh1BYT_ct{ z71js0h^^AiB^Sv#GtbQA^M=WI zp1CbQSR?%)6^#zhgy)l82ex^8POaK96iYi_UWPtX`nZ)ZR^Eodn`qB%z@EoWdS9ExkSjBPyBDrY`rE@S22$e$Wm zPD3G%bLUN3Xx>|=DOB;Gx!%tq`W?21SL+n!t$qrDAd5QvDTw$U)cxTv7yR(23sg-J zR~O`Aj>>RLJu5{O_WuwK;rS~xHSHmge*}vl3M-zJD*dg(;%}iiqW3W@!gKPM4G_be{mTZ(!cM0``ind# zUMTXm#1Daw=9ujW50U$x>^F=X(oh~b*Nqv58H#&W$~xhi9UBmWPXb*;*GeCY#*6kv zAANHmJBQU`M=4?#BmYK{9+QpqU}L1gGi_n{|KseOqD6_;E4^*owr%5V+qP}nwvDrm zvu)e9ZQFfv(;1zlZ;~GURu5HU)T&x9^IzYb^W9c6+UoiK=*&Y0{lJ6MpeK7yQEG3;(lmu zq^IsEswgT8U97a0ocv=AXR?tjU_ajgJDX=+GYn_8)hLN8sqUT6D26gb@`a z(g-=6Ib#XVGY0}(F(xnT{5ZD@$I+0ClP7uj-87u&O43O`Z}1-eKK$<}tKeuzQksoY zDGJo`PsVn2KNx#M0*_>}FnExdRd_qG%SXhu?y~cCO&+@K+KP&6(M}VZLTx7XZJe9k zP9jKlVqEgu465nnhS;bTmYYU?unCShLtIJmQJ_ZxIHssq_W01+7H1x$%&h}|E@3uG z<5U#RI>^)S7+eQj2{QL&=A7eOR?#IgLq2t;)w3{_IuWex*cv(w@Ane*>D7E~xI7wr zB46nQLxLy53%=^`B+pdM;BgGl@(^4Ex8-R)uYS$J1;a!C-*Tjb39 zBuhL6a{9$}&>w0s1_GYckH03`Tb&v-4lcvr-KI5`UN7*lYyI$#kB?D(X|g(wuxw|Y zqZoB*)@pen0p>;`m~s%Y?lqc^e1!$S1;X)b*LhvX5i6OP24M zj<%h-YtyQtwr|LAVy^d@M=C8$EyTnji_;R3@&qgvB98Kj$N;M&0$Q!sz+$VF9YGr} zR5(twRk07iq??o8dz+`XF)&4E*G*o^(SXJk(ZJ^^#?4CSAMF+t|3Su3AK~o4465(! zI8UIXB>vq4k2c1#Z^1!H&0@EKIf`JppNKjE2^`@i3z*c)`|Sgfp1fNc2zr^;SB#-q z^b3YKN-VOyE|uK@41v$~Sl9$>Va8{Ahc+yR^%pfx7C!c|GzeRfl+(fp9C~&Ru)}EH z%p@h^9RS-G2=dN0QRT8!eDSYFm`c8+FLq`<4saC$c5#%1h=+Mb*Sdo)PX7`-7l{Y) z@m-DQ@+D29K?KP$;kv`|F%#Io3P4D}AWEAJNwtyMF)A+3FK-Xj5-c5g)rQA0P!>yd z>_y>lY$}p9N4>Ys0?qjWv>X&p0K#@imBc5iTAa}of+4meJo3>w2!>_y0ujnleuE}^ z)}crc_O^ba>k;w#>crGTQ&_PcRH*A@o)WYsF>Izv?ziGD)e+$QAFDq>z<=Pz2{d_w zCH&9|C9st>ToyP7pJUn`FeB)}%+CFHY2xmSl}L>~+4U>J{n-bQdG+(N$Ei+Ew{AfK zL#dkyAEViaSBHO*?@Chg^htq2_#QWkz{Z}@VJqbapr7||={0}VGTv{)$vOUUadS5@ z_)56)cmvlM+o?7i5K~>9B3Gt~$557fZ8mP9JJdj{d6;3r{1eLnQqen#mRP_!=Zu+7MrU#E8LTZ}BT5 zV95(il{8)cLlZcQCn#Vk`5i`_Dgfzm_$gbg4XQMR<&1K9(|j2u&m0@;Zz{V6qGGkG zFjT#zVz+8e`P9xDXW7RQ>1I-pk*mblCjfjWr)lFrNba%N`(R~JUVNaDDhD^O0e_L> zewUSH$XI=)pW(_4k*nx%7-7gy(Hf$IQKyz2g(6ERunRwHdmOE43@GY#_TWA@-o!-R9eJhDIU)_wt7goX)#Y- zg9;M5?+v<=bBUl%t^6^n04L0A*rf0<7VT!@ebyuQm9Q3Q*5VB#Ls+|>XiO@b@H>T* zRf4H%AQI-lVIZk0N+3*^I50AHe6l7Od?3i1dCB%ub3dR;^Sj*8#*k=oWHBM+E=~41 zx2<7Idyt2<0fSGx*Be=gbRB132kiiLA zjL%t}BgFx45U(0bdDEm&0#XdjZuxiQ#XYam4eAYr+gcCTxjAHm9?5~aBnh$@gMZeL zvqyUDxvswR$5CCMr0+rkU)dlHmcBXz-kqHB%R%>v9bx>VZ<`UNiTQpuV%V)9`s80n zACxb<9ThEzqg$%MGm9Qm5BEBCq5H}0X6{D96<$|q(7@Ud4)BVyfO=Hh~uY3}v^-85_OyrjaAx5xqvawGUSi_61qsg{}OnK%z7X)7Z#Ad`ALul)% z#Lz8I(#GDcO}N%!!6{6<$d;e{v1Z;`fRA*crM6R+5mvpc0DZbDVW+|=vQfAWM>i42fSnaOkUQIOvEJE0 zGV2ocp+*!UHlrcC&>I%kJr2?u?$Z)!2apEMh%m3Ci8NC~DkO)F%!~h)7Gi;n8bUQ~ z^3?Xu{}n>PXdss8Tx3KtFj5SX&ePs0q6Xj@vf{?LZL?<_^tiMjg`8NEZ-f-;DEQ_w z4*q0%>_9FzaqE#r_AbD!e-9YtV`bFnA>ssT)J$ZydxGYRo9}GcwDFaL{4NHHuM*ym zXN55EN`Ud%b8uB68+`n1xt8_H%42=D2}*${POfP&QD@I3M7|FuxYClliL-6`k^m1yVdEl=aiZPh=CWV(BLZlYXog;1r3+T4@7i-Y}*R#raDVcJ2^n zsCJ50s?22AAsy(=w2w`&=LXXa)D}pX`jSiT;NxoL_+run5+prmo- zd3Y|8CMeB54ZqJ9DcdTQnB*u4Z=1f$SN4HQ6&c~jurJG!FZF)+mwCdaK>a=hKB`g& z9*}XZ8UbkzKLm_svdDc}p9riY^Se*K(9W1Z*j~30-1M8qBavlTGMfr*QA6c;DHhIf z;HQJl{g~kB-ZkseK*L0S|GFSWvkFPFZ-yar{fH|K0%9g6^9gGEYMiqD6fbX!lM%2K z2`VlZ8JVq9nJlSk=qEWYX{460pZX;>O!&DMc`qJ)P8%s}P$7_O>yr~Rg@XAFhwats z5YGSsZ}5cPR0UcFHrotS7zn)H{9-g?BHDL0{uJ6~X`8fU(jh+qRyQ3{cQNK;z*KWs zO&KR}(b|!oyjiF$9Jh^uqenEb_EI`h^_W{E&!#&?H`F9|7+&W=EMH!8} zQ!S`eliOt?PLU zdL-$dj8~@J?so)Lbk3Pfot#KcxpIk>61i<_Z*3L1?kM9$2EI_K+^w=qW@Ds0(R59V znC+mPaH9_jA`njkUuqnh-R28#YBD%Fzo^y1Yn70(g@B(0g%u27+%|dShN`k{>pA%{ z48hO?JWVB=QU5oqrIdBj?cz@{N`h?11uNH#(@UnSs~t%^q-{K34k><2O_4hzP{syp z#{(3M3{a`5O?f`;Zaza_B{$QoqxFokhe>&!w#vJ#AXRGMZbm`{b?C)Jq$E$Q1-j}62WaJx^)Te8&wKAq5*jFy`YI5`X6Yh>t$R%Qp$ExA z(77O2pb3N=CHn;bnEGdH??jr6=%g0>v9tD@)_H)S@VUJ?GZUYgnloo-TbXhNxm8oy# z2Md)AgHuy%0~>7y4X)Kp6F}QEY8|(hW(=*{Dq6%w@oS%uS+7v|;(MGiW(sYyuiJs$ zEq9~<6qtsR<;$={0g02aq_gE^yc@L4myD!kg^vK9WA&KOvQMB}D*WW-YR`W`X&Lzh zMB4QSE)%Uz1(^=Z&gXM3bB@~WMHC+W>L3hvhIx)48>6bJGjylS08rFVeogfQkV+F$ zFGrIBa~(97vu*i@5-i{_&qBE<8c!k*_}N%JK4PZ$5;2B}JuDJOOtk8CB7)j>=dDXv zg^0RJY1`&}vMNis#@CbaNyKLEG$Q7vN!}6#A<&PV$_Vo9m7~IniL9qBYcPVk9#6bS$hvL9 zR|z5%M%Mtc@nXdf>1Jwa1F!|wr%82Wkt7UUWujF<^Gw4=G--;2)*`$QFU?xYEo+)~iS1|m2M(YsXtHs0eY-(%stJDo^kEoxK>JN7YTqypInRJBB~S+N zFHis^_)2hk=ez>(zyfs!QkkL4MooI@;iGBNuv9$P4-r5BQtpfI#1|ow@X#J$KBxq- zjO&<0@HVMFH>Wfq2yfx_m0Uv9F0?mJZql;AkF%t%0;eJdMXy7LO&pCvq~rrOG}@`T zKU>UF@cZ&yj;0erdU^|1l#`WNby0D`N5Hr@lMRBbsJY&Ch!exgQ`R~FhR>^OcFq-p zJi;H}3(XY0y}zr~^ybK(N;l-5Wu#ggW=wf=HB{B7kUGIc-YhrqdASDCDnS+&j8eRa zhzR>B?}BEYM}OHZ9-)wdDXrugsqIQH(4-?lSGR4CEXzG5;#Ea5|A2Ndo$A2pK@hcu z*Y`?$W!-KA?#soZm1TWryJ4N}S_lsMFxye}viU}Q{@!XSxWaYXZl-N(wQ*&x^xD)y zyv9ZDAX^`b|6MthZ$tUZ<^A9}N0G(0?t3#E^BXBM->7hPzS|2?s&aAyJu9t1dfn+( z)K1cBhZJ}6>^nLuR>^xpnSpfBRy(DP8*#O@_FBcZoV#H_(&wh-Hr&-KQv?sw*P zjnKn#wkz6|1`F44B)BG(TFym|nMD?+xKcV51wZsg*KkJoV?(t=>aG@jknW8{t>jR3 z__H`L<8!m47}n%P@UzJa0Wwrte*|AXodJ5@gjw&201e*lm(&1}bkW5&1>y1+zR&3D z$UmQc{!@nMznp&l$0|>$e}}jHWBU33OdYZRYemI>MIHU08rOd<8T|Ld&wo7nZ==Bf z3HtcI-|)X5eg1!i@Rt|9Sw* z%<`Yh43~5^9RHFZK58l7fOZ9n)aLeCQPe3^VzQmvB-pjpk@(6U`J;%UQJDs#37yj` z^s^X%C?b?tfA&(8P%*LK#_)EX53+v&b9uI%ADd*1GgytL-s4Fd2WV3<6;N>-S43mlX!u# zE;OY;M_ZDrGVGGb9oHTjxX(P{=3Dfg?Eav3G`e)Wv$Looq)6a4P4s@I7pb<#~ z-p)jqaYi)6H=%-Ng&%rs)Ux?#pWFQ!sWwPdbxwK+3yB#3!XAOtL=ON~F3vgHQIs!( zUitSKnFW{BEmXV2##h26qbTTJw5kYdiY?l3Q(yW^7v|yVm*XY|wlA;mL!_}-PjnV0 z=F(K3e(&8Sq1bq1`Af(3Q%B1P{xSHFIC!!!u6(S^r1uLIn#oH~PL|YVfn8iI`bM|7 z!rLPKxz|_qh2yeYqbt~#&%0U8<4ipeI>qF!WFopyT-IWbO5|z4WM9pLT?;%>9Nyr$ z@8Z=613gP}cCG3#v5Cc`iu5*@l|AdW*3DDGY2HCIcXBNLXET3#ai@2quyG{Zm`naB zG1p-!$F5BSNh#A#U*dbx9{u3tPE?x(TZu;Pl?n|t=0uE#Tb1&rdZEqv)kBZ)C6jNZ z+3VPuIi3W5^I9Kiwd*PEAl_aIB+6W>v=y_E)vit@aB9r4lv4pSI?G8r?kFqcRGmf5 zF0QeqZ4G*_=F|}!ot#XPbIF>}!zRm#Juu_VDcvS_&8=sES~e3S1bP^z$@)z~03j1Z z%M1Vp(So4rpcW8BD}b8rz^Du$EV5I^zDBu+ds|Qn1#=*jDTs{{VICjxA*Cq@?QEoO z`YaRrdjY010JR-ANhg*_$ACC$%TUR@;{`Vx@3qbxmg7bX_4okZ+dcv%P&fp^I3CfZ z1DZ;SfA}uT2_i02C4_Mi2r7UOGV0r%DEM%iv z$=kFNSNdjc0E4vtz8`4q+gf+VP7$K{L7qg>YY{%W$tNZ>K>VE`Qy?j#YKfU)$s9Gt zfGy0!=W5L6D=3kZ*|1g-?I32Oz(;vK2FpSN%D!BR%H&`(;}SB@@~YfZ0^3>JZ$<=5 zP56T8kl^JRobXnp{>i~Pu!CJH{rC!mpi@98K|+-R!{ZU|)_xIH(FdOOiiNqsq!`lqm^{FzBmuziGtGYgH{4Bf|v0}i*|uapWfg)Wp$J&P`!KA-t% zOb51{XOB`(?>L6@V@Un$ab!8}a_tN^8eWJjtFQym+?SL|lDEPBNclTSiAIkK*&3s#}{ zsmpwK%@^zuP{IK;(A+FmcL*s$pyE@$0q!^x#32EYUrUE!^gr=l=Up{aQiS7gJ`BJ7P>h=g_K_!^s3W6?|;@=_#Y2< zAe36K*hjOyS*G-Mn{;Ce0p*EnmG5Rkl(10cEy^ndVPuN)=M^t*bTBo60ERVOxHRds ziELS2HK3&y3G`kpu9<9~NN?Mio%V=}cM*n6A*Jx^;sSzN1Q5l`!S0w6gb>B6P2G-6 zAaBvkmMrp`LNr{C8;lQ@fY;!VZ@uq#VH`r2k}|IIPEUFPwFy9qN5SSe5`-Yc30+GZ zR)q-W$za(>wHu|<*cuY9c6`>KpDSdX1VYA&LsiV2sn9<_I0T@dfF{Be+DJSFqi%J| zakyspt+`mCm9W?6-IGs`pDtx zQdx|89-HenCpM|Vrzm0_qCV1TA3hzwTBi1l^Mgb*;P!trg}@=HJi~Zc6sriJuz1n| zh^xVgpC)jx^WhMH0*RR;X`=$G+L=Iw5JOSq$DAVXI)XF<69|=4u^Mdj(R55}aOXVS zS6g&5PVIzPbc5%50Pd4PE?1?;-l(Befv*258>gA(<2C<1%SL3@7;d=dR^ZD0MPQpf z-iQ#>V%G-cJUx!iwQRMyw4pmU_(BTR2_#Bf%q9s#P(XN04F%rzNzyH)Ade=FOQ>)5o)nZWN$3)ckSvxkH=TXzPQ8qg| zLP{+cS&hgYaCyU~k}a+KajNN~WY{u&`mZJ8N{O+O+z|aS|I!BLcXX`y5&&gUqBy2% z0mAGRT#7%nfS`Nh(iP__G$~SySf!3kqu4e845j)PUJX#!Dor;TU5CqDJ8JRJB5!r| ztrc5#nN#grh?9LbTKyNS`-mR4R&z_o^16=*IKG{mtJd7FPeY-TE-X7y<;XzCI$%}# zO>z`_Oni|F6{N3J32ntMlTGsFb53jh(@U5Ij<;q2B?G&&)!OpqAAj&a-N#)AP>C9O zdu`ql^xNlXYMX!dPR$xY^Pa5&C-QKPqgkfXx zD28e19!QvhG_FNcomxL(ZDDi=+|GDVxj-5dO)MDw{SPShsV6*y&?9jAb;EFJP5d8! zOixzZO8boD2CnFowfHz5E{uA4&{lMpJ=^R4e)cI(Y>{UmvP zIv-@7K|IujwJFCz+QC(3Gh1(DTQXmRW9BbF&1oWhm(Ufi6*bRFf$Vc5gX#y2o0wR9kM|}KYbFRC zWyYxJNu|;)FJIkR8|}nT5feMYV$T$QpdE=%3&7P2%>#H~KjR|M{>*?w? zQuu==??<+zL-y>ZE+zPtL6eA3*GR>)e$JTfeSb*p|Vi{oud%E?L37`<4U-Ih!Voo2=$pyC3owPjB*M^ZS2TmMt9{ zy8||)Z#;q@!5uovn&?*|No^F+_Os>|w<`nsu_pXTqTBWQ0~^D(=0u{eCo#CL;&GA= zG}cCX%2}F&Qd@I>{eEi&R zC+6Zt^zMs1eOxBv(3-yI@Ft2bU!@#axEHG3M)pr1Uso>o^TNRG9(jM9+!+Qrs7Mm( zt#DQw8IPm}u~9kqmXz4vJ-RF6C>wlpanZ%z*?n1T(bj+Nw10f7f7pLA8JTdAt<+K1 zhk^-&cumwoR{-%1dMPQ7Zn4jT>e=~oP08i-KU@}?r=}KeziTWsQQRN05r>$0JI6nV zUPW8Ki76e+{Za!>E7yqea|3puYJ)s##B~S%RnG0A7H|s;JZHorsT%vGW22>N24`dmg(ZWi2U(P2jl}Y)wSgC z9*ki+MMz<6&EF@s50qmc9h2@~=C}B+vq@Yj%~B}y8+50_KxEo}m9UxAjf+vCHrn;J z$fRY#UeHcIre^rC`(Xl~K`-G2v^y?o3q2lvYqkAaLOYJe%=R(k!_dh(uC`dt;I0bI zs;Q!F>agN=lktLNxTtV-AQTeoZWM9X;Hd@8WpATa-{rCgE_W-~T;jaVw zwKae%-}fq3y%DYjgw6pDycg50iF-iz8w}`d+a&~clu~4-0+~E#H@jVmh5eexriGE> zK~-AX2{P<$)(SC5ObL_=fEuHZIB=KJMPNeq_VnyksZXgG0x$hnp39|(r@ko4q`ZS00L1g+ZM-lnV;Rovw;vp-bfXpDDVF@QaPt7po- z3qARQ_)>s;M7yEqg4mrxJM)$4cF8v-Py#kMklThvr9svsU*-+|fZia>|kVq$1uSYr9 zjEQaXS_J&Vn1s?MjK8{MLz?_<+ zoPw?wQB3$gGK9P{Oo*MG60W~83N8W|5f*IG>nNO}rf+q!<9quXvp0LdPwDeEC&HfU zB(p{e#GxdvkVQN%8CT25MV+nJQX_9 zgcwt>;7W=e{drKYsuNgIjWM(R!)3B!PFPosSfJ`CR0)V171$)ehN6wIW|jpcRe%je zyC&5h#pkh(q{M<@D1pBesLdVC=Gho5G$ogxtVY-63eDwSqKYEqVkZ1W@hRNYKY8U@ zyiVd6VzK|DJ;6LT{Ic=;A%^pHOKaiVBB=~t(2C6=!VAjeE<}&F>7qof8^>d%4Gw3M zW^*lRGKc+nqK(~`U!M8Ns?L7Oqt&zH@^TAM4IP(?+0Cjop@R=!i+zc*3X6e&0}#!! zUOTf(bVKQoB$K8Vf;!JdgK9m*^t`Ix3xviSpMn*LFPFQj_S$O zX^fBjwjpXH>R%LbZk~IkjMztPp$7e*3pd2$*V#rZExNpjEd1^o{_+vS_>$sak~--X z%5j$Las`W`_{q7s6|O|XSXQiRDyw`kGfWK#ff?`HV8M0a+q)H zrDV-J@tKVl@pC+0=4-dr)pdoMsvXt`@c?JkY3>NdLCEVd81N_%U_mA5yzT@OMB>wZ zB)EN_$(IHwOsT4jJEi1Q+PFc@Ds?|~p|rFB_}dA<@OQc&R6-&?v`!%BSaWxmPsf)0 z`$YQO^4(euyIxDg3*1_fxarBshus>b;>PTyk>u|Io2x&Iw%lC+hA9#(0U+e}iDnHt zX{Mm5oArj#DT6WSm!{Voplp$@#9o63jy8|XAB64&3u=(YM^_C4!ZO{%D$M0HXDbv z8V^#g>m3207=Vf(M2OKNZ}AH2#0jz5Qojx93mJ9v2isX}c5{$?32U0g_Qv=7q^@)atA=+>RZ|_aB6@wSU0_ zLD30^jNJDyt<4-wkU+&T7Csl=#z$CJ;WIq28}*djL|MZw;?fc7$cowO`P0^~;UfAL ziqW*7P8!d=CI|vrQFJ)2MLnTOD68pqaV%s1U1!w`cuOiH9%qGBl>JobVf(tE*~kpa zEwAhA^ezCb`%4XOhoH@2=GMwswa;%X)wmNSv5Jd`i>bDql9hFGWdAyC_U2eY#=HaO z5AZ|(@8O6F0jW${sV)j9DB7{)Rd$nMUHj&^Sy66R&tt0@SFx-Z#2#+vPR9U7OPz)D zp%(ycj)UQ}%G%FVD-qoElVTe1Xo7L83?SUm@e1^vR7&T+Sq*8!Ek!z>mcSb0g$~|7 zMFLFm{?g<>e9BrSe=pGJ11-fq>PVM{wcAPvUiZE5K%)b$jsEWQd8UwSBTyd;Wv+En z9;%qvz|wvih~YS-TvDtO4@A3&E2)X!TyiU~G5|*Lu+N0ea+biO$SXAsW(<`krN=?c zJQ?v9uM}>pcX6iC0^ZEJkBN{>A+M&Ln=R4;GZ=MrS0M_bFZ@s>!bcS`=c4yX6l%jS zBKHZHDpmM-X3BqxGfJc_tj_O@`~fGJ7IWK3Dn^dunIfJisUJRnqQ;Z!=m^s&(R18f z!=fJKP3t&4tgW7X2c8G%&*{DI>hIEeLdOp#ds2T;5|n1MmAwIIh&R5k z)+k9BRr*m(^c0IlIvU|+5qEwl;$earX{q}~;l)c3h8xGH*mHQjWD&1MQnL#~>t9HX z7n_D?usGTnb{J6kktlXySTIuhI~Odi`n5`C^_3+b^p$q#=BBhad>Ow%kNK z1{Vr4Y8$M#B?5=N)I~)&0SG7@a3IvEP|ogF4%BK zvm6(a*A(!#uxqo?SBW_3N;~~2=ao)O(4Y+Dp&os$CXu2~TNHWYXJruMLXqEd1CZ)< z&VyMmtuB;e=9Bt`4W#Met6}fr7LN%`zrj7);2~Ou2TC4@SiT@K;CP*nw^Y7hyfdPm zKjJ+KYG|=Qawcz1^~pQW;T|Ez)d+u+w0lM&kT~Aet&l%BmUm_ zIPi77ZhvO+j%I8(874ni-JehVuY0;;OuZtF}I_|SIch+y(et$WHB9T%%S}rIDTFr7b(j*LI znCVI|o6STz@=1}CzP+6^n3-hA)-+JQ*}Epxe)Dv+>X?|>%~!rL(Vo2BUv3@O2TT2o z&s(T|-a~tQ?`MCycp}XL_#&Yt`cr&ikrGnYFC@MEkW4HjouHSJoAogDW59y6rRU@_ z_~;2>Lglkv3-Y8LRvNe4afa z%`ZEt0e96mH_fDb74}B&q4N>whC#x-KLX7TD6hAZVg+9j^Y8K?e??a2M%g`ejv@2X zLFhqq#B;XR~jX@?Q zC&kYNk5bG{K`i1#c&H@^PHzJM`epa{3IH7ZH4i}%2O2a6f+YSDIdzLz zJdSXjqB*sDmfP6tP-$=Usc+a>I6}oVnYarum%Y{u(v%1iA1D}>0XjusM4-ti3s`8= zBnVnBruyb9CQ7U!Hcz5ONBTt14&s%SS;Pi*#|X&mm{?Q++!%$YwpJxj zgDfJlF5rp20p-L8IHcNBF2jd9oK~W;3ushX&c_7QK(qIVCFr^TWnFglTQYXH2VNi& zj-V(!v;tK8D&iWr7zZf+R1gm^?pq#1{+K7m&RiS1(RcQfCG5D$1eu=@t914|c-X}v z3#|QB`wlWws?z{U&RFhCkbU0sm`{{`R0a32BA)E-yMzS`s7>;Ghd-6lB`49TlVK!1 z-`buhh@9ooCs56dYMNQN0>bhLC6m8tlnrr)wF0}YPC8YCF8()ca7hNLRwPurHJ7H5 z)4VzRxkKnCO+tf`-6sNf;ZtiEOC6DJGBWtsZMvd86w!m2=)| zOIyrIZ9*eZLhI<&5!$iSqg-Rr{sZeYBDdy&8TQ6xiR&@*WxYVCIqO|2ko{jkd>UYc zOC6sS=-s8%IKa9CP&dVC;sLvn!jHHpE!_ms%02o@V1xC?G7GO7V&(fK9MhwYh~_jM zkq&OWb`?Pd zRVv^imBNQzfBav9s=+zr#{3W~yKfyD8#(my0e?7bHSCQgJZ$X9*;UoZ%9m2E43QWZ zo0-hacc?t-f(n8U_UF&%%_k(~g?8B|)B%g~wm#39Hqh0jfzP$pB$ybuJmp)x9`!TxcXeYm@IqEAadce^8^hUWU5+^Y9E`4(& zgo($9^jjo;=4G;(?Yp6(|H;@8`KC<#irdMYby`P(T8@zzRZ8jAXM zR%8d1xCIbWH=xx{D(pEpqRTo1X9p#7QB+J;zb-3BP4 zM_1jOa2fgd1f7yO2$yWws%muYJAL6iw{NIrVkg_LpA&yftSqOUOUrQSEQwkvtEYH- zSWaA)S@1E^J9PkMvNKGCx%Gvy_Ez_owWSqtl=mG78?6QfaDV+Y%?DUadDT&oT`X1o zJYnohWs#2EZAJ%hMY8T2GQgZgfNb8i?1dT4`V^X~APyHb-m0lG@QyTwSC^?uE!%9n zIHFeFO6G=vlf)b(pmf7{m%;oTqY0;QE4`^v7*Kvk%FMfPvGWU%3xsx?o_q|fwUxvw z3o^816qm#rq!R?|3j(;s0TANRtl=n-DwB6loqt-b3PriKY>&;8RBJ=+u~LJ*R0-5mjn_fS|uZ+=_V4<>JF3?c%sO zB+(9oh2+=2(}GDzzNPTEEi>^_t$V1t=H3<&z4eK@$+nx9it{?e-4TvEWD(asP3R+d zyiFfJh2yo~T_{mMGJ>3jupU5W95*`{Y}7rypnsz6`QWLL=nbIfKD~1%K}tf5ag6~k z<*go5w_t}xCOdFnv}PJsl>c73CuS`uv+c`JkWLSqZ}Y{OnWc(WQ7OXIw)5F4>yCX< z``}2!%sjTs^zWSY{x%HtZzwBq#Sxx}@nw;E0>7B_4Q!;bYiSpxhQI0VZA?`&I_Z7m z1BK>Pucae~{cXj;W~C&}q=X496oBH@iV>etBf-}v?$I#swxg-(7syTX5l{Il|I9v# zo6#zydT9*rYJ!%c8(Ac1xhz0oK(xSu=eL{8mfrMHPXq{G!PjFTp2q z)j-nZ*)i@0VWe>J8?md|xb3(Jqv>5PtxZD*$jQt+T2s=^q1w)_@fGLx318;I%4?)T z;5XBj%>CaJZdQOwgOzQX_!jkPVo_jOp)V;3n-9WqOHd6y{rmy)Ef+PSH8twQ4NJ$T zO{yh9Z$)5hOh2e*IbowWwo}>s>V*OBd{}857TnFxwgFEwKc}6VJ z4zP9*7+HZtJpeI$u_mPnfU2DeCrrDFAKDAX38<({TD7E_I0~GziT9mlwR0Rs8(zq;@7 zos5XMo`1qo3qPF2AUW9Ur0ioOb&5@Br5;CP#TuWm78v|J*JJlyAjh_>e!tWSKaSVt z<&sq=yBNfhBW6D%ID#bv!dMiKtg*RwB{|SfZn0x>An$d&ttbFXj1Nu+G|w~*%?=hZ z$L>0>;SzuF46_+0Utx{7qb$3obv-*|u51@Q54ZqW?OWXn+dF;BuxmmF#X$6_OEX+% zcKaiIl(1DNE%IF45vWk)@d6le9?0XaGR8Xy>AeRUMzb)E+4G^ahGmMM6yFn;;D*Wn ztTV=s*r$vz(!f2!fsEWT*;*D;`}wx9`Bo$LoTTwb>vs7#edD$8pz(dx!Q`)VbV8ye zDs>Nl>|2Z=Ny=u*AW4y#-^;sYe6sed)_W%ofxes|N2nHuY#dwhIL3?BuxvdXS zx6@NSPLV=Js~I!O&k<94(KU^5kV`~|U1BfVSxn(9{xKrpG4Ls9@GNZTAwzF0c&|@s znXxwH9~%XESQuT^N=lam>(n4$KRut=?!IG&N!)f*vErBwh zK-vJjpZnd&O*TQ)Fw`U_N9v44;RZQhREkaou(b`H(RE%9rZ6J_KJ{W@#^LY!9L*W- z_#FFSl|bJZO1SNZ9i`Aowt&LYt9(DISt;LE&5Oy|lCn&?R@JUq{j2u8r&9mhJ9v=4 zRo*5d`8}w8(Nm08WrasyJJO}RZuu(;No)4#yI_O+6k&CX5n*xR-jT0^)Mz_Ezk|e%CrngY2ek&U)H#%S>P4h( z1Oe0aVHA9qaK)A^))jVfUVLfVR=&$WCbmm$&SoPX!g2{8G0dxWdwRfOI*2cM(zy+eG_thtA#u zn)=ebZIYwC{u5Eh*!U%{uUNzA@{HZiVeClIqiWwCi1!@Joz4?kj7bvl|a0Ss- z2Wq@jgLRk28HeC%Stnd4H@lnF*7K(<@e4W^qTPh!qKBGcVQbGKvI`EB`2%dL(rrp8I=o zs%M8YnUuOYf)j3m&fFv-(St8{!_ED$uTq6GZ%{%)w-ck2YJwx_>_&|pV zS8H_X0}b7Y2U}}5ZVJaEU(Cqa`H|H9`)Bm$!qw~INKd%KJ~F5nu0y?KM^4;~`0`aJ zo-21y%U_n#MpZEL!8`|pXJ zrv>AK2))#vyk~`2XZNK{?e67#QWx_LGv@dDRVQGEpDTA9;7D~$wAw}IeITB8gl?kQpKoKh73kNvJab~@$@1QQ9qqpWB{4SLzARu9HpH(c z&rSmO@Xj~;UtnlEzBy?ozD900EgrgD4t98=EJz@e*n7Cz=&1HdVBLX5snJy>;9#}- zTgC8(8lz(jZ;M8gIrX3i$!7}!Ii@h+HH1RrzW!!7c~2NefEq=;1R|^w%Bi~wCfvWe z(`XL2R097o|TZipF^*Of8!SfqDX*axbh3a#(VHW#vu?0q83h!*aISfXc9v( z*3DO(g5kv6OPg}L&9H`&!>DM}$z)dHWtY0RBbC(iz;Ykekp+4P@2&R?lcsJh?rt8H zpc)#&OIpfYaL@wgJSW!cHHqbFXC4PYGp(PWfUPLj$$VsIA7<3Xn(r0_d{WbHDBTy> z{Rq&dwG3W;kQoxeHcv4kWO4Ga&%rZV(s7RK&nD$iwUS~PuV6LcVXWOO?zs`J@B}Dj zeu2)euIg&Jvnr};bexe~>j7NV(w1l+mzGe5WSh1&ZJ+8SV^C)v@U$&a`OBrIcmKj* zRSbd{Fp{{3^iJ=?nBsFa%L54SJz@Lcc)a!xQPuz@z3V>&a@!a2cg*$GX$oQnCX1mv$e)9`jU~39pkB7NWarQV1<4}eQb3GbyKcgmH1OKPiKCW4@aB^ zj&&hC(I2}@u$LSJbfz?#pszYDD@dFdhzN=vwwoR^OQKVt;yP9-yZZ8=Nqw1iiWq^} zrQ?Bk7>>~}34wgr^2k}n5Yx9~SZp9G971GSFp| zkeb!|VUuA>_pXc8L$48vojK(#cdyO3gR?iNt=-D96{bgZ$vpj2I%UxsR+?yXIG5CE z-SY5xafw6LCU_81i0V2eVGTs2@}n?oXmIuBzVg8^Ym9m(mf+BW9qJ6wc7=tCTvC^azF z)a6N5k9EM^3)^FXflPvc%$Lh?;YI?}Q06B@J>KKtj? zPhx2k+uKdrfg&{O;p;3)-P?Qv(oP&fo0{<&^Itgc6BX$zaA ziX4Oj%FMITBBsT9j}*_GE^OznWQ!|o5-}5nlUo$;vRG#pO;W`(hB6Bv6qR@a9=-(~ z!GC*Q3fs1YyDV zrP>QgAS>?h05$!&aWHpFGsab`HKsQmi-142s<8Nd&>~6`4Ev54Tad*S>Hl~x{EY&C zw>b$GwL>(w#gY*M)&M?f4v5`=281ILp)K9u!_torp|dr#s0@C@L*5+i2e{s4Rr3Ev z%KzJY^1pKz>hgw`CPvQxdssx$#=y+vfBa$z*jbtAB}^>L%$*5XSbmqo|E_d)RI)cP zGWm6uakVfqQ4|-V7qW16QZR88wzILfv;B|RD+j%#t+R>a@BU{4XA=Tb18XM}dL>x{ zCo6*AX^H=FskQ$7o&I-*!`Vc{#K_LrgkHwP*38+QfRX8UpEu`!=0yIFz+;ESwWSL#^W}Qm z=jo!mqxE9Bx}()g00?Y-b%zxT;cK~8DePqGoI(82j|<4ZU!MU31}y0R$Hy0l2mk>9 zffS&Cf?$9cF+74OAv}{PsYN219w{##05uY(>;StU0+CT z**KsBXigD?Yho`Pia`N*1glR5TKx>*lDJO}p92dB-DuAgjAuF^4)m@SB!G=z3@vyq zK*0;)2A}{(u!%X`6|laB;07by4OsGqU>&!}J&=Vy{sx%IMRi7Kh$RGBu8Ds~oZyTm91Hg<}zcvmD zG6@RVx(M)5CE$iIuNs8qD4>Ey!4$}YvM(7RQJFwcbUiK4IvGsXyD^;N({WQX`Vt9! zlj7oOAZ!=tlMaIDtP=5!a+jW46OwfrZ_+$agG(zU)m&v zOBzC#%E3T7{}9=r`^%jyUiLHWaHVX>?N|;B2q&yrL z3Nn`g)WO`Z4~KCYm@ZVO03@g4zo@dO&Dy2_O}88{`Lx&VS+@aD!xmsQz30i?HVlxP1%?kFgib8civgM& z9jF&e=)(o)%L>QG4ab)W(3=jDD<43gSJI!hxOWWm3T27*nOa+W%JvAm#Iw+{m#2|5c++0ar9)@%U%Dk{3)}m=h~BofeYhYxs3dMCDUi8U1R$A-@{%jB1cliheoF)LkD2_@i0S49i?{cu(^IL?5isGmIw3>$30* zsBBsoXSlu4uC*2whG9TC(4&eRdY}QDxjZoE_ZUtFzL+Tz7by(bLn>iJLcXMbj-Zz0 zs=(lo^5()pcy@MvV_`&QOnzf}Z1cH+wEKbO&7l=G)&&m!X?nuRtVviZ>gY<^Fnii4 zyBbN03Td+nxr;Kn+j5EXYUwje(Gz>g3wtR%iwR7#F>I?zT+3;6bK?lN2C_~&@^)6a z?u;|OTM55i3%{K$0luYg-QEy_^8SGR{sDuXLvUE^S(iN`7#u21A9VcvDR}(Jp4mrU z8}sGGiOlm6kqaSi*o6qzt^V)FIHn(@$)pxvT(eP3ze2MCOp6ITa{(NS`5k*vj(DtD) zj$trPG4M6<*Y(hkjbL{Ta1V8`HjP(2<`-AS2S=tSdnSjl-GuH0>g4MDsF?hun4ZFv zo}l8K?qS4_!j6`cjulfbRkASJnC94TiF9)<^|Ot2%yzE7ZJQVz{h5Ewaeo{CRup)u zXeyzy$(y1EeD&RMUsvp$KsZwaaFlli(E%%!)ro)hNnR(JUN`MFjXZ(9}1^EX& zaa3RG0>2aWh<`khytzWPL8|-=j-xDh07=X_bMC2kN9*p7S9=xUJO9waOpkxn!1iCf z(&^PHidl+x46a_Y6=hau3bDFCJMyi%Rz%SE&~GR}>rL0jekQHDsq+iA+U!@lWZHIf z?bvQhfXTo&z~a_wtFD@&;oZleO%XR?%6}-N8ayYg2F6;2-?oLuGke%{Vz;D`P+1ATV@ zeRl=t1iKJ}I{{AG*Fd0z0t&kYH-ZQA939pA;An*iSGjF2kd19#LK6vFG z#2h$7`Y=QK04vG}JId%HADJSu=1_DMO>7xOL@$~W##dK`uZ!YQJW$B>-7Sb``L z`a|P;oghi!R?LQn38U^iH8I7T6mkhUn53Ta#A-gFs5QKv4olBjP;&mYz*geki=cBXijBzaFQVs{FWKj`vJXZG8ZbBsA2MHg33Izi9yQt?PHi+#+URvTToihRt@60C8hFdMBV?jUPfZ=a0q9`WnD_jn? zCX_5hm7*CH-QD&iEXA3YzNmK67UZ>vfsCxJxn#0cLsCT8b3U<*FFkzHjPYE$BFnjp zl1y{P9i5vgFkLa@6k01%d%xu9T z+H5{-T;2jh!ve!1wQkK?&p<`q$~Zn;aHKgv)M6Su(|XisbjtIY|T@0CNfxpOTR z#BqizfQxwNaFWA7~`h zq_x%FL%$)uGsG|03W>Tc8C^*YYgIjE3+{S7;$m3|wpA6&mTsvk7LC^B1kY{;N9J*c zZH^%!B^mvB@oQF?s9>kyd?2RvJMFXe{z*4+SEisOf)S1)LZFZ@Z$AJP8PSbYUl$M` z&m0~8*EgB0jJtsk@QHlKR#?aM?k(W?q?URNTX+`v#DCNB_m}~FT#`U)t7^6+UoW~9 zyi9s7n7mcP3P6)&w};Uk}2RmwxLg< z21QcnJ76?3gzx_#|HX$53C1dkW)bjZ_&X);BYzk1&VTyHY1#pfql)C}(SYG2bucWp zPAD=A8eM)xN2{W9C6`|fXE7cv-puL@MsKA2fF&W9tqk934v`e0*nB~JDY{@w(fvlmSM<-T5d&R~ z5(^l%;y#lH8To!WHEj%P9`%IPyV|3gYv-QKWLSGrz*xs0+mI~Ers1GCFu~bmQ~myw zfE!AGgs0V*%_Z7P3hI!9`>zZnL>$9~rj<6R%?8SWRFG zZb~bpf!`i{UHADNQW|u`^-yJbb#vRCOJPMg0S|Vh2u^UrD4;Tu60*N9p|EUj3~8=F z3>dtSbX0;8+d_vksH@_UOf*;x$ibZu5)zW5o+R*(X{VL7{UcrFi4mSBy5K;;+7!Y@ z%)V^_qn+lItzb^BfoWxxkX~&8(=Seg%vHo-z#37ld`9tR9u>EnIpUoE0Ocq}B9gg= z*7$5;8e34&le{%Zi0s455Qh8bz_57kyO9exL22591tFrLI512K_q<JxrH6pnN zGW_KYib{V`|95XVouY1RdiSXqeK)VhZaagORo%s*F47j(41%?`LGq1hjY)D7*qYhL~_TX%QQ>cm}9w%JLH#tuYE9} zoMDYfrRlq)XYw+f%4Kg&SaqgrI5Sl{;`=fqf~YcLf=*E47g=oDW zm1D=E5**BO30A=5jE1S9mn(9%9!xgL?GO0Q~a=0IFHQU9R*xyG*{;VYY{>@%U;(* zrt^;Z=t4M#A-HKj@G4N&$0VsM1`4ei>)$ll9;vPp!smq4(#)L}jlx)`lhdV;P&zn7 z17(cj)1?w4HJL);GVWRtNo}+CA>4fikEgcs?OWZUL19bkoElrhpCrQM&qdBLv4Kll zaaaXGSV#kZyZ})`dXN9UP?IpJNKT53ZcQ&R&$G7^64|j-*b^~SGB@bc`0W|=&m}d5 zK9swdEn?9dH|qw#k+&F=ag>e@@aj&E{n6Nz5yFzk{;)U#EzBM`h|AY4WrXuIWc(Wx zN~F}zZf9C^p{U{r9u!MG=Z6$XA-Jf#PCi(3@9g+N>-tYyTRW!Jr>?%K03_nx2wQ7t zOhi<+#4STsOif{X__2g~J%QAA<0LGcWJ^0pf37%l;X{6@N|mH(Va(1Y**}5n)ewp2 z46LHTj(Ni;qA0o{-O3rFGk4Ri*8Wv;e{AvK5Fa&$_w;#t`nqTOT<7q4ck;S@64zas z>0jWo%OrdAKXu~-Jx^&AJ0RUY?6*AqGsY$^yn57;*nAid6$3MKzuzoE9$dhW?ZV~# z3kVP6w>lNfF*2j7okhbiy_`ObH6jJr z9(zoVylHzv#{P!MZG|lI4;%fi3F>cU2ZxUDj?n6}&B!FA2(j57;sY>)vC0)tL!y;D zIt>4Q4BsTaH-rrg3%NsaBi}fzuLbR&5M&Qv_=Sv`yAJxN8t-Ifm&9!+_I$_rF+TMy zA@XpfVG0;j9V_Zu5_jG%_%7he4_AiD(IrkHO+35sC;mP-0WHTc?!b@jJZ7D>@_zjt zI!Bn0ld1f-ipgckY-Il>0%{RW%Ycgo4oYq}awH&Dv+0j&5vX#jkK z-jZuo+s$ch3>W3}58G2`_yf~@ZY_`cIPOZ4!h2UkXGSsUx)ze&?6qf1p${qFu4_y4UI4(E6x@8ZTmfB?Ae_h|%8 z7A>g1-oZ@ZhlE2gI4qmOhY4HtV?i*x&ZCt^e)T;S z7=l=kLL#pY3Tl@|*W^VO7sYN~^_O<-!$usyS_x2)fF9;rFpsbtTH`5V1z%crS91 z)%c)eB#pJP~GsWZ9iZIL?n}bCVCAr{iPa}_&~y}tNprq!_l9-$mFjrV zw3arkJxK3i;WXW5^{{gG#Cb;uIOyZ%1fI|ErKXs@_QYA69@8gL+l#EjoQlVegQ0PI zgk48>x~|HhuGmj5OU4JcnL|`)ag4Fzj>B02Qf0D)4w2-_Qdh7v@6YA5q<#lN*D3%B z#eZ*`s)EuS)^BrIb=Q#{I^k8*l?#Lj;;8*%$HRF{rH1Xl)TQfgX_St(BATzd5GjC3 z!t!zYN_LPZgzYJto(v@)F4T_LHB0#q1S6Y=-x}P#j0q&to0krFZ7931<1ez*y-?8+ z+nW2vKU#JY;7Y5^NEkn@FTHZn6PwY-kyJ(=8)F#lJ6CB1l4eV8I~=+}kt4qhZ&bRJ z^Zs7CPTaJ7E_Y5?O+{Dk9G@T%rE${4v_*$P^H1TOGiKFOo7!NkX5tmF7GK0S;@`Ne zcsZl#Q7SQRd&$<|!t;C;#V?z!skFinpQx0gIv1a+miA{MQEfR%W!?&}o1yKoZ;Ew< zl7*h4le)y1toX*-a`E`HKP+XDUhzT>{P=MVyumrvQ)1FC7E@`p71{tE1&&{`N`0yE zk!X)r^Oc1xFixxw0^24qFTkwZ2o4Nx#CGxc)T_PG5^7^WZZbzqE+t{%Vz+rj()QV} zn+!%!S>(K~sySECJm1Py&-_hMak4qw5s$i>- zP25c^c}7mlr^{3QwobrZNOhoF{&u5%%?6faaX4_D?&~G$euVhRdTDq}#K`PAx~4Dn zvZ^8_nVTXNBKydx&y?yO^>4nZ;S*D(3~cLS7U_F67AB3X?lBLTOxC zQbnio??L%zzIcB7mz1Vhrxwsh00H;iF-%6=*QKO> zFI_p@=K6kJ9lSMX(#mf~F)=d*k$NrVbg$|4rQfh` zVH1$b_inr)=BEJ0U0BiVcnYh-tD_mFS!@ELC5IEo`F$UkTPN)VI$)$&*!%TjSGif? zxzQh&Zu<%^dkA?9*j%Fqw*U9SEaGew7`7tl6XOH@Iu- zmUda3)c+vJpa(Mq=c*Q(;A5{j7*bGwI&6e*+N{$EJ*K+k&qsv(9yXP#0v!j!_>bMq z!SfX)xAXh)qFX+DyUXocRrc4YFUoG$>jyNX!^TBKOMKM}-|z4ooyfksCTAz5IqpEw zu?)t;#YgLOu4`?9Q|?yN@hc?n3U5_HSAEC+`|hyq-h-BSG?()7BT*3T)g6QuMLRmJ zaRdjT?4W5Q`6eV|`Ip5Sl$yjHWE!kG@zZymVJJxstchkaBh5Qx>Tuv*rkGY14KB4P zPFz6Sc4TDlAeI>wcQh+Ws_C76#o2j*LDa~bn_I5&FV>oov>{9aQw zVmUH1$HiQ~FYAjb5=rg37?5Cam}%IFF`J&Sj5c%BY4O!8`F}E7-lW{tz7*ZeWlk}f zi})o51&{P-V>v`C#7_CoQUz|$H6sN?(7%NZmw%mD<2j*(wI`T*Dg2M&?C(wXM-~#c zxfwatB?(4`%aS{5PPIdpl9-R$5#iwyl8_zF^u6)zi|lHvx*|g*H(ksrVtPH!w-5YZ zVF~9g=|&kFTrYg@He{tDd!8n!&71Okb~o8;SP}%0^XXE>yr)oJHKnXNrY|-1UMucK z<}+e-eLxcOff+XgPuovFZtZLV=+kdH*7ve0+Wh^&N zE)2JdG?GYk0`?e7Ta6XJ}y0 z*pO=Pt(eLOt}DiDiqLL&HUX94exaHxQ~4L#Ci8Lz&A(WdB@T?vUoBxQt_lftd)Pz# z`F*bvvx$7BUu1WKz4%!MF{A&HrSiH$M<6x>55_W>e*{I|s>>2MK(5e7|GjLvrH4P) z|1M&9vaz&=+|1E!CtZSMxfRyuE$v6f$i@m^RZ+G3-(6$PzDIzZJuGdu6}(@ww?&K; z>elJN^rD^P{s18>ttc(?XB@ovTH%-T~BhismtDl9s)n&O%^xuBo@sHv#sa?`m^uBi~{C`s2@7f=%rY|#zYT&dYR>6InDoLIFiL?g}| z<7zs$vU=u(I|2t;Ux>qwmPVvfsgpL`Txzdz{8%K1KKEkMO6Q8VjV9ZHU!cWveo-}o z28Z1##sR|E!E>cSQ;n7vd01CAPgPk}qsO_nqF!9a`XTBLI`#rz?;MvuT}|_4Y!Kwd?F(MEB)puj&(3G<9-;21}aX+I4EcFZ@vI$}sLvj3(*`56PVq#*vcOeLok~}Tp^x`tHUqEI8`QY3W=Njco zY6M-yA&yAe2;Jl;zWQwy)^Yj$7gKU%7#!!IU|^Y8wlT)NmkuSa--_vhk>|22u;Mer^e}R@_ha{t)K-`oEckgfJs|%yRwy5>DfPDAioN#JWaQVGlg(DI6i%k z?v`0uH^xy}Vx89b-A&s4*qRcaT^FY}IF;Io3>9BT7c}+Ihpb}j@Mv+pN%qefefV25 zF7$R3Z}Vcz!N1SZPYDVnc$87Q6|h=~h~4YBYyGs(HU6<`%Su?p&sap? zXv#1-HmiGTmC-Q$gIn9tZThbp6xXLey|hKHC8aurE{Dzpwz!FQF>QgdIi8b_O>K zo5c2Qvbdr)ei?tst2gh~xiRqIga}0{%)~Klfcw^wH?ivZ2`h4L_R+DVB8l6r+2=$A zQd36$YOkt@T!_If%EV>+B!=hs@mJO8K-OZy)?pdPbw?P%R9xO}@$V@@F?w6*9v_}8 zqBSMsVr=v?r0gx~X?BBpkI80i^L)?c@VY!2W@WGSuij^+1@3)2^i$vDw1Z7nQqb;j ze!1-ZNpthx!_qKj@^F6UX)SX#LlH%#6;7hQ>xE38afUG*yh@h!xyW4TOGe+4+{ZPI z4*Hxb_7w0H_x#KF_f|BZd}}zTO!_*th%q=jwL7pXQhDFld2@Q}qS3-cIszrH5WGGBNH$620SzBXn$iQ$!hkOT_cFJ(gIPEk-2*B9}H{F78kSQclpo#ZTT*D zR-NzrcPvb0w+6R)RHpJW=Dj+`Q<-OI+VOH)eQSMUr)O^g)%GCLD-n}Ow_<)>?=l3+e{07|^T7rGeZ)iAlR7G+NK;Hq< z?Nl{rIccBaLSs!kk~X^33~~wKh5iv`g}!G8I?(LgJhQ`tj)aXd;B?V3>JrPO1y7z3 zZop`;AQNhoEV-&sm&1PJgw6`a0jac;x97zQfp7AFfDCN5L6r{&j{#41^3 z$!i2HqhpjS?4$@IQ|V!=J4pBY=|_#_*}7X@G4jtY=jU0PA4T=`nn&eQR$#=iv~lDf ziG!C}9QUj)SBEE5@F+>6XKJn!INosbl+*-HxM~Ij`CY4$`6Td$;Dy;Bj?6E>ZC^?1 zI$zho@vrG|1gAUy>RR6PQQT-6PHf9_4u>kSl#^ALWijE<@DXq|mX$tR1>E+S(E$60Ns|l2X=7_((b9mR2?j{`ZRIjbV&ptEPI8hXB99;mhzF1)a74hA zVFI%@%G#E@-Wqom_v$EhVvA~tS2WJLstRh9^i^@IC)rwJ&C!P$XCEBaT){zdV8T^A`x$TjQULFHP_ckXFdR0_l{a)} zt@!V@m`lxeF_g5&EjcUQWd?_Y6t%6k_c?xyim}ujwdejxe)o4!Cz=2QhsS+T8{R=Q zDL?Z^K11H$GD?61eYveI!JHv76NjrXa#R?-FOS{=jeR)Le(EZ>`|UEl`dyQ!k}%`>eAv+qD>46 zZ_{72K;5p8NFpIH^0UcXH6XOHlsR_EA0@;y%t*;F$tjUg%zhSM3+pobOi*CiF8HJL zgG}}B9wGI*d+Vw9>5~Rh8;{@bou0@O;sefjWx1}GLRU?3tQqSktmv)e&CrOkeZjegxb#y3iOM$+v1 z9Q+HdHA05A9CPGTYzhE1flYO>DP5^m*9;Q-=Z~bzCj-ni5T2EbX-mP@=*gV$LLtqXM-}N- zM9xGyJUL$B-Lf&BNLuVXOfQ$7+L+dVgu9~}O=~>lKz+UM%-vyRIQbX$n}M$&TGc-l zS8vl+TvTCsFgB^1D2d+4DN9JJRk{_V^&*=n3xU)ClSdwmI{?{rPH#^`qn{LeIQavX zTHaW9JomH8;>wQkC@v_bOrwfECIv&M%O!X3*^cJ~lbE`j z9!BB&-XBtF1EJg7THuB-E^~WsECW+v1tFlVOS0{Z600q){X1LS#rk_!)l!iEG}`;6 zti3+QzcavFTF{D{>bLP&( zyLB!wY)2SJ(!vtxP)n4Dms(aVF7KDP^5@DLLK}vrL|m;UbS3fZQEhZm?RZGIUi;Bs zcsyME0pBc&TYlk$Me&Xfud||}yuJMV%|agxlQTW`8?F>tE?$MRgOh>GONBKLNN|}} z<%O@)%Gv;?zVxVs=kp>UsuX%C7DbfJjdhrGIHDk-o)zyp4XUck)$Xv^rFiX~DZ0yj zU%+|UxFEO+R}E@c*@f0OA&PfRvGIRt!S zP>UWw|2nw9liX9$DPQN)JFtuI z^VvdR4S^oVS%FH@U!_jkW2YjOh>5^vRm8L7R9W?VD!6 z8>IQv<#jNQ7~mZycoO@X&s7mO^^WuFYjn3AROjFy#%tbIiK{>J-ByDG?`!MSalixa ziL)Ugq8;z0^gA9k?@q2Y?I}9=PNKVGOV59yZQSMLbP-3ueTW;&Q>aIAwkz$6hN6LD zd3k#e=FNJsbGGA^);1@W7kks%CC)PkRuI$=TDro+WeswAC`tir%Am%^#cRKPo~Kk2 za;4!I7aEpjlba{uy++ZFQBw#HVWX$f*zDdxZ^hb_pKKl|)9Sxos(IiH=A z*gz5X7zzkOX!e)^EJN>uAKF!zC96-JSZI!li;B-=HioDg)7CG~401Qn_E0Rw@hEAD zx3`v2GI1u?RmJtf7UWmvR^o>wYIJopI(@}dbI6GqIk-3~NiN$S93~J%Rg#9I3=@qm zHZMsSXqcR+u9aUT(B1kGtw)U(#q6vKSOnjR)z{Q{Jm37eq(c5x>{3)x>HX|oT#dkx zOoR0;Ei_rRCFwPf%!y_CHdc6Yg>>?g;sDNG!IbC7rp9lJ7k=9W6+} z{WE1P6>Biy|jGm3%Y7~FqPZi(mTh@kgL^(f(cPwFtF0R<^RbcrZmzwW^1vZ zSvdLIQ8F|4sBvSh3x|@NEN;sF6->CAOspgwJ3qCM%Eq!Phkbp9 ziH;nk>-7w0TZw)v>}fx!4kxo+dF%ImwrJP<;@-Mjq#Br&M{(B*oC7nl6|?a1)>i4z#dh={|6DoJ2YmGr*vXGILT#a*(n06 zB(izB`I3DmmNpLaFNVL}A0+Yhdm0KxW$Nk_ToOazIc#n4nVoq&?;E_!j;~L&U`}^X zPsFooEKMwzYnN2l)IKBxGy&Yg3F?WUS<@BM?4axk%emIEz=_ZCW=TdCd8(+AmXl-g zv{`Mf{WHkM01+Z_H1QVv-lUx>iRfy7C1PX{UQv zQc@C>+>71D__bvH$8Bbp9$1BQI-#N%c}3wmdo?`Ee{jSs*=3430y||;{?Lkyv%J^3 ztilS2EPhBW4+Y8NVld6`5emZSr@W|ujlpANkzHL()z|qZtC5@K26A)!shFVzXwa}5 zc%TE^ltHm`!2^yC&*_pqm43_RWg{vQh-+z9+k#*YAbtO(&-~)7)_VH^IyQ8T5#zkS zyji~Io4FJ|kVLE^WNUX+8*s9*CCF4I{jZkY?gvX}9h4!uSV3X^;Ia|ESjuAr0ldup z8b2^w?mF2(JkS>=;11v(h&LD*a+=`sRB>=h8`v?I>7sC*tY|BL&$bx(#n}VPurL9_ zIp{f~HW34a0Z0oVHX1gVQM3HS*WM<%tuBwJo2qN-(mb7xu+E*0xiv){hZhI?AFTDa zZvR{ai|P)rxmJl^XT2CL?2!|m_8tt2sjHKzZ1h%GSq~~1K<09b>YkT39cF6g9Se26 zWh6^Q#}`Vo8JY>>8YUAHlWLzQ%2nw80AOOQm>YuypP)~n$m}~aCgWv>pP}&&(){u= z=-22tTxG8})&dHY=XJsZX2V3s-#&olLVQtFCK3~m#HnRg7q(hnQsxqZ4e^rHmX};V zeB9p6J49kqX?)IWbR^P15xD7^QL?MWP=HUx3@!|Rbj}VB`C8rMBLM6Sbw!LMWa-WF z_2I1kiHeJ+{WmF`@=8C=U5JZQ!H9fvH98YiRiUfB4O{D5pU-1I`wTLP@iC;1(DCT; ze{ZxmBDic#F0i(IZK{L~;8C;6gLJKfuP6k+V2uEj zCRFZy`W9WD3Fkn)I;26}w3ObV@-yFxA43BpIj&DIc(8cLInZl;lya=Prx6k5U+Mjo zrgxn3V6F|YurM#r#4ryX3q@B$2ZScA6$J+taV;vC{|DEnXiviYrY5C(c{L_M z2tGVuJz)3qw6&*y4%tZufxmrhv>pNj7gBTI?-*+Bvg zleAyyq_(2Q=jMGeeYsKsMZSfW02}?52Yf2vs}w^sYmFBrHv<|S$+9rE#5C>x7D$`F z_*aHciSYy*2}-h3ZRs==|K$MNz>7u?r+_Z|kEH<4A#1#W%Zd8YRV@YM5?m|gSjx3L|Ii1Z;2tH{zO`wEzLeF_sk^zHjI#Q=N*OQ0N43zYprgMY~RS^YqNA_gS` zlGfsegdvFunjqNa8RoY4y`{k+FQg>QQDt~rQK{ZHA01_s3z9SK16Qpw94{v#^b;tq zcHP?)D^q241pp9^=bqB83mCtPTyuLr1PMC_CHZ;O&ug@Rl_J1J-(P;~4=&n7&ak$-9)!QO!fl8e zMr&Na-ovu-G3v^ZB*btZsI0?8rgLKG1tv!hB3e2N_G?vj5s>)Q{BqWdzN(55JQJyL zsvAt+X??m7k(`6v3Zzxv?~yPn%M1iB5$lP$N3ON_?OuT+3MBC&GgQ@*<5bmyO@pp} zCL5igN_f6b=a&#ByHYzs5Te$$lT7|kHDT%$8%`kc-^4cMiGPaJj@km3A^)luoGrIq zFjNxX|H>B-!+*(;nI$wM5A8~azXSOdn{#>3GIrjaT{Ge7#1w`F%3F^-6sjG9j4J=@4l2ZjDo|ow7ZWDYU z1jHp;fLyA#g`jtQarJvVE}W0zjk&bwf0M&;M2UMCt}c?M6xfa3#rtcu8Le8I^(f`% z)Jb60r;FpwM;wR}MTc32_cg}JlDkPqUJG$HnpEoxZvhTqbiSdoSW&|r;eGcr@N~4Hjl%)EH$M`3maWPx70EXJ|d#;S1!F z&B|GCcOtY8cJ@h*-N4o6NVC*0O3O$qs;Ehly{5&E5Q*$4K0$dAm(FLTG!d9j3|#`@ zz+uyH-Fb`YPBSF6Y4E*{@w>=VpnX11UTCh;@e<6BFks}AW|xOd$Bfo0Hb|}cd4dN& z$yWhk*ZV^NUk+~mZWbnIQ8B0N^peal9L<-`7zZZEK3iGR>#R)F7$~8b!#b?%<@9vRZ;Jl1YW&#dVRMLE_?P#W4f+~HrsXF&5P z-hR~rh`+2`~#E~besmZq$_R7u*%*rmrb!oz;jdkVQSKd|( z+4@75lA2OuUS-b*=!1jf#{2!M7H5wOyCr6#LVAJmv~}%-88T-G>xTbgw(FCn)e@&P zK)zOrqxZi6K0(301_>v@cG77!ZmkDL1#=tqjPxegCg#r1mgCDg&l+`Og__d|o$Iw= zzrbkfs!iO=)v;9hf1Si%4h|-6V>K&TA^QX@UJDRHuyHKx`N8HhN4!tfmJK{CW!yEi z+Y{lac|RvVmLjZVss#*P3!lh(Y7kyHO?&hOg{z-MNv zVE3pn^~2jxRR96lfFFUg_{^zym(K*}J6F#pA&v?KJ@#($>?a!Y9oK_|??fL{1sc`zAQFR$2=R|I3ag0JHVWX_?{e;?SPO!-*F#PT(-_4!9 zZeYx#Sp-L>pt*0YQKg6YK1s4v$F+42xxqEzAF` zhG%GOP92)fEU2K5ENE!&Mlg{`RCN<&YUMKEKO9A04y0t{&TQX5d- zQUQCZY-mr}DPJn9YpreW)Ydg%Fqa)&dAyYNj;=k!^R(glcG{S@#GYqWMNO03I}s2P z8-+%d)E1`~q_HUkU@4DYJzT!L zEUU2hc8QU~;5u+#0iIw?Wn;O$lO13+6K5tYZ7pFt=Q*PwBZaRMlc*?i=Ir$QpWo${ z6h?|7vrDtv8SPy|6g?w7?(x#H(kqvjR7bv0>YRBL-{h+RZPggijTlW}mN zy(hkmoJ>_?XxeGF2}jYA9p@Z=xHe%jV~RGMPpbMTPJJ1t7j6?QqVREZv)&d zeF2{-iK&N3z`ZVrAYjY&u;;@En9taHCza4|m-XN01e^2>OzuDb?!v84Of8^SOKa!Q z#+66x6j^Zz40T{OB9;{ct!wGbEw1ICTm*@1CiR_6&UW_<7@Iw(sl9u-Dk!P+jW1{B zmxCExxYUD_Gm9>~_sQVYnw|kvH%|CbTH8yp~W{h6|2}Yb6iBSe~WQ zMiK)fB}?gLMxEsOO}Tpd(RMsS8bG z60?(nTaGJF%1RPJiZpjOar$2;WG3Lrcus~S8$t-7&LPV4AD+AW>`4lP=W(3rlxI^kT7U4Suk>bC%1wt?fdXUb1D3B8%;4&XDZ zxC6~+j>MG>XAw6Gsn<`$R={?2U>48azIgkYp)oX*JR`6C^1V-W4R#Bf>YBT9OX|Rf zd~6+#NayzlB6c!Z^0D>qp8oXVd0m6uD+DbrLFgV%$}DQ`=nsq9E2a1F3EI5=baMF; zf7KEkf#~RAe)!ez`M*laD6DVoKH(iWI=3l_kNrmi(}fmM*&~r9_i@n+1WQ4 z8hNU-e}>a%3dZX3q{m<`c?X1nt$N3n+`XXAMsTE)ix&ZZWB)0H5CKf4Y~VpQ>4Ksb zRCD`a0q~jWO4t(y%=o~E&IAzPAArSY(!1YTKBH@+TECojJk+#dB`vI&MJl9Zq&oUL zf+BazI?SxhY6vwae0MciWaMO4t}K7>?NfUvp58_Q5dk@+EUArkc{n0XNJuCtyKR!y zF}J1-&6``=1x1|fXRb&}N`YO}G*Y+|V4U2%0GV-c@t_XP`G@RvdeYL-?-^b2@MUF= zwbMqy;Xrm#Sb@Ls=%p%e#g?^aLUGS+Y~TCG{NJDyz`p=&KJ#He%v|dq4;Dax0}VJF z@h!k(NXt(x$CshdJar##UT%QQghcJrs0ff5QeV5U2vpq6FWC3u`&*C}R4F+r75EA@ zb=8)xW*y$XQFX++ww^Xl;6_SOymC6Bm=WjV;gZ}Gj2(+ZNgVyVr}7s<;PD8+XKE6O z9R2*)3-CBtZ#=+!#@r<`t$8)FkdfB3ik4=@C`~PFB>ALctn3_aeeg|8!fxidr*8;j zd`VOc?d0k;GPAL7b#_L6c?-EeAS`BhX5G|$k7H*QR#i8WQ?iO%I|q@--D?;ykomJW z??3;+KO~BOs`#}0U;pu^Qa-g|I|tW(=BkFaUQHu8G%CT}E08ucheD&1vsh9y2(HvM zXLoP<=z@`{Wfh*BSx~{TYw7CujxBlmv3@maxus1VeGuizn8b{`AAf6i+y%00V_T1s zo?C#=#FPyq(fcUv929^Hc&Y;S@gU4b?;j5qK!5{{pZznq$>rE z5iGBAN^VL)B};8gSXekAGrpbC#_9YB7lPNf)qVT7Z}NFNG}$=VFs6F}UD4Fh>>lmX z($zZddYm#uk(Fnq*68YMw{$lfm_YL$&27vdzj`!(ZWber;TYY$-J2*)&K^!J-A!ON z?(ync>RWd&WEW@iABCg4V=uFZpD!7j8ZBNt?dHv+_!<@)1{jMZMzS1N24Q8f$uWSf zv6sC!dAMos-O8w}KwV4q)^pj~7H?e)KEx@8S+`c3NECT9d`46Rw%Kxk`HW{=Wm?lp zV0v3Jei0$E|8E@7mCb8UIk6iPbF0z04P_NIT?6Bh*$qw3 zuU;?mR4R!!9v+?4-9II-xSPHLhYOMDV=sUA6Sw{h2jMYE-~I2O$UPJ6+!YQ0N19x` zWMFIt*h^VWt8Y*QV{A!YLCHTfn$kDPT^MEWZ?)OVB5h)NtS8Hww4qf1vF zU*@hVGBh>7ci=5;Et|WV-Mn~62wEIHyE)U$^5j6nJz$3R-Zm3+=o1GV!sy~ibYe8O z(Kpz)xwBb9QX(WeB)cSw`#`Mhtme${0dZ1GXilWkZ|4bI<3c;uHw zxNAJK?reQ>`_0KmvV9ZF zC%gkBB&B-C7Wq?6U_0EPyMHDwDXXi0np=0*%P)jFH0$K<%@|!Wv)sGvlQIhb?ax1z zR5$Za<>cn|*>`_iI{zNTWu%~_GB~;F?CxWG%(-XuG$0=Ip?L)b<>SsCJIxgKBmo_q zJ;vrXjZ7`wyaGD=r#PkJ@`}n}!-yD`BDcAf-RSJ5fe}w84A}6aSAQz2B|w%WE2lWM zyj|JQ<`Q0nW!x+6yJzAEZ7g+w0Qk&g1?;m?nDg71{w9C`uM_VwpE0mkZ(h%AI-4o4 zC23-6O6nsaMUguCI&>y2HYFC$^|lxk74+rrzv!9h;dWM|#l;A8g0lzf5uaC<7nKkt zEG%5#UhlQjp-E0&mOyLu3h;vLR7q87RBZLrqhNff?j|qFw)&z3+f(>q@u221zv0do^Id^kTrK zn_f-t#dJgyy*E)Mgg_Jt1d`~z8VttRaf@R+%}yrGnIw~BGWjz}rex~--<$u+Y z8jIyUm6cToS&LB#>6+TQgJTPcX}N$V8Jn7$owVjG?I9VIyHCLU)^$K;EUav~%a?@R zReJh{4DM<|I-EGx*3suIUi9%7bEStr`r)q!#^#ZF3lQ9;sJ?aOwfW7Lz_^WPY%Tlk zO6IF6wNujAXD-wFPXgvMwb19Yke|cT-jyR9;Rypg)pqBPyqJ6@DART1)hhoCCzyv& zTD^QdBNHP52|*Ry280HD`o~|a9;_fsXE8WTEvY7f7XV4hN-E@a2^Ccr5~|=Actw2Q z81*~>ZITEW$oSIOC*OUPRU`^=13E!vQqBhY#3aYG)7rtx$W7wYGGlhqOjlor#-iFfiCSf4WMq0rDJVN{_{WI|oLHLB z(1fG<#f-S3k=WR(vsF{iTnSBTK<-@YUR(A64)a8IOhE>^Mmel}2Ct%>(Xtel-JMj; zNvdW`PN*mK?OeMr>}x)sN9^bwg-rw~jK_K^nOoXUtsZm_jQ25T%q&C?{Q3sQ?D-vU zzmVoGdSO|EaNNYq@{JFFGrhVm*&Ahe++^qagSUV2htnRu$Z;$d*WB5kUs5BlfTs*i z7FRUUS@TXV?mW}Xdr0R3J4e^4m3>z?Z*_G|_=UTmNl;NqWso(WdLBL#!FL%PUqtnE zYwH=@dhm<&%Xj6(&7QD09A|mw_S>JUYrysM`esfAY8Gr2ca4eDX#Gb&ogbGvuk!V6MrrxGhCQ17PamR!94mf<6t04EnW z&ca0{C6&_Z*7jbeq+`3bu0D-9Gr6)qHnVxcLR1olS5)a|&LyVh6qYwMb_@tNl#`QR zx%kTZ{ymg99>j~800#2TFa8t}gLWCKX`wWC4S*N5t-YQ7EE;n*AS4oSoALRb_~dNi zGzaH1qthFX&aiY6gS*OSFAz^gxOZqWt3bf#tDDL7ZGFh^qN8Vc>E*X?-v313P|R){ zups92`p4h=m%FzhrYgnj+Ai+DUPwK#IxQC7IYi*|nXeY12-hE;e1sz$YG5(4FD9P} z%yJ#PQ<2=_7ZMfv{#WnKUz`h#Mhm$cni$=9>-zoA-b9Ji#ihmdjP%IJ%6Ry=Pb`lE z!eDA{N@Y^{T&SSD0FVtydAIE19IzCfGa!c-l;wbj){@%dxWu@++E>szes=DeR zhc0XtMlpq~VIS?E^ZVdXQL z1{OtqSM9yylWQhXd?q|5Y4_I8gd#1PS~`;}mmE%=j!Dd*F=m8)NkXWos*P~hE?jxN zi^kGH^mE1x(p zHir~_QdU*F@Y0>1fBiQ{7cuL339! z{Orr0q2zNt8TBX>?XoK3FgCL#FDX?LIX{kx}J1%FDw zt4Y0#l*|H`Gv4EK+ZtME>1i2R*v9()$G@ku7BscRQlDkDZPhJgH&5U3*)3s16F_Pv z;p(d&B6CuF$jReL6vnF`eBCoJfs+-x<|L-(POly)DXW-SSdC7t&uzR^*GdKB74;oe zjUpROSc_(I)y)egGfC$Q23QMtMc5ET3WI6v8ffb1=bwFN140>-tGaq37khaHJa_rh zmw)>VELi@0z;@PU`OI%tp@e6ymj4Jx z_=zEdmFX#9yij}wDaufvuq^M({9hC-xc#hjs>)cZk87K#5he0kK*`UO$@To1~b(dS)SvPh! zB9mFF>Z+sj%$VdDm=}^WmR*c-v zY~RdmTUFCJl!A1C&&i+P0Nz<@y+r zDZnuXCkH?J{m)U}k;W%XSPNq=?k<3_kQroG4>%#6l9NoLwt^Rd5rNGeO_Hm*y1VS$ zx^VI3oxpGrH42Fg9-bOfR9194?L_KplaUpB^h?W2j5wcK7hmZQsx~i5+WQl~Fyj&lv4=^jq!inI>VA@!J zc&2aHegSbTL0=?~#xst{NUeeMIJ)|V z)2j!GX}Q8Vw)Uqc=C_?(-I$Z>kL}Jbs%ZN5Z{PP0b5TjCfRG5v5Jy|jASf)xFG#c@ zpaBze+u>0$l1mj3>o47W2iCL^kK0&S*-o!qwz74E?d19x#5z(^Mm|nPHaa1VF}bFq zCg9=vhQ^$Q-7ub>jPVHz?$RYkX94?4%PHt%2;3+242(F7yZ*tVAdIZMe0%TcXTSZv zMqIKFHvVYnWH0Ojj%0;sn*z|%*4@7PT0eU|r+YUnr>CH2&%gpLyl^N0^O?7yNf^9c_CV6!4afolSdxJ2IEV2jC^Ts96~?&TJVnzO(e-O@Ao>U&>NN2ZY7*>JF^rj<52JHVO`Jr{@ECBUFIF2Bm;uE^t+ zQW|C>@_GxY*K9oxr3ww;Gt<@3UoJqo!9P6t2uC>7kj2T73z#nspYcy~rd}&GcQHt9 z2`U|pm&KzKI<=&l&;I;bOiCdG4j@#*oBd!Ad8Q%yp* z(BkpXwoBx~F?m^Z((osNiahlCFf12;IQfiiCG%ASbLa4! z?xY&7sfBe&gxG!pGnKPg7?W>Z}qVW1`@Rb18FP95!_u?ou@k-Ma%tU9-Gb!G3iygVF_iYXqjimp0PR8lOgECftO72#+A z23si2{F)p>ML~LAs@U#nYi_^1-O9^ep^%=J&RS$4%@H78hKS7Q$tn_itTr?@)X>u4 z-)M?!iVG^lB+*RGO~&R&g^pBw#HGb?S2>arH*k&3EHn0zt0sW?DFeV~(%PP(C%w|R zdcbFT3t9Ll#Aoo(n8LMBT*IG_=NNFZcyT#3iQ%hKcDb){{E6uD&cRXc5A}*>!PycYXhE zuDGTR935iJWD_bNxWvnDegEFh^#?XKa1GcA3u|k8C&9PS(ixrJj8Dnt|1%}4fHF8C zBLj193ojkHQ>7lwQj%}UE4~TUOgC}yI^ucEZk-~jJvs=7m}*km?xtN@I(RgnJVZ%cA&CnP7Cu0NBD^$ zCnHZLjJ_az#y9O$@AXn$GYxq~*|x15w`ehW|DvkGpa1q@R3iGc4~-6~A=Rj9s<-yG zq~;13NKA5cQFW1#iD4(bL$W#-f(umYm-m-u*Jq7Qjrk+sQISMzOFR!hVN)QukoDo`INm61Zr$^|f{mb|9aT-M!pLrbkqHg*V`f6jv7` z1MGn3EbPuFit7M-`gyWf*{GZs#G_urQ$r~4Zxeex>h;o&i}_}!(7~vu1!8Oi;4{?X zaRu4O7(oB)&{lySFb^xAQPnmkz}hKco>9f%j*P*HTELW)RVhOp>d5rK*gQW|gM^ih z<4do7TwK|V8V9%jPTE*%c9DlqAZKyQ@VKZ%Hm9)swGV!6>wrENtZi%ggE?$FVrs z@%amHJp9)Dr0B}v7EwSPyp>!tdA?-{_hfRKPZWGU^Ve;tI_`%jAK?gx8uBsXH*?ZSaNUcImuc4?!4@G6mzDk{Qv<>ck) z96F$6$VF@%ZMYj;p>CcKI9Xgfja1)(mIu)_Q=?odroU1ilye$-Hb9Jn`3$XujhBBS zRXs+U(A#6s2Zxi-D5~k^bY3_WknR$6oxbFPU_Zm7l8~R9kyqMHX9I@An%#1A5lJy%vA7}j!Y9A^Uk`78|L?|mGktzHYY#p8FHusPYnCJ6|!<=QnSh5Ply0a6~atFp1boBHoLzB^o zA_Z>@21{ei{QmFX$34nw31Mt|wy^g~Xl6$tObDNeWBx}$z-KN%t&jOT9N`Gh6%=F@ zDTQOtJ)Z%TAfq#^oSiJM1b@xwGOw2PY;}DlKrIr_CoJtPI=MKaHc``1qm1-~MuimD z6lWJ_3&#l+gzmwvJ{I*{{5i=F3W*G1v)PlYliAs#O{Arz9h@B`6G=k&1^brOm!Ssn zczg%F!^p%4HJ+N2`r1eLoK8ClM-&wm8+#gpA_Do}6y{6fj43WP_Uao~Ow2{u0d-CF zK@R<~eC&L|`K{|)lI6{wK3)eu+v(mXlusnmZV;c5s^GGOCctL~iBmdiPsCxz&IEdI z9Qt4a(mRCpz&JUDq-u6-$*`HDAAx#cYz>RzVlcSLrQP?w_={fhenFktAlmYvh(HS#d0z73V1S|K^Yo9ZfYjJ5)^zc%Ee9KwPb8+ zp{%NwmR+o@tej0Krw+3e@Nk?Btky{zt7{XrSGRUk%j*RBufWhK=G2CUh9GEJPwMjv z6xDQ{&nNbe&QclE)y+M~O6I8eH1_;OEp6S#j{dS*QOz(wXW!Uw{`P$Vu@1GXSS*fE z+gCAkJuH_Den54-XX2RuQQ-5LKVN`4(FQC>IKuOWM|`I9`Q|g4Mk=kFIdL_DICfHl zfAv%<@DDal3eX=fbTmNjGXfOwCQ*ecWB# z#ma-#)YbTb5u~FfAKu>H8Tq^mjYQC^LMENlWiy_vR^20}f z$w;y$PhZbh-oG7uPSmn3D<|7VZR2-op#T`p){QN|zEI)ebgq~~>QpLBkPD&hZ0@cGQ2 zwjfIO)83UM9N`HAFQ?S|0`M6NS3~mUqEo@Js0+ASXZ3^==rItF3`jcvVzJno_UfTY zdgnk#TCONctEH>8a(U&}JGW5MG=i;ga3z4ImL^78w4jNZ$+@_2Rdx6(ecJPM45C*E z;)(s<|LjfnGTJB*;&nd_a_Fc#i?XV6bz2oumk*$@l2BM#$bT)V9%JihbLWHGWe5jM zaN8pFlS=A}C2w0k{@y#cwf_wwm*f`*31Tc3Q_Nn@d=fg^`J z#9>UWVXGI&9+vw_^DEiG+9{ul5Q1w3BZRt1jOV~?1PwvHZSa>X|= zjK9x$MO7MzV&;hGWa`LtZgF)VV@6q3^anfbadu|oingx4kAKJrcU2w{N+Q;@ef-UT z(^(5BuWg4@XLhdL|M1K2f}+x5%g0k{Cv!Tt>^x%r@h|<1g3o9ExC!;=KkZ#P!V#V@ z6k$HYs!M&&`HW|recNWPf(rb6hgX%WU?;~_KgQ>g4`N-(-G{HRSJ*)jqL>B-hoN)m zU;Wpwh;^lsn^;&_@WU+5ZqCZeg2z=I9i8#zasObrywJ$Rh&jtd27gfL%b>)9E$`f1X zT6ae(=FAPOp2YfrPS8h_hnUa!#8(g~mkrEMWs%l{(p&q6*%Ncy7z`FQt-h^y`Qj}l zWfj!8s+u|=IiXPrl}+8Xt-Zo=aQE*YoeT_njKo}OR^c#vnZ}&WDI_AtkDHism-hUE z1zB2k4K3EpRz@CtHr2IJ9i0UE)7+w>)GU$s>yV*c1uYKIDAxmI)l5Ca=u`gvutD{N({N2@!~A*TH4s#*q`Dq?i!!45WbaDSoQh` z-%hU`pgO!lBI4#Yuibg)OIYzn3YS_xbG~^A&_Y}H!zZaHX05F`#PEO27y!YYViRE!`e=+~I^t`k${`z@& zQ<;R-B&2VoKe;xUQIL*|c&KTpb<#V+V_+#8MI}WNjT9IrDxt*V@qit@^MBq+$v`_! zI=VQnUtJeg_VQtAdvg2b?GSONgRG*g-VutV_az^Ix^Pz5`}g)Vv_!T|gbD&&t4}>PdY_iQwwy?t@o;=Iw{hznqIr0px)^$f@VKFA2xBwDtOj zha+NQAYPIPf@3B=?LB?RP0Td3bc6yjv9Ym$KB=h-O1p759BXDdCSH&jt!iu~Q5gKQ zj9A-7V@?PoE$%+PBa^F9@oB7?O(%qRw)sixm7QC5jxO3ddP_Su+&q1SZ{-$MAKZNi zc#DCNm@yOJO9P|xm2Bi+(boH zrDvpjes?aXG)I{3fiqUE)iKF}s~@p}n3f~TTgl4G);HI`{pDL7^v5h{WozXuE@&eo zE5lvqwDq6agBY2(B8CEr!f>(VauGarNsuE#7 zGg`G^f8sGlivK#|y`WEL;F91&%4hV=oCq1Uz$ zu)})`rLw-Ox}}Fcv4Fz~t`Fc~OUo`^+Ie|yV;`^uJwMw|D3tn>8>p7VbcE*MLw12ka+zX%DZc0>K8F zg~Oax@KC^i%fmZhm^~X59?h6sLl!xkoG_o5+c_H$3b_3+XE{7t)UlkJNm$#vv$TCv z`04ylEUah*-?q4-xxJUE!21eV8F`q`^j^+x-#EN{=DQ7uQvu1K!*WMB!gGZefzK!? z%QmlOr?v+1@A#*JPWD|dJ>iIMhjDRpe(Q?|o7XoDjSZ0FD(b42U)^Udj7jz{%gM_T z>xq41ef=z&v%4swl3kRQ^T=oku!#1460)-8nAEZSvb>4qaU)}~9wI{{!`#vw$^F;R z)F`ekMy}u+?Ars#jE10iQc7A1RXG!MF6iB_-ib{X$>{_~25($jH?u?+nP9P)K`wpu z%Bqrzn0||np3d5p)ra4FfGnpmvDX89#x)$y>;#;5>AplTIH?IeO&qIAY@KbnI9j!M z%EIl3r~i1Q`$3=29%4QttDutCwc{3^ACX5+tmYn*7Ar5ev~jq3|I>(AbdV4ri%{N9 z9W5+x?Ccv;RTG8y(sN4YHm*&r?4R)z3t(DU*$%UpNfZW+Ig3i)WaO42gFgy*rJ81P zSY&J+skgL7U>OFEU>#k3Wo1!Ud|pWnna;+^z&mVh>o~Q%f7}Ee( zhS*E`h5{uhKA$O|T*@MC*m_6i4&VI6%g?iqMb$*8;U%OeIJ!DwaaasiEEvMq~e7u$2ZLS#aulClyq zbZ_r$-#ygL@8j0h*L`fh2`7W|3l$Xz`2_l0y0_;W{FwAmTVLDmE4wJO16g@lz?VM! z?ZXIh>jw)LL%36$r$cCd%AogZv8erULGK<~ zJ|iWK$!J~-$!zzIE6*lvC~JuRUW$rJi`zE|Wet*BMaHFeP?^&G<<}3W=Byq!7Hev*ZKaSXG`u3rmi>dzl~lD9Ry0;NH5FAh*0hi@ zyz*l!JIBremaw@AAUGm+gtMZ=D@9Y+)R~yy;TPVV4GbHfy`cYy%-A`)Hg^qKSlM;< zF;g-Ng`2BsXil#lBxk^?!ezCj<}SLh#teKl>d4f<*gW57fe$Pe*VRAX+)cNzv|(`9 zPFjg7oB^Lns^*mRU(4;>Hg`mqx;^{g^O@hTLvyu|yvz^JKf)0XFO>1Bea}0e;pLl> zv&n)$bWql5@qYGHct`a#cdx1u6iFDoG{-soUL2d$mLAS1i20VkPQ8eiO9 zK(=gy)!GNz&8*-D)xruwN>&PL9lsF2t?QeK8KTg-wVn0eE4xXVNst7pS}WiD>Bvsp#N4cMCjYA76&_?}5}Ysp^z=cHP== z*{qk{KP>S6S5O=Q{c0Y1mvvbA3_wyfH?eBMH8`t)vae|%s)p_C8zm32CFeVz_8j4^ zHnjKC$L4kQM6t><9%q@{_3nX*Hu8ut{RHvkk9vo=Bno4EZrjeu6}ePK9+A#kR8&%d z;B=BbYkIDst*whToL5}aLud07I+|L#?8V*i2vMHM%*>3lyl!RV2=SEedWRb_6|(EOwgYvzKVpI=>TPi>2+R#{y`tB*O8kqcKEC#L5QjxQ-aVoH&5DFdv9 zKE`ZyGg%nYR8iCD9$*z!G%6@4_K(g*#E6|K$E2|d<*cgF*9&@fRkhLb-OoORd}gTu z!aujy_#+$vh6-M-uV~`=<}*?lsccF_@kkv1?i^QnwsARALHUv4waM|7gXPNRO3D7^ z(5TRn=@ChzMhFhG#7}N;7x(6o775PI&LdO9Cr-l8r+@si#p`LcoWGg~k2P-@NmicH(uH(sw{#e5T6$J!8h+m#EC^<LcXA%-6|V-Q zY1*U?nE&O=7kc!(Lm=t>z4vq9|9hshaKy#(kRtkjUB#h@Pp3FMqwxKcf1dJ)uS>=) z7+>_wr|xPPvR6e#L_`wP3jlsd%Ls$Ifssky*h(8?1keuuve8*%v#$P`vKj(-3TmGO zNmLYtZ|}jk_0U)|{HDP`!I24!;YFy6f$kZ@F4lBZLPk>?v$zURW6i0kvIC(K5>k}j z3I2j6Fg`fF>FE~&J8~3klXk;?JxMSzwmY7jM=wOM7aX-!y zl2RSr<9VE{8~>2#f$0r6|Jl*i3vgN;v8$nl4!>}WoFX8c!g6+U8os?xsMj|8eAKlv z@$+T9ucZ^#P)D}k!S5CjbF~N=;W~g5o#^I@?*_22u`v`%}feZ-;~(wm)#X2 zisll9t)p!~#34?cQ>t|q(JHK z@ZnhBWS3@F;j4r?8ffWit?aEl`tYHpjRiEKqOP)bd$qBn@!(7F^7nk>vp3QU1?)ip z(N#27y!-XL{j)4^IH67QuzCGE9hEcjknIdo^i*1FVC7^Y67|fgKu?LBDvxbq6pvF2 zhCOWpe~Lp?MIt_*KH5BEVCkOIcHPLvC%5go@g+9Cic3h<;ycfoS_;hs7k9?c!rIM; zEnS0(O1w9uoV+5ncPcfzls-6PY|5)6W4ENQY@+l`ws(&QM+o@Oy14rS{LtkTN6W}! z=mT@%v8jdSIDkWAi#w*~+>cdlbEiNVxVQwNqc=5|+px*O*|UG@ikyOyEJltsxgN9M zl~P?pr+0MO(ap!rI}l)!%zoAl8ZAMfu!=Z!Nf$0&9$mN&pRI$7M`zz;ZfRXRV-%hb zz^sEgmXMYQeooIVBT!jFH#M4CI=vHD8i!vkpxsSrm_NGxn|?QsSgJ>0j$S*>6P@S> z=sDpTGp93ztJ!L2*w>^iT1Y~pH{2BIU|0shv7x*5WG_1TkUU9uU$^<|^Yh#Dv8lYZ z9vN8~Vi)1!Wp1!NEkCWHwE@m-Id5e~?eFmP_v{>?m|F{!6$gX|Y`l0yTd=7?R#C>w zPhSFC!6V}0;*A|RsO>^_X;vM%4lOS5_mYy9>X~4^`S}}u`x!5?7+G+VfV&QcSuWhdQxdT(HUKwVQ^XcKHh*~-nOGFD=GM*vz<48g5}_rfiwiAz1R zEJHTW#NoRNM=AM(zP3L}|6p7k;x{ww7EVW(XXI40v)gaj`ekI2uU_=wB%B|Xb0vyG z5!(A+eEbO@1SMr&`mTh8B!SYOS5gO1#4lK2EhZ_mkkUKR-aQ6+!oae)aA|0I1M0O6 z7z5BzTuN?ia?ZfSde7Lh)uqeOwDdeIzz;FLH2b`=`dVTq^s~O?(Ck&~OWc$yD;s;-z+7TR zA#Gq5?wu_suh799hq7pVgCgmJb3&GS>Ka;;D>v|6WAQc9WxcP)ln?VaC_gHKc;>5l z#9AXl{^;S@iB9wbBqy!Vp4)%yc}B-ft$8!cErA_u$Bx7W797$P8q=1j)dG@|lEpQ}aQ8_EHwP>ZE508*(bCl-Gh5tzTK$%@#4BrEC|8L>e+pKb9iZ3h;zUZx9?w@*_tsiH{l;gqL7X4jgLNjWNmjL zw&b~z+r=6%28lXYT!FW;w(p-@ADr2M7m}h9G6rX^Dk$=nw4xI;Xah4)vW=va zbZ76Rmwzb0Y`{x!yCsaAd@ExlAT-9z+bx@bQ&qriHDSYn$2>wTx2<>lOWv zT%#)yh-Vgx{HF!;%#|jD!U@lu=vYf$TJd?{87VpOit+fUO7^uFx18=0_nlrP8d@5g z_pXetj2^7cHa0Wvo#Ruo^H0)muQQ8%EqKy{IDKS!28EUc zFq7K26k9nOl21D{Aeoe2@Z~q(0-O++5J2UOyz&MTt)vQH+0e=#)p2z3>SRrkX+zbG z?V@~1?5gS-^nqF5AZ|K3;E;MEO-5F3XnJ$w*6X3s$UW4y|K5hVY+884MgtT?_dqIDKa7JhWO4ZMM-R;}2oxoqGc}&s zoWA~GJ2^XTLIlDK; z?GWppe_dVKN1kVZ++(Ygar0h@4GFbV2YJRXIO^A5e@pEF3@-pPLE&+&T|9-7{O z7lRP&7EuQMlk1k&+@imbs3fo-@Iy{UQBqOs8Cml1<}rVKY7V7$ zQWhh}?oCE!6qIx0NT)S*n8S-c0pXRnw)9+X=n_Ctd-o_*Z;lc}Q~M?(Vp8~DwWO5v z#PSYnavi#(Iqw)&HS}gy%T;Af;jXnuLJ-e)Vy&uX6754x4^EJflo(we*?YWac+ODhDL^LeeQl3Ed`KInW8^XLcxY@$HKAIZ zlgc73D_zl4;p)w;8V0wD;30q+%ZrwbQ2-mfj1*anZ2ue!pn|~ZS(`un^=p+)<@|## zUd~m`mEe0dBs!#|uH;}QOlnTb(v1LML7%?G`RzHYeM{k-vYe-1zAe-l0kI!xdH+A( z<8QQ$;IwUGj(0CypHI(E<-gJ?t0-3!t6uu$OKjg@G4>6(weLCnMkeg5EP@nCYW4+i zh(aIUJ?h^e2WI_hLCA%llE9<8?1U=_C@Qj6XbZXPGXF`1jVI3`n;eX1(#p|t) z|6k*Q?$VAfp0t6Pypmc%N1u`kZ&gT3SD!X8*FCZb#`#+(0Nx-_`U|l2(8J)!1b_{I zF#^J3e)E@a2^1ER6UI^1&>EOphivX30SW?80jCq6x3Ff8EGj9hhQ}ng(uW~a8n#(+ z139;(Mp_!v(LD}83*H>SPtWKQbS71}wgw_igj0yEsH`$Fw-p+dl#*RiT1|jjRss5I zWen$+aZeIkLny2e$d(6(n_RxRw0$3T_OtWPtR8tgvXmu?K9bqAFwblg5h|ExeKsdL z(N8G_S->*`&jZiMvHemql8OEeD`~dDCPL4G%RRN9^6Go{g|bHwoCTe>p4MOe;eEz1 zoxkemvdd*KF0a7tIFMhS8=1)amQKn}ib;u)Q;-8da`xO=cwAIelrc(g?`s$3>xQGN zuXFqL-Ntqt|8Z^XZCV&4{j>V9sj)@XMF+ic{KEXYhB~{)88Io`yydXi&=3Cbeqm(+ z;()*&KKtg=tYU$SzNU`m_{!Mo-bz`08ULz*l8O?p9oIj@qL0!ww74r%{<#iiBe8H@ z7+OlKurI2xH{#T@>vAW0O0+JawJEKWl-Zr;m-kZ~f{}Y1ct%6tDh z1xAca%x}E%E_*FWP=>~4-NOsmT2fciGAMomKK|4E)msuAV*!8@>^_w_CGb`NGn!hNu&1A*qH^E(sdw*U?{zl;V~)T zAKPS@6KMfY)stw2l}!-0CuJ4@Ug9^>K_XF%fw|@D_vIA0uGip*0qHH}{g1hM)JIS- z&)jG^;h7U1b14Fz$$u_*27HHwV_gZGS>&C(OM!x2Y(x;%gzCM=yH+;B6|87+bPJvI z**BliM`##13_O0$+=Rp+ajUaML=rL*GK(@`SDDC!h@z?@X&LDzY7@T&4VX}cuLQf| zPv}+CP}{tBrF)FQ@APY8ey($n3g9X+E1|g)FD@kOR6Pzw-}pp zn^psi$)bj&wef1ArR61X%W3Wj!mC>UPN9&fy2RFodxon1NR^_ z6u*D+&sLJMO3Ao|4C0mS)@!x_T&7i3J3ThPon0jC53H`PMeUhvAkpaqvnJjcgV}mp1tGC`kXSN`OUlA_kICaOJQq>6@1m%2o9*! z5jr8L07Q*%?+uPjw0Cst8C}xa_ZiM8C~sqopv2I%cxrh)2@WFKIeJVi?m+cQQ3)B0 z!CA-{M?yl1Q&E-U>J`vCwhR?OfsbBudmkV-=+oip8w`L=mCr5k)TvX<;l(R^k2JJ+ zS!XD5>7@F(td?sS6`gK2sOFypMRng9bGA5R4Dm_<*`l2o@aneF6*}M z<+tA|yc8%9gh?+*U*26l7?}ZIap0Q%o4*bW( zl&a=RsRNN2Cl4oFJC2jOQ!69OPV%#NwtwTZC(LoCP#rgdU2o<1?(d$CERFE*2PKB8 zZmzoi>h{p$AiwpEvYK)|xjwxhwTaRc6v?9(MNLe@a$0B!kIl~6>$L9V>6r^xcK~-wrsgXRX~H_Lht12BQz6*LRB?& zbdM~s##b*~yv+YpN>(x8lfLm4)AIuTQr*1+`^J_bXtA+%9GSmn!kJKsYkTnSSFp>C zZ%_oacLFWWBY8H249%hTt?&}l^D1zywhnGXGgtNZ`(}njCQdBfl#-UoF05*!kHWVM z=PfTTZoOjbz+T?<@Cjm#ubkG@L9om5Pym^7i>ocI?dCS_o-?z6=9ktIiBuL6$qquA zT3Amk?+77TJ(0Hi>iZg;oxoC5*DvV2UDUoIi#e*{If!R|JB!$BJHj5L9Jb!%-au0@tMx$9XEWk4mlR%PJl&>Szx_Y}N zWha*7%EZNmBQus4E!+FrbIWtPhPt2tk+GTas~_B7y|oICD>V7s`ExJ5d+)|;*ZCm| za9Tn}!piRQ=8IP>_RaSYoJbJ>q>$)fY(rUcb`pP_N841Dd?U})iFfN7Rq0VPmm;V3 zEK4TX@tNed>I70#8Z|Gp;-@%7@3G(+AeV@;H2g|7dCNbI^n%E#@0ylVT(fxX71rb$ zYOC~Q3Gom3xRq8nSK?Z=bq&CNE?wrHYIb3DOV<#DQYxyanZt{oz5<=HvkI%W z@BPBiNcfJ%!X>7n|1opswvy7b?YsKV3+9`Gxpy-rL}>IRZDrodcBh7uQeonb(O+h!@us#izw*6lEM5nK8961xIxEb*pQs zy>$5^7}3(xy7_SDmG@pgV{}GnvXQCL?Kf{f{^%i`Eet6R$nHx!WCTTSTma>CC`0D5;9`tWATv{&$vAwN)%n6(q0kQ+>p|dA6ofS z9HOuAnDC6co<(lQ%@o{x3T{zORrk<202^Na;14tFcg|Y~EF(I&dhWdZF1X^mdinE@ z8=07oFW#`Rb>#efescMyt0#McirVSzyKg0>a|@kLYiJEjuG=~CtN`>4jc3;O>>Rks z^Jff=J6Th~k%@g{D|SxYvS{$^*uu7|`e_GOFZ#foyaKo65CF-*)J8yPEP@lI0SC3T z;Wki9OwVs@?N(M+YwsR|6O8jp>$-;)C8gLbB!WazdnPmU1wwhziJ8~#{=(AQ4k0K& zeW8WD%@a>9Id~wBtYDsbk#gkU!zVh?-dHVG`_RjV~lU3DK7PjZ#{r%J6D1lp1-%#Jx+bc^q7o9wu;6Zf_HC$VR zqno3Ropp6{l@LcEQOLT5)OehahzK{_WE*7Keyh;r^5K`of1AWa(G98XWigF)Nv#Fp z!ku@16tRvA&&VpA&TidK#?6&7@9Q7dC;GCp$9rG?_u9^DM&|^|`AyDSt=)Wd=ix^_ zf#Lk)8d`co(;H9(Mpxf(X!fd4AlsrDg+fz%Cd%ttplPC_s1D{t{JtR!f{SXZFO~l)*I>?T8mpRKX~V> zz|c7UaT!?*ZD1}Yk)2w6#=y9De8t0u`;N*isO;z-h0Em%uno1uE_m%yQcAj`dn_fh z7~WNBbu)?5Pwkxyiim>`${Jt2Xz#3NU^FnjVYVMELW+tKJNj~q*?(w5W3!>TEsyh z_o%;WCP7(;o1A0qZPag;$Osv90Yo`ckt?5bVa; z220!b{q_xkgCi5bLlsqSDYt(}G;?H8e!u)#42`ZMP_qkpD}#aIaed>f07Vi~bDv1+@&CM6K{By@Mj*;e__lk>HQQ|VfFWKJN?!{l+$-@denK-#S(ne@d zj{pyUkFLQ^IIUMnMTy!^b@g^tR#hf5TdeJQi3b39wqCxPUXaeeEAK$BSKfaa{Leoa z5FRkSIW@jMhNmfV#x zzL`G$G-k8}y0IPi^sBc?-6T;_?pHK8Rz+jEgPQ{ig=*|*42}*K+Le>L^NUaSMjnw8 ziC$1AadAmh>0nGQJ?t5_p@bzN26(13I~ZFPM<|J^|IzpV!V8Gu(&NK3I_K=N$y;en zE4gjgRkV54J#neIHO-WRO)48(>0f>GZFZq>L3e&>T|J40;4CvuF5iqv;ue5gU39qd z^3%&s+-wt5^9$^Z-!nXS%AzVf*bq*VH?y!Fp1s;PzLK0>v~L0|O6nX;Ov{&)k{X=8 z5*!f^Z<|$EMeZ5`+j2N(EhLh=>}zqsc6@oqz{u3iD`0f)8pKYP*0$i#W|rIv#4`rQ zL(`iUR=jL605)Tb*P{{yqL+|7ef%d@?-h65EM&ZN#=`X<`NjU6#pRh9!~;4)N9FtH zpXfwKS856xorS~YG0zdtSh^dw-zsd~$-C$;P_Su!!Ti=6yZIHlLh}ub4chwJph}{k z$RHA(sH(xWMMb007W1gvw``6gVotd*@?H`+?%~NW6YPC zBXUZlmQ?e`XRmjUG2jlB;N+{Dt1}AI!KDP-P!^RGCA2F$C%fzSuW!Gz(!7~z=FF{Z za!ajWp$W#P_H&qPw<()e^*W(b2 zyCooiOkhMz3@sxo#~7T8jOVVG>F5~%wz0CYH#9Z{0He)Gv(eDf?Hyls_TaW;l9N{i zFyj@#Oa1}pHaNQpty>An#@=ywb~CeXq^SErU{*U)^cki5q- z(TR?(I6O1*T=C2q%hN5}Ic+!di~FO+Ww_s0=dI2!?JhdwF@TZ7(1yEeNY(to6C+cjn-6#LumZfKsjWG* zFtGRdW>ZJw!N?3yc1c!5LWG*8I+0F*8Zm%}@BaSj?9~}Kdk0oTT*U6> z1Sh@u$!D*#X8PbPWk5IplTtY?GE?(X3#)`Jg-tC?`)B&s_Evju;S2jC#3a~m#=7R} zEjMzbsyzVzdW|7EC%=e8~i{4o*6A;$Lfy<&j5KR;*#p-lI!O~ z^J%A$-x*;G2#fvrzy7z1v$(@AS5N=G@ijmQy834)mUn`}Vxe(ajNHQ3O8{>~MLGKv z5g}4oFxvq61V#)_ZNU8zkVs@3W8}d*UslwU#rFMYq7yQ~pcoq6);$KdBtWo@Ya+)M zt^)|c$gvw|!$B1p42Ir6>){&&&SzlqioGK{$yq^BsgIp(%x$(Vib9j9{pqFL#5ZQY{>-@|$aM$F;asLY!5mhB?iT|HCBf9#j~vlh%VkC_O)6P`KIvDRrtt**jR z?DNDk5;9`B^f2PJ9Q>6`rzi^qC$VH;ZXh%^RA?qj3{^v@hEjRKv+aFtu=N~LRJ5wO zGQA*8T|=EQO6QNvNJxnHOfcyqG*J|PM+4o>dm9a{4g3i$0AQHo%y+(gyP4W_us0J> zT0vS_eW{v;I<6h(>cb9wTiaQ`^v>Old+Yi}`a+W}Z7gRtr*~ev5f&$q9&BT8^XS8e ztG8C*gdd>HqRdKsCHP8D%1$b8Eaz{&0Hma>)I@12tu3RB6FYW`-ILghXp*w%B32}J zEKWx0=hDbVR!WYLNl*02E{kpiO#Y+qA1Q(u!yYT1(KU4_qTfxfpDXCRrEP3`=o}k6 zr?)=(BZ=B8G;VR>(!kV)rna7{x<=2~vX?*a^Fkk-z4h7$kP|P09Ztz4Q3qg{=XBFv z*VE@ETxAthzW>$#2lOH#$$c-mdinQ^EGa6hmQ>-Z`8dkzqW##ywxN+J5{Y6CEx@@q z5)zVtN#c@oBqgO8gY$mD>}n|#T9{snDw?Vq+Te$1aq;esfNz6I+X<{dLju7x0YHaaC5YMJdH=HJ3> z5pv-}qtV4RMLt1nmt)%X`m%{=IaT(Te{g|g`)>ZZXI-PsFF7d%Vg@7LGov&bS00Q1 z(f2QU3NcZBtat`3iAipli?5!@ByD;nH1KByLju%s?~M=1^g)!Ez*38*jvixZ-qiep zk%{@#>Yh8_LQ+jL<-OnjkApK8>CLS!^-rzA)_JDqt=JYZ);xA{cK7?_58sT;UxRv0 z0vQ;Y3`}1+V_=k+me!g=et>I^z}IF$MSeLBt7o7`8|w58@#WvDw7zt7WkgY#mpm#VAr9~c3<_D< zRN^Z>`|r=l-DC+V;hY(u$fQVO7ZH#~aZPbNr#f3xTXSl2^2w*KheQPlO;%D-YVO33 zuZ=cQ8l`1nh_3Kl=VrNW^3XJD2j<@C=Z( zM?z88o%ou`Jj$+uy1-|*b<>{SOBUQ740CgEad7HFtNO= z!PiW)fkgl17k{;LJj8n^F)bh8O81J$!uH-TX1ru-C;SmRx`KJ;Z5G1dSvDs*(TRR? zX{qSaipH=pjn5U&h)bhuW|9K)E=SjR)Gwwgo)$KH@ecIPE6>x^(Zn`jqmrVKNZ!|b za&}TJsm8?I1fYnQV9j-UVfw`SxH_NTFSst?DNXBl)|3RXAucWMvu{2HIDtkV@@w}F z^r~;Imywf+Nr{0{TmZ3*ua3Rz-kbE%UqZ$tx&r+gq4x;zo!Svp%gb)%%^ezb`Ktf0Y zi4F#g4K}!78#nAYHjW)TWwY6Glikhc?r!ec^X_~5-n)D5KY1gI2x%be-Gsc@pwHpt z45OcBMtCB9^!t4acPXO~+c3UMocJ&z?qF-Dp)>*i0J z&wwQ30z1}=9fQnUFBD~xB)+ow2K!Rk)VOo8BRo1}`Xx2z9I>6??&D4!r-}yvgOt~m z^Dayp7)iWkG(s-!EuesT#bgVK$*c1+nKzTv#QV* zVD+Tl=B}Zz$an^CS-jo0nT7QSpZ{s+>1U#%F42kUOx~(6TS`Mi3lx>K9Erkxqm$>K zefAB?>>z`?qo0voP~qs}KDDwfY7hzD8iEu{)(!ahSnH=H6kWibe7!WnlJzQ?HF(M3;>M*Hn+54^3GS` zNbQ^*;^fP8{G^iVNtuazjnHTQcpmumG++a5QYS^qiNZw3>~#8!uBm3ndPz)~cX*NK zz^y8Cmwn|hHZ|rfa(ah*8Pkl2IElV3;j!TZjJ|}l_|BmY@n!)aIi)!ZTMH0x$uG~_ ze0arDGH}-o?e^*qg1l)3g(Ffy9bD{5eI#`ab?*Rg@QoaS5GX`7q57k*U-dEipxN0n zKv8wk^ctUkf#)44u@aP)oA$@Qf7RS~P`FIxtO|`wi%pIJO{r(32knoBoZ7<5ymz=q zTSq%FHMzbA+qjsM-xq^4QN!~ynilgl^r2H&Zv(m-2GlA}yl*=89H}LreC$4hPykj) zz#kTX=VK>ly$KLBX4Nh3*(mC`ST%Snwp7rbQb}340^6vn25rEcl9^9sOqF38Mkbbw zj1Sgs^z@BxJ^J{gFaE>caeod3WoEf>Nl*s{5Ez9fb7DCwzg+xKbxqwLees`OzQLkB z8F^*x{i6=f?lUVl+&m8oIYz`Lw{+9ta7A2GcWckE+;@3cf_|6FR}D=}Z5>=D7q^7H zEDelMvlnjq`0sxuK`5(GnKSt%7}3#^((~>;`_0PM?%`Jlha-Av+#V`(aAv28_p-R> zvbKR0aIz5i3<3CR5%_!xa76vwS0hErPl<`H`B>e;DfAhTOj1P8W|@t*F<~aBiXq4e z($Ukobm!vk$M@SQZDv*yC04xryeMPjhOP!uU$dE|#6y{d8Cwspm`b(@h)<2b{p_ZL zt3w>qg2U+CI@Hxm%o1rTA2cTUzy}#@|Z?UN>&O&3DM9+3=R*19148lz4UI-raXPo z?bP<-{>0|h0{1AJT5fvJR++K=TUv)pU&D}E#f|k&#hzihd%!DZ!uzPPr;G#<1=f{ZeAmtrO?QD(f)wo z;H-iQgpx9`ZD4S08V1{cUotW=TUfv2j`lURumU&S&;tKaQBfP_E+u|fb`Lxwshif& zMiHGFJmcE+$Cr0L5cRASr>4Gb>iiYf(w(;1kITs0hL+HzfD-`dGqVJNlYhno+%13Z ztC1q*rv#;EF@`^-KBI$D@3>T4&=>2SVBdSKEF#}$YIXXH|M>;B38N$#qwDDEFta|r zeC>RF8(vFWV&Ne=G3xxaB}ly&pFp1*Pp(HLNGwRHsH)6go?G0SS5sFzd@)EpWE;87 z!NtMT*ONUzE>b3Kq_&BfiKqyk2(JLI5gwf}HJX-}Cca-?L;do-jkQ~A>Y4{BslWJ0$+6t(0vhr_!&cA}XGO*STd@>=ZMRvk!#mmUaC6o{1$Dd$^@0RvnR@Z?> zQW=|?^OiQ(uD#bY#1>zKl9z`Kjn9Ac-`{3_R~8tgw1(K$KLTzjDk8cmEK!WE5Kr%b z#~*!FQgx6Rivh_ z!JfSs@m;(zscT65T%ex}j?IeZb9@8CSo{kM8+VGU>kt10B4U$oz4yuVrQPniR~18d z?0n)6k2wJdedc%bg4@{7_RZs^NO^ZL)w5*b7f+|pfOy5*Q*PIU=6R$yhj5;DtUXu` ziw=W~F)}q;*c*cWR?+0-58eTk zlvP%*KKS@|f2+o~$Vt{F!V)_F^7n5WJE)=@C{LdN?!sm8DQC`{Y3pYYTL;7|x9A(9 zu042FBUT?zRaKS7=4IvPk~)XVF$V#<;2r4fhDInUgHoiag%ocb*-2(rU>m`Wp|RP_ z@9OF0m(>o8@I~eLlG5`g7OsdEl>{;~z1Bq;Ywe{&UIHKxD!VH?d)tqH)i?LNoVw%S z3+?oAVi5QY5%_Wr_=p39IK6qi6e;g6X8KmF`qS$(AQ_~v_DjWu9m({2gtR7TE+;4k zTaPwheEC5^c|N2=WprZn=I#|pDHttnt<{^$I1;qnZWWNDQZt~vvn_2cxr>~I&3QVH4pE(^o~Eb2dEzYAw%gvx zp2nqF+gsyWaJglFppv*8P&dYz7(4?ZGHh1ZkJK7i2n=Z;YC^O>AOo|BQm95?GLALloj8W$P zA(7DuX#~;{C4&mfYNKK$?)frILu>CaxIyZn*EMwuclrfJaOW=@8t+eIdijO$mIbx` zgugnvc(SH17FE;@bC--z=8#jUs;Mtux%1KQ|K2^bS2=XoIp7G%KQRb>=8HMt6&r|x zmaUQ^uCyjgqTR)lId8Nc5@ZjA~M^ER*lj{#Z*$oT}ggndB z7d^f(E^ZFM>t5B&8AcbqOIB7QFf}bN?b_q3c20J{QGk9Dn-XhdZ!^fI3TI|O(0=H> z-#pDJ&V~#|>LPoFdj{Eqvh+EGxp}$OG}KhoRY0x^ z#6Q%Zv&aUIS%xWZ8zPlZ<0-eRY4@;rUZ$bVJMj69(zT$~@B*B}tCEQwg+s98_8CJh zV6zK&k1oh>I*~pD;vHLF&wdK}437E8IVc^pk;3xY_dosGF9^CW>FVJPO3vc?wyN0j z6DSxZuj}!44~|or(~y~vKKcZ0d`^72MpxemsjH`~0y>3;_!orOqzoey)69Z$_Vl!< z1Pw@BQYLHaB1{2ZRo61YT@)rdq0B5M7dJ)e*yfftlS`W(UjD*g%`C0?%hzHO(gw%o zBIBT62LzW&VSN7QZ~GTsRM8)L$CU$bNAr%K2+(Kdh`?`W1k;QON0-`?BISf&ZeRoY z4B-^}42Z6oCT=35d#j9ctGaeFU0BcG(AaR{%KZH0c_S2bn!-EKdwPv8s<tMyPN(YeuvKsKE>6`RahJtv>it`!2!V!6i`1Ne)6Dopan7`q@bwK zMsAy0o8p}3K(ejDi`jm1JuLd59WWdY@1k`jXC>#B=HgrNGP2OxEGTmncbN-%RCGcN z=K`y886aq6b{~S!lM$YjOm(s5{<>yMjrg3 zon1X97dDYP`tiwGBi!@KDuUZm<*XWwy^xkuBpjn>U_8A7-ue5H$%3{8yydv$jB0!< zhImBF^@8HcC%^vRz4IT|jy;XYX_Y%}2Y%ZS`iwB9Jb$ z`W9Nmx!l1!n4x>vY&C&Df&qLeP$2FlhXMqOxKKr5){ucK7sX8*ITcGsw5A z2Jd0BJ0exyzB)7Chq=DhFlNfzE}$Z@zO$IFAb-sFu(>X9y%*T-Kgm7=2rA|&hGmn8 z+z;x;9=FeZ9GnbYX426!xOV^5<(=mmng>~4a5#d_Uhwn|z%_RD46zjyB>wnG>3L)P zRc)Pv4v66PAZxa*t&PIuXlWfpkqIimOr9SY=CP(OA;re)=<4&&Z#lW4J-qyRi(8^z zmW|+z+dnGYR#VsF%w5h9TNmr4anf>1f+OPSVx0~|_y>hte)L7>?1xz9lbGT@1^5vi zU{4rApZV1k@QexMhP-*a6e;g6mPU30pULbzaV{7 zWkyq56Egl>PRiXEcQ)>C_ykF0p287u<_x2QD)Ch`EiY|!YP7kxxqYx*)Tu!nd@DXR zC)LfvZRz@K1Fx{}MmhMZ!;3uOO7GIwRZBzL5$rVD#;+^^-&HaUhaJ%d>&IYa0BrXG zS9^e$C)#HKLBDnRu-fbarPJ68LU#g%iprR(sBIQKs|rUVwvqLXP~5oOh~Mp}z}p5#b%^wX(e|TrCoD=FFMO`btb=&5tHJ$S3_Y@9)9uwWrl)`_w@C=bmtN%GchT#kcV(BxFHTzyl;ZFoi&Y11C6D+q55!c z6!5yxUsHFJt-U>Ms(&j^u`kwZrp*U;`ZPQIuf+OhZ9?>I?eOf6r&r>Q0J`dvMJ*fW>ttofE+ zI_MSR57{}oE?m0f=@S4*BFtKnJfn<@htJs58hds{yuJ;Hw_k8+H35l4PA+VU+CQ0F z*-kEQS=sK3N<%xjv4bjVwUAX%F*>n~P*MReI4!#va&~oXgOZkMB4-cJ-b-)bsi?oD zC6$gH&}ZfwfL}}k?~edg&^He$Qce^$#tz&Dsm~msq^6kG5CSSq%~-0YSYIbsPnSU! z^>9qDjlK2a)?!E$bS5_~FTJ6wLH^J}4GF-`2Om91NK1e`1eytJVN6}~;5Z6!h0&>z3pZE0hq{ie+7}cN)Y40Ga&e~4^e}gu z2X0ps^~Y)(LyPsj6WEwIj@Hh&S$P%4V0ubNm5zJ)z}^J7O$Jt51oJbflkPJ@%p3zs zyEmHnuW-yq79P=w=dxy(uZb@+fxr~t?Ai4P&%da_L*q}7x_V2O?&lh$2tw4yI`--`Yzs2aZ4>NPW#7KF}aZ4J{4M68mt4x|rmc zsSA7^y(8W>?HuglQ{%vms`^St=lyS*vNE!5l-BLN?Ubx!$awG|(`(bO{_wK6rWn%o z8109q^XTI3FF^__3-*5Vlz)M5d?<_=#Kg>`wZA?7TwFW1j`OUQv{n#a=m{yR^A2H$ za%R-dx>$JTM^*NgGE@|gIgHuK6u3hH7Mp;VoYUenAewsSDHtYk;su`deo-S^LmPS< zmsHpP;Xl8vA+*a##;dEUsWYcmh3QV>JC`osD8oP-LE1Swf)WxK8f_{mGp-(9A>pxS zWMrt!sY={I!w!5?cS9RlxSf$#HZpNu)S=td!kYg&S=+(MeSG?&c=bOy1x1hW{0hnq z0(+0Z`5?WXtEzRnnlg&}4DpC$FDX(^4z?za6O9+7K69ART=(IJxW4NZF_k|0C?rw` z`mPR#!@FtS*+tNlYI7?y)&k4j>xkOvrWU5$B~EThjv_))L-U~IFCLHYXZD**c31!e zAqQG>D|27{*B=_YiI9gZZ7c^lgJzbd;yXQkJ%0JkFD~ET&@(uq4xW**aXY!Aur9li zSHgIoP)dt8vDZC3>>a}1)P;eYbuxF)jVSLcWu8@1JKp2FngREyg7O`w%4YyUgfQGI zrUXO3OW?kUEg`FD9yqhRm*2Br{^f9^YFSy?UK*#hcNj7^(mTZc)xZCrk}8P`z2N^l zenAm%MdC3_;EotI&tE8QuT|Y zHy>Vk`s=6mF3`r=!0Ra{+BAiGi`=nM)PJKQB-b4Ve^;kvL^zteG3(|W%v`g>O8d*k z)Rd2T)y%^RxIYB&>VQ|L%x8ocTDqs=*v-?Q7PPM#TI@&U4vb8eV;T<+Cbaa^$LGc4 zxIj{~i@y5Xx8za&;o3)stG>V$6$geV3d%6Da&oHb8X}p|*3p~3ux)K8sP*I*6u!8A z$JW7l|2Z-;ZG9sIQXjZU9^r}FP=em#8C6_C*(UK{G;p5a$Dbrt(oRVLFa)8`e8dHI zX+T@n&wVvgr2LfFnmA8Nedc?Rk(J4AkEGqNrQEKe?qJG>60OktDHskej>JwPBtS(D zCf7CCUf+g4d?-bPBB`IWxV6|Z*zVu}X;Nu$#Jj!l0%V{?V?Z=CHTY}%5{yK|BlzCm zJ>2#2*B|)?`yPJESxu$lwsiL6HtPLq!gRK+59%Mh>URid3lAo4-VWuQ8B#D%F{Yt> zL@$XSgO|17Q-Fhg?K7t+=HdW31x2^;ybAKQTE?S*6r38;NLTj=@y;#9@RqjJ)FuA@ zrWV#8{`RjcTlZB|Bt*hLII;%crlSX~m0ea%Y;30_re>$-9NgQW)liw!*#(t=pf|n$ z)be!)=YvuS8F}UX!#r@K6hjo&5SEdVvqeYewk+Zp58EboyJlbD$KMZ3tCv6S+_!gy zeV^d~4+ep*BMO8|k#cgdH+7zDT9f+B_o1SJD5oV3-NjT4C)G`6P9_AG%N=M?eAIJgf%dRuJy~w%TdP3 zn1&iaQgy;(!k&NeEIKh7GF}a-9GK~f<7UuzYkRL%Bw_bLPwu z-wRF&LZ5lX7Ob51=D&Ho6e;g6_NFdUpZUkA>nK;yle({zgcW!MWVn!)^M~$Xv)aO~ z&=LW+whp$VQ={UIAVrkcmj3da&o=IDK6x z7!1}wHqbiI0vV4oN8Nb;dSO+e_)bG>?Whv(hPfQ_?aI-|`1bP^&Oy+!Iqy1dR$gQH z1#4r6l)xNv1zSt?n0+R|9(X(q(92G{&j5nCN;#L{%<7>#q}flin`YfYv*8GV)u4TR z*RDNwa)lN#z%_P#{JX!oc}mO{g6^?#d#|;31TxsvLeOqItDt;za@pDKpeVnkjlHnb zCCc1tdgVrN_(8t0h8A*a`MRf9fW3pm;`)w%WJX9vb1mahare4QP=-%@8E*7$N$(X) zS7=AJ(+21>3k`wr8EXqyfoW=M4UCY3!h;S!H=`i^-~apTmFvsKC<)ccFVDa8;x?oM6dUXJWJRgL4=%~9BXc@ozfxv6>%2s8flZ&8qu;+NWE9xw_QH@ zq?@wTYUN=0WB&?oA8uAYEc}9%kzJyH7NwGdR6pkM<{(Gl@d!XE23~PbyUz&GGjmGC zv730Wh}`Fy#A*M8G74+a%NM%D=@SsT_sc&=N%l?xZ&WICW`w;6Sw)qTm+zvoaE;vz z-fB=-jA*~CtSp_g5E>N^s>|5aYFtXD__LZjsCh*d+DKi_`FlkAR>{Ei3d#+1bP3Ad zFRGxcp8Yhwa!4I%a@>D_cMqY@d^j%1)T2RX#iU3%Q8=2p@|!Q#OMT`|z!9(njQ{Y% zy4;Q^bzK#>GR!x{sg9RPy^Fz5XVi}s;rc5M&uT{{M1JTYKWE)VEJnsAi|;S4#1mTjHMNmU-fCP@hWJBC=Q3#H3ywZG3J1EUo`_ti*|@>Aku=EiTjB=wnp62BD3zH1fj zmx_Io1z|99Fj-S){p_}go~vao7xFRVsj0+ZQztzIgrLlqCmOx?`Ci{hA0*rtWsX|g zSxwAHgd7|OgEe#!S@UCORiSlM{DS>P_`{HrGH1>J7B*({x477m>>^5Z-}Or7Qv!V# z*RfHO)e%NDbK8(Kvdb=NW;;@Qve<4=lv)$!`!Z0wyO z`+Wk!Cl|LS7p~+LRg3Spb#NKuuR1z=l1F%1`4au4j4bR2CbtQUoof2M{PtDXuzYo- zv7x2=IV_9FeU?-`s$+6Qe&4A@cX2Xz=Qo2s(;@Yle-a~GWHBXv z=pMFe?3|V7{t}X^wvu0}OF2Ec{bF(db`^0hC$lAjb9HERiK3<@5d#B;VWRZ}~>pT9cg=)Au&1b4R zt)`ENNC?0Ebf=;H=mNzj2DF_&=rb1jHqq$Bp_)kpts{b$ehks>zz1VMYo^p^jzC6M z&cZo3lQ4y2zSqEeN#uS|K5)H&G&{iE($PnWk5p7djBuCYQ=r+x8XDT{ne~e|9#`Q= z;?6H8FW)o7&Mv5E?;Fi2*k2=o!Ie$z{lfFQ^E=ksXFsXvz3AW*tD>o|Yhs^JK8Rzy zSJZXM&O1&<_9Wl%KLDZ6JRbvY_5)nZ&wVvgr2LdPTX;^9)}=o4FCi;0;}&5>n9Uxz zRb9(T_epesEAPj;sOzZM`;GS6rV#f+zQ zT`prhtsj0=*K@VJVIc?fDF0Mv6MJ2Rs^A|nCNcKn&c(yc5l$XnwgDW%c~d>haQ8SG zhG&RG9q;jD(ZF*S(3mduneRnbUctdPF|%PxShKES;zc?2W^U`Ue=^p<+*tu3xSva_ zYP-lx$P>?;In&n9c>M9#{lk+AlB=sJ8F}MVt7Q6kNflm6UDwdkJ@6d9y#HF|&`v9F zk9Ymcfw5&f7jJztr-X{3diK+D@-^?ca!A&d6d^*N0kwR)AK=&h+*cz-%1?=l)MtJu zppf{dI^iZV2DYm@HcE0jBW=A+kj83fWCV4<6cLI_YH-gO+nkQb%F&cMUS{)Be#d%o z*OfBT`TWL(oW}V)3_G=;H#WaFHlrmxuF5Z_!Y8T}9arglju2eXA6vypA->B@pTG6zWU(Gm|-yIWCh(j{pbHX%AJRV2OAoj@|SN-ufN|vxgAq7P}IFqJGxuc zbul=j$uA~7|ATb1& zDD|0t3ON|u(84u5yCs*jNSOGbk@q2i`@CWD1#a{~e%oqT7RlTtSl84+9Z~yAw z{&aQsiH;$tpaTDwha>dOoY7H5MeU32GcOxBPeGGOs$qs?G+4Vw8d|y;Sb6xx7In`) zuVcMmHgF>q#|8}wrg+R9NKYO@pV?yo*L#7bBkDR!k#cfywe*^9*{IKu`pl07t^_l% z)Q&0lDJI8(2GX>c_gYt~$+v2HuT^xem$qFfBAqX2St;tcR03*G|Bb4_yIA@z4pbM) zP7OGiFp~{>PGMhcc6-FR`k>%!H!~M~WpzcEqWqad#o?uZ_&A2JiOa@1rU6djBiLzE zy<^TvPxA*pWC7R&sn7gtD5+{W2BZY1)z?t2;8~Aq8IOouP;Xu~@;|B@f0A6wAu+cZ zD^F}(h3&Ql_x71HGDt&f_t2d5I(ByBY%+!sQ`C!&F7k>li7g!{@87CtKgEtbh$|cP zj4B58=I4EZ?+`+tdCCB;_5dr;%2iUNoG9EZy=Pi3OMT|p(a<|<>28FMwF^jd3CVVk zEJ8(br-TOUENp}b%CDN%lga|`Om$V?=gLHQYC>H{Np3nDpz5eHQan9c7j&3tT^2a}j8`m3gjEMt^|Esh z+y@`I;I9a9Q8TEu5i(@gf;X@G^k2OKt5z(2iMt*m>X{y&?f)|~DZI#9_L{4ixhx?~ zm3O+=M=Y;E7Lx_rgSYC~k?8lCO3_gSyMPDb_jt-v_G(w0Vf&QQtfj&n`{YyGoE6rf zzhUQ#N6(t_oSjF1DyiS|c3#3*vwwZ4ABX0oInI{?AX}GdR}d3ZAIl~cEN19*E*Gyc zg?DMxv&5UAs4p-sa8!jy(=)6~HBEDH*_VpeVm#zgV5~$BbfwR#4svr6m{bXgGHt^`$zw4Inf8dm5QWYoJ2y=d4 zn&$Epmklq$Mf@}Ib8^)YA!35*X^d1W>NLh59dvVKQx5J+b5}NqHkYK*ou>qht3#S< z3%N^Mr$?v^1`qh6r7!D?9X{$cNLhiVE5h6Qkd}2}hbZkj6SD6l9ZfF z3`p1<1nCOawaM{*hSI-owexnt@u_#nJC0dgpM3RAe|zeOHj~TZS(1D7n~v^QnZ01< zV4UNk)5c(?N|91@nW7Ihn)Ndv;j=_U3R0)#+U6eg5fvFPS|d#59Rgfa7TjZ6Xv;ed z_QX<5PRh;5@T)1m`?NIhutJp}eOAE-jISpWw)%`(C3S)?1$mE$B2?q@<5c zz46=a*LLeNnzZ+f@-+~=(bz4MBvFqV_6c52KCB|7Db!u~SvAo+8W)iLFIuqcTJRrk z=MoaQpGmTyzY`w3^>E>0CUf}9JI{34jM*(nMRq<71LAUmt!wugj>=c>5-L0irWgg2 zJB8Q$Xjpo4edb~+b4YcUXMdXNttVzy#7ZG;C?L_LRh%+7n}q3(?z1_3DnOV2;Lxdn zc>tmV46Rv9KyB%7WpuZu=$&V`q0RLvEy$&SE{X6EUML|*n4ReDS`@zX3FUcwJPfNH znvw}!6v2@XFM^F1(x(`agM<1`yOOHLq&&OMt6S`XWs0=<6KaRf>|zdJ^`rF+?suK4 zEl_9lD+oHYj-;c1vfS-T`?d;3d4Yfa=5jLNI-gG!!bNKgsa6dxbIb10buEJZ-)LJ( zYeGnnLcimWe_O|_2ZF6F&^$Um!7@wmN5_ywnYQzeZ2saM1-+ru608dzU0c>mo$ucr zk)R-0vs4Yw!=LLS`1ace4?|1piLO6^70^waL&YG}OkOA$@ev7%sMs(+Z*BEC_Fv=l z$-6QaI3LhNa5~@aN%mS#R={VnY=kr$tv-o6A`+xmv5Ge_#1X{3)1sMf8;LjIb{dfj zBhNA(h!!)}fcoydF*#&g63TE5jbSUG0o|VmSV;zyg z^7g4@;_nZbgxzIEB+>LGDgOXZQ@PQ`_g*cv-d@8dH;gXQuZNlWGImV1#Ye%~&4;Oi z>A`T+noa8!{wY^F?-1a~LDJfj?eZ3X%T1Ht@Nn~@PzvdLLX+%?VjTpP1DLu@zmBB| zdfvMXiT`>wg#G$6oFOP7!Bt8Ap`-r(B=^AKdUr8PMYGN}-&^PHFK^3AOasx+ES#fW zCD7%!BH~76PZwR3DS;4PC4qvkiY^4B{j?8=l@8^dPKlS#9=Wkc|R^~MZC$NM4e%PX+-T_t`V`9yrgPw_s-5~wBxAAYT}3`eqE_&#hF z<2LgWUkvc>Kgab6#QajgWw$M!~JLJ_gjTaFK`L*?AI~w{es|L4r0&P zdmJjcaUj5m3x7P?uI!K?+)qgMTKEkAiP`Su1wm&K=&H$n)o^VnmitT*hHI@~1SMAs z6lRpcfMi>U=+~N>txN4)pM@j4ve_0Wy+b^&H|=5EHp7bTVvgql0508hxI9cat-j1{ z6-1fT;g2CeLPtS}^%p8;)5j8oPbEDvOjpfc_MRStVp*h-u zcH-9HGkjY=)a&CKTpgMC+va>5q zr0BROx0DD}cWf!4Q@Q-+W@4VZ)zIi=5oXrOE4pA~RG>nXlWM*d8BzmXfi5Sm1u`6ID3P_IU+e4sSA6Mb% z+cxTuECH{?t+QWv`{s@3-ZU=(0YMRz1f5}Itn2bVYUcz0Lgfw_VV-?=S-Tk70ZdBe z^z79sKKrz-yP4TqXJ_ZpS|9L8Azf$)0H|dIv?J2mgwI({@iSklq-OSf0BlD>O)ZR| zeEL-8jLYVUYsqHgDP3c~Uit%!SCX@i~?8rrwI`eG7X zTwDyS5oyLsO6nlErdB-OzDWqah{At-x5Hd!?quY~DENiAqGEA*xr3>xsk8I(;Yt^9 z<&vff)6P2s(<6AC#)SHUzz3gBr%>U_U5|rzQ$*RG9!QXS#mrtzOw9TD`Q_y$a7bWW z956@fqR^kz5{R@<9c#DNl=m7a$ica!`tfU?(JgZmYTZDpO}vB{h8EH zo^k$|B`}9xLjC)3xU0YkllvW`mnWiI0`aYDXo&008y&y_hZ>ZWl=SrUm@Vj`szGp} zg{X6A7N>z6<~|x0@^>GPXW>tKlgg&qjiCC|d|5y05PfF+3a%{1X)r7N&moOySJx1;GJq(88jOV-jpuYs0f? z2;_?1=Q3IuUi%6$$rps7!4|%9a@Z5WqhwECah@T~$^0*WVTBS?0~DQ{VbJePy@ya$ zGB9YZulI0vc0OgFR*9t%`k9jh+|2!xvyW`Tno#b)&^dlBS;S8WX#5aXea4|u_$5F5&6i3`BFvg@9uof*2 zPIz~B_tljbmw~0FWlCzQkGFS4$fr-AVCm^SqG5MrBR{?3*kW@!S|e}aW6z3#pEDs| z<&0W^{Bx|ofEU5Nj`>o~ataE%dU`m+} zHE_b41k+94WAMbB4S7ECu1ELA4C9qRlwf;r0y;6X`d2zhF|9TrI0Ns7`GkdU`r{Zy z=!o#BItRsi~@Bnns}wPYgiY-$4qBYOeyohBlSNWSx<-APVtEq zcOe>~&*DdwksxuK!1pA@H^u=W&u9qy{{D3Ve%G6un+t4uQ3;STFj!bvNbd;}%Z&cn zdI{-LQ`H`)DKkBP2)&_ncr03d8r#c43XEj;ck9QCxvB|>-3qgJF1)q8U| z{@XXt^I%+D+|Je%ZU18y%C$s}J(yYv)E0Xm22;3wUZsizy_Q!{FqJ22d`~I?AV}7= z6fi57j`w4uU~#1$?_3iIW8VQRZb$2--U}ZY;EY_YtXgmK)v&g&aE9n*p7(TgbpIDc zMUrkf$Vs(s3k?V{N)C>D%*Q#8Cx8XB-yEC7xsB&)_D%i%lUK(P#K^OJp$o8r5L2 zOsL$GEyOq6UD$+ojZUQX>d{oHaRBD1PJtrVX_OoYU)5GCVT+Yo@dOkcx6j{>yFbnG8p_t$(caU&A|qVp;%NxV1tA=@CYvp9ty zAIuvW$12q5gskUSr?f!K0Nliv`PEtz6l_l)d!r;bqDAP2Y6aC2oBr27z!N)f1Z3XPnrppiinSokB%mo&g7%|sZN~wqQms`Wg6lVr2LuS$AiB3qO+Ns6ii#SLub$7Fp*%I&=rjFO0O(8U zAflq9k36Loi_x%geDat`4?s_V&^A(o4*-T^1^|$QBjV9;K@O8*=Spt^Bdb3m-(l?x zNr`?y0@cbVfWAFE>SJSx{uh=CjAQAdIc$n&;wax(X2DOqWpZlj>XH%@)qtVp$WQTY zTA^q-|3ESLO$|h~`I3llitpZ;?oO5hsQ(x!ox9M8t|PeGs`_Jk1OkBuXo9a_ziO&5 z(2?F%-CRMk72YFS=E8N=;5MC<4H zcz^)kA^n#8FqsfBr(*;=dqq0wTng`D&x&A_@)X2F!ITA?ROJB-{>l7e{;x z?ple8iNSpGL=AxXJ4wVT1NWo*jzmF^$i#eg;v*B11~*xQXwcz6BzfM@|IqBbQQJH^ zoJy_HDtP>Orc3j(8lxaM3GMs$?{&n>A2vYE2aq74r%hwg8SgeNF@X>U&YJ3p3JgRA zg5z&I9H-OBVHWcdw8jLf0YC8x2t1{r_%AZfmnMvO6+a*<#-h6}+0E@Yk@py{A5mLw z8Y~2`oLaW`a}>FFBo>5GHxp_|zX;wiKZ_Ez0f>?2!>?-7x%l{Xw123_FDIs@v9TspeaJ{+N zZ{a3l`ykVU^60anf7zGK`hcHU7#JkZuxpt2U_&UkXDooJ&44@+x6Q>kynyOd#rm*B z{pz8pfNx7QimY2l?8h>?7@$pIssQPysjV$6B=qPe93Pf0`h|b8A$tFFzzq--PKnRH z&D8_d1^~dq#4`XuoSG2bml0C})Z^4R4}8YAZ^T7dS@~x`6JXmP8SihNBmLjJX96gJ zDAg!L^;$nydO1k=1gdM+>;k{FlQc150AM$C{FiSD zR0mLL%aAo$PsC|9AN@M;^6sPxsJh?LLq;?JjeZh9{sNKv=a2eh{(kC&tBpU;gW5vx@+M(ROrn0IK>i+A$!(8TqV8kk5;ylj7%*Vh^ld zS?RrwkXOXoDi`>ZTZjI3;%1*D06*)SJY0OA0!PrC&Y&n9K3Y1s)B>R631F_sVA&9S1zW(I8cE*-&eBs0B z>VWnUKo9g?SYTk_=g%lWWB~?v94agYC}xh2ogXc^Ezx{4Xlb7F5ona?AUx+tuRH*6 zv;o?fKDeWzwsvB4G!u~AL2%SmEFek(PfiV>n6a3El8z(;f52+eHQfEH+-&3|Y< zuucJZDj_N9=^K>;eu#f-cy3vNkZ$Xao#Z-yEXLaWv!4#7 zG61&>=jE|*aw`50jg z1W;X>ya2GYO&)msTF3V8?V8Q_)sqEX#D9d*|7L*8^H_!h@%2nW*KC4yzBF8<9%_a_ zk~9c-qV2*uIwXKUW$K(ttwMX`aEnmDz)#7@$o%~L9t|9HV^jUZR#^g}b4A+l2AFQg zhI4*?zT~^GmSi^K|7X|2;$luVw#@%2rFpI_Xg5*(z|i1eRZY!*70`!0bq}O$@sGF42ea%G+9OIg z2aTp1)=&U3nDFI`)O$978=M>+Kil9K#%Ds`a1kzo|0@h1XMk?CERQ%mgpYm50$$k< zxV&4}`g11K{0U^uc3*yZbrkFnQd8rquKpdUl^=ygCUmn%jgF|DPDc^;$UQ*cQz7dy z&v5$x0RV;D4jt;>21&X)(0GS%(GWsSO<%lu^W%Sv_2l*r^jJg~-NL;nAC>kQJT7iR zedev9k7+(kI55%y3F1V8oQ)x1K0XXUKLN7tisAC?*Ru#sA`FyI&Ygn*CgBFhKFXko zhc&p`1gKo7^6z-`|AOJaL|pO5V)CjIBMTDUm$t_J?>XZDnep|_O%^65)kp2)KMw|a z>p+mu01hNh9p2yHKR;qP-h2KW5D7n3UAL&z6Z8L{g{^@??Bt{nXv{F(9PE_;D$f`j z8>KHbba~~(?06J_gaL7>F0Tebu>(pw3J(093#jJ$e{Avy7H6@L>K)_Ncgw5P-o4Mf zL#$pav3vLoZ@!qz5=h=pNq1`bSEO*rCH2Y#K^_W7r|$pf*|(=Pu4L#xi~lNA$fh}b ziP`*6#7gQma4&R6;bIH=2vH7>E7B6~^s%&Rh3Zttf5)(Zyd|)z!%dW4g)kx>J^mO(xZ??$y3WN8F|BtKtI?tP zVm)+5Jo@dT-faTen(~HmJKIvpK-|2py4H&VTG)G0>HmRf8;#U|Erk{~v4wWOq_6x# z*%|I)*9INg^vCp&{(#dp`xZNY_Geb^77CJoh$S1uG&=uJ(vE@?{!Yv{)i~^h#(T7X zY&+}etVL`t_C1b!<9;<69Pg2ra>K7RUI7^?7 z`#Z4Dp<(7WdB<}LQL+JCz2MCmtafV-my!ayc$O~^jc4JaZ$s8C{-fMqH?@V#UFI?4 z^mhw|Dxw(=;;OGz#43nP+s8H9i0s90^<#ZP%nB^t0)0&zC0_)S=L;+|*8ntN1cu>n zX`;w8WO*(k7Sype^;2v~X|9cc$AB5g6U$;%FY@aOETEO=3aG47N1{a!&iZ!W7VeY1 zwckCvzz1D89cFr~t0k-_w=RNb^B5C<*M-CYCHuvYQ^IoK#SqXc3i?6Kez$bse5Cv% z`E=+2*ElkSt@93s>kp{Y|C7b4a_Z{Nbry#=6S0Pm3kyW72T}YqlGt@t0;H$-vNDsN zsWYk@-)pnb10y+|N1^C!V`M@=XOwkbn-Y;2`sC#3LLPOwX%HFs9UbR1nv-D+;rZ1cI2I zeSCQ=IOxpgv(fQoscj~#|L+$8?v=aRi{8vRpw2=`mq4h>#dJXeT(=V;CwDut#W$=Q zLXOVeGM)dobYN~_tg^fcXb=Bx_QhK`NLFADN8jfp=nf{RG!0I?g|EE(j~23sLwkg7 zyl=pq6=EkM;juowN{F3H_>r^v6NAGxVzgm5R12yKdW&4 z40Ks^3nUUNk?usRoz>Wx<@!j_j+}zrNFAYn`?>BE;+I|;JQ117|LXvR=a;%hf%o*f z4ugkhIz#>hXcUkJGYC!nyBoX^yxW#33M8Dj4nygL7j}AYvb8K?Ao0CJbmQO*OJ(!- ztIP)ux()Xmt8VS-fP~?QAf>yA+Hh|M8VH-$0>B#)5+2@aA@uFg-b^UAnO)KGR_tH; zyTbJ=-V=?LY@xWI|ux(O*QN2HH5dtNAxQ9Lck^DW0s^-ySbxU0sUN zKNY!_JOTzH-0NBLI55uA{n5fG*1-q)^Xiw@+?cx7M~RS~jvk^(Fz1<7;nRuUwQ|9Z z`~T>6aNEiXQAZQtdHvTR$-$pDfWU@o?+D0M;D09cG^GcDCxJ#x9ne;&Ek5nd5uD+; zn-oaSed&*={XoyssOQ`Fge`^LPc9z1h0@pCPnlEyl{@x_gFE~OW~DYdHTxf~yr;4= z@ScE99_ZEsPTu>vNAaE)ztuBOj=5emjA^N)a=I`-?fNY*){^S^>Gd0CntQ5yA)oAO$W3n@gGPAOBa*Hx!?tXB0#U+^AUMf8))A##uHIY?q z#JzCoeXL%NIi;li<4E_jeoBc}-G=5)o%Zp{;DJ#6mD} zL<k0NMKp=oNV)#~-#&OO)(J{_H$yxfkvb5N^q208u+}F|= zaeD;8L#J?QwfGCkjsGVEX=daMPB*JK=*(-{yiN(hXTNPUkT+zQWzAvFuj2J_$kDE7 z`pz-&Ao0__6)2LclBgjRGw{1JaJmwo@N|mWbcG9^n&?; zYVpQcP1DV9HV|I59o`hbR%0yc5*9EI{(r0KVFxgMI_D6$ zR|ubE=ZF$NudeJIkOhH_g0z?nGuv*1#1|IvT&>vIdBKpiJym% zxIwv(TMNH6N{Y%_yMHkMnDd4DTFA!kula8$AuK|g!{hVSikuq$H<)u2XElvFTT)oa z#5|Z8ca87R!G1WBzMN?R0;+YK#@fvtBW$?q+XdR>*67ynC8nB5u;81hKnZpGn~8~u zphmgk!;F!m@6U5{sC|HpYFsrexvnUNMpi;Y{g z433Qat$3fSv%-Y2tG%hy#!qv)tiDPKH9J3Wa(op^Fr-a(I;4wktt?GXBeS=4i-RIg zHVS@tR{Zb$YK4MPixXJI^;)4Y6hO7cO<}R?;S;W50ynV5YyY6Dp}v`|Y6!WG3J%4U1=eW$idB@OhY&PIX{B9w z(6+00Ml-f*uF5sgq71)&0XIm|L$h>bCbWU8thy2EFq05h#~v8@+YI7@K_QMf3s_{93E5Yb=rA z^S#_4EFKox<4z4W;6zuBKd+0)YkImkf?QD3Qig>#MauNrsPNRbHUIH1EcdN@-N@Y` z_}jU;R75szXNh_T$ESCq^G0W;hGFb+BL)Y)G*4<9)LpkodH>>iLw6@X|L5*;DJ}Pu zpo}KPN1@8zzgVqpt;826wFw@*UKFsWZ6k=KPzI?lV+Q?~7RXAy8OuChIDys_%IL3;j1pHDab53GlC z`#@+>bICTRHh92TK~9cipm1-r(zW_H`beRt4c8_WNJVh8gWD#7`5`W?l0h!$kLE*& zn&sUY3+SVVqS2nw!q%


zOiRhcfjf`};B7^`(9D`!o014Ewx0SN^Mo@Z~~uI8clXMjWP{=Rn`S zK7^Y{JkrmNAWo&lo4mJA0csI;zKJ>bNL8u}(S2=5sBo1{~OvZf4?tBG}|gUMSAnMV>YB~wP>(76{%w$nq+zh{^)_b zTYSD}Rv73t$9I|wO5HEy7!fuzCi1_FYECp#8CZAcHUpLr%~qyVlBCNnqDmP8Z6Z-| za1ux@9WTtsgD*(ue(%+eAAMh`$WiYiSftx90l7fAi;AuDLt8_lPK%cy!yRqvJ3<+j z4Ssr52SSt=3i9&Ggmvb*U-A5{OY$9Ugl-q5xr$!^wbl8EXLlX9bEnGU&ykUE{@ZoU zJs?^kEoo8A!!M`Q{ae1fTD;9+nHubrJ2JYV&BOv$qpjbi!;lJ;=eLsowGCNo$h~Fa zifNEki%EaMAFADJ%zv^K&Gsebmlg%nKkrH+atrTSUD4TgO^}WFo;Da#URzahb-AFao)ZZzYo zv6(ggSzlH|P}zdJB#a6_FEB|yN6%Ex9pTzF1CU11y1PT_FDPqH<(mW7j7Y|E>30>(1(=ml`UJwDr8Y)Pc&~qnvPvhVXvRbsRyT;|r)R8==+a`n7v!&L@gh z033MFrkD#Kib?|B)>8Oi{S(ytn{H4zQj80fC=+d zX}$BY@FtDscN{gEZty#2M)Wlm2jAK^jlHIJw+kBDTJ5fzcO!Xa1oY6?Ff85X)_Fg; z!SG<`vm2Z3zw{=*D<;VKhU)cB(q8PUzx7dI4dF=k{(UdzvxPd|f&DRzWlWgr zRjc4%pM!~}snw;tH#aW@ z|CJCJw;+1H&gfV*dzdL{>QvMwS~)nVERfRydx3%}_$e;y2YPyH`4+6rEYNJQgm#Yd z!B2!LQ9i#KBcZXY_>x)N2mj{a>LGNT`ddQGkm$;MmXTXYOOyBnVUW7Uii_Y%K)J;3 z7wuXH1kvwgI-iP6O1VlII5`e%kp`rT(;0$G zNpER3i38M6+5S<`XSQ$$v5S}${+s?W&dKbW@M%&U-WV2IbgAYkbF;P#Q}t*}PDT^F zrsbz#paz)r(z1N5UN|tD;A#HE70o|d^v5y)bzGXRxH8zf(@5g$y zE|eIDRxreIyMYewZ(+sNpv$`I>c1TwfmH*YQa2vuFQvaWbrE)$G$uo_2b|g}+(Dlz zp&na#{hmzDL_c0xO&V)AmKx4ApBUmnvPcYZtEEy8%D>)vGP<@-b#&}yi~AKlhYz4X zRs7r}xBQOavuQ{WZ%?MFiAlKYdpO(NHMSRK(Pg{>OB(I#shVIvcL=kYudR>DNKL!l zI1W>DY^aI_37y1)C-5tZ!}XC!>Me)JNP5%yf%m@y?vOWO%WOJ6?_7@siI#L>Grwlt z_}m5z){dRO-C+GLWBX?-SC^!#eh3>4&M)A!=aDON9KRSODrCrwbvJ*nDN}!`C&P4Y zF_~MZEnR=MF;bgHcr_1MSM9UG^#(@G(r##Aq`@Ut#Bdab8N%xKS5X0 z6vc&0R8_6_ShY2h&g)t94g@AVUE3?=L*+Fto*L_;YpQ5!N}m8<0hpI}R@1LZSNg8a}W~vsHmGNL<^@}pHGu)mO z<4GD=R7n293M71ID62?UVxSXt5zm=TWUq95Vq%hdJFg-pl6-7FoT_PSUc#L~Rd72{ z(x+1YE+a!&BfgCD#bM>RMb6=nI=d?UleBWnV|)$#;@BjpD+Pg%3-tGklpdsZ+%HzY zfL%G~F=sDwiH#hV>D86JM!rf8W(MWv)IIq|z2pNwr?tYMc?Q(Z=QUg^r5^R?D;2Kx zU84JKOOUJZ&#ay2$>hoUR7P24;$EJf)6;vXDwYB=&%C_xb>xDbRZMThsRHg>LlszVIUN*?+i|;(F?9kAwd4`Y;TNH2M9!FiqZEkgB z2D3EN1I!f@2JJ1v)Nw~Z&270jBd+XI1kYXo@l(JUb;DC-uxPj74bCFV8|6V4`5t&hnkCFwizh&EbW zD2h3MW&6NIthH}n_Z|lodm+0L*1O4Z-yKRmQIx3Tou}$Au(vaDS(~SIF~e(GFkdgT zTlDq4`PvrK(J|6G?>n2)6xz&6V`pGBHyp*yQ?_S21dsooDT&ARbZTt=-xh_q9XmI- zvb;R15fzeJId1FA*X<7_;xl@}i>=4Mrcvl9UT`u_eVE!XUfr=>PT$x5lQzGU4p~Tt zOk@ZekT+pUVFcpGOG_)|cKo~)} zxxbeGoqfYD*BGpt-p3_#>^&%bt&uRJr)z2^`JQM>V8UFLXl32pp%B5uzY#;EnYh`f zI#;PvRtKCB8BzUpMy;!LL&v@W;VAd{uQ>FRq?`5T%yR`i(s0cWA66)r4-UAlcFXId z@t39l_(AOI1bxgckdxt#I%T!6$%pG*Nh1%N>HD;_A1;dj_$}lU>aC9(vUE?T<^pR! zdg~5$e#){&2;BW5x)~^uJ(N`~O&tU)^Zxq4|Et%k9aV|9wmd903fhg4qx-i%mqfWm z-}U`Vfw%8zL2JY8==q7~Z#q;Fmt*-xx!t*c_F0&o*Su{#IvoLy(ezpVEMm|ie`YWP zb#eKFTVNxTiSHWScazVG1zkuJvAV#zDC8*=rp}O=(@|9=27$u6R)0w|(mID zjwrrDKMV$L>LC69!=;kg2&&obS3;$UPXJT%2_!1W%cVM-%Z?(@c$R0}j zoj6fHO(W(ff?7jUpPZIVBh4Ts*$`#UNMHYWaC10!!0kO@)3U}PcUB!Y2jBT}0mq+R z#(6TO3A=gaks4q*JqQ0;Q735oa&Tds{#I3gZ~lGAqT5mWix%1K9h~DKZ)Q~x?vFxV zF2v_igS3LP;oM*II?;P+Bx+SKj>C+4trHYPjWK(f>I(!BI9%DZcg`At9Q*$wwDApFGp0USb7X-s@mI; z+on7w1qN1<2jS&jRgXsUd zQg&v08ZAWkZy2aLgF3k{>sIHTO(pXi*wW8_P5o`pcSHFd{MC(u7}@@+dVWfve^{9k z{mHxEL;b6fSPtToKkc9*jQu8n<7bs|xY=f6etj2?m&KY=($+}+jkd5Xw_AA5`eY$-S$i(< zZ00(Rs&|M_b_G_8`}qe-i8ks(_3MvHylz|+D+#A@hfxWm1MswMohd%+$do8|Gj)1) zztfuIwwDpl+l^VXE;`OwN8HQCWeD+QC7D;|`Wzx%6iBd+H|6E!JOnO~);r#fS9}vS z>dJ4a-0|CLco^BMODns&N2AV(ZCq007Uc)JOtWpd>;$()I5|h9BR}&^=u6%n6))Y~ zV04|U#0cqWPxkj>2B=08M((~iU0IV?mPZfa@PW!^PeYW@LvWKKx^|eq#=L%p6pU*g z0EIzc=?Ibq`1*!EC)~F=MTB*NYe_x}1s_Kx2KH0_UKGyep$tj;MTt66g^gig3L>W4 z?A?i9yO{i}gwH?n(&NqSv%vEF5F2#A3*XNRX+s|@btQ68jV|00%=0_Cj$ZAt_Cq$> z;FE*`GGxIMBJ(#~rG-2X>mz%SFDIi3YK>({sH-I464@8L=;7jgtAAx~IHxvsxs}|E zZ+;IbwD>p4Soeq2Ca+5`&C>l0u`n4ek;c(o`iCK~39sWN{kUCqcLqD9++-S)cd4kmo7OjzDW;^<_hh#_A2P!rtCqqV%Op zWb(=D$bx7tF0SXjEnc@~k``dxC+!MoXlTzLraubx!xMHt(GpY4fJvUm*)lh76yksq zzw&qZyAuB_$pOyJFwca#I;PFfPdAQjRD8zP@lo)dJ!v-5P9E>D8k`(7DX@vkpogQd zUMeBy`+tU2VACfX`#TaeTFoF{?yKER3(SXnj@0znav-Q^v|JW)?gQKXTo|eWq!&h z?VvATFYA)zmLPL!FuIA!v1|wjBlBhaKa)?}end3n5v6r6a!YxADvG%TI`Q0}+S|wM zQey7!ML9Z+S_~=1oXpMa#U%y#9DniRxV`-}?;L7in)#;@H9t8S-N=BjM1IP`tl%pSOxDZq%g5=!<$Cqg=5DP;@vrPzo1boSFEhQ-p-gNcJ@tMlMnLFwz~3$ zLUsdk5~x`nBPJe{h~Qvz3k$nKW;ecz&P?V}*2}@o(zrz&QNt!(Oz+wJ{7}k7B)3o| zja@orulB~q`6SwNEQZj_`<5%s3^cz|$mcln1RmVtU4)S%|8cG|lV=MCA@C)Jn-cs^ z|Inr-SvCT6mZd6maJ|%mL{2jCMolv3zfkdUHcqY%CuUB~Nz7%J?cj!*vnePN>cBpA z7-wcY@v#X$`JJAC55`dwr5$c8SZG-42b!M0X%%q)pkN5_kfBfP?HzvkCOs2}PHUlK zAJaJI9bp&xg74Xc^3cP^oT7ANB{#Q}aPwU|t&vJA);TZfN8?8?5`sCp}rVyb`Cu|+i zO2-tIR&!eww6pW)t?sm=$NBZneSLPTM$4N^2T|ZEEQdXXh!E3ays8Kdvh(bZj6vBc zMS2L&CsD4kW|h--lHUq?i;~uVRENfZ`ChHguQJcxq4xJXGznC@nRv-68l=`4D7^Ew z^c?H`LztOd3mabTPD#R?f98<)Nm$FROd!1btCtZO)-Y(p*}dqtrQL0vmte!4_jr4V zW~=w`Qs>Kf_xDTBnAh3ZZ%DWj#0?Xo`oQ6VgG>5^zO}S9NB#_$8L4d#a^z@P*84zrF#_>#Z@rQ1wu~9qJMTe3a@}(&cWi| z(j+yvy{3>Nu@)u`|CP+z?pHZ6`>khSK;n6gs+WwSF^5G%`UnemK?qp0Az>Nb z6Z5lLvF{5j`9{LmCsN{tpO?hC(k8*a-dnqg+sX_Qm+vrxo~Wtm82m6mYdd#6voB=M zT6!rxqciO$aM2{xSTE?7@qH%a2?@5;M}I9hr+-<8nc0ON|8Da)S)Q_b)J_#-36F}3 z2-cC)k;^xO2_vcZs0h#Tg5A(ehdQStYK24|UZIpK&3I@Mk|GG9SII{w*lMBcPznLf z3i93Wz2PA$Wb|#~@a_Jz<;`E$A45L$)f_p~^CE^QB@D5Wp5ga^LsHN(UV1$^GP>5z zNhq8W*E_mVH2O^SrtM|EEpng4oZD@+>?Iy5U>mUIsr&Rve7Ab$QD=Au zqEN1FE!X&bAq8zbnxed;FTe4t+&OWap!8ia^-2hj^4ANjKhohz096T6=&+*`aypNY zYvBKk4TO?HoDYv^)Ar_pa;8iAw}iWs+=sV)VzSg*Aqqi(a5ba3=lm3}!d_$;_*@R0 zLzulTg9r;chgSdSv$bd%Xt`9FNv*a*%Yh3Xp^D{=;mnm~1Rq>qi@pw@9vuh_gi@iq zcV!A}z3i1{2`UHnE|HOvW}^0Ud`s~Oc`I9u_>=2}we__rqBl*`bKiqNYgmy}+i(7k z@VvY*kAG4ym#w^jp?E4)SetZFJk`GsI6|Vqig}{`TjOw|CZA%l1~tCuS8ymCcq7u)H6So$eR5J-keU#4SGBz~(z@ z=Hrw|GB8-5dKo>}KtY92AI1`fEvcQFLFD7rI=6&n&zg|*G#yli?sIrnMYqr1_vaEt z^0z!u@=FKTPel?*#N@aXBqUh{1!1O=Be8-*vHYXw@kum%ygH1G+_?5twIT$G>OYKWIc+P>f^~tb1N66mHBy0{0&*1hn0J$Y5 zhiK~v=lwh!x_Xu=MsSQJNi$Vz0mzCQQ%^X_MzWPMEpAP;fGRI5Wm$Ja&I=tRo!V)Q zN_=y#L=-!s{QP9zrDA1e^CNuT)Agn?g7mhKOw(K45~?9c8ou6jMC2YrwR7P0BrGC~ z|3htquusr~PxBbX$jQ-R23?AnP9y2`aO~{Z{Dd?z7r&&T;mzB(q`#x>N*&6}t%^9x zdQ7&Hn*PLB>Fv(Oodzazg9P4IlZ7lEG8y_ zf#*MYgZlm|XKbZH0ifI;_E8r22q^z|4P;-TJdq*yslP21iyYn&@X`7dF4DE6T!+mCI#g;JEs;6Z36(@tNv-dwUsg;GQvi zFnoIH{Rhv3NyWH!k7cU^CNT(Qc%;JTSMl%!w+a_xpA?(0@UelK=%!vN*m~Yg;8DL{G5h^5g$?A zlUjaJCN-kDGOzXhS~YT9_Lo4nO0lAL-bFM#@{|tAh5o$nRXzJ_LnT)SgO@KETUv!; z1tt31V%No>pm~n zyc+8s=zu37m!vYjVopah8)ew|U1T79trQdj@5F9w+tN`GaOIiPiM0uvt!s9=5zUo~ zdCI9K@JI+lT-YD-(t~o$rId54{z;#PRfEJ{?3MSLaL^#yQ-y%tu~$9g?dm4@!(cW6 zR}(94cE1{79~R*XG)%A#-JWq@SZ!k|O8YNI1O`8~lC^2?%ca}Ue7qK(S8QSkFs(9# z9IWW&uVrF+bVHUE;WB92x#sd0FR}{h&;MRwz;?vQ(aBYKnz~}w)@66q0Fr(Oo#@W_ zQaW)mJkhmbAFk~#t7{xJ|1O5My?`!UJL%j!YCvQSxzy9V_`=H=Cs{%A0s z+Z?KZTFoSf20`k|&k2m!Ju=(AHA_dn!@a?jZs+B9duyCO_1LuPV-(n!64?CN$STG# z=v--h;Hc2e-ub@|?!tSv*di`3r471+#C+=+ebn_8)XgnYmaS}*J_-KOUed)tg?Ig4 zu(q#xzux-SVHp$}-ofE-$W@XtfBH(@r7R_4KKIPt=9$O*f~L<|!1a-?0*$Zy_+$Tn zDUFE0HLniia#jUj^W^BbLFi-Dxz;cBf2hr(tq1qJPHysOwbF9mE=DFu91E~GjsHIY zQbDc0V!1iDH+tT_zH~~K&M^i=FLF`sEHl$1C;biDNSg;uBe3lIfPtf-P z%HgyJ#50_{;f{&rQ3Ou*qx5+Id1fpJnhR{S7=dSuwFJN24(zKoJG5L;SwZZ(|Mj`6 zlPM23=j0HciWb6xd>ivbLwz+ntJ50`ZHlM%c)-k9YjwU=MM(zMkFS@_P0 zwU-zDE{;X4^*C*hIEx6tQR;Y!!ZX|Tkd zr+ErWWhNylB`OM~9dkDH9w}P&FbzC(*dLVM^9(N1CAmD3zSwniGlC_a({}9N2BQy)bR51T)!}Q z|I;mX^}WO|wpIpH!*$>(a9Hlm1(KaL+|9u@8GJqcJ6rlN>==1Dg~5(d92N@n;N#^#zqC_V z(Fh#KFQ=uh-Pbm#p{5DGHa0NrB@UjH+IuoRt!vmr90>IfC)AQ8C8TJND#|Itm(`y@ z!843eR9;YZZt*e?_x=)zp}uib4Y4f0vc95;n`__Hz{bW#?i#Bs#M2&*L?YYjI~T@R z1>R#7twcq{SEe>RTM9zeeUpzrePL_0R~(!hgDsD0sg5G)sGaU6_G@WC53npO zh;YZm(UNt2C3qE{4^8&^?p@iCeI~~BY*}P8`-wxi?jIJ&GvrLjCD>m3*z-)JxBO2x zLXv|IiPQ`6cY61~9}Mlf$28;9!C9WVDLX9`U!J0&c4}_C!BBsXH?Z8Cqy3d(L9VcV zq{W4&hikLbLZ*glJn1Vac{rQD`}6$^E1j^^F|4eJvB9e6pDzv!3|Lq~ZZIZ>ni~rw zJsoJAeQm`_v2;%Lz-~a(wetf{@6J)(iP0#wnUT6b|8(8R;E+^!sfqsY-aYLm7Q)(7 z;?Jzlw+isXBfNx#_@>92D{}p>jym3+@mTA&f4br4V0w&KohUqWr4e!ln}uHnrkG+V zF)+`lNNaRuO(lEf!ScPF)-{+In2|jxheor5WMX6h&DtOywBXx&S_Y5@3byHJ>JD{| zXsJWqyb7ljM|vi}9w?hm$;x*$c4eK-X{~KPB}12nD<&*{pksvRK)FeZ{JjG|yY^65 zdq2m!l7ceWRdH@vOKls>-M1*aY@%=a#EE?_0tu(81b=DusIS+qe&4`ney|o_7-#b1~ZEHnm&@j|f{q^UY zpWU1g7J^4qRh1;XdA@FVTBEVC$Yx3w)yifH@B8ZoSbwwhM$+s<@GMbQ_`^gaaiuTvHFY@ z$TFE5qw(fy@TapLAkSPFa^}Y#{#5ee3*?!R9N=0LMCP+h`wUYItq}V-hU6KLVUoRa zyRs%F1?gsFF;TIhu2DU0$W5^s?6wjw1i1soFSlHr zpueo<=9Y}qgt1{fr659Fq~|0VkD)J}fJUQ+yUQQmo@&CUQyw~4SrN_njCcR}DByi% zOj_Ak=zsU+=KWifFdtw?JEMoUr)dMJC;~rJe|rh3DTne_N|fWqr2C5t0gu=HUTp{E zL?72W2vnY#D*~pOJi`=2i&1&TP{m>}f3YOIk+u<>;v1?7L4Ht#wZBhrV-}LhfF7n~%JW7`h85^d12!rFN8Mx0Gx}=$PuG1f4ZHAT=`N0% z%Bjb9W`6kkyt=BKnX%U5L?bnD3B!)=CKe>e`E?TuG-LT>U92j=6@%5LRwE1BuGBwit(~sARb0}+DEEN@%H@0VNcO$ASO?5WrT4ki^ z_y?r)!tAIU7Y4uqP%C8@=f=Ey_q3)IZY%<&p(cNOXY|#RRa+~%A?au-eR_4o(a!kb zA+=>m)8txC%s%aBMyS5I5(M(hR~G_q&v+=x9A)&}|2IKAlMUQx1{RBf$^5^+KT}K{ zUj^I8PBI+NaASCi!y8A6R&8`>JZBJyqMWka-BlO^ed9h7S!}l!HV7VTGv{G`v%qeK zIuLT49iX@;L4KjOhRy)*eHYodh{Rsv;85q7xrr6+QL@r<^W&>dc5sg!icoB9eWaoB zff=d?FUUo?=>=6q_}2OkXM4yep`@fFB?YPprFcqdd+oYAy$?)iK=_kSzjASOKeT^; z@1Re&@6#4<@^JR*Xzp>aaqMjF(WWozWTbEM#jU5MyMf*(km$ltd{a`d5Dsz)R#8-I zZ|dRa69}=3@6Mh&C4NXnzYjsSdM@Db__zfVJ##>IJ=%L1!2*@Mxqt_p^o}vlv=tlu zdM7+Jl+KhVEiHO`d-&JyckHZB%gag5jn!+?WQi%rimb0ZOTcHOC-0l=OpUbGW?N{h zV^gH7t^B9oU4MFSPD`E6u82SY!@ZTi|Ms%6fd=dlaZ$lHPuIyk<&?FplTu<^%UxdX zP(~UVY0-^&;z3WC5P#2B9j3eg-k#7iyJvU3_vzuMCqe&n&a}JR_Tf7^9H>`y zU)`cq^;Nj{!Uwy?lX^V()vJ#Oddk+vrc_heb#|Wo^6|;&aE`Cx9&Oe8S4Sg4T?y-O zG}iaRVvn3G$1bSYcAiD5;N%Q zvC+PXn6P;4X;@I?{N(Zwg<)syfG;JoU38#}9{>6bYd!MP3$Cr)mXl?#J!8WUx3c`^ zMTM?eXBQS0Mny%5Y!_LWTsq7t%Fi?K<-p zQWM$7-4CDH)X4nVt&f{)*oNLJvKo}Ev7;WDYAWg@)N#~R@^*n8^~WiB;Wclk`L?~G z8}J#49ny)uxy4Zp{BN|9z-P!wgo}*?H)FzscazT;>q~xcCh*R*kGdlJdO6J63)AgC zet9|2$3ap;^weal{UP=SU~qu*QAhS5#VPkcGOTN6E)W?rzAKjT; zZ@67ieEhpVT(CXFU1Z0O?dKPI9$sf|XWeO$ln^^}f|S7WNFyR51SIE340q^xS0{_v zvF7EIUB_N;7KQjb{qNuJUOU$>F2-%4FC)E^-dq0B!`b58czilk_2Ox2Zu$nBjXoaM zH_i{Nw~aE`tFt_I?B&_u$0z+hS_ytK?{8-CCIf{1HbD8zjW)um@=ZRoiT51gj_(_v z5fk278rwWrI9GL;Bq6ePymHXOx}Q8EC?Ke~ONrXiZ+#HiR8dq=zPNC;FpJwMgSeRZ z0C_kn6bWIoU3hzQZAV&SCic|K*ka}6rE~MEo-W?_QXssot}{RLXH5wFy#t@${=~wR z?UcjK$pebC*LS5Sv0eM-=jW%TrgpdVw$*pyO}Xt3*#ntLI}f& z280h%7?KiFIjQ+v5uog?9Y22X#Rzq5`*x1$z~0ckCu4%yaWW&BT_1B@>;C*%N8^om zgnnPxvG|Ons7#{YufS(`2%U)tpK*U@`Ak!u>9;qcTJqT&3*zFUCq|oo_|wJA}!Ma25oWEd{&)jSy%vT`(ls2)6_ZVRghneNe?-QSKGxP7y zKLLCu(&-rL{8mS6&v5UUx|*iw4$+=A8XBc=x2lg4?TYVfF$c~YB$kK*J z8YH*SG7_@!yv4)A{nFVh4B7;qY?zx`esK3?O=$y{Z+R3F;u1?U=Y}Ywm}k`RpvWOI zLsUdGG9;#^q#o}v)!xSGvnOAk8b2c{%5AL5%gbAr)HPIcQbUn_z_euxPohs=LqgA6 z7_HLI&=vTMw3uv?UtUpE{Tt>p1On+ei_e%Ke8%Wq<1_lZ#qUh}ygV0jKzHq8jF{+l zI=35+mSYu2O9}xh!gbSFQ9)+7x1y(` zkldCpE{528+uIm_{(S!a)lma|O)lZYZT!_G30IbBXHRvjtFrIH@$vHZk_yHKss)MM zL)^Z-n)k0T0=&6{FM#l?=lY%Ok;}>DDf=JJ`E?YUeYh0#WWnFoRF?2g0r(6(n{cb0 zuvkGD%=o=)vx!aont0Fnj1X~qX>@aY>R@*!!+Ia$Wkq7A#2{tZ_K=;ttURfajFK51 z9v&*G|LXEBDJhQ8SV&M9W`EQQUvxF~U0>w)g^i&zC7UTDE}!g|Ul>`>#~C*L7Xp}L+cCnW zCW414i_dV+pKm)#llK3|-RPk@Ye6EyW`QaU_LRSR^&#q^HzvZ9)>#M~0L{$H^4|-S z{=`t7p#i(^6=cV@*JrIaXe!A+Jk4kj+rjOfPe)62b%_>@i(G&q*x%{ZKOQ6`d3o zFU*d+yhNR2HXCs|`Xe>voSx~}F3fGqueeL*#)ZM0^hmCBOH+f}tHa^JYkbT=Tm0^f zPh*bBNW-CTt|41Ae7x^cjB1q6+-^s1w$oDob^c9k;@w54ef;~xXDoDWNon-z!=0_k z{i-sWyu7^4)onf=eoBhUw9X;;1c@Gc_fn$f|= z>DGmZ_=>5kYTR3WJU_Yob7ZNewEly8pBTNif%0(i>S^y2-65)@wP&bj3>0Szw{`>y zcj?S^U2Se-RRXeubl~xg7vUk1HU`c^MJLU4tLkM1;6a(CfG&H1YHEf~b{K-7@Qrdt{_`o)~M6 z4%^@|yqU57Kfb-z)v^{TvbywmM`Jd+ZK$KAHa0r!=*SWKm6w;NqcMxoS2<3vGhx|Q z8yo6eUZy?2Hxs!LSxSiapB!$OVKn)AaM=Bo6&}5MZa`k1+vg;ZrPC)!>;3E*=y-i5l4Oe)OQ9d0339gFAe!e}i#0yeK{!)Ipd|h4{F~UsyNmaU&+zl| zC;8@bF0%?#>zLuHG^ zP7V)az(B68+{TA(QdU&Cbo$!Gg;g18?p=KpP{}{N_|E_J;g^rQAGM=@mz;vEwCqsN z2;AHPIJ2t;CwQPyIz=J_@r{v``H^{A20Q_1fL>wS*otg&5^N~r;b1rfDddEO+S0W=;aTy7+InZ0{_CfHT=+v^dl zqaKQ~$i75P8RGN5st7qbRaTH$m~OW;W1AhB8S9;#Y+aacOF70qMRjwwxOlo3e{e%! z`O_PsR(|n(UVFDP*Bj+!C9j?B%Swq@Um1B>sn4FCx_)i|xDfoAnH=8JULeZ4pCczH zd3vVv^y1t>D-MTvIcbpt*dErcmh3}pw}LW_Qt2D zCxw0dXih^-VSSPAw*1+NW-dQ_I$ElCR~bOLKebd_)_}&f#2_alw>)ey_<>ZM(f&T8HAioeSr<0xQ2yJ3&cn(<2 zdO1WQk=Z|W)&*Qakf%6mIf=;`5wD<>};i$jhli2MRT6m!F>eooWh1&8)Jk~7B? zrB%`bit;0BxEw+Ma@5Bme8&4-<1<^f5c;aEzP=XGn1j&l?9|Br{NZLsGQu=~QBX;R zNw^5tS{lkz!wpj-4NcW)SjaG4ZM8GAq=Ob50UUvWjL~a<`pX^E>m42vJ9k_>)7#ro zu)Z=vLd45UG~hFeyQJaIgu{W%ff{i!Q3A3HO6=<{$x4ZAYioCKV4Dht20AnPDtkzU z#kp|=)-9Uxp}KPml+LDXB9Z$@(ZSYqj@dFXR997e41c){gnatsTj8)JppaqIKTNQyq1kDevFx?3xKxD@no&d=0fgCHYsCs00fmqb{uLC#M% zv5EH>?-QSKIN(7_qgxv|H7E9UmGwQm{tTw+xQHWyuP>-L+q-`H@J}$Ua|Lkp_X;Gp z_KJy$Z5I}4tLr=#$FYntGcx<={%0*U?fm>4*G++MOpnZSMaRa&&B^1#d!PDyt;G?5 z$s+Mc>iPNAzOEsz>nr?x`~%%13>p)DF*i5Y)6*kvBaRPF!+VYPZyXNK#K`RB<3A2` z5A(7vy12V|^>p+rvOE%37uO{mW*>?<+Bpx?m<-zZk*MPvimE8A{^pY(ZLI9@iQx{1 zPc~gHNGZcooQ%D?Ge@spIloWOg;*O)Cmad>@}n~WK5JKAi*n*9?FCpI0dX;rzRr@-f$9NrDQ3_l zBPD)vqSco(2GcHisZ$eeum1aS^t#ARKn$*~^vzGTt-ofoWy_X+a@kMcTt)rH1o}FF zWXy42O<7W9$#Gagbaiz*JFofpwY4@H?XPaFOD8pE6Z!e%rcK2h~GSo znbAfdGo+>*EY>!_#lhn9XAA2u`T{bN!|q;TsBrr0+pVd5XLTeegZnNG0Wlm98XIa@ zoz1>F>TGQ!Gty}DGGbC2mg__2tdy zPhF8_ZI2We7w6{WHdeKK{qgr6E}k0-*V5E}aP8TJ`70tK$Q4R2H=q8lA;n#YU-zT2 z2^9rZSQIML1Lovb>RA6|S$-AoM&>`U5%K@;^S`Ga=h%+|WhqVlbIq5-?2m4F9i3BN zLXncq47S~1!~gffL4CWfOopnQW=2p+UU)TX&h`dT6HQocCiq&sV|*qpO84ul5sST! z=Ej;+jAj$VHD`K2QKm*3uxqzKKN_o2X`RK4zG_|VHG(Z5K4?eoVxsBW@Nzpe%WPJAeSnpb91c7RT_f1r z+bb(8!!PP;3QT$(kR0Y<4M>Kn_O$0CVW9@9_4jZam?aOQ^r(5ebF#g%LjUR+Bo**0O$ladws!cbF@zwal zrLb$`o=S4RVjK`y``8*8@os$s`;B-$Q~wrycQ>(#H;>@ogwJRyDq8O4b`$z$p&+dc zG{)ULz|T6oJ#|P&onsq8T~%X_xp4E`T{~-zC7YSC#W0nrrlKw=AV_YZ0vW(R-M(F9 zmbpOh9p#Ga#K*@+Y9zPUcl}&tBqby-EnID?XvI>T9b9i;da!ij{9e6%T$$sejy=Bd zf&Odib?o@DmDA_G{p81(uno4p2`p#Di&JMmxchRiF4Cm#&R$f~fD-FAazt=cM`O2; z(Aw^krI}SrZAV>MQ%iOGcHs@K@>*F~fBf)^@qrn9P$!sTT58*GuRhF(EFxzzb(Gov zxT7AKWwFhIZ%sre3q3nh`iQ#xZs0SyVO1L%v;PuQMiQ>H5d19PB|ak}%*SZ5`QdhS zQkV|>EBRl$BT!b7U6^Xa+b*Rgh740HX2+X-Jgm_a(IHn$Qy{46-s3 zgFT1^_t-%7zP-D7d3icpa>;FZCq|p>ZH&2uEAEnE&??ET`M`fPHP{iFG}RTK-JNQv z*uYJbh3Vc8?oIo9bL>MZD#+Yh9qDdi2jaw|r=tjpNJ$}NiBfKHcEHW$kis>l*Pm9y zkA?hNPP2uGL{fJ4lZlC~Ja2%X1D_enLOSsIdP3FP8@gl@n|K2Vwu|`<_>8ro;U5U3d@~8jVla)6pO99n;>uM@mw< zyQMcQh~p|F4-ap9L-!>8gy^~$*?Ad-Lp`JG(@_BVnPHro7&?Jbh<*C|?_PXxW$DJA zb%sT@hwPu+eBtZikELW~WnH;=y)dhkun~Y_(K?5|{P26!->;jKM^9TH8u-%2$`0G5 zA+WegM?-gJa!yMvcff8G+Pihm%wD*%a!XU4W2!DIsQ&XOKRDSr6Zr({kCAgit9V&< z(29ymF+K^j+-XgPw|7w7ZVlfCzsS!Bn^g!*>Ck?@|lO-gp2ir(qC}^-oz$;e+2y|e8x;)|39x^ zfA!);OM1F6XME>3g~J|cdEqq*QcCTqLryqnw)}kjEj1nYRv#B+74zWMJ4%Ymy&e4~ z2Ta98#hCq5G2z_iPHBl*XQt1}$#DBVjS7ohm|Rx;nb_IzI-o{ZmTvBnU)xt#QBu8r z_U@DGFH8?`yGsQk@!-l+%w}rKmMtmAGR`kwNJvQBaH|1U+r_zMe|-M+5tfTTdmBf3 z�jGA{r(qfw2r|CSD$&ha$IIkIhy{%7e6H) zUL%C==Kg)T(;D(RqN1YIu7MEGC`#tIlgY-XV81=gb!~vpXesJt0iOx2eB=8w#i4}j z&4fU!cZtu$_-cN8BXY6VSwf8MttckUgGwsmc|B`8*qTfZ*Ed$Bw$*16iEG&+L)>PW z&G>xrQ{Q)3P)E+;E7%WV0tzdhd2I$K>u{?n)P*Duq7U}$P6FVA(M zKJ*BzLn4sr?#yjuSCSXsP?^%!keQi`1dXaJKGs~F*4~hnoyL8qMNoj)*_?w|bN5$a z_kswBD{sMt$#!@b=2QoRq=e|Li*!&Hp9u8q`uPFoU=7!%6N=>6%@JBtu5^qrk3^g{Os8o@QsJp zp6cuBzkZSE{N&Ofo_%d)Va=6OT1xud{AFs#0Cv|UF5>V<_r4%CcgxCb;DZ#=<#@*Z zD^D6LTL_46G4uXzy1E*2sbH7fuD&k1{h>7r5d-~wZFQs|-_VXmvVr~v7Z-(ugqy0` z&YfH>$*bVUxknBQjQHuB|7oiwVRvS>@olS$>nMz@?P=?ak3KB0O|T%MHZ`DVz0BVQ zX1X>VX~R0od$U6-;Pb}i7X%Zow-AC*KJzZvH*MqNnQFKD`f5aVI(ye*kGAUkRJ)eC zGWw^bnZY!pF(o0G(O0FcyhhjUt&Pu|AZcl^S$e`@|C!N7Lj{_5}`j$j8;lH$X( z%D;Slxj1Ko3mJlf#EZ*)fBtkuSwU7*L}+@nDadclRf4b}5%|OLcz>=U@zK6rt$Bsn zv5nQpIZ;k}WLte!bxA^JOAgo034B>f3yzSQat0}7aZ&7L3w%33^22LmGLqb0tbtRV zJ=Hx-<>($VQsS#iR8U!Pqvcg}sQat`dQ@MT%*Bx7d{tgvj6FFJ`*hL&%hm9-Xx;T? z|84l$+J3pT^y-5TUfsC^Hz;3OM!hSYVSm8Q$=Itkc|clhjSmER2VYpYIz$9a@nUQvSx}=LRBtCdB%k;WK+Q z#2(K1y*wY{W532sc((G;d&?t2)(DA#o(52nV1LJ<-f}C;HLk0zrLr>Dg&nK_QjQ0o z7;S_}ALjJRVh*!7U@86GWl!%+f&^h9ZZfcSD-Uy^_Q&sTm>TO5iTuOV%9!vqdnh75 zAC**CS;TD*=+dielnCyT%RcxQIJ1@)GLM|FPS$7e(6 zwdPMw`aWL_xJY-CmwGe1&ACxgKi#;2toVS;{2F|QLb%dQNPSy2RyVPUUj_bF;moqL zDSr8UTYtp>%4|LZU)8&JUp;&F^|^B)oE|}c33e;!lC#DYB~{|wQwkz#&_qj9tJ%@{ zY5JVDCWrs?!p!2rtP*8KmG0(V7YFX$a$`f&QQCy|ZXK?44K>Zh=@k#xpAF0CXzTpp z{m(-D)_4Uh7#k{De)!@icV}+4*Kt4KS(W}2b6OR2kw;^peyQcF4#v$1uymzysr zINZy``vBZ;V0in|gG*liqUDYx8VsLI|lT8$D^&)>NKmG`Trh zmKPq)NM7rx(o#ET#+pzQBm#@>LXkmAxrm5R^0A<<)?B<5w!EAawX=9>u8U4BUvE7P zD9u0e>ecgTmVaGxdtOlv`%ZgV{^6dE0duGH8gjJ1-T6Nlyx*_wbZ2>8X9{0_`oA)7uU3uW1l{mw?1fy z%G|YUm!F>>JaTn)%g#(WInjyPUTxjVYkAPBwyNmSt36I|JnHvCzh|^g9i_yZ-jatI&=ts zdq-7O6&`teLuGwDJw0V*xwl@$L`1ss@?Jf9gnUpk!{Rf~CMV&kuAW{%K!B^OtDqp; z^&bd9Ux$iSQey9_@$vClTU(<~;is{QxsU+QKnCGy58+Y+p*m5^-2-V)DCO?%zH=wr zC~U`$9d2%JKCC8%H}2WPVFG4hVd3xZk1A+uYm03u1K{mY%9{nqAdlO7hdSHa+oS(M zD1P9;0sMZKfq?;9Pbdzr78Yi=wv?0BD=8{7>60fW=W46# zp&PrnxS-uBG9;$5u-0(j0Sc+Np{CK!&K4Bhy?gC$gx;RL=jJchRW;Z<*rBZrqZ5JU zJ{Pz|On986lmzxg17HJ!(SG9xSD#IfopASX2gO}noQv{HUOxU~u>acq!~OgBqyIr? z7w6=}l!w=z0slcCnHZZ+Fs5e4=Sqvp;3iIJ(tQax z+Xxa!BV;mVU~p)hIpXeYjfsV6 z1s+i-y+cDo6XQ$^bGG+CX=$mhE)s*mKne~Frlh3c`AlG7;OOY+(9mFSFSVtm6+f_h zxjT+C8I+!0s7V)PXr7TrDK$Awb#Bf@46pL?^2f%;pq}vFl9CeqbPod*yl!A%fKI1V zsZ+GdVR=M3}cP4dF8v>j=HoKE1S&{(ht~6bc1DjlwkD)zt;*P!Qe-O@Xgx zPEHP!$%IGny2{E*{P+yh0VG0Aptbw@`tWl))Va2{7ODybq4?3GNAWVFqN1>tfmh4O zurDL&>FJ>|Q3dh77GWYTEG$G@8x+jV&Ba#+co9fLD+8^qqr+a70ttj>#1sq<=eQZ3 zmX-#IsDd>$HTbC+CSQ<-%7oeigTfxc1P85wDVUthaX=Xq6oe`W1$%mW@KZC)ID@YN zZv?i3Jp%TUot=#-SX5MmXL>N9W0ipndvR97(AsTnZK#4!nV1;1pLxLXnYT%NkdID=<~GB!TH%m zN)H7-paT4(q3>CmS+&-Yob6pHZ7|j$-)K~(hX=BSqPRdE70k=e z+b+DlqrSU1rwsA{y}=ZOvgm-oy4L$-nlabd*a+=Op^yg$2Ubp>3-Voa;sKpJK0Y1_ z!W(;gdr!`u3J+P^EjKhcFg7#+4Nazyp{kGvKROZ6i@rS!U{m42Q9D_T1&cxz9Uk9U z-G&lTs3fT7>){^~5Z+MPf@i!Kv^2EZ>$=+OyYtf6eq1FaBpKB4JC`2$dk1pm_wn%k z!?UkL0>T9Og~?fCF>Z*XU;(0VLGrzmlb?D!vdqK^h4N2M_G3{xx6ct%>9K=11uY)y1^)TSAYyI7V=FtBtqWf$W@ zY!_z7_H~y4>##I4m>X|VR%CA`Xlf{p)9dQW66w7aRul#vI()+nOv+cc?0J9Hh!ficbvHrW_9HnA){VAwDK(VY;(0JFcHxf(B!fmX=XaP|VFd^3CU$ygi-pl41N;Qc^C?OZ?>N z83%hSf!9k>At8a26K!W^seAV5z<3LbFZ>*;rLN2zYPfQq5gzITt6&(rurHCx0o}>r zMq{J>Dk`d8E(b16#J^aHtI05`NH)Aa?kOh1FDEAt(x4Rl#4orAtbGsk5hwyL#jlH9 z&CNfVn?r8@-o48)FyhXeV3LAC1}cM}M_`r#nII4qi=Pf48&m+RjEtq@Xh4jd=P*U@hS>EnwQh&)Tp~RDTV~fS-J!gF$9?Wn?(6 zPfJQlqFSJp!IMC!m^u#Fx|qNkOXcO+tqs598L60<7*>j_wLw8>#-CFV*bXFO3gTNE zG{RQ~zs&;KxD>><47>ubAbz3*1=UzsuOO&{wKm$F@CrhA!nZbFL1;kq`+^q4?@bYq z?~631AS{`=6vS%s|L;zCN(K-Y7snI?;1z`L4wepiASYLAV=@&K6z~ed+wrZ9?@o{n zYK|$$)t#iIq(H$q|HRSS`RtftK_c5_F0>Nbw>NBUyn}P4C@w(|ZTgd+*H@(L|F32#Icb@7=h^ zHI7^27MH|M&!+EsPx9@4yXVXP=lH*aWFZMTPBw8&cJ-Y1aA4-nospQi_nG%T@B21U z3lE8S@b=@%(rU)P-ayx2W_aPm z%Gn_QV8-nYI%mI~RFqV^+PddPmRjq{k`j{OG7@8$3d|7yFu>UuWCrj$KvdEbvs@kB zz^9Xu<}MTnU4WcCwT0GL)zVJvV%3cTEQms+-n?+PET7w-<6!If@x3n^s+a{1;yg3D zi>IW-p|^EH5;-HV7`6{!rE5VEV7a|2*EyJ2x|e+)ijZXkPaE9~QQ z(H;k(VJ9U%5Ksl!jvjbpfg0%R0tm*^6v@|%>4j^o$?WZ@U_5IG1iYy(yPsMK7Zk)Q z$R1nja(38Nl51(Gtj~88<;0Bi65^tL_nulu3-{HhZ``;z33^M2@dam*dA=HDX|8{A zy~o^?BgP+4rlFpiBPB`Q?d1uFeYLgm6C*?m3j-1{zhX~7la>~KWT>I8I%8>?q{&uK z3bg<7!&43QJl0h$EDRssS&fR?eGx+-gl9)vKD@V~%PUomA{H|@)_UjK9I1snagFW) z{MpTZ7YC+u8zlyNYtHA}tFe@Fo8(aK56(t8Tk%luzZ7XfK~KSu_~;S$koXGpGZUq- z$0M+tG+2!D%iHt8#~&BL_J^11&lQALA$TQ^{jKmqKEsgHJbwJq_O`p#zbVN;3W?G3 zCc+%!(tHaF!w5--)4u)W`;Jx`J6!}kgih`)&9CUD^jVs7p9t`Q_4)1f*<)OF5CF2% z@}~ypUzBPFC63x$I1c!Xf;@9f0~F=*scZRJMLez(i9Ee}Zh3N@LCMtd8bkEaGOnsU}F=Z_43K9WMZcn=Lgr-(YyE7qs@gA5)w>ug;P-PE1pdb z$VrY*A*7QC2^6V)APKfS0Qk&=wVp#&d~0!3?QhJ8IN{JAgU@(7DF69d!dj1q z7*a?PD|c$MR|Bu?U}th_y(eVHOVeDNO{idcV+yhlvuYd&2?_#YGdV;Q5kbgEOP*fu zWq3#!z^h`n7OANTL7+`#Y0}>FVr0>GuFie-Dvk?ad0ZqWbm(H0kQ7EliMVkEE^6Qmo8(mk&&h4?O+) z@=<#A-c&PS*T?s_juh`Ej{|INa;WjE4^9JW$K(2C(Bp#*r#E_6XWQ9j!!YPAKzd`L z^Kb-*|A$s>_uaLG@m6OQ1+kmU!MQQqTDzYHLRh#hFYiY%?%lu7o6Ni-K0}8^^Z5)P z|Ir9_j$I_4{r%#bUi|!if9+aHZ0yVX+5>qswx?(+(lwzjp@Uj6_~iB{qrH>t%tR6; z*+Ur^q>Xj8^%y-bOv!?%sOaLv+V%6d)NtHo2(nUhPpzGQQNR%rffyf{zWwF{eO;z@ zPXBepM_xL(sJHo1k@zpD5t}E<>6alV6BlVs;b_s9^qzI1?3BZ&{jU5eDO`Xj& zQzLUq6SXYAg0V|WQ)g*%jiq%d%q}Jzsn^rdpB$Xy8J!JKSzJwS?4UGL{k@ptWB~yI z!0xt}PL1_VVq`fylkyn(E2po2c=t0c4GwA)>y~kP;5wOMQtEG7y)=Ft&e$CkPntOMK$q=vkazFH&_%(U>~9s+@_CZndh%JEft!ePJS zyqKf3>b(hTks^qb>pg$_%T;|{b!|=6?G>8-0p@cAsL|qNTl^k>&XJPD-p(Tp)tQ~G zML1Q3xv^#+&x67KE(;T_Xf#I_Ye02ohKUVT84D9_4tA!j?TT2;2Y1)ESLl0F&469E zuguWNWvnd%FoCiDx^F%{ZDPzr(k&&08tx^`jkPRIk#so2qflbV>0x4VE_V_-e;4I% zuO@5`c*2DQrYSCqU2cFt?(LZ;lrWfOG8u|v`ia5t74VrSqp)|nVPV|*I6nCJk3y)^ z{@^pfz}w2Z?{<}xNTN_L?~x67tQNg+GR423A))Ke$tPP&C!{3N>UyaLW{Ufg>K>%iXj!S~Kao$3lRl zq||8d^yd%1Vab(QpSLE5xY>T$#nj7M*Kx9DOGlL>0^+s6T-%14KX%Z_ZHLd){O0|q zdO@>5k~_p_Z1*>xkwgifpYr?Sa$HKNhVB8)`SI48@)W=j^mdk4Af~ZQ1C#^&4#>mt zwQe0P=G@&>n>9$UX7HSbs!STGl%)aC*2Dp>5*FkZ73MKL(u@)p+k0LbrR>>1@A-N; zC@Nr%uh2aY*)p~Z!{Pm1N2*Gbx!T7?dISDYlykVZvjUG(oEjoVg}R#>>l|CAaYb88 zNs159s#+WJ0GVM=5iF09zHxr?&RcU_1+rl~(MJfh-#@~lK#b0}KL3?u{OVZ3jO`$K~GsgzKkO;x*EYkiNuvV^E3hAlu)hOFsD6rwDdBykGbXu)BA`!+wlL`$Y-&taJ~OvIdGH z>nG|rru&w0IF9(BAm7j%7w#;MuNv=RCScsAG*Q3);IDx`!Cbpc3{6k2zTxir!ie&g zI`W_1`_9|lhw&#$95vcA(Nf#Su4-c;D<$`v5C0k(0A=kH7Z)cIT4#n9`Z|Y{u)IHJ zer92P6%lZrxTu7@%)**-X2b+q65ZP|lz5mqM*zk(+CPO;RcmXY#78Ib?8?sCo=)yf zPt2mW_OR+N1o?(6O{^`9uedn4us0SJ6(bWnKDhH)UPdANc1WK??)muc7h|<6$zFN3 z22LZDE5@1};c~A9rdn3iyiq3;4?-fjAiVnJ2mC?+Ci6}YEZGBEZ`$X4Mp<6$)>_E@ zV_|0cG802hpFZ3IWPss;5fTytv>`qk3Q4oEGJN~;jDsC>&5>{ckxQV zc4o(#<05_L#+r4saijfp`B_m|1=%y3eJ&0hu0<#baClAnUbtKOQ*wq#Sx4y= z;|6*h89U8QEg#-^a$@z2Hm|%cgo=hApFS(h=9aH0VU<>1N|SnQ;+s`-Dv`B!Wd zQ@99+3pds@lN#E2k{K^I?=Rl}uDTRbcYx8jw!FTt<7h8+$jpQ{A4rK$uRqdMoLg2= zR2dx}M{T7uN_!&_NMcQEVHPvhjJb*B#K4T2s#;-ANnIuHRC1c?TK!!kv61mT?E|a= z4c3;nt1}zN7EcBFaa1}Gh6@*Fm)tma3-BNI4+3Rmt!(`K!Iwlrv!`{yK~#Zhs?OX|S2J%yBIQ-^nfODnTfMLp&p!a4(bq!1yA`%Q=$@Az^266x$_o=% zj)j8ksGd$JeUP>$ZhNK6$CLSw%S;KK9w9Q)$V7y=A7210LDRmaDJn39;y4wBl^IHO zn3t{={>)Y{dlgF-f_$BR{M)VeW{CRIC}oT=Z3Y0tnHnZ?X;Dm#be5*csfj@oN9%2^ zjoO=vh=eQz0uDAN#c||l5)_2BHRRDqrJ!YQ`fg5Jz)t`L`r(@^?5Y1)ppr@+-&t2> zt8tl{5CoV~pf9)Mg@KxiltFqGxv8M7F;9?lAuT-k(5dwvu6k84sB~=bgBweLN;T%0 zT$v9e%5!H?`)y&Qt^NJQi$9Ccyu(bm_wD)f(LXQYUZh*%XyqEP z1TT(A2L*YBYv*p=e)GZJOusN_tV{p%$KQ9h(z!?oMh3Gqxn7i8y7v$U@-m8k_~M_X z&($mdrFj({%``Dl9^QCk1Cxh0KkV-qWVXz$810=rN*{H0aOK%~kZ&-ptvfj`t*N#x zDK@2tGQcV&SzcIGU&$;{q@$%f)<11-Y7r9=M{aCq5FRebNXzt7hoVAbNDUpnp3M2e zSl?u{cVcVd_zsKX$mO1%n7O@pV!VHfRnZc*ldrENuMBLQ9a#V!N{eH<^2h6wJBKQk ztn^<0V!WY-Sx4@OyM)JY>Y-ZpbTS7Kg6)u&hU(0Lt|~~$!&y(Et}^Y%AKs4OERfAWd13qq_cqvTTvk@5 zpFcjx#i>{TG^wYvqAWl5Xm<_Qy@c>_AG)hC{SG-992{P!pL7R=|BDS?{$^C zBAMLuLOQu`Z(tM*DnN{R>&)9HR?bSJp)lvv#LUhXI%pgo%)2a{yNkzg_h@K9L_3ih ze>jm&>0`N-lHyVUWn!HrBp}??$<4>pf2ezm6@1MOVPRn+p(QRdp(wkgAd~5U!l|eo zrH!pjZ&VajalMf0>F7-k&Vnz*&1rYCK)?}Agx1=M25Kuk@Ofh7Xt$)vnyrz_RXYQh z7kx{=8w}J<+H;4ztODzjI`UotpNVpU-R^~@Gx!V-QoN7QR%-q9Mq*W_Df>n+n*$c% z>1K;WAV&LZv!0jIc6GHmvDU4301t!GwCY|tJ8EOabZp{qN=s9ugcyGW9KJF`Ns8r> z-5MPD`Qwx4&yFFHi0E+7p&kMX#U%4~HpXW*dyNb@YG+GGNK6b9D@&95XqAbv0eP8` zv!hMm4$Mpr9i&wwksNC}6-7x))1=O}A}+T{aY5X(AMfX7@_2S4BLlws_zd`%tSxCN zp@09|+gx!;EJTHQP7Kt8&p6gs$CakT$Uy7Lg~`3;GTmLRzyI=5K^8OZQbD}_$8SX2 zn?c78H#=Tm3PvD!ROr^%&^R|R@a)NxmkVZizSiv&yyF|+__n|7Cn6Jn!oW+-!-o?M z4Hzk@y<-In=>bL4wa2^i$K=qvuI9Xqf{*TfZg0cmy~)$n>)u-rx0lZ-a>`c#2k7Y- z?57U#Ts8toiA(?c*Z&&m8fMjSOpVW&9bRI&P}qSILv74$zxU2Z>S~Z6Gcq)~mpViz z_ks)K*}1Wy=}7N*uwN*piJFs^w^K@zDRKx644)ZZkli^8xHd@%Nifd49CR7$pMFv7 zmA%cu-1LHopy;-ScF`Tjk*qYPt+9P#aJId<3oXS_vrif=BZ3eq%q~fa-wkX5ryx|+ zR~A=ChsV_)A;O=B^P6ki^q0(yRju0_@^&%(p3qY>27JcHHl#keGcS~PO5|UIa0iIV zWcd66_{?al^Z(pV4)esbZ>+D%AXKCRQZPWPsxD*7u5@+OH|9I-cEW{JRFqccI$d3v z0u?kGy);9~%!JYf4|G+rS1Vuvi^ab4&dU88i(*KGhpX+zLZ`Ge^LEnH)0&&>a&X|t zhX6QFYing?Wo~O@Zc$NEL`2~1Xfqrx7!mBgI!D1^(Cm%l<0B@A8p%xsG;*mhTcy+8JJ z<^6n0!#BS1Z6Dgd_e9^m4F-gZqoXF;FI*AJ4lbLmJ6RD&WTntKb#{Bt{|5+GYVWnhAPs%v9cv5pu!6OEm z39X+!{L0Q6B2usE^W-!-JF%(2$5 zr>ECY*(4$&0%j$a`VsU{Q&CT-Xi&r9`>BH}%Bs6xlpwq&zHN%I?Pl)7^X$JTba951 zoTL8s5e+HS+>nZwAMgtiVh=?&W$t@E1L(nG*P)Nzh_W!)O{M7NZo4qih7uQTs?8=f zFcR+-RK@dkZqcc4RPbsZ*_I% zzEnGFqlTJHu8n#+>VN+7(k4^`VwYbPCK!EwG4k56s>yL`SB>kf)gWaBj&UP7Fz_#z zFGHbB|Mt+wH@@-hKhJJK3HLrccFgA>55WdhEjp}fq47+NM=E0lUsVNn^Wq(zZV*!= zGa9KkK047r*N|%$5{ZloJJ}X>-l7UYLBX}zt(XXA zi4cG9z>2~ua$`G-3$a5;2;NZD2i~`P2<}+vs#HkUV3se4za?D&tXtc!24B6Gmvb;E9fL_H&QU`ugD1@w3=06UP!?J2k zf=7o{EL&bqS`H&ECd#8^hM$jtvrpQDp&jHO)&&XJxN7$61zOk9{3!{%s3{Bi!JW(hKadGB5V}NgPVr+^4r=FGt zG+GAm89g1yl?@2e0Uc-})Ku5xa*Qy56hW#gt14lYT%6qKls-DSkL8)c$jW&*?<%7G zy#re7DKO{_l(z>71`Y4xE)H&T7= zDXFx?AQlIMK~6{^l(?7%UWI+3iUoaL_01)!m%CkaZ5DgUDh8^nv-alw!zszXb9Mfk z&(CYBb1Y0tNJxxPg8q6lt}Y*{B^T|d@&2huQ(cJgs46I|P$QZxUr{bT2&sJk<*j1#s{YNs&i$eWn^V!g@q9+$|_t^SQ{(5 zV@szj&3LcfxH!1pz54LN@hhyvcP>sY^W!UwG{1XcWocEG&lIMrDB}jGLj{>dENZbA z&4kvlKxkUg*3hPtdW-YR7z z$!)FduAI4f$k_uai0mzzDUPfa5a6MK{5_$me1McS5bl!Dm`2MEE_?X_zYyM*u(x|) zW#JI3+0T4NPZNE2Gi=dF_K&;X?i_gukVug}TJ7V@)n8qXs?9M4TWn3`;{vr1!Z2ekt#=m}A;HY;+pmAL z87(+3_4m4W2o6=`$Yz~J5M#C|d zYHMn5%x}B9@C*zWaI|x}e*X4_<8K)lFmvIms^Bi2yqcAg!>c{SN#4Eo9;p$!7&%$F z&Q@wxa&8Z0@I`s~DvN8XifaH%NsLJm6BUb(N@UcW0>gDpSzTK4?pq{E93>?o6&n>t zZtUP0O9eozX~{{?5B3W+dhUa=Fta$jb@BM}X)iC1Ko2mH5z6X{vWvv)oLf zf#Eb#kCdbo94hEDW-2Gu*LiQeyg#!y@O(eX$+0h)O+GU&0s+L@82`SDh~D)TYXR98N^ z)@^DCX}z>HRoJTl=Vr&G#zWo`TWh1O&0aH89!scT5>Jfr4-JGA;8+D&FLzs()G92< z6_4Z2)1sxNwLI5eRuGSsmqDRKr^j0|QXw&0a&q|LFz#o;%1qzh#@N}>Tw80`2_q#b zPHinVHPR8)t+$rc)tJ0XQ&Z#08>1FxdN5v4R+1kX={y|aEhdHpmn0|0 zA%^$yJoxFOZFhH$zyZ*5Zmi|m|9g;~%AvsnB&VmNg3_G7K==FhYFszLo^^Erj?Uj+ zxbW=#_xXYuzVVH3Ki9y!&*R7MudP|_a13!#31TX(FuVpMD>v3R<>|&9p$QlaRCV#h zRRcXE*d7#S6-R|e^Be{NQ*v>1i;axe(b}EK@HlnAJ@%HsgYCFP0CRYF{Rtz;y0V0j zo1RZ@?2LFpbhfOttf!lgpnxE_Fate9_9;e7Ln}O(>6t+ykpVtIV6VH2M<4a5G@5rN z(u|a>@`5T4H}9eDF$H<-PAA&5ww{#uw1^Py4_KCeq`s0ETLq@ILAg zLr6oYXeiFxb$6)aHQu>&Z+d6}fq*m>in7W>6-!6U7i|q*bA3B?tX5lQf2?~N;4`WI zyjMwn4P1<2*J-eZI4G;$e&#dA2W0MUgq5d3Jhrkp@yjQtCXY6I{Xaat1s&L_$_rSRkMxdy74p8teS&{SyT_91jS1y6KdX z|9g6^tuc?i*a6^X$CkPZa$+JwT|T%}@TZGW9Y<^g1z<=KXf$xOuzs?&^>fqz@{MnN z;~TI$cfd=~jmb%4Ehw-;RUY44Jd@#H;_DT_DnHGRoV5IRuf0bmc1WN&MqNQcK~YiB zz0MpKBqgL2*;KNCB-q;=B$6pVIOOa;);Fn!gT4)a??7r>kGL3fokCqrR$yXL)cX+tR-o` z^BG4Ag~z9(5`)$C^mLwnb@|HK5q8N(T2e5z4T^NmObHtrB4e@47$^%1qZ4aA8XAyS z1S>CVYsG``1D+!*D|OJ;L`Vp3Y^b%p(xr}PdPTy5+}0PUT>L~*LJaT|j4XO?yoFH* zQ&$HMo;3}1mGj$2jf{4`L^K*LDxj63fC_zDi>avt)&pu)$d*OnItBt?E z8>{ige8-6s*fOoTHXE;|a&nb?ZYt=Tx8hn$pv(4hP^!)}M@u2q6&2qc9fj7L{*7!i zeB&G6{@d){y=V9DPZNn4G@3Eam}y(h)t}4@tz`Kb*x~0L@ZLKgjStRXFdSL4goTCk zG7502yt9<+>gs~&9*#;0aQB#yAn!uDhWbV*adC!rg~19EW0Hx4 z7Qwv*iJ@UuC@wNVT1L9ExMr+xYLGsn^*rc1H7PABbXW5n=o?IF>O_fyzEN_VRj^q= ziJ{8!D!_*cX5d^))vZs3??JfRE#u ztv)Q4xy#aAZ)3gB!VJ1&o$PtX$|));o>-$ZM7&xWs-vS+S660TNFgD?-1Kk*eePrh zH8oYi{?6j!fJG?#dN~>yKn)}$BvxiA5o}S_qM{;=jpg1Rc5)cBqrC}NC&Zepc5($* z;1UcIo z!uWS@E^V*SSW9)V9Wt{p(Z)#N)7Mo~Qyg|~!t2|s3AH)U_m-b%^VM6)?gyd4L`G6_ zsHO%=oCWN)kCuGn8{hV=J$Ufr&6{;;X(DX#3qcN13yo(0pV>Q_xj49e{_v~qrBm{I zw7b=1wQUXU2m}ubWNBu-vAC6$lE>NtrT{=@fGKhYHM5YAkZ@+>0%|Av$;;C#I~6)M zJt-5#t5CS6hBhN9aeQq2#K81;-;{#`bM4;8(|@>kgq0%C+T3Qecgon;;+` zFjGiMNTH?BO|?xKNxS79oE+SG+6Uw~S)9Gi!Lj}+O?53XHvf;MrRC({91aJK#v&pj zU8J7K=L=*qP|)|phj%`Wi->3MM^DWd@R^Rhq0Zb9h79|4L0JypoZg)tP}r14KkUvO zwDRj=eE@d314hf*?|dfIQ~l$!VfWA1UcE4jSKTEu2n2k3nCRhZ3Le z>Eu#RPl%k14K>B_O6?*iC;iri$#dr>80%I(9`-3Ip{%`--$sTb%OyBhdTKb4kR>Sr zIUXGxEH@XaswxU_At7onY~6{X2m;q=rmt&w|N4`2$1Z7V zXmRbz&n%o9U3!rarKYUz`nlV|{<}jrnMggqeTAp|2H>Er@-Nc;qKxwJv^tO zuDNqcGycS>stwV{O^wZtl++|d zCh|NrMiw*FJ*J3NLL!j~(aG$)3=K^1J1O|sPYuY7si`SORvz)(mnAAHT2WYKWzH-K z0hkz}qMq@)1WJO`(0+RDTx~@I*Lj`H4h>Z-=Y*DZ7fop?zs_l138M=5OlDANQ+ju# zTheddzlApJA_dl;x8M0pVu<#iug6|p&(_u9Sdq+13vZ~(@OHO5wcf+X8^eH<6w1sP zT9+gd^T}w-$1VRbDR~6T?wzc=Vy1MJ` z+v4tX%iH(f|NUP1_`j222qC-cKI_{L=QAHaVRGlrOiX6Z+@CehBUX#fUr0;bmz0#`vUR(ld5*QEjg5dE z9}nOIX(qL9b9A<~wsYFLDB=~IKGWCRNGG)Lyz3DNL~#y!YVaU~+$I!p1$yXd7y*37 z+0uiY+3{{uDb*CUs*@Wtf(mPrX`!yMzrDflgry#I91peUK$mHdqv-0H_X7K)O#XT; ziBh^Gs?0!teP>H$+@9Uz{e-Ps7N=<niPb;H>m(a9MMUhG<@N^f>L<{zJPl^r5Opnmtpry7>X<&fp%T2ZR_HaZMB*_cp zm4pWF@Z0U&N<|muB?$Ilyh*RGhd4jcWN0Y-00NlOhX>mRI_nYKX9U1im`&w>`uLEA zg)kvm*hRn&A8&ZfGc752`JtBPC;s10m%srFt_%zDN{$OCE81I}yC?~hT_eqGMDao& zBqR_+UG;&!uHd!TR?Wvp_uQHZ_}5pxbJJ{6>Gn&b0a|Lpu27EV=9l~WUa5Th+O?Hs zWm#F?yX94W(Rc4okjZ))A{dCQlq?~mwWoYGH@sZzg%^sHl+I-r0Wr($uaBlUGvXTm&zz7T8(@;b4 za^JbUu>w+&MrhvUv0Fu1rHR-AHcX0LC^OO0(BiNLJq2pI6JwLp_hv+g$5HEPBD1pr z!U7{a+;&=8ShJeCcokTHSTC{P8RO)M-j)m$}~Ns=ee8*BFt9 z_ja&OK?9pi%?d>UJ`>;^`P&=(PMGOJN9&>PeCSf+d(CGuB2E5sHL;(oQ0(@P^he&{>r|u1A(a{PD!r$%Ht5<{dUpzWuZVsRDb|;(TbFI2u=U%W? zcQ-yELD*S0FmT803}bY(F)1k=upf^}K8v(wGGx{J>gQDNTw90G@f!`EaX z1cp`s;kkNs?CH}>j*cR1EqmIkj!w7m6A-ABlCM9Rw_7&4!b5QI&dJFpRaI4A-yIxw z4PP&`Z~)=n&;NC+D0hjD9dMh80TPXdB9lw`Lse2z;{EJe0ydNPXGvZH4!iJ}T;WwwfAjuXq3c?~CGHSyq;n<&U@Ay7m0V4N6{~ zjHC$bbpTUc%f{?(Hfo|E5`z$17{tI;HO!42)zj4zYHVU`(%I6x*<$nZe#}iRTBz*@ z$Bx!x8u+4`x=O;2fBJhya;C^#%Sg*i^vyhd^n<;fy|}nIv6>tk5nqoX#O@I>HzX%3 zM<=#KhDIyMD=^4ywPiR!d$hFR=mc<&Xrrgu#4CQ?#T3iJlJ6B3DJ(Ysu?xh?FJ+MW=T#BWw# zNsNn3;Jx0Tl10FhTc|9-NjC_#_i?&^m(r}Ore7FYl@(el@(AA!RFG;_ zNtE2M@|qNy-&WE2gRcVP_0W+zsK5AsfY1DRIgvwfZ})vx;CE&6-oE{4YRX7Q=hYWOZ5<629c2X_RV5vR z^{=7Bm1SjlZgvi!Z8a4`9ql)_mk2MfpHH9ueGe&j?)>HS=>y@vW~v|L64kK3 zoto8E6jjZeI!TU8o#>wxbhYI{d%bQCvtOid-eybNp0ry0n~|S)ps+MgSjGci8xazC3@LkG9(Yk-NvJKa z2b5+D*W*`0LW*2R-Rk)!0Z$N&&i(nYtJjoSLw&9z*24j*m(L?^YC7 zWu@neL5ok&TOFM4U4BHYp@8T2WZ&F^$f`9`a{Ggdh#5>ilYIM7l2^qfkqaWQH7WGn z4#B^@!SBRIP3Uk9G>V2UzTbRif0W6$=i*NF`5EZI<1K(!%nnmNzBOZEx>$dNM9TJe z)&Wux=;I1o?P-e;x94R>fB*S0-W-jTq(pCfbwac+#8sit8wx6lg%#JvM!JV5>F1Ak zRdHh+i*w_fNN|c4&yOxSK9JwieY@?%`jnj8}ESPeuty7+EkNN6!^uhL>(o$j) z;$mZT&oP>($V1{I$>0C`Q>T81Lio;|J0l~%-sj81doz^j4@J8|2;r&46|CS7g>?#A zzFQ+K^o3`cUoWhUjD9?M@?|qkz_ZN#`;TU4y&N2Vz1#i4#n|LV@Pv+z$BA>P$WD)4 zyt-pSC@ZV9(b(aEA}*MqF^Adz;oKQOT_j#e7E|KWo_+c=jmVG`RR9H0l!N;I$zKy= z;LCevT24V$aY9s5Z8?r-Hz$OWTvTxmJcv<{T~b?tqtw%Vcfxk8fD}~}VT!U#`2q$7 zq(UQ}k)D)6!#6uQI4$oAz|`2Ry{X&8$h0&MowW}(6#)c;Tu*=c$&Y(NqJ@ruOeB>=*VLxcyzPH6RN}veo*Hzp8k(x)@)^d3zH>6l!B}ne07$W`<5{dUQbuV>}`0k=bxV( z+vT}%4n z{r!oFmo?nGbLZaZ=x_Gq^RH9<*_XQSWlc|bw$|BoHNJua!tn7XH%iq$|)u$7h z=O>O;lwkSxHK76FUp;s>!kPRf*-Tty!ncoqD&bOsV82je4JBZAP*X#z;!>v<9x{>- z;JNV!kzp}}Y6=!ro0*=oaPS8TtIHP+YQT%atdc5JbzLO^9D~SRuTxdyF#9~+Jkydg z%8M{Ob^-eN>C1l{5EyUa!N<$5h1>?%j<2^rtC7vC_|8blsxGhR*Eeae*J07wX57-P zU7kLT_@-SRKCRRa!RSm|E87RxJ{#+ul9q(8@LbIjlNUxA>y=K=?NO8${mH)tD9S2U zCN`kr>T6T!9=1Ney}|EZg$`H0?|dfITldS;F<+dFE=h&;PWHBD7G_JFVO+Lt z?rpD$i}D%i!5JHgD6x-;*!BINP9#Jxe1>t6KK&gvJPmL)I-Nl&k&#}a<5E^a_OP(` zu8h)2MG^=Epc8XrR31&r%Z%z~R!K=MaC=i@y`df)gIvOCs}|x>`Pnhg|KGLlHmu|_ z=U(p}4o~jPh6Q=>kN>NOheVFyK(L%%>)>c3XoFlUJKBqn-m|3qTuBjm?pW8~f4I1P z+oH{mx|(u7yCx~lpIo1xnYP$%epXCR8y4^u-k$+J+XuVqcxHWaaxzV%l6#j1Zyk(z z^g(!jBK)hdHB)|cG}6&pgpcuZ80qMoU^3xRn%^9$etmpKN&;f%LEj9(&I4NS?3cQN z6}%0&T6yasd%>4gynmu+tMET>!%?HwQs?fE(!qw>T*hT^a`N9=j@a93zpbm8qoJ;8 zZer2N;Am;Ur<0nHPO7KzF4;Ma|W(a0v^I&dj@aV==ZpMPKBp_gqZ%&owCx|?E zEe(~)!G<6|*Hx=ljr9>TQkTe;rKH6BI%=N(=T1_LzracfCLO&mITV9VBh}?15DTKC z#F&8Ij#_@yrj~~4~quyu>m7x$hHbPNNUWT0=zqO$=R0NiGqqx15{F56tYTKeSWk$@gB zsU0y9@pNJfFESv|H@LrjSWR_t=o_#O7QG9wl+wI1gs6aE2o@)xa`zYb?(}aVvv`w1 zuFmd&%;2jUgi3DBO)VyRr>)Gbk@Cp)rfvs2NA6BT+8WtPii=mYDpUEjQ^`WjSK6lGy+57m2^_kP7rC|!&oj3pa$u%?gcRUuJuGZm;({ovG(YkBNBu`;nK2=@9}W22oDR{^gunLW5{FBp zfjSz$<0k-qs|B&Ke>r#V`R&_plh2&Muke`_{K4U31^CRNoUnJwXRcg%e)sN|$B)PP z{EjID#AysNFH zeQf&V^|QAf?L`}^=x^9~`@(~>M=mHUDTAez+8*E~fp35i^=t;m+0g~?q82JEBml1ZadYt)=p574S)6DH4~`_&HbU_I zON~iwceL9Ic2U9A*zlmCrgd!g^ofIKg~Ziv);k;awPW(@Z=Jv2T{B*n(##W4zZ1wx z%az9yYEtNRsr0R8uCKj+<+adwIZS5GH^SKm?=9A=$$Zf1b7sK*(pXSw>XJkNGh@AP z9v?Y1-)?Ow!luA^tM!w+vso|ZaR32eHlm7h;Bw}@@d4xgM0IuHDT@58n1B6vVXTkH zi=m_u3(L7WVcqp=2ghi9v96q~3}7;>CiG}8-owpaum`)%CJ(MpetKud!Cv?o1c{Ud z)T@J0!SmTuR9Jg-wxyX=gb?MMCo3b>$;5!;fw*cPGT=N*Tb1M|{P3p}ee4>+aw=kN zRuwwkWvlf>KT&^!7H{QluWd6UjRyLQB#l_W+pr`r;n-};+*qTPrHP}Z!lPr6 zEf^=BW8Y-6XIr(i$iw?}gt)nVarp2r=5fDnKJ#=CI*NnTUTWBT1uOVp1$e6MEuVXr z<1^g6>}vx9TTFjjQzr=V)#8r~Z_PM^GX<~A>A35Ox>jY~xpl&2+TEN^UN zXxz&hvbDC;(9mda>fYtyL#!tIb4~Uv%q%%=gF^l=IT?A=0|%RkE&QYdA^7g}rx6$q z_KwWPcF-+YqoSm8bn0YxYoGYiu`F3`VK^@Vs;m%`odK(cEX}P!OAFIQCmAOP7qCV} zNpf^cB1q>z%o9;@ZY#UOnEn0lihTPi}pKuOelKpwY27 zzVpx9hm7Q!vN$|0jZv4{Y;P=DLH#N~u7O6&pexPqJD(9pteS519;SEejxKiTx`tCKvdULiO+SbTbWCMRRjw+AqpMk1W6?zhYN=nTWmM0gf8Dc1jQ-<~}+ z&*F_^WF&`iSXc=JLPiQMXv%+~n*}tWzACe`1vA=55G>h-V9A!+#gm+$zdpUZObKi? z%)x<8c;6=(X{m|6hT(3UNc&>2a;U4G=iIwLHLSg5(pFcl#WSXI?v-q>Z zpwg)LJS`2?;cmQ#>jKMib+I`%*J3H~5!u_CP7PDk)!?f~MoQT1D0Oa>8XN$79Yp%* zKf9Q4AO`+6?AWUJ;7HWo5D}m4%V4X8#r6Jv(T00(fX^JMgVwF+fmiT{hLeQ{=N(`&(y*oxEZcrB;jr1!(h#|`237H|K3UbQy9FC7;2>-1uwho;wJ;>gdpI4?mSIRNEf*yDJkjxj^R(Pea_1T$URVyk&+n`9*0GVh?~^Z z&}waDyEwUleYMd#Jlwpp(({V4;QA&l&GjA4-5zdBYQ}eY`W%}%H9dGxq{|-!*M>MW zlUfW73`uoVKd#nAT1tAPXL532PH5;!Mp_z+u1$%DD`yj9_LA#p;Kh0kZ4PVD$zgFu zOjlwf8S41r4L1+ilP}>U+&+0O%E4$LO9#$rg9! z!nWHj{F+h|gFnAF=k6lx7Y%XimmgdkN98ZZWbE{CoEfG7p5WnTe|VCYH#5308Ls=0yHAw#Vj~Dl+h%gJH zHx!;e(#}uHZY1PS50Q~_qNj2iYI7R#1<%A$WAJU){ZijtL*qhxhPc`le^SeaY(wGY|Z*bB7>x9NHe;pVyf z4b>Dyg@u7vF)>7CY0a1Sze5*c#2^vl4C3MvG<@?H_nvz1fEBO-yMt;g2{93Iq}s;i zGg-2UooiuN_y&ZW%;LNS(@XsgnzJKR!4V_`LX1W%$TgzE3d6x!hsnviqvanlR zUFfH75t&#WaiE(dl!7> z?%f|xpWYw#-+Q_)jL(FYf+Hs%=tv8IC4U+kTFl0d9os#G8zT_tyo%3me~qhZkd|7k zr$|jm|NQRP1T0DX7evVDf{H(X`j@y!_yXwa><;KkXh0aC1cv&;gUmd>ln@PHt8o}2 zpbAzNn^{er>g&|O-f>t`%F^*4NeRjRj^TTkKJoST6S-?764~AauF0V#x#;`@g}jyd znMFq?Pb^m~rzK`I)KXThTD8%@h{GB%*#zHx8)~RL#qYu%B_(lHBwh@6W?FVNx(-~W zv1Rpw!Q80)^81$`gEJL*JQPebr(!O8H++uv#!hX;BL-UU(q<0u8B}aNExWrewb^Wg z2mhgX6cy^9SLoHXELzA$WOvp^Zcf;>*mxASfEgpijRJ;1J$ zkP!FZ?fk)Xv!3pfW_C8F99H%0Fcn?6XnzgPXl9tAsjiZm6x>Q%h^$gpTst{H5;Xk- zNQ(0Z2M=C&x^3xTRIupfw1y%+RWmnKxHTPcyg%;NmFcpAsL3W*a>?r%6-)^VdIqkL zckjL-KJ)D$G>3(hSNO~d{?KqV+umI^^H%xHl`GHh-TP#AcBkX3UJ6QM>k6Z=;K+-k zYKo(45Ua&CHMHz)MY!-4WEVgC>@PGtL(o+w&^P4qjW2rJ2Y)FeDShw$?>_wr-1;Hd zyZn#o$Hm{`@L*t*WwWS8JaGS6y6%sw>PE&IKsRLH+RL zZ+l;)I0*r+BB{Wq#HVJZ;2u1dEF~qKl8{yg``9dSxrC^skFS0zI99{QTDi5jDner= zlUX=ov>sME#d)VwGTCa1qHj8H2NL3v#WA(bd40IF79$!t5mhMp$$jsvyzGP-k+eK}fp`aWk(U z-JART{y`IN;S#vHGim6|G}xHh-p2IMIGr!f@!RD*!XYr}C_+u9pad6!OQnMT{@q72 zBNSytq)`9vuC})>4tecZ_}O}UIG#SzzS&xIoOxo5-*69JN>T#s`si$nqy3WqbUj^- z!LGWIUP2?GfKNg;TWvZxP6H?I>Aq#Om!P7ez&nff=5j$&2e8e-YG#D0tc0|-FdXcv zZ=<6-7#P9wuH1OjC&wfH{)kbA%5=6-`tnq?ud6onny|yp?&Icy=QBgl3 zuV4j#U^tq&beB!PJwC&=%RAB5X1P)Lru<(ZH@u=YwP}sCoR33r!~Ql|DG_-z0I_@G z|NI1ynPx%W0%*_e3lEP>eyFV_!ng*4A3P(TefDz|sv6>IY{>QWn22~nRfGTTfaQ&o zVp4G2$bgjibV4;rMq0YI0v8?(D=iPCX4hkgLPbEHZrZw~{K_V>6K+k}Wk!q>+IdoiltNa=TaD=E>TxLk= zI}AI3U_K*N98=R;Fo@gNx=~B?9q?5kz8c~bLZ5S>YmE1u&p_~$lkUSKdn}C=tFvsb zO$2Yy6#hAEGKAv^5~6ksu8a!b$!Ws^VlX{S_Sq?{sn$?exqoHs>nF$gp_aI+%oZw4 z&H;HiG(qP_DLL4h^>x$$lF-vurGS(Z>|~eMwyz)0Up(2Pr!A~_H#aqSd}}IZ&%z;D zm~WgJrrO(xE)DSB0V{me)s#()^$w2F?Upvv)KKl~sP1aT^sum6FOrxx=xQ9DWw^WA znQYQKI>Rv8v>*yHnFmdTZ zzYRVE=N*9G>CKy*>T1>3=#BS zGUVmuQ{uq`FYIxb6r0?LZ(6fv$(=<Bt|Ef7ga?B?_rQzdEPGu zdWQY&!-BG29`rXDbTj)bxo3gOFDuQ51EhleLa6vACB? zTl1zNj*uvdu5K$HA!M{|P=5^!SqKOO)Lj65*$3TffgD~xU3$$h)Rn(A6H=05VPc^0 z>G4ROf$ieE`r0QCx1}x>=mLf_-iHqh^5|pN`un&FbqHw5@q=yOKRM=LyTBYG!@T=D zY9u7YWo4v$+pCiVRJEW7dP7l1b2%Uef}L1f8hvte^6~Ad;OP)VV3QcfINcO%)yRkPgm8sDa() zE%&c}+CpuYl3HXAa%<#9x+k98`C6n(1cK{WouAzPy1S*9H~5g2n2yIb97xS6E3908 z@H@79vKigrs{$xcds7!+P42FqEff}b%Wrq!K*z9}$`Y|60)gmZ_MMr(prS0=BR$YJ z7+=-k>F(V|V{hWt9O>&BjQ7p>ER)%&uTy8z*zR1h5FkI4dO8F@COdXAIGP$-{AQMB z)+}15wwAWedfidZw1eGNX(?$y@Z4P%R7QX@&5j<<$`FyE1Hr1u&_-NS`rZr%fz?tl z80ZAwePX@Sz$dRPFFOAFtpVmUG1&IvabgAwd<|ZE|6;44&OGSre&{yye}K;*#GqEp zwi7)*N=S+Ne7k#x!Z&R|^4>DqsC#IfmX@@{jzCHjol{_4-4=yoyN%7pX>%I$Pa4~{ zZQE*+#oyzaFo#+>UL^0`6s^4jU+)+O6N5a~PVNO?KA z5c^tYgtd*q1LW1U>$AI;WK~YA%OEuMi;J|Y+3|K;ceJ<%+#X--wv5R65QZCov_;^& z1OA^HJO`J+h&XnJY4ytJ^EK4QYA>8@d=0OFWPdD;Tz6Gy1IKqyq7Ws*&)q-!hDPj! z3vUX2K*2Ylr>CHe)^guLD!9QeG(f4qRPX}dTncG%uvkAc2DhNr$HR`gL>c3ZXO0lU z>EFps$TJqG6(7*y2yU=`QV!h#9!id;WM-DcLC}BJta$r8?jkr1hbIv3?d`53D<@}n zwb_9WoTg@vC&si1@1?Ik8-mBdwN_b$mYoBe_^IaAWlwHiqA!p0TWy$Ii+?~Xp4RZh zDHJ(aUO7xC=6{8Uhokj=4MQY>;kXW6b<&?m%=@MB$9BK=Q`eIDccK?hg zyGA`q*D%lQd)7ZdnOdsButfTwqs8dyjA1GX>3=zcrH6s0j4u`ZjmpmRv+h1s-J|lS zgG!H1@Z&5nSOV|8woTw>&B`x2;lmQ^Cn=~p+u_N|ZZwxPw4Z-n;Q|)}aWhli&ZI~{ zc|lK6FEFj9r8Mw9^=lQLKbWZ{B*gFQF<;zvCvs=w0)#zAaivl#0)<}vm0Zw=c7$Q%LT^>jTB?j85$_Bs}VMl7>sw--YV+-OEap+?Xi z@xbLlCIMS%4~ZMYKt5~ZOUBR?NyH!&;8{-+aCezJgSD#Wwfre7{ELOv+|in^ER97> z3Oij;(6}+J`yy|(;XQcG{Bgj|&Fyp$nRtkw<8EOEi}x0#wTN#yN!U?uPU#|O+ED<* zV+EPH=9y}-D)(edBUW zWy>ke|MKvlvEi(kS7uXMBqR>HB7B~y`nj^020&Rc9C9^zMmhaHguTbn#n7&WPZ>M7 zIOc7`hasGVp`P3{q_0h=9%;uCVWFYAm4eBvsrWvQ&et7+gi+3}$>2(f6rOk6$rEM8 z^nb{71eM$o=&Wt+)30<@O5o_|k#q&sHluijPjp>yJ@T=YF*g%i%TKVeYv-C(+mrS$ zadhMLQ_^U|zrk|03{5D=#d7`p&%vqDU!sgbWQ?>aiGEoji)Dw&lxb9 zeHHI#=i^)_23u+AcBR6JR91>F;N?m7^ol}|uf`>3O zu{N{ju%wSyTb4d!R?{2p17&Hd;_iOApQE9nm6Og*drGQ}tlX62;@Gh9sTBy|CC)1+7N*MhAyxV>1{oBXihFY(**Dm&~$5tR{ z7|vG$3??lPf5ZRUY&a0@2h)*x>zvf5-=H`rKBgr+s{q^VW{FM2VgJ~bcOVQKj)|tH znY_Bbq#7TfbOX~xF6?tndF0ZiNIxz+f#KJHZ*4?cU_EIJd{n4H*X&r=crU2As@`$0k zt1E!sK0Z4W5f;AO>iRm$@)-<11fcTYzI_95(E#9mLIq&|UtC;xz1&i&AC56~IojFz zovPyU@bJjUOwG*9WO=`ad1d>&-kbUO@TH@S^49@8tfeZQFDq7Gtir;=-oCyhMlFP* z(CBDBr_=Aw_kE~*nhoX)&(F^~kYqmU)88Z{Bwzw=8ozpNG=)>kR%b;vwK8WE)mM|5 zb*)Ve3T@PqhUfK-3Xtwm7)Nrp1xAkqjl-XR1t4345Sg$3Kj)7Y4J z!l1su%vAF@I)7&SuPLK)aJ)McW=<15N>gaybdCUCc=0#5{ zW8heXKSrX+9h{ZjgN&ZOJNt;TS~=;qjtsAKuI2<=@z7XUYXaKWI*;c-qQL~uaoNyW z*T0bD2hcFH&MOs8iJvl%(J!ybeMhg2?BI+U9x@$`h`hdksJF;9mK_;!Q>#mq-Emwn zqFG{!(&EG6S+I~jNe_&)!-&!+-fGSM@$)zEYoF-4{Q5J-BB?$njKRIB zlu3GvG4~;EA3%qcSZ*qLQU?+`3^&R*w5@~1z=#c@iYCtDoXA|joAZZ8^wj`fHHTNA zwOHTee^+8tWC?oR+k3gYy_Fw3jdMAVM@s^*S;Aiaj=!Cb7Z}WG&5d3#H3diW2Tbg# zdW8puL?lDSN2SN;Cg`3FSNg!p6ywgM3E3kizt@b7uH)grAfsreYD5XQ-`G9n#h(3? zhQtCM&d?A4N$=UvYComL4}uE%zK_|K_9m&r;Pm49Oq|JGQqg1d4+{&UlD5Lh`R#-Xq+@{Z~-Z zn?cUYrOFYEXTP+$e3eti7)2=c_vYp0M9oLWV=~-3^HJuK2>#yN>Znms;$r&}#!3pH zdOmm=I1N^{H!fAOrsEW^gERxurb$TjenfV*xIDj$Q88LF*_&Pf=~G=w2Ny@f=4Z>p z3`J2KJ2<==e{q>8!=%u;HnW0%nnm3+_V}w%8Xh^y;ba;^s|I2XmU7zh6;ZCaMe*o} z_$6MsKphU6n_F6OidmRnvw~q!5avI!j}8KLvlS)Eu!RD#^L8k{h5G#N=*cMWckPP{ z^3NJ?i8O>oWLdV@+(ey~h6&ZIF^%r^?}MOwRfroa7?o!)@F`%s@{g31)y?jJ@3*e^ zTSQI*KCjpM{Cp^c?yqBM+606v-zMt~ed30$mqUEOvI8AGhEAojd#KIjN?c4VX2kH3 zdCTi5BP}hhy861oVyRHg5CRxEGx-3HBjw}3dc9sza`G}Pv1j)P4Bz`Tq%P{TgoOni zEB5{Mj$k(4@lK^y+xA`x$V9iTrRAkcFqV($?q zjDC0$;0;vD2nEgox}e$=|1vop`I_QJ?V=+gb3vTwZXlM8%2wDX&5DklX*fb8_+B-H|2`-PZ+utMxBHWdXVBv4#O=!XTa zhp4iTGP6+$A`PYO;4-;iX}%`0?e@MV!!eP)5H|g|30QZRH%P^_6Zfz2ZKb)_WNtYU zduy#U_|K||P0Cn)Bz-FDZF!#R&Fvuxz)`ncZ)57{yPR4RAIXg^VWRH%m zYYYBI1~a+k5ewFG9UAK4tu<|oV~_(W0G(45 zXRgfRx4vJc*Fk+_Rd+VqjCvi-z|gPjBB7%i+FzAo0VB>{mz~^9OGNsOFo8QN(J5NZ_QXY{b9qcn102R~kIp-Kkz!b^jx%Ldi0aJgLK z;Nj&y2i_vZjl56!e9kQ_ENpCiyuUbTzQCdqIXXMD0#Whn^KE(3WGeIF@zMM9<*1qm zFbSERy&b^T(G~HVgMo$B+pC-6&6_*%c)C0|Ct8mi929Pbv^BRp;tMeWBB$jh$G!9& zQjE)g(zcW||JuDI^#4p>O#7lDi=#yS>R5He2~P_)-G zvUc~&2IEytJYr?C_lB+|5G)L;i?z7By*@Ph{^|i81Y-%CxnsGdpK;KVm$X=UsP81k zpIPP?sWh?wKC0W55|&-xKh8z$W!;AU^;%w#v#`e6yb9%(2;&MXHzMlFuVlnxJm&i; z-
ASK}+#-rf%5KIZF?SX^>9o~0v7i|ox}Vc5{~Iv3IO!41*!_~RQj4e6NSK`9;r za-=jlIYS&#+FbJLk~H4QXy$rtVw=vg2Kuy0t_kb4q}rbVv@iUflvdN;Bd;r>Dbvz$ zZ2||gaX~7^#+BktzC--W%ADL>*Hbj|M0^3&RQ#<@PTX@gIx2oU>+#8cFnGI|%||ku zrxZ+TG5BA`8a*X~7xT3gH!Er+z}8*#h0Vv*QqhIwwOYr%A*D$2KAO*u^SuL**S&gs z4p-?l3AV5T<8*vh5hPeb@^X1yG3^*+Q?vC34)y_bxxf1SFhl(58TF&>f3Y32XSL$D z#)W8ked}wdb#{q^&a4*66+xun(vTSi1utBy_zp%!#th2V8|^#&pNr%Q7xCv-*dl}< z1PcxG{qDesKt)5FV69Q|O)GrwS06|)FjW-d3g~5LXXTNRBN;RrZBgdt==1RYBKZCv zDSfro6-^fx8w+t&R7^9r(dOc3A}%g&YvgOVo$$>F6CWR+fuZ86^9@Di@L((nh_k&^ zq00%WsR))}k$aC{?{`!DvRgi1JeFC!UUDo6D)j|B8Vx&t~PE+W=;L|f9pxa z>KpN^Rb}SG-llO07Y~S8R*g=(>c2o7Z@VL9i&!9zDsaef(SnP5X?}>w=bx;JX{F*8 zm!!ip$&zyYG4jGrbn9>%*=$w?%5o(_B|^i(S(F>tm)nT~d>u~d(tI7V<2EL| z&K60~642se6H+6vR1I1mPgi8_KoZM$B)SMUh?GZ3Ol+z%vKys&LFM#dymBK>g!_Jl z@qUT(JHNN|^?EqIgS>dB-v6Kmnus^e1$t9*-e)OVeUBZx%Gkr5M$yUe80xTEBspYk zps2eOOuJKP3Wl*8Np1xC+leuQW(qjH|1{FhYU96SL;MJY<;vsQkyGOjZ+_NB{bpyI znLv+WSCM-p^JQ=4QH@yXMHW+4RzSjKMfJzGn&j(J@3eD<)7zWzb8^RT(xBtu9Whk; z@oeag*7hXjParf`s=fb5Iz&603k!BOk^Ho@gO{=ZlEA8%U8kct%vM9aeQ9{nKK&g>6x6#&rx?sQ{0&(Z#cq>eHZJ_SPuh(GulT9CBEObXR*{qtn?b;}hhwc@Um7)w1B_j& z%oP3&iTp@RP;+&?RTU9rLv1=5#`{+H7+iU{x)^wD_*+0aROflADeK4xYgZfr9)2m- zth4-mwQ$g4)l92+#@>u5Wutv)h&;P8mXU@OK!DE6&g}1o8nQhuA8H8}hQX1e>1Uff z&%9;bH=x=zggQIfSJ79hl@_R|Y=$xly?8*+(4OEgTK{#JFrUIHlR972vFv}4?qrxq z8;a}RO^LmD=t{iUl?lfKVwJ_Av$vHrJp6SOiz=}R=cwqdL@34-68n`+-4O+xlv6^T zNZV|j|FTOZ^WvE`jb?7){7ifr+FroL(@pi;Q^>bC$OSx!Yqy9|1pT6-s{@l=Y)^E- zKgyce^etc&_D7Ksd9>o1{=Yam%D32*$$!w98JKadYXt}3%DUNc+eS1jl-6`2K)>K- z=f=j(z=1Rf#zRsJ9qmTv|9tKDJRZQPpD!$6)BQ@l^M5DMI1}6NZ4UdS)%0_+NJRZL z(kChYr#a~htD#M#UDFC3pY_?#S&lWGaFvz`)Z~@P5qLY!)(6GR8@P}j2L!#pZ-D6( z4o>$pQs2FCqNb*%F8(#xqXUZ-0C=!4GxMW0-2hT}NpUe4ellPqS8J%R4-uGGUjA2o z42-*bsK39TZxRG16dW8}rcyOXZ{i(k0#{cNB}OsZ8-%#?_t;rp9>W=K_>YzrVKd?d z=r1&2NU$vDi{`2ci7wTpZp7vBNDpYkv$G2en5@?8&7_o+LOHU!_!-LXkLM|X4d42& z<>0kj)E!(c1({T^)9Y z-D8By`7r;;AO}LLsd-5r&nQ3Uho_L7lfd`g3@fuvyJimvmI^;mCXf5c^}d}NE~7EG zub2{L!?ZV7#azOHZURo6I88AIcHB?4MsvxNv+?zVPSSsG6+RyNH%RcVg{~eM+x~35 zpoJ^?DPQGNu`TXxrL4$uxm5fyALrpRcD+Qo#M1Eh9Ue!5aWGV{an}~B(h5 z$B( zUG_b_#|a!_O?{#3aVuclzXfeo=H}%Y85%AhnGo@LTLOAic5Y4%DFp>oG}k-~PO?dl zKQy4Rv)OFE@5jlQ{!RrfeWIgLxfH?h!N$vVx`^1k>GX_sj+v(bG6ySl!J zk5Y(z-T_lVX&ISlhp_NC6WMQsih!dS5J-#hpJn(y96#UP*jv5coB;+Ypn~C)A|N8p z@b;Mo)gqT(URwY9Rnr%O+UM-#)KFed-^v^`3dmrao8GAhG01FCl`4Rq6+lTyXefYt zx%t~7?1H!#R6Z{9;RBfoUa?S@Uxd_H5RGR>rp?`Q5~L-?qj^NuuH{vg-U+ZN|6cg* zcxO8}+S{5(^eJoV(ZJJiHdsXjNJzSBTDyazB9gkgx`N^y5bDHFsUru4pX2+l+sf!G zTU*_|ctwlTs=_rEucxC86>fcrc?dcG8EmMSV&RW_Svr*Zg)r$Atrs@m>)(s;3H3ID) z!(S@KF#U>{pD1@o)RQ__5l`>jg#SqF!~T0km41HZn1G6pi%DGOlS@j#^DmPZ4IiC= ztD^dWc_eHwcoB}kT!h*P6um8G7czTiE1E=1f%YnGWG7mcTg z2v9RJ1Q8NCD_=A9P7wqNtr!-3q-I&mhw%G`gkA3&u^E&V@O0yKYwW;UUvUR|dm&^I zOY?qxJimlpL~^VN8Z&r=!65>}o!MB32>U!7sTM&kqs7EJq*KLsEauc(XH+G&MMHQ5 z1gvw_$Cdw>Duf{Jj;4zCp}o9m+uPP-huNC2Et>(!s;Dmz;%kfP-C0Rf6Y1DrnmzmV z1$ZvV=ks~KQkTS}qpYYH8WFM8>E-ddAPH^E31Mzy6N0t7yIakp`H{8^t+}(m-@o8} z_;%GrOhjay1>X~&l=Op)%-HeM?_|egMxVpwCB=m@2 zVq(Vc%4UuX4|mft;~?>)J7>B*Uz0k|_w;}t;8MlGcL2&mPA&Z9NRD7g;g{GQXf@(~ z=i=?E2XqH_r^)sVa(IN{>Thjxb@}}uYAfM+a=GjFGS7njL&Y*Wv|7}_X>27gNdWS? z?!dN~A_*za)6-C2=)VPs-EoV;rZyX{inhF*u~`UWw&?C~n7fG#>>6}UX0osdiFsK( z=}V6;_BNym1+$jT)Abk$KpV>|6Fo<`MJ!O7hK7PNGBO0{%1z7U8|zE@WSkkV!H6z=yZq% zc6Kv@9(YS3-<$N$&1>W0U7ryzP&TD;>(1y3N{voX`T@vGk^CmVT+AcyB0L5OdPF>-Ch*_ZJ8RTIO}R zB=EzZ;!olQdafWu?ADeRuaAeNWjWn6z7Y_h4+QE1qC>Ox$8{g-+!w_gE(2yq@O~Hk z6dIZhc_%xYyvt)|Wopkr#7&O|KPx_K2G2XVH3ro$&X>ytCef0XbmdyJFtrpK4!N9P z`~C=WF}MoL31d=JuTMzMQLCzU@KvXs3wN(CQ^2s1W2xo&<;7w4c8a(Q;yDmzRKv{B zUiW<%kh+qXH2ml+t<1QFag^c}C~nc$PC2JVyJqE?!9c3HR!a=lP6x<{YBWq%Y^yUC z>N#-&{-R*GM-#)-N^w~(LEZkyNMf2ekqBkvF_NXvd1qy zUJkR*I4|ioJgejR{@Hd{P45Mx*Hn)obG_yt7f5=1@i7GKJYE$fbP!9m*e~sC_feW!>LJx ztWlkDPZ`fl;sc>4Uta_ffgb-cazP43sjQ4C7UPI#bFV+YysnPbn0Zttasa48PItNw z^lqi$_EN?<_LGOTes1%6y*i%E765&FHxA$DGdU-9m+Otbsi`P%BDA%M8vY)Pf`CyG zz{QzgSnzs(zPTsf!=(m}p*a|mGe)!Rjz3WD%?BY*(gK~l7e9YDAfba{{LDIDYqGJ~ z2=^?JRk_hg%WCoY`UINs9a(d8TIb^2T!_biqWNE-srTD4rl~BxkT(NM%lCsMo!pR0 z%@%z??TVE7iaRvD45vo;uXG_o=oi(9vN%~*_zH5{;auQM zNy)<;Z~8+pDHr$=p$wxobmLpjt}nkyThi$iE7NPN{Aa+ZEM#nH4?>7@A;B7+hNVq8 zyx_gdJvhQuMf}+pj#gZd(`S0VI6Lj11$mE^VY&-o+zSo~)7+!wWqXDqnxKRPaFZ5; zo0}H?o-E!yLh@rFuEWLib=R;bWTp+-BY1)_AVQE#KT?J7_^BpS=Ft907*=I^)rqD zJ7@|fx5;tDRcC3l)S+A;r=n?U*380vG%hj<-3Fzi;+(%w8K*f z&MIoDiW-@~-p+}e7vTWA0VzbREve(zpATC$+=ANF@r5hY<)eb;`}=wMyC&@v+fs41 zjJ?eNx=7mYilDS0Q7ubdOAUj=x-Jl9@}lO z)CXTlDnYm3)`s`1F%;KSAty-KFm5XA)*6&D8wM#jc4TMi`YF)=YZWw*yO z+$;G0_VF=1U;^q?-M+;| z=Y!D%044?4j+`jlsKnWEIP57^4a;oq zrc=}4^r^^gWPM-%BJHr_jx%sp5L#kacW)!@%HUAX-lYd>K z&0;Xe>dRLzrWRKq8pRkD3XPWbY3*T^udkelt#IwlxxsM*wZv>(?PD}yp~71H_v@Q| zVDJ>~Fd|3#3m9k>w<)XYLg6(B`?7ZwvdXU_2wJ2n1lPxJd2fzv$(Cziy;s}`mO*2; z$L#lrF$T721xBX<2NqoDjsD}7XN#K2a2UmD&ds&=2Zw7Sx`&e4?mcSKTpZ+z3+=F& zkDJ3+%iczFsB?Dl&!&?rrV!X2m23)%Kd_t<m{S$6FVIm9eMmdUA=2u0H<1*IB-kV@?^rzP43K?CtFZ)S%_Op7XUP zCU$llVIKlBZlEm&{-mP%zuXC^HIbpf_pE*o&Q=B-wSl&MJFch*c!0(1J7lBcHwno3 z{}KC|tZ!`W#^*>w6@BOxK_Vn!45p(I650y8ctz&-#_s-U>U_24B$pzk4)kQn-u06|n&n0NZy zv7U|1)!HXwmmP!LY^99;=Y(sp36V^@hO*41VyjI|GFojpFz9hN-`_S~Q~L>dzq!Wi zczI08!SO!ZRdRFs7|ckLGHw`~oXp z5Jecg6EM;1RdWkBHP>e5nE&C#`FnJWON{)M*T`Tam&pRFB4JNThSR4wKf;yOR*Xyp zPtHkP$jKDf&((jxbo?!E=eQh&XAj9lw*)y)cuatMwq|AO>oU51urnb(F)>CTI9Mld zuQz4PRm6%X_y_9OPiJSxlN?m6K$V7~NJ>}3se=(*h(S=#!h1j4t|)#-if!B7RX2#g zKf$cfCHmE}k-xX%J22IB86TQ(rkZ!iemXoM<{O_1?^nXrizQx9-o2k}Y|sYCk97w^ zH_acWSm(Xx)Rxha2`BeWM;vp=XsUnaH~;m?>@$o+`1v&F`TM_bR0Q!}I&-R*wuKbK zw1O6mT26Kr=*iQUMP>NE>;1RiLrFu*x~g)?%Ee%;Y;J4i7Ji74FnRdi=W(J$Db~M& z{$*9MbWT{Z!lxZl$zL&@z`0=KvuC;vIPY?Ir;6VN`5=+jPkW%BNaa(LkdP3bbYO%3 z=YG}E1O^|7CMpU6-+?VB3ssX;^LNtKDi5?bzmc)AVl&n>_3?O_afSRJ+>gx+;5Z0+ zqoSgwrzggBzZ`gd9i0Cr?H_ud^}R!w&=T@i;ePRnWXKx1^;jypb$FNmX!v?;>gwT? z?)>uoW^B{kf`1WGC)zA?`-r_r(P6a^ptWU1)wuU&)&Pk0Fs)Q($9cqLS1V`gWPKY1 zW(ME$D}636h@V`GhV;LE$E3TtJJMG?V6hXKgn_cba&3sb0smijC#!LWA~l90({XLZ2MB5N5JY|Od|DY*omoM8VoV9|9_Pg z)Z()8|2kS&w|5%VY}pxCJ^VM39uJSK_&~Fzjae_);Efk2)HEYocApDIVqSp=V(@b6 zG7ELEpg)%I<*7G%-#YAs=Uy>VjC5{i{l~l}w>Bj;Qm#VbYPHC?w1{sOl|7JcEZcR=)A(6>lW)414iHUN^wwQ)^^@my*#>6ztgU`KXls z!Q1jOzqWzes3|W{TNm_`hh0ZWk({PRYnhQt_KC4{~mT16ff;U8hEFY-wpMO8`fAp;AskDJy@fR{UKF zdx=%4!CGzcWI6uT-nfYMu1^HkJy=O8S>(z23EF;PMpD#A!8tht@M<<^Gst$KCJi=| zqW+GM-tskQ`>(Ok+2%(BYX@Q02o7~dgl(|NZD)ufR02d+N%+uZ?9`uSL8iByqVLDc z9y}M1(Yb|xJ2_7sy!uVL{6m550=&Mv)6l6~Loa1c?zE@kl$|P_3R|k*;DXI{lg+gP zm_mJ!i2?zdCczqhxz*kWM-}q-WDTRg@dh#1^`FmK;c*C2TwvTR|M_30c(Wh zvFT(C+BaN$)4x7*@}oVIp4R1B;^MuZ%R51K=gJKoskep@jiDX)Qr^anIw~CMe~R0$ z=j+};cYEv{Ere1C^NN^9Lp5wmuNvl{7}5M}lH8)%+lYr`4~q;TTyF`Ap*IkC$V0(b zj>W5Y-2rIC=49o;yXP)N>)`fa?CKSB(+L1z->e{2-s6IM_sshW*y>PWO2&&A{Elx# z^ed&l(9vk`9mUZ%0pt!TrQ{+PokVQKu|e`kv-d*EIyTi=vFrAnW`Ubr`q{8d*v_<^HHdQ)A=`I1*LhAL)r+`4 zLPBk8BSiRme8`v+3=25l&F=(jvQ+qOU=xT(d}OEo2@@DDtkl)iQ|fz^Nu1J#o3sBI zkY@Mz=`J$(S|pFb8uDa7F0+uxe6|3#L0137dZ@o9Pd&ezGDwm8_gRCsxzolFDjrEW zy&}p6dzCQjrYTr^x_QV1jOtY$^$7B)RjYsc9kzjjR}IO#{W~O`2OV{2tGl1SjhBS= z14+SSorulIxal9)^)7NsCX@iyaL797@QX+?k`qQMj`kw z!IpPe_p)hIQe7I2g)n5~-%OdLc(?!pzKlM~#WE5P`h`p8XKMaRd`T%q%qVNy<_8@Y8& zb^}U(atu+S4Hwf!9j_)XBlW4s=1a!}(N782IAVAGR>qo#1r&6KKte}}t+0f`dh-;l z;xaQgkqHtWE%2Y2CR>y7|lLqkawN>1r(AhWD1v z_ai|;tfeKhvnC8NE?S4dNqq2HAR4C+;`$*$8}G$)`+=?_Kl0r4icp?8K$(M>9A2VeXe4pB` z!%2j31}rZQgp}UjuiuSyWWIE|UU?efncC|r@}onx?%uK-Slfe>3A1ZkSKWU#Ebl)n zE(?~@!d_~7KhG3Iqqe8`g-1&hP@v9*Iugt9Ess)#NRB*vo6+C`elL2Xfr*2MA7qrg z$V;Kv*x!EaQV(z#X$+_@C@v&hHK5}8g$%pm(TNIcD`zfCOY>z2S)MJ-`z9T7S?W7` zTVE`mZVYcvl(0cT%*@OVh(DLoR^XpxT8W)rjNs!_r^(z;3g7tPa1f^Pep{oh=KA6J zj&`3sZp8~3dOP#^YHw&k3UVD^5Iz`t5H$~|z)5`((X+5>Wnajtt&1eDN56qE96XY; z+GOyxq?dMrd1kj}kW-R-eto&!M}tw`f@$}$7>%Wsz?g`}@fGZL|MA~A`@5h+-oemd49|4TN*1>A1n?n$8Du)0erqcp0Chm`@wkz5#2D$Dx+Z58 zv>e>QX6EMJ^Rw%JJKU_ktZ7jC zc&&fDUPEqNblecEtmtOsbp9fTB)3A&ARXJ%jU3a8dR!u^=ii@JsG@S9mztTRl1=!^8&@Z{~z#@KOjm76#6l&9Eqn zkq-N$srSS4-*kFUG8)eHx~j7E(cS4@s3_3*b9U$8EYjxq{I+5K62DEubK3RB>uCJr zAc0){^*J0Br5@K=^S3ya_%@E&P=T8#$9S-m9g*9SF^P>1*7qSDt-B{XU&7w0xy!et zqpGUu-)zi{vt$ohj3H4@?9ugHULGI&hD}|uy|Bb!NC5{RK1u$a$E#OG*Xw1Y`1~gW zkm>pb2n{4DTDEIQS78W~#KAvIB>q4bkG{otQBYFo=5@f@+)~#{V?|0s+QM$v`LiwF zA;dUj0^Vx>HT-aqvwV1xfKp7XB&f!LP36kEfufpSetMcKp(%MlXIzIhc#6l*y<@H4VJTS-cfk2i4(G(MrZg|AYU$r5y|| zwpA8yt96%7(2d6|)n$wn9v(foxL6?IkSzM;H8tz&8hqE4f}yhL{)LLU&&l|BjjvFS zuJ#^3#0?ZZ6`>Fs7Ty{S;dnO?x%sf_CLF$QOawXzo**Dx%la^aJtOf%uhfwzznS2> zo;!WdPpHA2_q2Y(^-T}dHS@T)z;3TEhogSz!$D*>{mj-ZETuf?N8jG* zDE=J?!EeEGLaYX;@>7Vpp3XmyCQ&NS$9hI@N|RmB=5YkUk@o!Pzu zlAY&qn;iA_avLuu5w|n0n^?i4qqsNw(;E`M<{z>FwrEZEu(9K-5yF$<{FY=7Y?CC+ zqeSb06>GVFYJV>C5#W2sA(fO+&{oC%SlVdtpiqJQ{r&T$PY)c}R7=Fb)XZ=-6|hSJ z5IQ9!dVko7JB-!EI?ONp9(GMl+jD-ml2-45Gs?wYIx@WK?etcaH537X4@;V93z=zC zo}~j-%^DsThC!SL`(VBSEx(~mMlfrzUF#}BgoA#X z#q5^4YE@%8uHrX>ZBOe~2a8ff>goBPgDac4zxkr3m758%m zl17SsDpY$OrlAiXF&w10U2oIwQ(&&mJ%&&5kH6sYqK<)iVr6Ku`%US|hMSnj*`8aW ztGZ@g6H-Le+RYh3*6oroUYnbY_5eL3X#fLIW_-x3s(tW zRSt(L8VVm>R%OatY$MtqOJLb_mJ0ICVhPq|r?s2p)~ZZ$0%c~_a=Z$C9_nH(oWB-!vHLR24D zW=PSM>lBP_kZ0R2h*^JH#MSx{7fc;zWy|sXZsF(D-uP?}x^}9Lc6jooy|Riir{uq? zI9d_QpJh!AIh|B*y`#JRI$i3&rURCK4~xQ6)?>3Q6MpJq7URY=&$GT z8R_ucu2vQTDpA|t@<2}w^{vetTr3##!Gszd@exUxPaGPbb}AH;a-+tF;(`>+j*yi# z^u`1*@$AO(o!)gkco_qy@OA&_=&F*!i`5_v_f>ZdM1X8R1XK7H77z?`E#m`}1q>`! z%7=^l(xqv0kHdd&NawIoJ2g`@mS(5*bab4$)NNoF`j2fDO(iV|Q95FzD|6ekHo4MW znZxG)+q0b7P+hUNc&KcodRJ3TCMpq+TzAl>c;irC~GEkz1Mft#VHbU;USP+nI9PI(t?;2c%AI}DSvW(h)?EGVwbiN=xT^bU* zxc6Vy)_xFYAyW<+#d-~S znN8{jR~S!p`(S^9+&@s$>gwu9v!Rg*ghy0vC(zN>yeB;|Eb}`n(*tfsWf4gYEKQXC z13gZ9=j%{jlg@b+6kJ%wi5sfSvZ+y6{%Lh@i}siWA5DvwRpUB~vTMH*m>3zQPxJjB z$OUsX&ba=tapJ+j1ID*ah5bc9dj%w7i-CA-MV)k=r6r&a#YRIrA5b_nJrWZ#*x(?q zk5!XI7@6H>ka-j&o#8@!mb6psV|@9W{L_&T(QEJm=rAxuBKOj@D}vfqehy(sJrrC@ zzHDSX^6AwXtjov?INDc3Cr(q)Q@iewS?OovHp)PAl&r)wqMLt!wFECn#S)5e-Te~2 zJ6ZNcyn|ArcR=ZC$9XMF`<16^yF9T&HOYvy4tt%_17SRcViM=#Ma%7a z&OEzYTT!zAex2HJ2%?v4U=Yv4Gb^aup4`;oRKd}Xrs?A%a@o}c-5AbBSA8KViim-0 z7gbVJ?LMyZJl+r(2*%mHj^B=(|FeO!G?H?X0&Pl)J~O$4yuWGCMNs$)>n)W&jE zd)^ZG0cPb|ntvCM@&6Nm1UtAg^>> z1sF0;M+hOOIGM^{ecwX}VQ`OPSch+Md7n+bbfC6DDr?zOuPs|9VD_{Abx=o4OhV5b zpa`my;s}PvR_}(%^L~a<{moZkaasKg)V7MCi*H;c!rj7Fkxz}Nv8fqX!!43bG-$gx zF*hrVo5!-Kl%JW>-NI>=l;l{=!^{#`LL*U#M!W1{s$YyuApD>9>PpXUuV+(T-{U=e zCFPS#)lyVyj}EX=f~3vI^>nJeB%ihRv_#H0%aiL_KTXzl%j;&N_cA`_Jxruslmd%t zEhsEm$&yfS;srxO7W!C^U@3Na!IT2@a#wVjw>2o3SnKE?$48jY8+Th6>K;NI2ut}C z`Bj-Mxm9&M7-Wo8ypp(I$G3gQk(o>9qM>01r`2w_K~P9DeNG}p!-KTr$PzL#(gqyvzfk;JLHYH6P44(lNF+3Sp6Kt{n1$gjbB!(RDfeB!c;l*bZ z$HNTK|8xC!1Pkkm^*4NAx7eLxtMVQkme&EgZU=Pz_0p!i*zJN@piHspeqqWfTy^W&X+C!2RYg_3gMcs~_g zy>DH$EwW$)xRyq4oF$2WnIM_-avBNksQ@)!pv=Xk21p2yT-@fJANmyO_a9?6m3>rQ zV8D*9$`tF@i`rgU!*qzl=gW;SEy8uMf(JMdNw#O9c!;={V=&@+&aJZaawzifPQQmt z5#=Y2&yHb<=cPrmu#uZ{Z?qF{ebRHW{ExM-V2Y#(wuQyrVR3hNhs9xWcbCCoad%zZ z9Tse!z=(F%c8h9Ua|SmX(>6bq-2BiV$B;Mz*uDo4k~bRP;|@ z&wuBmI}nQjhph!lWgQKYKJ;j-f9)I^3qK_-e$G&sN-AJ)Gt-W77ZtYC^9rRzY$_nO zatMdn4WwbIt!Q%8ALX`yl}?bv;GJ|I3a8Ztj9GnU2QKhh-`c9GwC2>`3&ob+lcJv{ zj?oB1Z1;5@vWw1nO%mPVMq~(1ukM&V-|&u) z&}LGPetzae0z#G)62-bI9zu=de!P#Wxw!fu_iFjr`+jtgKvA2xp71=+#nnfay)Y!b zD5YJtgWsHrg5+Yf_ESxFqi-F=7;L+6wx5D_Hgs#sKamPLilVRp(5h})XXWG_Ac;vn zNHxXhZ>4HCGe6+d>A%+ul+2unKy9+MctEjx zN=MApCmJ|=5Ten5-sAUcE@;mBejBu1QuO_|p3VF8a@ohrw9?Zc^a4iCjG;j+WQA!} zC*k7$x$DP>b#Kr|tPUg%CWy!r*!$(kE%3s47~P;UkSCm;fj?+(&R#FA2oKyJ-(OOS zihYWudh{cD5=-t#?T~|R*HE|WL@Y@Rni^e|%Cu>Tx`2Zt(~qNdPbTo?!MRxvtsA)* z4BJTj8ZqC6))Kl;ha?Py0p9NR+esG`>!^5n3Ju2QRv2eXS!-ekE4Qo}3OV!9Ur zqN0f?iyhQg^Ra`{(m6ga_R=7_#e#xvqE3&o9FG@(Ao{h+9PKqGFN z+wUgSVF5M+4lz@(2nZlnsenUq+uE9^Snt4?l&!xf+EL^;1yxn0szkxKHF_1l?bsLp zwUA-O*^9fsm4sRL^OLtXFE`*@EEuI}ik!W>X9aYUTFOkVDmG`mL>9taoeT9Idu?STurtI=h{H^HyU)0P#OG zgk|K1irmq>d&ugk4Ukxch<<0`-cptw05PHgFI+)1m}`E?=IW+fi?Ylw>AC42yh@>Rkrr@U-^1JXGO8-a+sp<`LbPFj@;}58ipOR z6JwALLJ0S=p%4*s?31BS3*^1#DaWh8JO3UnN(9BkhLw>kz73@Ohw#o z4~y~ZIyg`pU8Vv%&rxdi+p4>rEq=|x=-a<9c z-r(Hb>nMZ>dIOJ134Lq|i6-PvTSasi3Y9Nh_zjp%s4=G;pf7Pk5*if^m@RrayjH3sGH8?gSb9*pGwN=~@4Jie<)_}WgUVmJC?tesS2N%EzpjJk`}4x@MEf? zVIj7kfJ4V6NJuwRbH=kOVz+EH&u=IEI?V$ASXo60H(#NK*+3YVXtbvxyXs?Lt$pBP zS~Bp%=OYZS1a4b<%>};Q=(i4=ulLn2XIFgqX8LCBZ5RPY2$%_MbYCYotFK+RI<3Z1 zUuYvcI)BqCoHbdMvfR4eqfMf~HGm!6s`gE@-LB@al+QyBM>3lP7jAF2*1Gx`}*DAkdwnl9ovgY)-aOXz6?xNpS`xR|FxTkR?&E{O)E)eoU9QbGPa1 z9_Q}Ri8;a#i-=({5Fnw#RRKK0;5EtLAvlEIz=l^<5DpHHNwyyvr1D%wMfVkZ0L0Ie zT2O(kQJ<&XP!*PE# zsh}Qdj9aTtLdq|G^@*UlBj^IzI}=LwS$8r+7I_} zCOMU6v*%9b8=*ehN80ix*UWvak{-SrR@H5YnmYUUG-Ror8ZH1Pu9cjOW+Qz`A60qs zKEppA=yaCA1hzlyx&#|ucmVK*~5T#D-a50N98Vnc7@i8u1dd4tSH$b z%n@Qry(bj7^$a@}RW>JZGp5XWvOJNJXGYsgFBd)oXQwnonPEuyYd~0uaX~*W5FY2+ z1P`Ate5CEG@}rBu-V3FBd}FzwIe8U0Pe)X96k4f)hWdzK7ouy0uYLDw&j=8K>E9}c zjB{QfWJrfSi@b;tSd}=pVfv+dQ!rCpTz6BdDTXM=ayaxb45Xzae0d$y z*^^}dJ>XLO=4B(Nq%-wjV_YI_A*l*eW7*FADf39r5MymGTlj#bkRr}a#K{x87QXxM zpQ^fY=o7Tt$PBR98I9?t1f>^qcR(?j{WvSO-`n_79~E|N{HImj^5~10uZ)CHYxKnsChi zg>6a7N-y>v{YS;;i9`ucXPm(i-!W+zzJ#MDk# z2R05#l2kbqx41QpI5Z~$sVR!-cg3jrTt@>;CqmdvV$Fd>%BWY7X5N6?A)@+lGjC=t z81v!R#G-F6kA)=)lWUpj1=A&QXh0a(#*WtAMCBEvR!n8ggn0OUt7hT#^vmP&=C^wA zg*(Md$jFe3DNH9*q`*PMX1>2!w_hJ7-`8|)_U5IT<^Qls$IgEz`od($YhOVgkL*2H z-Rn0^6S+lLqTB~9U)RBF;Veq*Pc6tbiWd}E(W+6U+#QaYGL9L1+7@+4Aq16LCcR*-wj20sC39n>oCiN^z|rtK&NX6(Kr zqQ}RY+rh91cZ96T<`%1Lh!?zhtbM)tTPguy2pYk-&@)E)Xlr(^X zKi0NhRwVg-_h)t31_8F0er=qmzZcaB$c(y#>&;+F8#2;o7qe0y?q0LBN;7($TIP~| z1BA_a+`R09AsRh$5Y@BZ`gJ*!VDmz9Kry${S%RaKsISh5`~(G!-x84{ z$zGk0q_t8AfwfFwy*fx=2XedAfN#0k2%q~ZLzT@pfXRGN)K1|Nb z*X35YrtW$U%nh+Rjj3jo!6 zwmemLwj5hhj#*-cOose=_EvVIf8RE}akSvf%-VTr`0n%g^9gLs!_{?nsg|bVbGOa$ zVNq>mw*xb6AJal!`*65_C!!a;@H2y`Vc_WDBW7HaiGLWlmku=eOup5qGi19jIp@7; zbCkZsV6)XgSKIG{LR@9P+tIE<2>pSsONeiJ10Mup0=B+_m%zWaUHa96zJ$SXUU@ve z2YP-!l)}gRN{<&>mkS<~)0=~Fpa{_eN1ia?tnbbhmJFD&xOZv@T+(zc4tWCHINcgz zNWsY=auQTE{Uv+|>O#(ote20ekKwo8`&V$iS9WYtYU)sKZtNtD!q4I)^3MM4Wd$sU zmM9+>Q#p0XH1LVo$g$ikhs5wre_(Rk@{Ez_yf&MlB7?9h^Rzbof*${x5%-*?jg0pD z1uYTfGjoa}qMCv}DPekt!~#Nx9_w=IqAZ_qiv_Y+_o~kMt8MM{_P*6IH?@{9mRDFi zmDlXzC!zrp5iOav|4|n3k1J~UYJRXpMlcY!ec!Pye2Jqv+Aer2b_9~DSnBX_R5PV} zUMpikC0i?t*f4`oKhcZfI6^ZyxIL<-q^INTX_byBPBUJ&tCu!iE@_uYoL!J=T>subh+C>o$&4?BoS8u$~?5pBc!a0WjNsV@D*%z#^c45|u z9C9Fc5 zisTZ##srz4c69z-`i-5arDuxs7agjQE+h`ZkFY*;RkjZGs*Ee!YmKHB-$2sH$%Wr?(l^_I&Zs`Mz-v01b+`e`1O2 z|B0oMwjwmydu_BgpogJsaPv+n4Qo;Z6_W0x3+r!Ccx-cS-JlOII%Ol57XK-yEQ+)l zO7gIf$;L;Wxni6C(abRgC8Qs4M)6-&&{D(qItOovZ618=?6M8<3Be@bnq>>Z<#Bnw z5z&4}S{5t#2+YsaW`}^5I)CHsqjqM|8qh<4WhGrC z_b|Btmd_};go(K=w;KDZu0Toc^zQo7mB!5;2Ll)T>NnBows@Ew;y|e_mrp8JqRnNJ zp)RA=LeToHUv2nQ_h{US9bzCF;JlW2LMnV56owZZ3{e%c>pl2DRtZasN{FO|Gbl$W zx762(6IeOrCIZVkJ2Cd8Gk6ztBXXC3*kU7cLOBFQy>t00scxOc7T)h))x30iT7%LV zFlt_d7GlsyL;PY!G?N!lY~cmO4MF~9D%hB?;dv*>&0Ugwse|eT=lLt8wR3wq*22dU z;WhC+hu$biRfTML-UC{w2Yj!lZXJBk+*UI*m^kQ#VvEL1_3><|63K zcq|!^cCfI;35oAY$Jcq(lw)dfSSi}qCXi-57)fP}Byu}IxoeBgi=6m3!2Pz{6G1d0 zWf|wp6`mI-CdJk5UySL;0dLX4kQNdzkdkW;QrmkQyf&uU9w@W{Vb1$los~FUGLas z=IN%bR(97!#VDaCm((V+9LX~p#ioq zNCnO-4VO>O<+@Rky=xrv>xT}$>4e=`&Hq5yJ`aW={1dcFDdw%^3-8kbySD&$40U=l zzw{J{7lNEjZa{q$itilcDqM>CpA>myKs%Z3-QQ;Ca^k51n|3mxy;UMkWdfVxCzNYh z127mY8ps5H2(LMX{$lK<1kQ^T<$IM;R)+h?E#=r9(^b~#Ba1R)?-KAaueEK|9hjX` z&AJWhor-TBu!~}S%?3UZA;W}CTKP+IP0(+oF53v=ZMPpr~fmRw%BYzi{JgZ(E4 zR5I@bXni%mEj)@=sASL|gmo;?|47X<>0}7eGB2}RQ)g+S^YmE|4*YLEgn{zPK}ybg^j{`NU!rU&Ve8wM^(9m+T5Q9>T2adQJ&L76>;YRhFpLr7+C-y`+Pf+GT#C6L1q7w zr<^-BTNhoJz`@|Y;TcdFM&rPjwm918IF(e5j_M`p%l2Uf1#g=7`8sOO6WaTmi~{S- z&o;Jq+wT*dekTa+jSYbCoRIknYL=>W6F2&HJw*Rr1c%3fZn(}+63BMtho;W$`#)3p z{!~zd$Fg(Ixt9&78?pruiAN#$>a=zs98BBQAY?vOh^U%@J*;t4WrN-sQeU^Idd@%x z!;)UU>ZYI)zRu=95RAN-pFS8GIxT>Go>PS0jL=Z3IVJN>wveZERnqdPOBCHkrW1k% z(@ty`N8Hm47cAuJh}JOcBmL^Uuo7GJg4R9|WuJ84v)V~e*9NIIG&&l?` z?WU>TJVCLr8~yjTqPF;CiFpgaUVLK;%x3eS;IWk@H zz1mizoM=S*+-kYx~s@7o$_t@SafzP}7}sjuYBT@CyWFt^oBRuY^v zG(>X%DG_L%@Ou6ED6H%d6so;z_g!!Dcq}+Qb4Euu_7##RJ!5Ra_Vb6AkQGU-{huo^m_8-OI9Y*;H8xW&%UMq8vDdSPPiRjSN}oq zsnhd&Z5S-d#vvc(psMDy*D%oZj3jARpc%6Vby9he%r|4*Ut2;L4S>y(ZPE zl=psl(iy`0Drtubh&;(5`$pc)6u4o>8Xz>tEPI?$y;*EO10g9q!Wux4I#q=DYE!)Kq76JxiT^IHSR_~l z@uu^D=|G4y2Qu8nTm}g5O7pqCp9f`pBA6J%a!DH5AU>7sS|ZP2KMc-n{pLEbL+E+h zy@m}`K)pcBXF@%aJidZ+%a42EpCj(|xj2beMzMKA$B}(=qGs=)Y4~AdS|{)!r(3cR z&riiaUl=NgQlNxA;eY;muVPQN9LFrEBSZ5YdXtHR)8B?I(Pwv8%9-E=G5qC2Q zfvL7@LcD@CQuTs7B0j&_dEVo8eqemap?@G_H>)=*wW+8FGD%tH@m1OE8|`Hhs{Ry8 zuUTQ9ZQ9PV?D4F>$fR&kig&K3O7Va4Fi8HQH5?_OC+CN-BUgox)m4?kp+|9e4WG&`*oGv?iS^QX z>&V=k=Pja+VT$C6iERms#g3^d>1g55p$K1+=D>|ewS8@9X_Dq}kvZSsXd<#Q_A-pk zk40Obl!0Ea)ak8M@vy)%vkF2$E>V_%7>Cwi8slHl^-9oDu%P?ea%21$5 z5E1T+k!a?xmsg$-xzuwG;cf+gnAcl%ulFQYtD38c?;jqBAbU-iAecCM9s=1cc+7tM zUxVg&su;E`w!#J(%Rc&woz zNBGJtCKOddkHcZavk0P<I}`{fyA%sK~gABW;oAY7tgZ*r%JqofVRr4H*J$nw2L>!t`8TzZ_B za8x$LOXZp!TD6#wGW&4F8KBM=Qlj4`MdXe*FfjY=Fx3S!NBdE0EJ09{=c031a6NVwac@S7%UGXA&5BwS52m ze4H{Ge)w^y=0Chtd>7f%a2r*;%A9I&&e*=8%O>fxH-1^8=PUBFS7R(u1|w}^R7SX{ z*Tm_MQ>KeBbfraDg++Mfv845plr^@b4bJFUYR$^ES%z7~<5PCP#m=n@t(qs2Z zov6X4s=!9#vOXwQ@ICj)>R4)80w5iq@~_-l=> z{heFb7~1Y17@i)PoSc~*B^}$L<(PYvj(BIiI}{w?=Ud>u3h@_}n>&5kO%ADRTHM1O zmtr4Jds{N)1qHVj$?s=!XvTQ7)3NlEF;o-rbyIOPbBPVr)3tP+I(o?3%h^H=(^j@U zY6@9Fs;#k+vayo0F^gFcZ*aDUgrt=h2NWKoxNJ`gIe79BmN)3-$us+r?XNA$zNY-c zskkxTtgO$uNzKGJj%{hfwI%4EW6|a`6bI7reTub{$vNtfzYL<9z$V1VSv*D z_*%|*4&s;!Z!>>dD|>fN1$C=>!}jFRkJlth=`^`i|40EcyRx{y%;f$CrCV7IzqF~3 zzfCI$1DdjmEJKPaBdWF>0sZkVDKO(_QC85Put`CeUqcEcFV46m`DWd#9`$;QIzVSq zfg7801$#*Ia9I6dDAimFCrL1oC`HN*bzL=b5AZK2i5$2;AV3C+Wr3_bFMddmjd#zD zSFg3V4lR)F<;A1ZwvoZBgSVb}l9hx!)x(Q?51*VIFqq#fmq2jSpKYc(R}H@4c!DTy z7VKDzFC~HJWr%&X2xHZ@xp(;+1Z4_gsb=6_6t!h#+4-15mQs9pnM}6@!mUY0e!7x? z^#z^YdoYZm9<*r7riL(*Zc~(+v5m{iPe4vjh{;e^-o}+Eq>I6G;I9zCLiaLE5jW?z z7I1x}2Ay!!Obac|uc;9ETy!R#omb+2&?(IS)WfJ~va$kiO3b+%%gM>~Y>4M9$hUbg zGxv0PEH?cuJ!awAkzW)XYi1gMLY0CHIw2=a9)cPGRqsgxR~pLUJLr^lQ4@~ zxi~ACJBc~iIXc*z+q;nPFw5Axm^(Q-*c!W-lUNwrI-4^~TG@hbF-!h;OWfSl!OWal z&fFdV`Xnb88w;n95EA_VmE0ryLf`X;-1)nIsjq_yg*b&7_5Ox?jj#JC99%`?cp$*R1C@Kp2)Y zA5Pv<6eDvkgo@+;rMQRhC@ww>I)Fo2TvTKZYjy~G075p$#KLOVt8toKx#Zxta=+ek z*xlVL98pLY@O|onib`eB?J;@81G=7b@);Y{bTn@$YX7lt7%Ty9p{0OVspPtZEu_QAv7-5m%tyhMYLTU8R#(M`y*9cVGo zl29>#tT=~h;JLcnOA`&+l+G1P1u0(Mi~_}c9UZ{;r?Z+Z8C9|F6l-?2Ej>1VmmpY= zq#=ky6ajsY9u^8#3YMYa;URGeah~js@>f608sMfHkg*d4ecWZS_plzN@oCj$ns<7; z*rGt>m%nO)o_M`2>zn*^aN2l`o1x9z=zMR`JMOQm^-%LN7#^1=l#-&Urs4akqOT8u zBr=`GoJUVTIVqIl_o1Zn@wwF*)aqbxd}z@-<&}`|`7r)ZsvPBtigHLF<+j^puj#cv zC+p$yGrj$+F3EqWdhEyXR%4ju&(D*|RcVsdn$fu(0E1SKhQrg8IsP+I>wOn`n$NS} z+2E++qM@1jagW!1OZ=3Tl{RkHJYMt}bDprKx<+!EKOG|@P)S84y0omU43y(-=l7YV z*$(1_$q+Cz6HxRIqh`3A9}EXcveTWFot++!>P~;A9t~KnQn4F%To*9Xb_}Y)cIk+w^6&~!%IzFAnWuq}*F|)8R@Ak>a zNy>UZTRsOt>|tZ}cpK{7-I~(2%S_PISKderr!|SRj(;V-?Vq6$!hsva8=_mAx^-^( zsJu*vRx&UHZ+glC>KKnU)3h^~Pm)V8(43hmd1*<7n7EEsrccW7xeFXd{>FA<9*0c~q2T@!N=0Zo zfO5n&gU*=-_TfM2>kKgVLa=wX*sN-F%b%}QFD)(UpqH66kyt9^i{{JCMZ+BS{<*`t zSUWlZ96Wn`7tpH&@kq7W2j?ryVHa)*2aNa^4Bof`$Q`Ilj(m-aaHwbPNCPTwD+}J6 z>Q)cCcon(`{dD|2U<5`z5_OwZY-Fg?xU0Kp)yZ@a<~0r?8${JH3vP{4VEl(&h_1LX zzKER_0D3XgJh@ImwTqvwD_@gUpGZ1`*tUXLUi_!Ztd!j>o4-t8K5K#>_F;)?0nk~s zcuS&sENRc)BBJf@O^nC2-9>EVo}Nk3U$v+iyDzbNe-vr$-_sr(wohsjAvFPyx4X6@ zC8IDmtP3<#mz11J-|aZ7Qj+^l-nZlJs=aB*Fbt!2iG(wg^Uwx^>A)uTyB|1G{OOYF z{o-u}pX3nd+jlynZFff>0^;A&7i@Y;Z#X{882c<^e(~RQnK!=l@oW-8*mw^e5@0Lx?&Je#ElzH3T!O z1}=x>7YX)7jSFY~&Vw>_2=>1wmJiv@_iVxIEAg{v^`iSR#!Le@%na70`%+l`!dusb zI`fs8(1t|`R^#;e5||DXVCw5PXG!7@@yF*gu4Eq&U`(m^!nsbE564`;tb^jPs1dN( zo5?gNR(kO}C{Y>oA>z2<6x6Dl!bnuSu!C<^@1s)gv|y{(=x)0-K3^dzIJ=s2V$s%LWB)zZx-dn;=viI&Qy>6i`HC%7&AHA(xfwHmUSQRk zpsUdFJ-%@Bhva-lc}Cx$<#hv_{G3lPc`_p9VEYW(AA9u%qF+f+Ky>-)-{kXLZq#TO zZXkSheGji(Jr4OSI2sogYjyG{`|MVr;(aoM>w@3@d#md#QZswoHoHuO@tKcW!@bn_ znV(vqd#j@=&G7+MZP%(rq{Hb8Brw8p!Rht&wF+*jQ;bpCB-=5an`4MF{B{K9?^mii z&d>{$(sQo+xtdcrgFVm;CAx4B1OAynenmoni45+a->6MwejnZ=5~-B>dTJ#i<0Y;Cs&YqPAqzq%S5*0Q@(KjY#t^>=tEv8 zMg~VdIB!Amc8Y;`=Q%r_UNRE(9Huoe^T>X zsWEhvNTmE9M?QLh3w>NR^QZm!>umTin0L>pCq>KxsrexHPYGs-MTBwnFWrh;)_2D1 zoYp?YUZ{zVRo^8FN9>o3FBCPDMBNTPYvA9@c|#%n6LyZ=8Y(Zx)j}k}ANJX@P(%2z ziy{>J?|;!hQTO5e>>~_<5V?8ev4lD1bD z9FZVd(l+NQW(I-K8yV2}Exp;X@S1j~y&M_eV|rCV5w~=|{VzF0xs2 zjYj5yzY5tAU92IPbeoN=bP$V`p}w0w88`sn*y?;FU}3pBjBVUQG4ux;Yqzg2qc>Qi z+6ft*48b~Ve#g|>mXJ36deA~B?hqA{XoYQCfg!#1gN~)WjueR6VpYqLKkCW9h`*fG zZqJz4)v+ybLMEC?&hp3K-h`i`-KngzR?;7x3d;!M+iFGC%?-x-&=>bV3_gv ziq`zi_PV9@u_3p`Xk}_-0M*suZb#Mn8bT3)u7c`F>oMpsfcthF&MbiL^k6*W%`$Lj zcU|aS9J1~_^+xOe2y@wBZ2$5~*?8hcZ)?WiLePmoJv?7W^5P--gUx`A2z&V#EOn8z zIt%qXzL)1e;ZMukG7^u5SWN`}LvyCM<1k+#k=DiQU2lVu$K;|jffpz5$D!biyxAsn zXioix{cT39k-iu(lV?(;GHTRycodkQ)3HIBx&}SOdmTOKqMKFgJ>^VOXsq=kA@-~N z+AV{-kSYzqn1ms3p+9;8)YdB<|HP7G3X8)H0%u?EIe)CzlUf`~boOGy&PaO+By^vr zXZ>vMnCHF7y-qZlbDKEjpy@Eifrzt!4J1mKJgkj_GyXdQR!l8AL&*a^lY?C(QZnqo zjzMaTw^wRVYq6*gWPUE*L<`Lq_e|T;cFUo?jrt}dZvE?N6zFmPE-#JC2>X+1r99ic zjF&nB1Bj%rU*{N?$#zcL<}OaKf@poz98SM(@VcqqR959Yc~jly{IPc_E$ zVm5};a>QjyU7(%W=2bcUH17Gw16AW5^{Y(`ul(C@3gF_@j90uGlFT>areA+lYgm$K zd9aNfG!i^C_No&nq@jYQQrYdRSVcE&7zWA?8r+yE(DzCY z!D&D6wR}mMV;`~w&4XWsCU^cE1!!}bhkHKq7fh6mY9&C~_oRixIea~l;gCTln_M}L zkFKCJY%W~CZ0hf5CydkBhOm>1%8 zv8F8daR_=|0f!P)UdWK>$~+8EDv?PA{_yFyr&216zH0ovQGb2N)-03KZvj<-!tDsG z9K}8Bm#72gHeGTA9?#3k_^p;DbEkA2V-;IRq3-72JWC$Y6z939C;K$}+6PGE-(;~* zR$^+d^WcV$B}Qig_Q^8K=LhVkd8zVTYaiC7m!67Gr!=;nSfMMAoHj>X1jK?_EIq** zPc-xa+R60!VHF({SB|;8VA0kxgda5@92vD3AB1N;@v;MB>yzaySSb0l;|K(;p7(3+ z0hQBNU{RH3 zuloW-`fwm%lVxWQds z0&`IAHUWJFygtV*8Yw$;XwsxVh z1TgQE85>(Q%APYWaN~R}kQ3Ux8XP6g(5m_@-kMD7BGn6E(Czj;6Qa06e5XKqiYg%A zoj|FcMo6^oHT3eW`)B&nYdVtkR~uyZMUgTy-fN+;cH^|gJ|FSIsu3W2CdhTOs%ygP z-yJXNr_bg1MoGMPcCCrGLZ6zZCJW=z{MZ-~t#H|r0{*sCb=0-|u!jo7!;Rx{I{qSX zC=}^YYRHZ9YAYiPEt^!sAwDDW*1`m_ABnxapW-YWYahzId&~LTVf%tJBP<}JS_Wwc zn!>O6#4i?5{CP^A>`%#h`TpskWq`$fh1iw5$roCFut{I?ZxxhZa+z8OF*HLU)CleH z-sS(J$uk4Py&!|K_&!AD@kmjx43UK{ClX25gSt-$&(}uftN0VwULm_GJ`6jG={inR z0jO_-)1mYp?d?H_&MyEF8NOZ2NZOIx%AO{sLbW+R9`o=atFpNw~?fxF*Eq(eItUU z-41~fDnKXQV`yk41xTwxFQBjH=!GJ!9 zlgoyA;vd!pe7s)`nfKohEx*7b^0->IZGIZSSx z)l6u8+NS9*=UmFi@8K^Dg*#DNS`82@gYaw%;EpDF?@0GSfUoYG*3bAze}+E^c!Wfh zaN`*KSVmaCTGLWhg5`(TQG4+i#e;=ZiY4ZK!r`_Z%z}m(SLcXbI%d$5kOExma&^Wh z0e@{mDOCjIfaE$*F%@_AWtt6)QRn#=+@ z1hXE*H*e(oqhUTT$+!lRjM+`u+IR=5x6Uk9PQa^c%Mc=cd#JYV;ZX2obdkZW7PMSh zP|i0})O&9)az7sgLsaZulrXaNKLn18{$5kaAv$Xqqq6RC3KP!@C)vzff+Lj>=Fdny zdUv5AlTg-$$Zxw+-87et*DM1r-5FAT1YKlLS#l4LQQsz>eIA z(|-arsPlcINoa;Xa_7f#d#G3hu+e)rd*D8J_Fw*$ZI`tpCc0Bdrk%YejI{>L?An$p za0SnQW9Wvy3yPs)eSk~UcS^FPE1GgOc+>~wOE?Yj66#~q#8hwVb5i3;DjTv?00XwZ z?LDJW-b63a=OfpLJwy$sybw1bWYpmGpPQB*v>2sQf2Nt5BuO{r19ou%RL`A7EHSc_ z2ME~56K*2?4F2-eN#m|5F!2=eZDkiZQ~p+;h+bp_eh#V^PFMBvfe6c6l+lqM=-h^} z$QpAV3r4*}Fsb>GI2_6V0CsFfnu6WZ5w~m^bGY*x#(mGP8CzqBtKasY)GJnpKtQJk zM-}yaUq@4*SWunj^7Wuy2Z>d2`+Vrn*6&%gbbj|m1L+w-L$=(py`c_w+xFZMl#4T) z13AUm<5H~Oc#nlHsbmYzIW0zQ0K|Y^wJl|;bT_32cY{yadqBwWHG*-jl=858Do%4k zNy>HO53jnsuEmFw<{?ZZCx^I$tqgg-rg-ba{rs+w^2@$S6amZOh9L{{XE6f$HQW>O zh029uk^V$u*JW-(9LV0h0LPA>F4El+5T1Cm^?T(;4kTw|oxddH0X`C}xR=;EGwFg9X+*Th=b&iV?F!aHf|M7nv-fGDCH8g0_v8 zWy{e8NE{7^>fD_qcN?3DO6iW^Gcf1-c~rcE zT5s#}KOdycgAd)|UnU?@P8e%i&@UasU1@g$nMRa+9Zjz$(FjJYm@!AtFB-<@+R zigo)UGnI38VAvy9_=BwY8CAYlUIoES*PT9>ivUrmMG5u8nC@zOQ9Se|A6XwE4REK2 zaqLi!%aArK#@SI<-&*QM+!~Yh>u}mhxn5uIyK1l%IZiZ~ryQ^og>1T(gDS)}GG@yI z$$Rh>{%HyaHZi5ecmo}L2R_*IZ{GDz?qO8rd7w2y##c8c=u5B@3SiJC2@{!motgFz zeLrxi+GosE`}vw5m{N}5BQvI;7N=s>1tR$kOa8Jw4n|qunPtv3gdJQchTk_6?~ZWy zIwuA4DKGm>YMcN0Wq=a$v{C4p+m(55)qfdlyqVK@oya`ylXvN!fuq1V2GE(l1{WHU zUhztsm*8XW&c&G@IKh|8CEw7Qwp0YM&jz;L6PXX?zoKwXMZWvm z2J;!rR2Fhm9JB3w*nfM)^C&cWkA96m>K&EqUeNd1VBALH<7yjJu#pMT=zK^0dLOFn zfk|g%t2SfZdb(|CNJ{4GvLvg-_@% znbOF454rogNuN@erpouI>N%QDLy|tzLo{fH))pUpIeZ4EL=E81CV$Q;^ZLu|fYH(v ze84YtYhB|liL~a3Yj~Y;#dVaPYHv`J%8@0cx2hqm`zaDDF*nuk2F_xxH{22Pv4##k-k$$5QeZ zs(V4&t(9*|r=LT;Drs`eWL=`0{t1cHwV=*vhR**-zi&;#K#Lyt)XrMbX*j!vryg2h zqrK)~MZ;~=&x($(x6}Ou?CzJ3cs3jeKNq-a$Bt!AZtDx_@ao49ba83I=r?Majq00A z0_i9GWw26$iEpp^my-pbphcq(-WPRm`-v%dd5a(UmsM0zEDOK|-6@d_Zrv+zLK+xh*B-`UTKMKcpNEnT@wB7M`XdicJSRZ)#O(N0H)qqA^WPpF<7 zUr`ZGbNgz@^-p`^zrQ%%sFO{qeGFIT8iyWd&^Sq+Fmz#eV$@-_a-N1l;g&_H@V$yv zf7MPybUch8T>COkwRlRC7ornGz316v>-FhTb&f<1*++kKN^c#R%_cwn4*WPfW;#=eHfFTrs(vm+ZU6joGU6UebWm*5jJ?^o{i; z%nMqtQznPy)H`5u0PfZ5)scC`pL{ngxKq#`^=E<0!TGBZn(i+@E}Z9y+-~CnYjd#sll>gK?f{6S@L zL}*XFFwveC?rFW?`PIh-JAt0{;w!`{xypH&J6^FwoxXPdUIwnzYt-*XuT5sN z{agRxMqD-{!@C-g+H|epIcQcmy@eJOv-JJeS4-gwpVC?OCJ3YjZR3NK5cs`$79@+$ zu@OPi-x`q&E(xs$_eMNaUM9e z8Bg&>vpn_PiN-wLYrH?H;xYtQ@4385XJm1u+sF#1*uHI^ZT@_DxF?#vfTpL5y`a#{0SE;I!#0e zR!iEo`_d89z3&W&UafCu+F$w`)1xjf+SXC`%Yzij06#%TZsOwzUOzqwpHMj@dfrgnla~TK+-si)aftK_nCM3S{G=Lt zc4WVT9O?*Ha$nraeU(?|ZeirE7#H2QXIN*1+WD+RZ9*t#>b!QRzi6I#L)-}JxO3}- zY%~b`iJy%FGFgJ>_oHxB+O-GjKUtn8v$7?2FvHZD_^ z+fqN_%0$L)vJR{bjObBQa-(S4b#LcR!Y|UUtdx276;;s(51g~>`_M*Pcp_iheuXT) z_+8_L|GgBpK3UwuD$52NDQjMCOpmK}F2tdz5&XLqNpbH|bcK0FHSd3$98=F|OHu zib%B9uH(=#suk=Br0&EKH+~}l+^o_%x()mX9N}55P2?1_`QrDkMMoa8uIdK&v5h(? zL}}ky_D9;dg!_}g68F-ootF43x!8D?J=P}t6Z;cKt&q8`%XIl5qN4wH`8VXFk7d3C zzEZ4zN4xthNs{YVH3r}Ku{GrlE#hU6jjF3x!>FnnV&oP3QlJsz-Y_|gKH6)+sBvBi- zZx~T_ByZOLv4U=pQEM?AHMxEPsKN+TKK@FE=-$O@kzENhJolsqxr5x z53zsD&Li(u#!@JZ9MKY2SABGm=ym-=#~_QN#LPEAXrn7JeUxLr&;%R_doUzhzv^oK zo(L~{gLP>A_d)Juyny+ASSk2r-C_o(T5=_gjE_De)!(m&oZlq0!GuL$^oo;-$Xj<< z<|4I8#ZK}}un~c*$I{$T5_pn!*@PB25DImYXqUM*k*tO8kQz8sPr`iQ1-G{SO0R18 z;rGEX_denG5%HKeC9L&_1+yp7NS`fsqf6a^BclUIFhM_^`E2CQ7G9t$)~c&Y-7a4@ zM~8@GQpaaBTIT2zVSj{(EKiY z4XUFonIPpx*3e?>?iV{~T6IH*_0f!D%ssuNAdO^;EwB_{%MzhX*wmx$*O+7YHy_eU zRO0wS)X$2@`4&O6pLWY2)^QK50`RP7#3=}}lxo|rl+P!>&m;WaJD&K}^-uN+An~Rl511>Evp>s=#t_CwYP9wbun^sH4lDHou1!J{LNT3t+@z3BI2l91 zlSy^)V=2D04`IuAc$33dJ^<$Tb^QFk@j@Y6!2G@zURLsw7bQGd{@ zWIP|F5`M3vSHrIg#T>!%yV}cGpEAZal0G#wgs6Oami*~CXn?bFub4CIHf`FpdP&gp zy?BT2rQVv}G?j4bgWg!zUn?)l>qgMZWAF0yT4<$(h>{z<0oI@6;#X1A(@drh^3V`T z{8G$1$2*V}0&I8s02;J|z2;j>T;#q0^nOYU8# zL8Ep7(~(i~`Z{z3pjTc-2^ZOx~9PoaZrJ0TGi0qUY8iRi9oXFPH;Ebqv;CI@{}r*wQKN zn@Nsb2AUh$voYnpD_>OBr28IFl(40)`5FFHmhW+AN{>bWRtZ+a!upXG2Cr3W+pqGT zFMb~aV*?)bprM7WrbqX(FXwpcac3d=V`Z&W|48S=tllW$J%>)*ACf8ei|(| zW+>$fl;5@A`=KoQU^33(a^~_{Y^-=1Gp*Ii9uWiPfa9pq^Kad$dN%?oTF*q=XlA(D zL;Bd$KZ?%zP@lT2Jye+V=;)8v@jY}}x(3tohm}_uKeh-WKIw@NQa{?RKz{A~UQ*NG zUaT1Xt0z0;QMdZQOJ{i2$ixqaC|jxqPG0z-0vqTDqLg-$nh@Qf_ya^UlXW&iJyVmq z@2|o}ZYzJhXN}{$j4veLXqz1t>zrc|L3A10XSK_Q=tXkT4_hIQ0~Dn2W3Xa=7f2tQ z#)oEt<@bZoPo;u}i}v#RJpN&!X0sk!YkNCg9Ez5b(!E31yjNGaOWLeOdhSHQkdBR) zK+&sM?hB z#qZtAR#+Ai2fvcNlPh!0^vPgiUgq4oF@ABCz0syZ9W)AdqV7InpK=4{ONiK-A)RDM z7;@`@2x@s{4gQl32i{+~ht2$@-YP_@-wLL+jGHgc_a_%eDxi=!cg)~HCYKLdF~1+F z`>0gA`H zt*wyFd(CFsQ=`T#|H2#>XF>M$in?7Y;_Zq9>ma=8F&;y~KPX>>G zceSP!YL!*Yj^s5fvq5FiFAkyK~xkY0o59CIw3JT#P)fEarQ(>TV4ivxp5vsg(tmL|8QChRRg z4P-FCTk`SqMhul#g5>wbpoh$13_`1(v2u-`cB8jq-CXhXhEpU)x(v22j7pr3TD+_| zBsRMwE}?gV{4wl|6Zn$1ynDJ7g^KsoeSs3)S{l-p@R9 z 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%0Ai9^kL}-S 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ǒHD4IsJbLiq^k8 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 X{y%_Sus`}yRBz%1XAw-|kAnXfwT!9f literal 0 HcmV?d00001 diff --git a/third_party/meshnet/docs/pics/crd.png b/third_party/meshnet/docs/pics/crd.png new file mode 100644 index 0000000000000000000000000000000000000000..0e72d7d9904e5b05fc969bcbd94e8706dd8b84b3 GIT binary patch literal 33904 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�y=4(f9t|qv%8ROAKnc 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%0A76~vCKVz-4 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

j{@$lCUDQc9u50%Up?(i&(Eig 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

7z-PHFExDBU()(Jd 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

B8tcf44(n}wD8HId$ZM=XBEB1#P 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 z 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 literal 0 HcmV?d00001 diff --git a/third_party/meshnet/go.mod b/third_party/meshnet/go.mod new file mode 100644 index 000000000..ecaf40671 --- /dev/null +++ b/third_party/meshnet/go.mod @@ -0,0 +1,76 @@ +module github.com/openconfig/kne/third_party/meshnet + +go 1.25.0 + +require ( + github.com/containernetworking/cni v0.8.1 + github.com/containernetworking/plugins v0.9.1 + github.com/davecgh/go-spew v1.1.1 + github.com/google/go-cmp v0.7.0 + github.com/google/gopacket v1.1.19 + github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 + github.com/h-fam/errdiff v1.0.2 + github.com/openconfig/gnmi v0.0.0-20220920173703-480bf53a74d2 + github.com/redhat-nfvpe/koko v0.0.0-20210415181932-a18aa44814ea + github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8 + github.com/sirupsen/logrus v1.8.1 + github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852 + google.golang.org/grpc v1.81.1 + google.golang.org/protobuf v1.36.11 + k8s.io/apimachinery v0.26.1 + k8s.io/client-go v0.26.1 + sigs.k8s.io/controller-runtime v0.14.5 +) + +require ( + github.com/Microsoft/go-winio v0.4.11 // indirect + github.com/docker/distribution v2.8.0+incompatible // indirect + github.com/docker/docker v0.0.0-20181024220401-bc4c1c238b55 // indirect + github.com/docker/go-connections v0.0.0-20180228141015-7395e3f8aa16 // indirect + github.com/docker/go-units v0.4.0 // indirect + github.com/emicklei/go-restful/v3 v3.9.0 // indirect + github.com/evanphx/json-patch v4.12.0+incompatible // indirect + github.com/go-logr/logr v1.4.3 // indirect + github.com/go-openapi/jsonpointer v0.19.5 // indirect + github.com/go-openapi/jsonreference v0.20.0 // indirect + github.com/go-openapi/swag v0.19.14 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/google/gnostic v0.5.7-v3refs // indirect + github.com/google/gofuzz v1.1.0 // indirect + github.com/imdario/mergo v0.3.6 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/mailru/easyjson v0.7.6 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/opencontainers/go-digest v0.0.0-20170607195333-279bed98673d // indirect + github.com/opencontainers/image-spec v0.0.0-20171030174740-d60099175f88 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae // indirect + golang.org/x/net v0.51.0 // indirect + golang.org/x/oauth2 v0.36.0 // indirect + golang.org/x/sys v0.42.0 // indirect + golang.org/x/term v0.40.0 // indirect + golang.org/x/text v0.34.0 // indirect + golang.org/x/time v0.3.0 // indirect + google.golang.org/genproto v0.0.0-20220714211235-042d03aeabc9 // indirect + gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/api v0.26.1 // indirect + k8s.io/cri-api v0.0.0-20191204094248-a6f63f369f6d // indirect + k8s.io/klog v1.0.0 // indirect + k8s.io/klog/v2 v2.80.1 // indirect + k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 // indirect + k8s.io/kubernetes v1.14.6 // indirect + k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 // indirect + sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect +) + +replace github.com/openconfig/kne/third_party/meshnet => ./ diff --git a/third_party/meshnet/go.sum b/third_party/meshnet/go.sum new file mode 100644 index 000000000..fb8d198dd --- /dev/null +++ b/third_party/meshnet/go.sum @@ -0,0 +1,437 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/MakeNowJust/heredoc v0.0.0-20171113091838-e9091a26100e/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= +github.com/Microsoft/go-winio v0.0.0-20180823222421-97e4973ce50b/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= +github.com/Microsoft/go-winio v0.4.11 h1:zoIOcVf0xPN1tnMVbTtEdI+P8OofVk3NObnwOQ6nK2Q= +github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= +github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= +github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= +github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= +github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/containernetworking/cni v0.8.1 h1:7zpDnQ3T3s4ucOuJ/ZCLrYBxzkg0AELFfII3Epo9TmI= +github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/plugins v0.0.0-20180803153142-19f2f28178aa/go.mod h1:dagHaAhNjXjT9QYOklkKJDGaQPTg4pf//FrUcJeb7FU= +github.com/containernetworking/plugins v0.9.1 h1:FD1tADPls2EEi3flPc2OegIY1M9pUa9r2Quag7HMLV8= +github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8= +github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ= +github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= +github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8= +github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= +github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/docker/distribution v0.0.0-20181024170156-93e082742a00/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.8.0+incompatible h1:l9EaZDICImO1ngI+uTifW+ZYvvz7fKISBAKpg+MbWbY= +github.com/docker/distribution v2.8.0+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v0.0.0-20181024220401-bc4c1c238b55 h1:t6HHZjjOdUIP8qiTRgxXGBCUpZ/DulDWo3PgtPjfBA4= +github.com/docker/docker v0.0.0-20181024220401-bc4c1c238b55/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.0.0-20180228141015-7395e3f8aa16 h1:4uSgK5h2LeFthjRpG7VUcNsG8cnMBSyUka+aHztsu0k= +github.com/docker/go-connections v0.0.0-20180228141015-7395e3f8aa16/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-units v0.0.0-20180212134657-47565b4f722f/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE= +github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= +github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= +github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= +github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= +github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= +github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= +github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= +github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= +github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= +github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= +github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= +github.com/h-fam/errdiff v1.0.2 h1:rPsW4ob2fMOIulwTEoZXaaUIuud7XUudw5SLKTZj3Ss= +github.com/h-fam/errdiff v1.0.2/go.mod h1:FOzgnHXSEE3rRvmGXgmiqWl+H3lwLywYm9CSXqXrSTg= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28= +github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mattn/go-getopt v0.0.0-20150316012638-824dc755f216/go.mod h1:2uCwQeFuJy1M6CD1U13P4er3sZ8BgifMtkgSIhV1vgg= +github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.2/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1 h1:mFwc4LvZ0xpSvDZ3E+k8Yte0hLOMxXUlP+yXtJqkYfQ= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo/v2 v2.6.0 h1:9t9b9vRUbFq3C4qKFCGkVuq/fIHji802N1nrtkh1mNc= +github.com/onsi/ginkgo/v2 v2.6.0/go.mod h1:63DOGlLAH8+REH8jUGdL3YpCpu7JODesutUjdENfUAc= +github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= +github.com/onsi/gomega v1.24.1 h1:KORJXNNTzJXzu4ScJWssJfJMnJ+2QJqhoQSRwNlze9E= +github.com/onsi/gomega v1.24.1/go.mod h1:3AOiACssS3/MajrniINInwbfOOtfZvplPzuRSmvt1jM= +github.com/openconfig/gnmi v0.0.0-20220920173703-480bf53a74d2 h1:3YLlQFLDsFTvruKoYBbuYqhCgsXMtNewSrLjNXcF/Sg= +github.com/openconfig/gnmi v0.0.0-20220920173703-480bf53a74d2/go.mod h1:Y9os75GmSkhHw2wX8sMsxfI7qRGAEcDh8NTa5a8vj6E= +github.com/opencontainers/go-digest v0.0.0-20170607195333-279bed98673d h1:KdbiNxiNlvqqdRGoWqPq40QvJVnkx0i6boW43dg6Zig= +github.com/opencontainers/go-digest v0.0.0-20170607195333-279bed98673d/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/image-spec v0.0.0-20171030174740-d60099175f88 h1:wHUCmBJYWVPLW+A+82bEi7lJpaUFvUUrJGpBYUvHTYE= +github.com/opencontainers/image-spec v0.0.0-20171030174740-d60099175f88/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/pkg/errors v0.0.0-20160929014801-645ef00459ed/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/redhat-nfvpe/koko v0.0.0-20210415181932-a18aa44814ea h1:TtTNq6CySsXrbFXgrztJASGdcrRlDlIKt07yqGK//fA= +github.com/redhat-nfvpe/koko v0.0.0-20210415181932-a18aa44814ea/go.mod h1:PE2c8qUUdHpM2GPw9ZAhKMD6HV/QJqTkPTbmsn/NV6c= +github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8 h1:2c1EFnZHIPCW8qKWgHMH/fX2PkSabFc5mrVzfUNdg5U= +github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= +github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/vishvananda/netlink v0.0.0-20180316044622-a2ad57a690f3/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= +github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852 h1:cPXZWzzG0NllBLdjWoD1nDfaqu98YMv+OneaKc8sPOA= +github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= +github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= +github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae h1:4hwBBUfQCFe3Cym0ZtKyq7L16eZUtYKs+BaHDN6mAns= +github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= +go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= +go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= +go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= +go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= +go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= +go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= +go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= +go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= +go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= +go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.51.0 h1:94R/GTO7mt3/4wIKpcR5gkGmRLOuE/2hNGeWq/GBIFo= +golang.org/x/net v0.51.0/go.mod h1:aamm+2QF5ogm02fjy5Bb7CQ0WMt1/WVM7FtyaTLlA9Y= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= +golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= +golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/term v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg= +golang.org/x/term v0.40.0/go.mod h1:w2P8uVp06p2iyKKuvXIm7N/y0UCRt3UfJTfZ7oOpglM= +golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= +golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= +golang.org/x/time v0.0.0-20190921001708-c4c64cad1fd0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= +gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20220714211235-042d03aeabc9 h1:zfXhTgBfGlIh3jMXN06W8qbhFGsh6MJNJiYEuhTddOI= +google.golang.org/genproto v0.0.0-20220714211235-042d03aeabc9/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.81.1 h1:VnnIIZ88UzOOKLukQi+ImGz8O1Wdp8nAGGnvOfEIWQQ= +google.golang.org/grpc v1.81.1/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= +gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= +gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= +gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +k8s.io/api v0.26.1 h1:f+SWYiPd/GsiWwVRz+NbFyCgvv75Pk9NK6dlkZgpCRQ= +k8s.io/api v0.26.1/go.mod h1:xd/GBNgR0f707+ATNyPmQ1oyKSgndzXij81FzWGsejg= +k8s.io/apiextensions-apiserver v0.26.1 h1:cB8h1SRk6e/+i3NOrQgSFij1B2S0Y0wDoNl66bn8RMI= +k8s.io/apiextensions-apiserver v0.26.1/go.mod h1:AptjOSXDGuE0JICx/Em15PaoO7buLwTs0dGleIHixSM= +k8s.io/apimachinery v0.0.0-20191203211716-adc6f4cd9e7d/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= +k8s.io/apimachinery v0.26.1 h1:8EZ/eGJL+hY/MYCNwhmDzVqq2lPl3N3Bo8rvweJwXUQ= +k8s.io/apimachinery v0.26.1/go.mod h1:tnPmbONNJ7ByJNz9+n9kMjNP8ON+1qoAIIC70lztu74= +k8s.io/client-go v0.26.1 h1:87CXzYJnAMGaa/IDDfRdhTzxk/wzGZ+/HUQpqgVSZXU= +k8s.io/client-go v0.26.1/go.mod h1:IWNSglg+rQ3OcvDkhY6+QLeasV4OYHDjdqeWkDQZwGE= +k8s.io/cri-api v0.0.0-20191204094248-a6f63f369f6d h1:OpF0WA8LtC0MVPG5HzIsY77WinFa7pLXRtlc/ksOW1U= +k8s.io/cri-api v0.0.0-20191204094248-a6f63f369f6d/go.mod h1:BzAkbBHHp81d+aXzbiIcUbilLkbXa40B8mUHOk6EX3s= +k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= +k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= +k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= +k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 h1:+70TFaan3hfJzs+7VK2o+OGxg8HsuBr/5f6tVAjDu6E= +k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= +k8s.io/kubernetes v1.14.6 h1:t8Q3aaWanmiariBBr3qYIcAL9o0pv4MB5tZtfbILJGk= +k8s.io/kubernetes v1.14.6/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= +k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 h1:KTgPnR10d5zhztWptI952TNtt/4u5h3IzDXkdIMuo2Y= +k8s.io/utils v0.0.0-20221128185143-99ec85e7a448/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/controller-runtime v0.14.5 h1:6xaWFqzT5KuAQ9ufgUaj1G/+C4Y1GRkhrxl+BJ9i+5s= +sigs.k8s.io/controller-runtime v0.14.5/go.mod h1:WqIdsAY6JBsjfc/CqO0CORmNtoCtE4S6qbPc9s68h+0= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/third_party/meshnet/kind.yaml b/third_party/meshnet/kind.yaml new file mode 100644 index 000000000..412f5446b --- /dev/null +++ b/third_party/meshnet/kind.yaml @@ -0,0 +1,15 @@ +--- +apiVersion: kind.x-k8s.io/v1alpha4 +kind: Cluster +nodes: + - role: control-plane + - role: worker + - role: worker + - role: worker +kubeadmConfigPatches: + - | + apiVersion: kubelet.config.k8s.io/v1beta1 + kind: KubeletConfiguration + metadata: + name: config + maxPods: 253 diff --git a/third_party/meshnet/manifests/base/crd.yaml b/third_party/meshnet/manifests/base/crd.yaml new file mode 100644 index 000000000..cce0cb1a3 --- /dev/null +++ b/third_party/meshnet/manifests/base/crd.yaml @@ -0,0 +1,81 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: topologies.networkop.co.uk +spec: + group: networkop.co.uk + scope: Namespaced + names: + plural: topologies + singular: topology + kind: Topology + shortNames: + - topo + versions: + - name: v1beta1 + schema: + openAPIV3Schema: + properties: + spec: + properties: + links: + items: + description: "A complete definition of a p2p link" + required: ["uid", "peer_pod", "local_intf", "peer_intf"] + properties: + uid: + description: "Unique identified of a p2p link" + type: integer + peer_pod: + description: "Name of the peer pod" + type: string + local_intf: + description: "Local interface name" + type: string + peer_intf: + description: "Peer interface name" + type: string + peer_ip: + description: "(Optional) Local IP address" + type: string + local_ip: + description: "(Optional) Peer IP address" + type: string + type: object + type: array + type: object + status: + properties: + skipped: + description: "List of pods/interfaces that are skipped by local pod" + items: + properties: + link_id: + format: int64 + type: integer + pod_name: + description: "peer pod name" + type: string + type: object + type: array + src_ip: + description: "Source IP of the POD" + type: string + net_ns: + description: "Network namespace of the POD" + type: string + container_id: + description: "Sandbox ID of the POD" + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/third_party/meshnet/manifests/base/daemonset.yaml b/third_party/meshnet/manifests/base/daemonset.yaml new file mode 100644 index 000000000..3b2a07e0b --- /dev/null +++ b/third_party/meshnet/manifests/base/daemonset.yaml @@ -0,0 +1,76 @@ +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: meshnet + labels: + k8s-app: meshnet +spec: + selector: + matchLabels: + name: meshnet + template: + metadata: + labels: + name: meshnet + spec: + hostNetwork: true + hostPID: true + hostIPC: true + serviceAccountName: meshnet + nodeSelector: + beta.kubernetes.io/arch: amd64 + tolerations: + - operator: Exists + effect: NoSchedule + containers: + - name: meshnet + securityContext: + privileged: true + image: openconfig/meshnet:latest + imagePullPolicy: IfNotPresent + command: ["./entrypoint.sh"] + resources: + limits: + memory: 10G + requests: + cpu: 200m + memory: 1G + env: + - name: HOST_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: INTER_NODE_LINK_TYPE + #value: GRPC + value: VXLAN + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + volumeMounts: + - name: cni-cfg + mountPath: /etc/cni/net.d + - name: cni-bin + mountPath: /opt/cni/bin + - name: var-run-netns + mountPath: /var/run/netns + mountPropagation: Bidirectional + terminationGracePeriodSeconds: 30 + volumes: + - name: cni-bin + hostPath: + path: /opt/cni/bin + - name: cni-cfg + hostPath: + path: /etc/cni/net.d + - name: var-run-netns + hostPath: + path: /var/run/netns diff --git a/third_party/meshnet/manifests/base/gwire_crd.yaml b/third_party/meshnet/manifests/base/gwire_crd.yaml new file mode 100644 index 000000000..e197b3052 --- /dev/null +++ b/third_party/meshnet/manifests/base/gwire_crd.yaml @@ -0,0 +1,121 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.11.1 + creationTimestamp: null + name: gwirekobjs.networkop.co.uk +spec: + group: networkop.co.uk + names: + kind: GWireKObj + listKind: GWireKObjList + plural: gwirekobjs + singular: gwirekobj + scope: Namespaced + versions: + - name: v1beta1 + schema: + openAPIV3Schema: + properties: + apiVersion: + description: + "APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: + "Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + metadata: + type: object + spec: + properties: + apiVersion: + description: + "APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: + "Kind is a string value representing the REST resource + this object represents. Servers may infer this from the endpoint + the client submits requests to. Cannot be updated. In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + uids: + description: unique link id + items: + type: integer + type: array + type: object + status: + properties: + apiVersion: + description: + "APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + grpcWireItems: + items: + properties: + gwire_peer_node_ip: + description: peer node IP address + type: string + link_id: + description: Unique link id as assigned by meshnet + format: int64 + type: integer + local_pod_iface_name: + description: + Local pod interface name that is specified in topology + CR and is created by meshnet + type: string + local_pod_ip: + description: Local pod ip as specified in topology CR + type: string + local_pod_name: + description: Local pod name as specified in topology CR + type: string + local_pod_net_ns: + description: + Network namespace of the local pod holding the + wire end + type: string + node_name: + description: Name of the node holding the wire end + type: string + topo_namespace: + description: The topology namespace. + type: string + wire_iface_id_on_peer_node: + description: + The interface id, in the peer node and is connected + with remote pod. This is used for de-multiplexing received + packet from grpcwire + format: int64 + type: integer + wire_iface_name_on_local_node: + description: + The interface(name) in the local node and is connected + with local pod + type: string + type: object + type: array + kind: + description: + "Kind is a string value representing the REST resource + this object represents. Servers may infer this from the endpoint + the client submits requests to. Cannot be updated. In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + type: object + type: object + served: true + storage: true diff --git a/third_party/meshnet/manifests/base/kustomization.yaml b/third_party/meshnet/manifests/base/kustomization.yaml new file mode 100644 index 000000000..9540a2ba9 --- /dev/null +++ b/third_party/meshnet/manifests/base/kustomization.yaml @@ -0,0 +1,12 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: meshnet +commonLabels: + app: meshnet +resources: + - namespace.yaml + - serviceaccount.yaml + - crd.yaml + - gwire_crd.yaml + - rbac.yaml + - daemonset.yaml diff --git a/third_party/meshnet/manifests/base/namespace.yaml b/third_party/meshnet/manifests/base/namespace.yaml new file mode 100644 index 000000000..7783a6975 --- /dev/null +++ b/third_party/meshnet/manifests/base/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: meshnet diff --git a/third_party/meshnet/manifests/base/rbac.yaml b/third_party/meshnet/manifests/base/rbac.yaml new file mode 100644 index 000000000..da7d63eb7 --- /dev/null +++ b/third_party/meshnet/manifests/base/rbac.yaml @@ -0,0 +1,31 @@ +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: meshnet-clusterrole +rules: + - apiGroups: + - "networkop.co.uk" + resources: + - topologies + - gwirekobjs + verbs: ["*"] + - apiGroups: + - "networkop.co.uk" + resources: + - topologies/status + - gwirekobjs/spec + - gwirekobjs/status + verbs: ["*"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: meshnet-clusterrolebinding +roleRef: + kind: ClusterRole + name: meshnet-clusterrole + apiGroup: rbac.authorization.k8s.io +subjects: + - kind: ServiceAccount + name: meshnet diff --git a/third_party/meshnet/manifests/base/serviceaccount.yaml b/third_party/meshnet/manifests/base/serviceaccount.yaml new file mode 100644 index 000000000..4ce60f89e --- /dev/null +++ b/third_party/meshnet/manifests/base/serviceaccount.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: meshnet diff --git a/third_party/meshnet/manifests/overlays/e2e/kustomization.yaml b/third_party/meshnet/manifests/overlays/e2e/kustomization.yaml new file mode 100644 index 000000000..eaf164968 --- /dev/null +++ b/third_party/meshnet/manifests/overlays/e2e/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +images: + - name: openconfig/meshnet + newTag: d0ebd1f-dirty +resources: + - ../../base/ diff --git a/third_party/meshnet/manifests/overlays/grpc-link-e2e/kustomization.yaml b/third_party/meshnet/manifests/overlays/grpc-link-e2e/kustomization.yaml new file mode 100644 index 000000000..398811c52 --- /dev/null +++ b/third_party/meshnet/manifests/overlays/grpc-link-e2e/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +images: + - name: openconfig/meshnet + newTag: d0ebd1f-dirty +resources: + - ../grpc-link/ diff --git a/third_party/meshnet/manifests/overlays/grpc-link/kustomization.yaml b/third_party/meshnet/manifests/overlays/grpc-link/kustomization.yaml new file mode 100644 index 000000000..0368d9622 --- /dev/null +++ b/third_party/meshnet/manifests/overlays/grpc-link/kustomization.yaml @@ -0,0 +1,18 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +patches: + - patch: |- + - op: replace + path: /spec/template/spec/containers/0/env/1 + value: + name: INTER_NODE_LINK_TYPE + value: GRPC + target: + kind: DaemonSet + name: meshnet + namespace: meshnet +resources: + - ../../base/ +images: + - name: openconfig/meshnet + newTag: d0ebd1f-dirty diff --git a/third_party/meshnet/manifests/overlays/kops/kustomization.yaml b/third_party/meshnet/manifests/overlays/kops/kustomization.yaml new file mode 100644 index 000000000..908f11318 --- /dev/null +++ b/third_party/meshnet/manifests/overlays/kops/kustomization.yaml @@ -0,0 +1,8 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ../../base/ +commonLabels: + app: meshnet +patchesStrategicMerge: + - patch.yaml diff --git a/third_party/meshnet/manifests/overlays/kops/patch.yaml b/third_party/meshnet/manifests/overlays/kops/patch.yaml new file mode 100644 index 000000000..8eefb124b --- /dev/null +++ b/third_party/meshnet/manifests/overlays/kops/patch.yaml @@ -0,0 +1,13 @@ +--- +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: meshnet + namespace: meshnet +spec: + template: + spec: + volumes: + - name: cni-bin + hostPath: + path: /home/kubernetes/bin diff --git a/third_party/meshnet/plugin/grpcwires-plugin.go b/third_party/meshnet/plugin/grpcwires-plugin.go new file mode 100644 index 000000000..ad8a4545a --- /dev/null +++ b/third_party/meshnet/plugin/grpcwires-plugin.go @@ -0,0 +1,295 @@ +package main + +import ( + "context" + "fmt" + "net" + "strings" + "time" + + "github.com/containernetworking/plugins/pkg/ns" + mpb "github.com/openconfig/kne/third_party/meshnet/daemon/proto/meshnet/v1beta1" + "github.com/openconfig/kne/third_party/meshnet/utils/wireutil" + koko "github.com/redhat-nfvpe/koko/api" + log "github.com/sirupsen/logrus" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" +) + +const ( + skipStatusRetryInterval = 2 // sec + skipStatusRetryWarnCount = 5 // generate a warning while continuing further + skipStatusRetryCount = skipStatusRetryWarnCount * 4 // how many times to retry +) + +// -------------------------------------------------------------------------------------------------------- +func CreatGRPCChan(link *mpb.Link, localPod *mpb.Pod, peerPod *mpb.Pod, localClient mpb.LocalClient, cniArgs *k8sArgs, ctx context.Context) error { + // At this point pods attached to both end of this link are both up. They have got the management IP already. + + if link == nil { + return fmt.Errorf("Add-GRPC[%s]: can't establish grpc channel. link not provided. link:%p", localPod.Name, link) + } + + log.Infof("Add-GRPC[%s]: Setting up grpc-wire:(local-pod:%s:%s@node:%s <----link uid: %d----> remote-pod:%s:%s@node:%s)", + localPod.Name, localPod.Name, link.LocalIntf, localPod.SrcIp, + link.Uid, peerPod.Name, link.PeerIntf, peerPod.SrcIp) + + log.Infof("Add-GRPC[%s]: Checking if we've been skipped for link id %d", localPod.Name, link.Uid) + isSkipped, err := localClient.IsSkipped(ctx, &mpb.SkipQuery{ + Pod: localPod.Name, + Peer: peerPod.Name, + LinkId: link.Uid, + KubeNs: string(cniArgs.K8S_POD_NAMESPACE), + }) + + if err != nil { + log.Errorf("Add-GRPC[%s]: Failed to read skipped status with peer pod %s", localPod.Name, peerPod.Name) + return err + } + + wireDef := mpb.WireDef{ + LocalPodNetNs: localPod.NetNs, + LinkUid: link.Uid, + TopoNs: localPod.KubeNs, + } + // Comparing names to determine higher priority + higherPrio := localPod.Name > peerPod.Name + + if !isSkipped.Response && !higherPrio { + /* If peer POD skipped us (booted before us) or we have a higher priority then we initiate the tunnel. + If peer POD has not skipped us (that means yet to boot or just booted) and it has higher priority + then we do not initiate the grpc tunnel. When the high priority peer pod boots up (or get ready) then + it will take care of grpc tunnel creation. This is needed to avoid the race condition when both + the pods are alive, no one has skipped each other and both of them tries to create the tunnel. In + this situation only high priority pod must create the tunnel and not the low priority one. This will + avoid conflict. */ + + ticker := time.NewTicker(time.Second * skipStatusRetryInterval) + defer ticker.Stop() + + iteration := 1 + for range ticker.C { + // Check if it has created the wire while we were waiting + resp, err := localClient.GRPCWireExists(ctx, &wireDef) + if err != nil { + return fmt.Errorf("Add-GRPC[%s]: could not check grpc wire, %s@%s: %v", localPod.Name, localPod.Name, peerPod.Name, err) + } + if resp.Response { + /* Higher priority pod has created the grpc-link. */ + log.Infof("Add-GRPC[%s]: grpc wire is already created by the remote peer. Local interface id:%d, local pod %s, peer pod %s", localPod, resp.PeerIntfId, localPod.Name, peerPod.Name) + return nil + } + + log.Infof("Add-GRPC[%s]: Retrying to read skipped status for pod %s", localPod.Name, localPod.Name) + isSkipped, err = localClient.IsSkipped(ctx, &mpb.SkipQuery{ + Pod: localPod.Name, + Peer: peerPod.Name, + LinkId: link.Uid, + KubeNs: string(cniArgs.K8S_POD_NAMESPACE), + }) + if err != nil { + log.Errorf("Add-GRPC[%s]: Failed to read skipped status from peer pod %s", localPod.Name, peerPod.Name) + return err + } + + if !isSkipped.Response { + if iteration > skipStatusRetryWarnCount { + log.Warnf("Add-GRPC[%s]: Local pod %s is taking longer time (retry %d) to read skip status, skipped by peer %s.", localPod.Name, localPod.Name, iteration, peerPod.Name) + if iteration == skipStatusRetryCount { + log.Infof("Add-GRPC[%s]: Pod %s is not skipped by higher priority pod %s. Link between %s and %s will be created by higher priority pod.", + localPod.Name, localPod.Name, peerPod.Name, localPod.Name, peerPod.Name) + return nil + } + } + iteration++ + } else { + log.Infof("Add-GRPC[%s]: Local pod %s is skipped by peer %s. So we can create wire now", localPod.Name, localPod.Name, peerPod.Name) + break + } + } // end of for + } + + resp, err := localClient.GRPCWireExists(ctx, &wireDef) + if err != nil { + return fmt.Errorf("Add-GRPC[%s]: could not check grpc wire, %s@%s: %v", localPod.Name, localPod.Name, peerPod.Name, err) + } + if resp.Response { + /* While this pod was busy creating other links or was busy with some other task, the remote + pod had finished creating this grpc-link. */ + log.Infof("Add-GRPC[%s]: grpc wire is already set by the remote peer. Local interface id:%d", localPod.Name, resp.PeerIntfId) + return nil + } + + // Create the local end of the grpc-wire + currNs, err := ns.GetCurrentNS() + if err != nil { + return fmt.Errorf("Add-GRPC[%s]: creating GRPC wire for pod %s : failed to get node ns, err: %v", localPod.Name, localPod.Name, err) + } + + // Build koko's veth struct for the intf to be placed inside the pod + inConIntfNm := link.LocalIntf + inContainerVeth, err := makeVeth(localPod.NetNs, inConIntfNm, link.LocalIp) + if err != nil { + log.Errorf("Add-GRPC[%s]: Could not create vEth for local pod %s:%s, peer pod %s, err %v", localPod.Name, localPod.Name, inConIntfNm, peerPod.Name, err) + return err + } + + respIntfName, err := localClient.GenerateNodeInterfaceName(ctx, &mpb.GenerateNodeInterfaceNameRequest{PodIntfName: link.LocalIntf, PodName: localPod.Name}) + if err != nil { + return fmt.Errorf("Add-GRPC[%s]: could not create node interface for local pod %s, peer pod %s: %v", localPod.Name, err, localPod.Name, peerPod.Name) + } + + hostEndVeth := &koko.VEth{ + LinkName: respIntfName.NodeIntfName, + NsName: currNs.Path()} + + if err = koko.MakeVeth(*inContainerVeth, *hostEndVeth); err != nil { + return fmt.Errorf("Add-GRPC[%s]: creating GRPC wire: failed to create vEth-pair inside pod (%s:%s) and on host (%s). err:%s", + localPod.Name, localPod.Name, inContainerVeth.LinkName, hostEndVeth.LinkName, err) + } + + /* Dial the remote peer to create the remote end of the grpc tunnel. */ + + url := fmt.Sprintf("%s:%d", peerPod.SrcIp, wireutil.GRPCDefaultPort) + url = strings.TrimSpace(url) + remote, err := grpc.Dial(url, grpc.WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + return fmt.Errorf("Add-GRPC[%s]: creating GRPC wire: failed to dial remote gRPC url %s", localPod.Name, url) + } + remoteClient := mpb.NewRemoteClient(remote) + locInf, err := net.InterfaceByName(hostEndVeth.LinkName) + if err != nil { + return fmt.Errorf("Add-GRPC[%s]: could not get interface by name: %v", localPod.Name, err) + } + + wireDefRemot := mpb.WireDef{ + /*WireIfIdOnPeerNode : is the interface id on which a node receives grpc + packets from the remote pod (hosted in a remote node). Through this interface + the remote packets are delivered to the local pod. + + WireIfIdOnPeerNode is the interface that will be used to send packets to the remote pod also. + Packets coming from local pods will be received on this interface, will be encapsulated + in grpc to send it to the peer node (that is hosting the remote pod). + + The remote pod must send packets to this interface for this grpc-wire, to reach + the connected container in this node. For remote pod this must be the destination + interface id to reach the connected pod in this node. From remote pods perspective, + the local interface of this node is the "PeerIntfId" for the remote pod in remote machine */ + WireIfIdOnPeerNode: int64(locInf.Index), + + /* PeerIp: Ip address of the peer machine/node. + For remote pod this must be the IP address on this host. The remote pod must + Transport packets to this pod (over grpc) in this local node. This is the IP + address of the local node which remote node will do a grpc dial, to send + packets over grpc wire. */ + PeerNodeIp: localPod.SrcIp, + + /* We need to tell the remote node, what is the kne specified in container interface name. + We also need to tell to which network namespace the pod in remote node belongs to. */ + IntfNameInPod: link.PeerIntf, + LocalPodNetNs: peerPod.NetNs, + LocalPodName: peerPod.Name, // name of the remote pod + + /*meshnet assigned unique identifier for this link */ + LinkUid: link.Uid, + TopoNs: peerPod.KubeNs, + LocalPodIp: link.PeerIp, + } + + log.Infof("Add-GRPC[%s]: Create GRPC wire: dialing remote node-->%s@%s", localPod.Name, peerPod.Name, url) + creatResp, err := remoteClient.AddGRPCWireRemote(ctx, &wireDefRemot) + if err != nil { + return fmt.Errorf("Add-GRPC[%s]: failed to create grpc tunnel ar remote end:%s err:%v", localPod.Name, url, err) + } else if !creatResp.Response { + return fmt.Errorf("Add-GRPC[%s]: remote end of the grpc-wire (local-pod:%s:%s@node:%s <----link uid: %d----> remote-pod:%s:%s@node:%s) is not up", + localPod.Name, localPod.Name, link.LocalIntf, localPod.SrcIp, + link.Uid, peerPod.Name, link.PeerIntf, peerPod.SrcIp) + } + + /* remote has finished its job. Register local end of the grpc wire with the daemon + and start the packet sending thread. */ + wireDefLocal := mpb.WireDef{ + /*PeerIntfId : this is the interface id (in the remote machine) to which the host/local machine will send grpc + packets for the remote pod. This interface id will be encoded in every packet + sent over this grpc-wire. This interface id is created in the remote machine and + communicated by the remote machine. Availability of this interface id indicates remote + machine is ready to receive packets over this grpc-wire. Remote machine will use this + interface id to pass the packets to the remote pod. */ + WireIfIdOnPeerNode: creatResp.PeerIntfId, + + /* PeerIp : Ip address of the remote node, to which this local node is sending packets over + this grpc-wire. + */ + PeerNodeIp: peerPod.SrcIp, + + /* WireIfNameOnLocalNode : name of the local machine interface, from where packets generated by the local + pod will be picked up and transported over grpc to remote. local meshnet daemon will receive + packets from local pod on this interface. + */ + WireIfNameOnLocalNode: respIntfName.NodeIntfName, + + /*meshnet assigned unique identifier for this link */ + LinkUid: link.Uid, + LocalPodName: localPod.Name, + IntfNameInPod: link.LocalIntf, + LocalPodNetNs: localPod.NetNs, + LocalPodIp: link.LocalIp, + TopoNs: localPod.KubeNs, + } + log.Infof("Add-GRPC[%s]: Creating GRPC wire: adding the local end of the grpc tunnel.", localPod.Name) + r, err := localClient.AddGRPCWireLocal(ctx, &wireDefLocal) + if err != nil { + return fmt.Errorf("Add-GRPC[%s]: failed to create local end of the tunnel %v", localPod.Name, err) + } else if !r.Response { + return fmt.Errorf("Add-GRPC[%s]: local end of the grpc-wire (local-pod:-%s:%s@node:%s <----link uid: %d----> remote-pod:-%s:%s@node:%s) is not up", + localPod.Name, localPod.Name, link.LocalIntf, localPod.SrcIp, + link.Uid, peerPod.Name, link.PeerIntf, peerPod.SrcIp) + } + + log.Infof("Add-GRPC[%s]: Successfully created grpc-wire (local-pod:%s:%s@node:%s:%d <----link uid: %d----> remote-pod:%s:%s@node:%s:%d)", + localPod.Name, localPod.Name, link.LocalIntf, localPod.SrcIp, locInf.Index, + link.Uid, peerPod.Name, link.PeerIntf, peerPod.SrcIp, creatResp.PeerIntfId) + + return nil +} + +// This function is called when a K8S pod is getting deleted. +func MakeGRPCChanDown(link *mpb.Link, localPod *mpb.Pod, peerPod *mpb.Pod, ctx context.Context) error { + if link == nil { + return fmt.Errorf("can't remove remote grpc info. link not provided. link:%p", link) + } + + /* Dial the remote peer to bring down the remote grpc wire end */ + + url := fmt.Sprintf("%s:%d", peerPod.SrcIp, wireutil.GRPCDefaultPort) + url = strings.TrimSpace(url) + remote, err := grpc.Dial(url, grpc.WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + return fmt.Errorf("MakeGRPCChanDown failed to dial remote gRPC url %s", url) + } + remoteClient := mpb.NewRemoteClient(remote) + + wireDefRemot := mpb.WireDef{ + PeerNodeIp: localPod.SrcIp, // for remote pod this pod is the peer pod + IntfNameInPod: link.PeerIntf, + LocalPodNetNs: peerPod.NetNs, + LocalPodName: peerPod.Name, + + /*meshnet assigned unique identifier for this link */ + LinkUid: link.Uid, + TopoNs: peerPod.KubeNs, + LocalPodIp: link.PeerIp, + } + + log.Infof("MakeGRPCChanDown: dialing remote node-->%s@%s", peerPod.Name, url) + removeResp, err := remoteClient.GRPCWireDownRemote(ctx, &wireDefRemot) + if err != nil { + return fmt.Errorf("MakeGRPCChanDown: GRPC communication error for : %s, err:%v", url, err) + } else if !removeResp.Response { + return fmt.Errorf("MakeGRPCChanDown: remote end of the grpc-wire (local-pod:%s:%s@node:%s <----link uid: %d----> remote-pod:%s:%s@node:%s) is not down", + localPod.Name, link.LocalIntf, localPod.SrcIp, + link.Uid, peerPod.Name, link.PeerIntf, peerPod.SrcIp) + } + + return nil +} diff --git a/third_party/meshnet/plugin/meshnet.go b/third_party/meshnet/plugin/meshnet.go new file mode 100644 index 000000000..713b84b8b --- /dev/null +++ b/third_party/meshnet/plugin/meshnet.go @@ -0,0 +1,576 @@ +package main + +import ( + "context" + "encoding/json" + "fmt" + "net" + "os" + "runtime" + + "github.com/containernetworking/cni/pkg/skel" + "github.com/containernetworking/cni/pkg/types" + "github.com/containernetworking/cni/pkg/types/current" + "github.com/containernetworking/cni/pkg/version" + "github.com/davecgh/go-spew/spew" + koko "github.com/redhat-nfvpe/koko/api" + log "github.com/sirupsen/logrus" + "github.com/vishvananda/netlink" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" + + mpb "github.com/openconfig/kne/third_party/meshnet/daemon/proto/meshnet/v1beta1" + "github.com/openconfig/kne/third_party/meshnet/utils/wireutil" +) + +const ( + vxlanBase = 5000 + localhost = "localhost" + macvlanMode = netlink.MACVLAN_MODE_BRIDGE +) + +var ( + localDaemon = localhost + ":" + fmt.Sprintf("%d", wireutil.GRPCDefaultPort) +) + +var interNodeLinkType = wireutil.INTER_NODE_LINK_VXLAN + +type netConf struct { + types.NetConf + Delegate map[string]interface{} `json:"delegate"` +} + +type k8sArgs struct { + types.CommonArgs + K8S_POD_NAME types.UnmarshallableString + K8S_POD_NAMESPACE types.UnmarshallableString + K8S_POD_INFRA_CONTAINER_ID types.UnmarshallableString +} + +// ------------------------------------------------------------------------------------------------- +func init() { + // this ensures that main runs only on main thread (thread group leader). + // since namespace ops (unshare, setns) are done for a single thread, we + // must ensure that the goroutine does not jump from OS thread to thread + runtime.LockOSThread() +} + +// ------------------------------------------------------------------------------------------------- +// loadConf loads information from cni.conf +func loadConf(bytes []byte) (*netConf, *current.Result, error) { + n := &netConf{} + if err := json.Unmarshal(bytes, n); err != nil { + return nil, nil, fmt.Errorf("failed to load netconf: %v", err) + } + + // Parse previous result. + if n.RawPrevResult == nil { + // return early if there was no previous result, which is allowed for DEL calls + return n, ¤t.Result{}, nil + } + + // Parse previous result. + var result *current.Result + var err error + if err = version.ParsePrevResult(&n.NetConf); err != nil { + return nil, nil, fmt.Errorf("could not parse prevResult: %v", err) + } + + result, err = current.NewResultFromResult(n.PrevResult) + if err != nil { + return nil, nil, fmt.Errorf("could not convert result to current version: %v", err) + } + return n, result, nil +} + +// getVxlanSource uses netlink to get the iface reliably given an IP address. +// when IP and Interface both are present then Interface is going to take preference +// nodeIntf is specified by the user and it's not auto discovered. The user has to be careful that the peer is reachable though this interface otherwise, VxLAN may not work. +// daemonset.yaml meshnet container env required for host_intf override +// +// env: +// - name: HOST_INTF +// value: breth2 +func getVxlanSource(nodeIP string, nodeIntf string) (string, string, error) { + if nodeIntf == "" && nodeIP == "" { + return "", "", fmt.Errorf("meshnetd provided no HOST_IP address: %s or HOST_INTF: %s", nodeIP, nodeIntf) + } + nIP := net.ParseIP(nodeIP) + if nIP == nil && nodeIntf == "" { + return "", "", fmt.Errorf("parsing failed for meshnetd provided no HOST_IP address: %s and node HOST_INTF: %s", nodeIP, nodeIntf) + } + ifaces, _ := net.Interfaces() + for _, i := range ifaces { + addrs, _ := i.Addrs() + for _, a := range addrs { + var ip net.IP + switch v := a.(type) { + case *net.IPNet: + ip = v.IP + case *net.IPAddr: + ip = v.IP + } + if nodeIntf != "" { + if i.Name == nodeIntf { + return ip.String(), nodeIntf, nil + } + } + if nIP != nil && nIP.Equal(ip) { + log.Infof("Found iface %s for address %s", i.Name, nodeIP) + return nodeIP, i.Name, nil + } + } + } + return "", "", fmt.Errorf("no iface found for address %s", nodeIP) +} + +// ------------------------------------------------------------------------------------------------- +// makeVeth creates koko.Veth from NetNS and LinkName +func makeVeth(netNS, linkName string, ip string) (*koko.VEth, error) { + log.Infof("Creating Veth struct with NetNS:%s and intfName: %s, IP:%s", netNS, linkName, ip) + veth := koko.VEth{} + veth.NsName = netNS + veth.LinkName = linkName + if ip != "" { + ipAddr, ipSubnet, err := net.ParseCIDR(ip) + if err != nil { + return nil, fmt.Errorf("failed to parse CIDR %s: %s", ip, err) + } + veth.IPAddr = []net.IPNet{{ + IP: ipAddr, + Mask: ipSubnet.Mask, + }} + } + return &veth, nil +} + +// ------------------------------------------------------------------------------------------------- +// Creates koko.Vxlan from ParentIF, destination IP and VNI +func makeVxlan(srcIntf string, peerIP string, idx int64) *koko.VxLan { + return &koko.VxLan{ + ParentIF: srcIntf, + IPAddr: net.ParseIP(peerIP), + ID: int(vxlanBase + idx), + } +} + +// ------------------------------------------------------------------------------------------------- +// Adds interfaces to a POD. the POD name and the POD Namespace is passed as arguments. +func cmdAdd(args *skel.CmdArgs) error { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + log.Info("Parsing cni .conf file") + n, result, err := loadConf(args.StdinData) + if err != nil { + return err + } + + log.Info("Parsing CNI_ARGS environment variable") + cniArgs := k8sArgs{} + if err := types.LoadArgs(args.Args, &cniArgs); err != nil { + return err + } + log.Infof("Processing ADD POD %s in namespace %s, container_id %s", string(cniArgs.K8S_POD_NAME), string(cniArgs.K8S_POD_NAMESPACE), string(cniArgs.K8S_POD_INFRA_CONTAINER_ID)) + defer log.Infof("DONE > Processing ADD POD %s in namespace %s, container_id %s", string(cniArgs.K8S_POD_NAME), string(cniArgs.K8S_POD_NAMESPACE), string(cniArgs.K8S_POD_INFRA_CONTAINER_ID)) + + log.Infof("Attempting to connect to local meshnet daemon") + conn, err := grpc.Dial(localDaemon, grpc.WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + log.Errorf("Failed to connect to local meshnetd on %s", localDaemon) + return err + } + defer conn.Close() + + meshnetClient := mpb.NewLocalClient(conn) + + log.Infof("Add[%s]: Retrieving local pod information from meshnet daemon", string(cniArgs.K8S_POD_NAME)) + localPod, err := meshnetClient.Get(ctx, &mpb.PodQuery{ + Name: string(cniArgs.K8S_POD_NAME), + KubeNs: string(cniArgs.K8S_POD_NAMESPACE), + }) + if err != nil { + log.Errorf("Add: Pod %s:%s was not a topology pod returning", string(cniArgs.K8S_POD_NAMESPACE), string(cniArgs.K8S_POD_NAME)) + return types.PrintResult(result, n.CNIVersion) + } + + // Finding the source IP and interface for VXLAN VTEP + srcIP, srcIntf, err := getVxlanSource(localPod.NodeIp, localPod.NodeIntf) + if err != nil { + return err + } + //log.Infof("VxLan route is via %s@%s", srcIP, srcIntf) + + // Marking pod as "alive" by setting its srcIP and NetNS and ContainerId + localPod.NetNs = args.Netns + localPod.SrcIp = srcIP + localPod.ContainerId = args.ContainerID + log.Infof("Add[%s]: Setting pod alive status on meshnet daemon", string(cniArgs.K8S_POD_NAME)) + ok, err := meshnetClient.SetAlive(ctx, localPod) + if err != nil || !ok.Response { + log.Errorf("Add[%s]: Failed to set pod alive status", string(cniArgs.K8S_POD_NAME)) + return err + } + + log.Infof("Add[%s]: Starting to traverse all links", string(cniArgs.K8S_POD_NAME)) + for _, link := range localPod.Links { // Iterate over each link of the local pod + // Build koko's veth struct for local intf + myVeth, err := makeVeth(args.Netns, link.LocalIntf, link.LocalIp) + if err != nil { + return err + } + + // First option is macvlan interface + if link.PeerPod == localhost { + log.Infof("Peer link is MacVlan") + macVlan := koko.MacVLan{ + ParentIF: link.PeerIntf, + Mode: macvlanMode, + } + if err = koko.MakeMacVLan(*myVeth, macVlan); err != nil { + log.Errorf("Failed to add macvlan interface") + return err + } + log.Infof("macvlan interface %s@%s has been added", link.LocalIntf, link.PeerIntf) + continue + } + + // Initialising peer pod's metadata + log.Infof("Add[%s]: retrieving peer pod %s information from meshnet daemon", string(cniArgs.K8S_POD_NAME), link.PeerPod) + peerPod, err := meshnetClient.Get(ctx, &mpb.PodQuery{ + Name: link.PeerPod, + KubeNs: string(cniArgs.K8S_POD_NAMESPACE), + }) + if err != nil { + log.Errorf("Add[%s]: Failed to retrieve peer pod %s:%s topology", string(cniArgs.K8S_POD_NAME), string(cniArgs.K8S_POD_NAMESPACE), link.PeerPod) + return err + } + + isAlive := peerPod.SrcIp != "" && peerPod.NetNs != "" + log.Infof("Add[%s]: Is peer pod %s alive?: %t", string(cniArgs.K8S_POD_NAME), peerPod.Name, isAlive) + + if isAlive { // This means we're coming up AFTER our peer so things are pretty easy + log.Infof("Add[%s]: Peer pod %s is alive", string(cniArgs.K8S_POD_NAME), peerPod.Name) + if peerPod.SrcIp == localPod.SrcIp { // This means we're on the same host + log.Infof("Add[%s]: %s and %s are on the same host", string(cniArgs.K8S_POD_NAME), localPod.Name, peerPod.Name) + // Creating koko's Veth struct for peer intf + peerVeth, err := makeVeth(peerPod.NetNs, link.PeerIntf, link.PeerIp) + if err != nil { + log.Errorf("Add[%s]: Failed to build koko Veth struct", string(cniArgs.K8S_POD_NAME)) + return err + } + + // Checking if interfaces already exist + iExist, _ := koko.IsExistLinkInNS(myVeth.NsName, myVeth.LinkName) + pExist, _ := koko.IsExistLinkInNS(peerVeth.NsName, peerVeth.LinkName) + + log.Infof("Add[%s]: Does the link already exist? Local:%t, Peer:%t", string(cniArgs.K8S_POD_NAME), iExist, pExist) + if iExist && pExist { // If both link exist, we don't need to do anything + log.Infof("Add[%s]: Both interfaces already exist in namespace", string(cniArgs.K8S_POD_NAME)) + } else if !iExist && pExist { // If only peer link exists, we need to destroy it first + log.Infof("Add[%s]: Only peer link exists, removing it first", string(cniArgs.K8S_POD_NAME)) + if err := peerVeth.RemoveVethLink(); err != nil { + log.Errorf("Add[%s]: Failed to remove a stale interface %s of my peer %s", string(cniArgs.K8S_POD_NAME), peerVeth.LinkName, link.PeerPod) + return err + } + log.Infof("Add[%s]: Adding the new veth link to both pods", string(cniArgs.K8S_POD_NAME)) + if err = koko.MakeVeth(*myVeth, *peerVeth); err != nil { + log.Errorf("Add[%s]: Error creating VEth pair after peer link remove: %s", string(cniArgs.K8S_POD_NAME), err) + return err + } + } else if iExist && !pExist { // If only local link exists, we need to destroy it first + log.Infof("Add[%s]: Only local link exists, removing it first", string(cniArgs.K8S_POD_NAME)) + if err := myVeth.RemoveVethLink(); err != nil { + log.Errorf("Add[%s]: Failed to remove a local stale VEth interface %s for pod %s", string(cniArgs.K8S_POD_NAME), myVeth.LinkName, localPod.Name) + return err + } + log.Infof("Add[%s]: Adding the new veth link to both pods", string(cniArgs.K8S_POD_NAME)) + if err = koko.MakeVeth(*myVeth, *peerVeth); err != nil { + log.Errorf("Add[%s]: Error creating VEth pair after local link remove: %s", string(cniArgs.K8S_POD_NAME), err) + return err + } + } else { // if neither link exists, we have two options + log.Infof("Add[%s]: Neither link exists. Checking if we've been skipped for interface %s (link id %d)", string(cniArgs.K8S_POD_NAME), link.LocalIntf, link.Uid) + isSkipped, err := meshnetClient.IsSkipped(ctx, &mpb.SkipQuery{ + Pod: localPod.Name, + Peer: peerPod.Name, + LinkId: link.Uid, + KubeNs: string(cniArgs.K8S_POD_NAMESPACE), + }) + if err != nil { + log.Errorf("Add[%s]: Failed to read skipped status from our peer", string(cniArgs.K8S_POD_NAME)) + return err + } + log.Infof("Add[%s]: Have we been skipped for %s (link id %d) by our peer %s? %t", string(cniArgs.K8S_POD_NAME), link.LocalIntf, link.Uid, peerPod.Name, isSkipped.Response) + + // Comparing names to determine higher priority + higherPrio := localPod.Name > peerPod.Name + log.Infof("Add[%s]: Do we have a higher priority? %t", string(cniArgs.K8S_POD_NAME), higherPrio) + + if isSkipped.Response || higherPrio { // If peer POD skipped us (booted before us) or we have a higher priority + log.Infof("Add[%s]: Peer POD has skipped us for %s (link id %d) or we have a higher priority", string(cniArgs.K8S_POD_NAME), link.LocalIntf, link.Uid) + if err = koko.MakeVeth(*myVeth, *peerVeth); err != nil { + log.Errorf("Add[%s]: Error when creating a new VEth pair with koko: %s", string(cniArgs.K8S_POD_NAME), err) + log.Infof("Add[%s]: MY VETH STRUCT: %+v", string(cniArgs.K8S_POD_NAME), spew.Sdump(myVeth)) + log.Infof("Add[%s]: PEER STRUCT: %+v", string(cniArgs.K8S_POD_NAME), spew.Sdump(peerVeth)) + return err + } + } else { // peerPod has higherPrio and hasn't skipped us + // In this case we do nothing, since the pod with a higher IP is supposed to connect veth pair + log.Infof("Add[%s]: Doing nothing, expecting peer pod %s to connect veth pair", string(cniArgs.K8S_POD_NAME), peerPod.Name) + continue + } + } + if err := wireutil.SetTxChecksumOff(myVeth.LinkName, myVeth.NsName); err != nil { + log.Errorf("Add[%s]: Error in setting tx checksum-off on interface %s, ns %s, pod %s: %v", string(cniArgs.K8S_POD_NAME), myVeth.LinkName, myVeth.NsName, localPod.Name, err) + // not returning + } + if err := wireutil.SetTxChecksumOff(peerVeth.LinkName, peerVeth.NsName); err != nil { + log.Errorf("Add[%s]: Error in setting tx checksum-off on interface %s, ns %s, pod %s: %v", string(cniArgs.K8S_POD_NAME), peerVeth.LinkName, peerVeth.NsName, peerPod.Name, err) + // not returning + } + + } else { // This means we're on different hosts + log.Infof("Add[%s]: %s@%s and %s@%s are on different hosts", string(cniArgs.K8S_POD_NAME), localPod.Name, localPod.SrcIp, peerPod.Name, peerPod.SrcIp) + if interNodeLinkType == wireutil.INTER_NODE_LINK_GRPC { + err = CreatGRPCChan(link, localPod, peerPod, meshnetClient, &cniArgs, ctx) + if err != nil { + log.Errorf("Add[%s]: !! Failed to create grpc wire. err: %v", string(cniArgs.K8S_POD_NAME), err) + return err + } + continue + } + // Creating koko's Vxlan struct + vxlan := makeVxlan(srcIntf, peerPod.SrcIp, link.Uid) + // Checking if interface already exists + iExist, _ := koko.IsExistLinkInNS(myVeth.NsName, myVeth.LinkName) + if iExist { // If VXLAN intf exists, we need to remove it first + log.Infof("Add[%s]: VXLAN intf already exists, removing it first", string(cniArgs.K8S_POD_NAME)) + if err := myVeth.RemoveVethLink(); err != nil { + log.Infof("Add[%s], Failed to remove a local stale VXLAN interface %s for pod %s", string(cniArgs.K8S_POD_NAME), myVeth.LinkName, localPod.Name) + return err + } + } + if err = koko.MakeVxLan(*myVeth, *vxlan); err != nil { + log.Infof("Add[%s]: Error when creating a Vxlan interface with koko: %s", string(cniArgs.K8S_POD_NAME), err) + return err + } + + // Now we need to make an API call to update the remote VTEP to point to us + payload := &mpb.RemotePod{ + NetNs: peerPod.NetNs, + IntfName: link.PeerIntf, + IntfIp: link.PeerIp, + PeerVtep: localPod.SrcIp, + Vni: link.Uid + vxlanBase, + KubeNs: string(cniArgs.K8S_POD_NAMESPACE), + NodeIntf: srcIntf, + } + + url := fmt.Sprintf("%s:%d", peerPod.SrcIp, wireutil.GRPCDefaultPort) + log.Infof("Add[%s]: Trying to do a remote update on %s", string(cniArgs.K8S_POD_NAME), url) + + remote, err := grpc.Dial(url, grpc.WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + log.Infof("Add[%s]: Failed to dial remote gRPC url %s", string(cniArgs.K8S_POD_NAME), url) + return err + } + remoteClient := mpb.NewRemoteClient(remote) + ok, err := remoteClient.Update(ctx, payload) + if err != nil || !ok.Response { + log.Infof("Add[%s]: Failed to do a remote update", string(cniArgs.K8S_POD_NAME)) + return err + } + log.Infof("Add[%s]: Successfully updated remote meshnet daemon", string(cniArgs.K8S_POD_NAME)) + } + } else { // This means that our peer pod hasn't come up yet + // Since there's no way of telling if our peer is going to be on this host or another, + // the only option is to do nothing, assuming that the peer POD will do all the plumbing when it comes up + log.Infof("Add[%s]: Peer pod %s@%s (link id %d) isn't alive yet, continuing", string(cniArgs.K8S_POD_NAME), peerPod.Name, link.PeerIntf, link.Uid) + // Here we need to set the skipped flag so that our peer can configure VEth interface when it comes up later + ok, err := meshnetClient.Skip(ctx, &mpb.SkipQuery{ + Pod: localPod.Name, + Peer: peerPod.Name, + LinkId: link.Uid, + KubeNs: string(cniArgs.K8S_POD_NAMESPACE), + }) + if err != nil || !ok.Response { + log.Errorf("Add[%s]: Failed to set a skipped flag on peer %s", string(cniArgs.K8S_POD_NAME), peerPod.Name) + return err + } + } + } + + return types.PrintResult(result, n.CNIVersion) +} + +// ------------------------------------------------------------------------------------------------- +// Deletes interfaces from a POD +func cmdDel(args *skel.CmdArgs) error { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + cniArgs := k8sArgs{} + if err := types.LoadArgs(args.Args, &cniArgs); err != nil { + return err + } + log.Infof("========> Processing DEL POD %s in namespace %s, container_id %s", string(cniArgs.K8S_POD_NAME), string(cniArgs.K8S_POD_NAMESPACE), cniArgs.K8S_POD_INFRA_CONTAINER_ID) + defer log.Infof("DONE ========> Processing DEL POD %s in namespace %s, container_id %s", string(cniArgs.K8S_POD_NAME), string(cniArgs.K8S_POD_NAMESPACE), cniArgs.K8S_POD_INFRA_CONTAINER_ID) + + log.WithFields(log.Fields{ + "args": fmt.Sprintf("%+v", args), + }).Info("DEL request arguments") + log.Info("Parsing cni .conf file") + n, result, err := loadConf(args.StdinData) + if err != nil { + return err + } + + conn, err := grpc.Dial(localDaemon, grpc.WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + log.Errorf("Failed to connect to local meshnetd on %s", localDaemon) + return err + } + defer conn.Close() + + meshnetClient := mpb.NewLocalClient(conn) + + log.Infof("Del: Retrieving pod's (%s@%s) metadata from meshnet daemon", string(cniArgs.K8S_POD_NAME), string(cniArgs.K8S_POD_NAMESPACE)) + localPod, err := meshnetClient.Get(ctx, &mpb.PodQuery{ + Name: string(cniArgs.K8S_POD_NAME), // getting details of the current pod. + KubeNs: string(cniArgs.K8S_POD_NAMESPACE), + }) + if err != nil { + log.Infof("Del: Pod %s:%s is not in topology returning. err:%v", string(cniArgs.K8S_POD_NAMESPACE), string(cniArgs.K8S_POD_NAME), err) + return types.PrintResult(result, n.CNIVersion) + } + // if the current containerID is not the topo's current containerID, exit here b/c this is a duplicated DEL call. + if localPod.ContainerId != args.ContainerID { + log.Infof("Del: Pod %s:%s is a duplicate; skipping", string(cniArgs.K8S_POD_NAMESPACE), string(cniArgs.K8S_POD_NAME)) + return nil + } + + /* Tell daemon to close the grpc tunnel for this pod netns (if any) */ + log.Infof("Del: Retrieving pod's metadata from meshnet daemon") + wireDef := mpb.WireDef{ + TopoNs: string(cniArgs.K8S_POD_NAMESPACE), + LocalPodName: string(cniArgs.K8S_POD_NAME), + } + + removResp, err := meshnetClient.RemGRPCWire(ctx, &wireDef) + if err != nil || !removResp.Response { + return fmt.Errorf("del: could not remove grpc wire: %v", err) + } + + localPodSrcIp := localPod.SrcIp + log.Infof("Del: Topology data still exists in CRs, cleaning up it's status") + // By setting srcIP and NetNS to "" we're marking this POD as dead + localPod.NetNs = "" + localPod.SrcIp = "" + localPod.ContainerId = "" + _, err = meshnetClient.SetAlive(ctx, localPod) + if err != nil { + return fmt.Errorf("del: could not set alive: %v", err) + } + + log.Infof("Del: Iterating over each link for clean-up") + for _, link := range localPod.Links { // Iterate over each link of the local pod + linkType := "veth" + // Initialising peer pod's metadata. Peer pod information is needed to determine if a link is of type GRPC or VxLAN. + // For GRPC link type there is some additional cleanup work needs to be performed. + log.Infof("Del: Pod %s is retrieving peer pod %s information from meshnet daemon", string(cniArgs.K8S_POD_NAME), link.PeerPod) + peerPod, _ := meshnetClient.Get(ctx, &mpb.PodQuery{ + Name: link.PeerPod, // getting peer pod detail. + KubeNs: string(cniArgs.K8S_POD_NAMESPACE), + }) + + if peerPod.SrcIp != localPodSrcIp { + // they are on different hosts + if interNodeLinkType == wireutil.INTER_NODE_LINK_GRPC { + // for this link bring the grpc wire down + err = MakeGRPCChanDown(link, localPod, peerPod, ctx) + if err != nil { + log.Errorf("Del: !! Failed to remove remote grpc wire. err: %v", err) + // no return + } + linkType = "grpc" + } else { + linkType = "vxlan" + } + } + // Creating koko's Veth struct for local intf + myVeth, err := makeVeth(args.Netns, link.LocalIntf, link.LocalIp) + if err != nil { + log.Infof("Del: Failed to construct koko Veth struct") + return err + } + + log.Infof("Del: Removing link %s", link.LocalIntf) + // API call to koko to remove local Veth link + if err = myVeth.RemoveVethLink(); err != nil { + // instead of failing, just log the error and move on + log.Errorf("Del: Error removing Veth link %s (%s) on pod %s: %v", link.LocalIntf, linkType, localPod.Name, err) + } + + // Setting reversed skipped flag so that this pod will try to connect veth pair on restart + log.Infof("Del: Setting skip-reverse flag on peer %s@%s(link id %d) for local interface %s", link.PeerPod, link.PeerIntf, link.Uid, link.LocalIntf) + ok, err := meshnetClient.SkipReverse(ctx, &mpb.SkipQuery{ + Pod: localPod.Name, + Peer: link.PeerPod, + LinkId: link.Uid, + KubeNs: string(cniArgs.K8S_POD_NAMESPACE), + }) + if err != nil || !ok.Response { + log.Errorf("Del: Failed to set skip reversed flag on our peer %s", link.PeerPod) + return err + } + } + return nil +} + +func SetInterNodeLinkType() { + // TODO: Find a more appropriate (if any) way to figure out intended link type + // As of today, daemon gets the intended link type from env INTER_NODE_LINK_TYPE + // which is set by deployment file. The daemon further propagates this to plugin + // via means of file on host (which is read below) containing the value GRPC or VXLAN + b, err := os.ReadFile("/etc/cni/net.d/meshnet-inter-node-link-type") + if err != nil { + log.Warningf("Could not read iner node link type: %v", err) + // use the default value + return + } + + interNodeLinkType = string(b) +} + +// ------------------------------------------------------------------------------------------------- +func main() { + fp, err := os.OpenFile("/var/log/meshnet-cni.log", os.O_APPEND|os.O_CREATE|os.O_RDWR, 0666) + if err == nil { + log.SetOutput(fp) + } + + SetInterNodeLinkType() + log.Infof("INTER_NODE_LINK_TYPE: %v", interNodeLinkType) + + retCode := 0 + e := skel.PluginMainWithError(cmdAdd, cmdGet, cmdDel, version.All, "CNI plugin meshnet v0.3.0") + if e != nil { + log.Errorf("failed to run meshnet cni: %v", e.Print()) + retCode = 1 + } + log.Infof("K8S invoked meshnet cni") + fp.Close() + os.Exit(retCode) +} + +func cmdGet(args *skel.CmdArgs) error { + cniArgs := k8sArgs{} + if err := types.LoadArgs(args.Args, &cniArgs); err != nil { + return err + } + log.Infof("cmdGet called: %+v", args) + return fmt.Errorf("not implemented") +} + +//------------------------------------------------------------------------------------------------- diff --git a/third_party/meshnet/tests/2node-sts.yml b/third_party/meshnet/tests/2node-sts.yml new file mode 100644 index 000000000..f28879339 --- /dev/null +++ b/third_party/meshnet/tests/2node-sts.yml @@ -0,0 +1,66 @@ +--- +apiVersion: networkop.co.uk/v1beta1 +kind: Topology +metadata: + name: r1-0 +spec: + links: + - uid: 1 + peer_pod: r2-0 + local_intf: eth1 + local_ip: 12.12.12.1/24 + peer_intf: eth1 + peer_ip: 12.12.12.2/24 +--- +apiVersion: networkop.co.uk/v1beta1 +kind: Topology +metadata: + name: r2-0 +spec: + links: + - uid: 1 + peer_pod: r1-0 + local_intf: eth1 + local_ip: 12.12.12.2/24 + peer_intf: eth1 + peer_ip: 12.12.12.1/24 +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: r1 +spec: + selector: + matchLabels: + topo: r1 + replicas: 1 + serviceName: r2 + template: + metadata: + labels: + topo: r1 + spec: + containers: + - image: alpine + name: pod + command: ["/bin/sh", "-c", "sleep 2000000000000"] +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: r2 +spec: + selector: + matchLabels: + topo: r2 + replicas: 1 + serviceName: r2 + template: + metadata: + labels: + topo: r2 + spec: + containers: + - image: alpine + name: pod + command: ["/bin/sh", "-c", "sleep 2000000000000"] diff --git a/third_party/meshnet/tests/2node.yml b/third_party/meshnet/tests/2node.yml new file mode 100644 index 000000000..dd16d2ff5 --- /dev/null +++ b/third_party/meshnet/tests/2node.yml @@ -0,0 +1,69 @@ +--- +apiVersion: v1 +kind: List +items: + - apiVersion: networkop.co.uk/v1beta1 + kind: Topology + metadata: + name: r1 + spec: + links: + - uid: 1 + peer_pod: r2 + local_intf: eth1 + local_ip: 12.12.12.1/24 + peer_intf: eth1 + peer_ip: 12.12.12.2/24 + - apiVersion: networkop.co.uk/v1beta1 + kind: Topology + metadata: + name: r2 + spec: + links: + - uid: 1 + peer_pod: r1 + local_intf: eth1 + local_ip: 12.12.12.2/24 + peer_intf: eth1 + peer_ip: 12.12.12.1/24 + - apiVersion: networkop.co.uk/v1beta1 + kind: Topology + metadata: + name: r3 + spec: + links: + - uid: 2 + peer_pod: r4 + local_intf: eth1 + peer_intf: eth1 + - apiVersion: v1 + kind: Pod + metadata: + name: r1 + spec: + containers: + - image: alpine + name: pod + command: ["/bin/sh", "-c", "sleep 2000000000000"] + - apiVersion: v1 + kind: Pod + metadata: + name: r2 + labels: + test: 2node + spec: + containers: + - image: alpine + name: pod + command: ["/bin/sh", "-c", "sleep 2000000000000"] + - apiVersion: v1 + kind: Pod + metadata: + name: r4 + labels: + test: 2node + spec: + containers: + - image: alpine + name: pod + command: ["/bin/sh", "-c", "sleep 2000000000000"] diff --git a/third_party/meshnet/tests/3node-mlink.yml b/third_party/meshnet/tests/3node-mlink.yml new file mode 100644 index 000000000..f0c3474b0 --- /dev/null +++ b/third_party/meshnet/tests/3node-mlink.yml @@ -0,0 +1,210 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: "mlink" +--- +apiVersion: v1 +kind: List +items: + - apiVersion: networkop.co.uk/v1beta1 + kind: Topology + metadata: + name: r1 + namespace: "mlink" + spec: + links: + - uid: 1 + peer_pod: r2 + local_intf: eth1 + peer_intf: eth1 + local_ip: 10.10.10.1/24 + peer_ip: 10.10.10.2/24 + - uid: 2 + peer_pod: r2 + local_intf: eth2 + peer_intf: eth2 + local_ip: 11.11.11.1/24 + peer_ip: 11.11.11.2/24 + - uid: 3 + peer_pod: r2 + local_intf: eth3 + peer_intf: eth3 + local_ip: 12.12.12.1/24 + peer_ip: 12.12.12.2/24 + - uid: 4 + peer_pod: r2 + local_intf: eth4 + peer_intf: eth4 + local_ip: 13.13.13.1/24 + peer_ip: 13.13.13.2/24 + - uid: 5 + peer_pod: r3 + local_intf: eth5 + peer_intf: eth1 + local_ip: 20.20.20.1/24 + peer_ip: 20.20.20.2/24 + - uid: 6 + peer_pod: r3 + local_intf: eth6 + peer_intf: eth2 + local_ip: 21.21.21.1/24 + peer_ip: 21.21.21.2/24 + - uid: 7 + peer_pod: r3 + local_intf: eth7 + peer_intf: eth3 + local_ip: 22.22.22.1/24 + peer_ip: 22.22.22.2/24 + - uid: 8 + peer_pod: r3 + local_intf: eth8 + peer_intf: eth4 + local_ip: 23.23.23.1/24 + peer_ip: 23.23.23.2/24 + - apiVersion: networkop.co.uk/v1beta1 + kind: Topology + metadata: + name: r2 + namespace: "mlink" + spec: + links: + - uid: 1 + peer_pod: r1 + local_intf: eth1 + peer_intf: eth1 + local_ip: 10.10.10.2/24 + peer_ip: 10.10.10.1/24 + - uid: 2 + peer_pod: r1 + local_intf: eth2 + peer_intf: eth2 + local_ip: 11.11.11.2/24 + peer_ip: 11.11.11.1/24 + - uid: 3 + peer_pod: r1 + local_intf: eth3 + peer_intf: eth3 + local_ip: 12.12.12.2/24 + peer_ip: 12.12.12.1/24 + - uid: 4 + peer_pod: r1 + local_intf: eth4 + peer_intf: eth4 + local_ip: 13.13.13.2/24 + peer_ip: 13.13.13.1/24 + - uid: 9 + peer_pod: r3 + local_intf: eth5 + peer_intf: eth5 + local_ip: 30.30.30.1/24 + peer_ip: 30.30.30.2/24 + - uid: 10 + peer_pod: r3 + local_intf: eth6 + peer_intf: eth6 + local_ip: 31.31.31.1/24 + peer_ip: 31.31.31.2/24 + - uid: 11 + peer_pod: r3 + local_intf: eth7 + peer_intf: eth7 + local_ip: 32.32.32.1/24 + peer_ip: 32.32.32.2/24 + - uid: 12 + peer_pod: r3 + local_intf: eth8 + peer_intf: eth8 + local_ip: 33.33.33.1/24 + peer_ip: 33.33.33.2/24 + - apiVersion: networkop.co.uk/v1beta1 + kind: Topology + metadata: + name: r3 + namespace: "mlink" + spec: + links: + - uid: 5 + peer_pod: r1 + local_intf: eth1 + peer_intf: eth5 + local_ip: 20.20.20.2/24 + peer_ip: 20.20.20.1/24 + - uid: 6 + peer_pod: r1 + local_intf: eth2 + peer_intf: eth6 + local_ip: 21.21.21.2/24 + peer_ip: 21.21.21.1/24 + - uid: 7 + peer_pod: r1 + local_intf: eth3 + peer_intf: eth7 + local_ip: 22.22.22.2/24 + peer_ip: 22.22.22.1/24 + - uid: 8 + peer_pod: r1 + local_intf: eth4 + peer_intf: eth8 + local_ip: 23.23.23.2/24 + peer_ip: 23.23.23.1/24 + - uid: 9 + peer_pod: r2 + local_intf: eth5 + peer_intf: eth5 + local_ip: 30.30.30.2/24 + peer_ip: 30.30.30.1/24 + - uid: 10 + peer_pod: r2 + local_intf: eth6 + peer_intf: eth6 + local_ip: 31.31.31.2/24 + peer_ip: 31.31.31.1/24 + - uid: 11 + peer_pod: r2 + local_intf: eth7 + peer_intf: eth7 + local_ip: 32.32.32.2/24 + peer_ip: 32.32.32.1/24 + - uid: 12 + peer_pod: r2 + local_intf: eth8 + peer_intf: eth8 + local_ip: 33.33.33.2/24 + peer_ip: 33.33.33.1/24 + - apiVersion: v1 + kind: Pod + metadata: + name: r1 + namespace: "mlink" + labels: + test: 3node-mlink + spec: + containers: + - image: alpine + name: pod + command: ["/bin/sh", "-c", "sleep 2000000000000"] + - apiVersion: v1 + kind: Pod + metadata: + name: r2 + namespace: "mlink" + labels: + test: 3node-mlink + spec: + containers: + - image: alpine + name: pod + command: ["/bin/sh", "-c", "sleep 2000000000000"] + - apiVersion: v1 + kind: Pod + metadata: + name: r3 + namespace: "mlink" + labels: + test: 3node-mlink + spec: + containers: + - image: alpine + name: pod + command: ["/bin/sh", "-c", "sleep 2000000000000"] diff --git a/third_party/meshnet/tests/3node.yml b/third_party/meshnet/tests/3node.yml new file mode 100644 index 000000000..d49d746db --- /dev/null +++ b/third_party/meshnet/tests/3node.yml @@ -0,0 +1,91 @@ +--- +apiVersion: v1 +kind: List +items: + - apiVersion: networkop.co.uk/v1beta1 + kind: Topology + metadata: + name: r1 + spec: + links: + - uid: 1 + peer_pod: r2 + local_intf: eth1 + peer_intf: eth1 + local_ip: 12.12.12.1/24 + peer_ip: 12.12.12.2/24 + - uid: 2 + peer_pod: r3 + local_intf: eth2 + peer_intf: eth1 + local_ip: 13.13.13.1/24 + peer_ip: 13.13.13.3/24 + - apiVersion: networkop.co.uk/v1beta1 + kind: Topology + metadata: + name: r2 + spec: + links: + - uid: 1 + peer_pod: r1 + local_intf: eth1 + peer_intf: eth1 + local_ip: 12.12.12.2/24 + peer_ip: 12.12.12.1/24 + - uid: 3 + peer_pod: r3 + local_intf: eth2 + peer_intf: eth2 + local_ip: 23.23.23.2/24 + peer_ip: 23.23.23.3/24 + - apiVersion: networkop.co.uk/v1beta1 + kind: Topology + metadata: + name: r3 + spec: + links: + - uid: 2 + peer_pod: r1 + local_intf: eth1 + peer_intf: eth2 + local_ip: 13.13.13.3/24 + peer_ip: 13.13.13.1/24 + - uid: 3 + peer_pod: r2 + local_intf: eth2 + peer_intf: eth2 + local_ip: 23.23.23.3/24 + peer_ip: 23.23.23.2/24 + - apiVersion: v1 + kind: Pod + metadata: + name: r1 + labels: + test: 3node + spec: + containers: + - image: alpine + name: pod + command: ["/bin/sh", "-c", "sleep 2000000000000"] + - apiVersion: v1 + kind: Pod + metadata: + name: r2 + labels: + test: 3node + spec: + containers: + - image: alpine + name: pod + command: ["/bin/sh", "-c", "sleep 2000000000000"] + - apiVersion: v1 + kind: Pod + metadata: + name: r3 + labels: + test: 3node + spec: + containers: + - image: alpine + name: pod + command: ["/bin/sh", "-c", "sleep 2000000000000"] diff --git a/third_party/meshnet/tests/5node.yml b/third_party/meshnet/tests/5node.yml new file mode 100644 index 000000000..7da3deda4 --- /dev/null +++ b/third_party/meshnet/tests/5node.yml @@ -0,0 +1,175 @@ +--- +apiVersion: v1 +kind: List +items: + - apiVersion: networkop.co.uk/v1beta1 + kind: Topology + metadata: + name: r1 + spec: + links: + - uid: 1 + peer_pod: r2 + local_intf: eth1 + peer_intf: eth1 + local_ip: 12.12.12.1/24 + peer_ip: 12.12.12.2/24 + - uid: 2 + peer_pod: r3 + local_intf: eth2 + peer_intf: eth2 + local_ip: 13.13.13.1/24 + peer_ip: 13.13.13.3/24 + - uid: 3 + peer_pod: r5 + local_intf: eth3 + peer_intf: eth1 + local_ip: 15.15.15.1/24 + peer_ip: 15.15.15.5/24 + - apiVersion: networkop.co.uk/v1beta1 + kind: Topology + metadata: + name: r2 + spec: + links: + - uid: 1 + peer_pod: r1 + local_intf: eth1 + peer_intf: eth1 + local_ip: 12.12.12.2/24 + peer_ip: 12.12.12.1/24 + - uid: 4 + peer_pod: r4 + local_intf: eth2 + peer_intf: eth1 + local_ip: 24.24.24.2/24 + peer_ip: 24.24.24.4/24 + - uid: 5 + peer_pod: r5 + local_intf: eth3 + peer_intf: eth2 + local_ip: 25.25.25.2/24 + peer_ip: 25.25.25.5/24 + - apiVersion: networkop.co.uk/v1beta1 + kind: Topology + metadata: + name: r3 + spec: + links: + - uid: 2 + peer_pod: r1 + local_intf: eth2 + peer_intf: eth2 + local_ip: 13.13.13.3/24 + peer_ip: 13.13.13.1/24 + - uid: 6 + peer_pod: r4 + local_intf: eth1 + peer_intf: eth2 + local_ip: 34.34.34.3/24 + peer_ip: 34.34.34.4/24 + - uid: 8 + peer_pod: r5 + local_intf: eth3 + peer_intf: eth3 + local_ip: 35.35.35.3/24 + peer_ip: 35.35.35.5/24 + - apiVersion: networkop.co.uk/v1beta1 + kind: Topology + metadata: + name: r4 + spec: + links: + - uid: 4 + peer_pod: r2 + local_intf: eth1 + peer_intf: eth2 + local_ip: 24.24.24.4/24 + peer_ip: 24.24.24.2/24 + - uid: 6 + peer_pod: r3 + local_intf: eth2 + peer_intf: eth1 + local_ip: 34.34.34.4/24 + peer_ip: 34.34.34.3/24 + - uid: 7 + peer_pod: r5 + local_intf: eth3 + peer_intf: eth4 + local_ip: 45.45.45.4/24 + peer_ip: 45.45.45.5/24 + - apiVersion: networkop.co.uk/v1beta1 + kind: Topology + metadata: + name: r5 + spec: + links: + - uid: 3 + peer_pod: r1 + local_intf: eth1 + peer_intf: eth3 + local_ip: 15.15.15.5/24 + peer_ip: 15.15.15.1/24 + - uid: 5 + peer_pod: r2 + local_intf: eth2 + peer_intf: eth3 + local_ip: 25.25.25.5/24 + peer_ip: 25.25.25.2/24 + - uid: 7 + peer_pod: r4 + local_intf: eth4 + peer_intf: eth3 + local_ip: 45.45.45.5/24 + peer_ip: 45.45.45.4/24 + - uid: 8 + peer_pod: r3 + local_intf: eth3 + peer_intf: eth3 + local_ip: 35.35.35.5/24 + peer_ip: 35.35.35.3/24 + - apiVersion: v1 + kind: Pod + metadata: + name: r1 + spec: + containers: + - image: alpine + name: pod + command: ["/bin/sh", "-c", "sleep 2000000000000"] + - apiVersion: v1 + kind: Pod + metadata: + name: r2 + spec: + containers: + - image: alpine + name: pod + command: ["/bin/sh", "-c", "sleep 2000000000000"] + - apiVersion: v1 + kind: Pod + metadata: + name: r3 + spec: + containers: + - image: alpine + name: pod + command: ["/bin/sh", "-c", "sleep 2000000000000"] + - apiVersion: v1 + kind: Pod + metadata: + name: r4 + spec: + containers: + - image: alpine + name: pod + command: ["/bin/sh", "-c", "sleep 2000000000000"] + - apiVersion: v1 + kind: Pod + metadata: + name: r5 + spec: + containers: + - image: alpine + name: pod + command: ["/bin/sh", "-c", "sleep 2000000000000"] diff --git a/third_party/meshnet/tests/macvlan.yml b/third_party/meshnet/tests/macvlan.yml new file mode 100644 index 000000000..c56e25009 --- /dev/null +++ b/third_party/meshnet/tests/macvlan.yml @@ -0,0 +1,60 @@ +--- +apiVersion: v1 +kind: List +items: + - apiVersion: networkop.co.uk/v1beta1 + kind: Topology + metadata: + name: r1 + spec: + links: + - uid: 1 + peer_pod: r2 + local_intf: eth1 + local_ip: 12.12.12.1/24 + peer_intf: eth1 + peer_ip: 12.12.12.2/24 + - apiVersion: networkop.co.uk/v1beta1 + kind: Topology + metadata: + name: r2 + spec: + links: + - uid: 1 + peer_pod: r1 + local_intf: eth1 + local_ip: 12.12.12.2/24 + peer_intf: eth1 + peer_ip: 12.12.12.1/24 + - uid: 2 + peer_pod: localhost + local_intf: eth2 + local_ip: 172.17.0.199/16 + peer_intf: eth0 + - apiVersion: v1 + kind: Pod + metadata: + name: r1 + spec: + containers: + - image: alpine + name: pod + command: ["/bin/sh", "-c", "sleep 2000000000000"] + - apiVersion: v1 + kind: Pod + metadata: + name: r2 + spec: + containers: + - image: alpine + name: pod + command: ["/bin/sh", "-c", "sleep 2000000000000"] + - apiVersion: v1 + kind: Pod + metadata: + name: r4 + spec: + containers: + - image: alpine + name: pod + command: ["/bin/sh", "-c", "sleep 2000000000000"] diff --git a/third_party/meshnet/utils/wireutil/wire-util.go b/third_party/meshnet/utils/wireutil/wire-util.go new file mode 100644 index 000000000..cfd11144b --- /dev/null +++ b/third_party/meshnet/utils/wireutil/wire-util.go @@ -0,0 +1,51 @@ +package wireutil + +import ( + "fmt" + + "github.com/containernetworking/plugins/pkg/ns" + "github.com/safchain/ethtool" +) + +const ( + GRPCDefaultPort = 51111 + INTER_NODE_LINK_VXLAN = "VXLAN" + INTER_NODE_LINK_GRPC = "GRPC" +) + +func SetTxChecksumOff(intfName, nsName string) error { + var vethNs ns.NetNS + var err error + + if vethNs, err = ns.GetNS(nsName); err != nil { + return fmt.Errorf("could not get required ns %s: %v", nsName, err) + } + defer vethNs.Close() + + err = vethNs.Do(func(_ ns.NetNS) error { + etlHndl, err := ethtool.NewEthtool() + if err != nil { + return fmt.Errorf("could not open ethtool handle: %v", err) + } + defer etlHndl.Close() + + etlConf := map[string]bool{ + "tx-checksum-ipv4": false, + "tx-checksum-ipv6": false, + "tx-checksum-ip-generic": false, + "tx-tcp-segmentation": false, + "tx-tcp6-segmentation": false, + "tx-checksum-fcoe-crc": false, + "tx-checksum-sctp": false, + "tx-tcp-ecn-segmentation": false, + "tx-tcp-mangleid-segmentation": false, + } + + err = etlHndl.Change(intfName, etlConf) + if err != nil { + return fmt.Errorf("could not set tx checksum on interface %s, ns %s: %v", intfName, nsName, err) + } + return nil + }) + return err +} From ccbe2588b38c0bcbc6c32e6af40fea6d40f862a6 Mon Sep 17 00:00:00 2001 From: Brandon Stoll Date: Mon, 29 Jun 2026 22:54:22 +0000 Subject: [PATCH 2/2] Fix golangci-lint violations and format YAML/Go files This change aggregates several fixes to address golangci-lint violations, format code files, and update deprecated APIs. Key changes: - Refactored Go code to address golangci-lint violations and update deprecated APIs: - Replaced deprecated `k8s.io/utils/pointer` with `k8s.io/utils/ptr`. - Replaced deprecated `grpc.DialContext` with `grpc.NewClient`. - Handled or logged errors from `CloseSend`, `ReadFrom`, `BindPFlags`, etc. - Standardized error message capitalization (removed leading capitals and ending punctuation). - Simplified boolean expressions and struct field accesses. - Addressed various linter-raised spelling errors and style comments (e.g. in `topo/node/sonic` and other nodes). - Renamed internal fields for better readability (e.g., `wantInitCtr` to `wantInitContainer` and `wantSonicCtr` to `wantSonicContainer` in `sonic.go`). - Ran `go fmt` across all Go source files. - Formatted YAML files and manifests according to linter configurations (added `---` document start markers, fixed spacing/indentation in cloudbuild config, deployments, and various topological templates). - Updated configuration files for Super-Linter: - Added codespell configuration file `.github/linters/.codespellrc`. - Adjusted `.golangci.yml` linter settings. - Added rules to `.github/linters/.checkov.yaml`, `.github/linters/.gitleaks.toml`, etc. - Added dependency cooldown periods in `.github/dependabot.yml`. - Ran Prettier on all Markdown files in the repository to ensure consistent styling. --- .github/dependabot.yml | 3 + .github/linters/.checkov.yaml | 1 + .github/linters/.codespellrc | 1 + .github/linters/.gitleaks.toml | 1 + .github/linters/.golangci.yml | 50 +- .github/linters/.markdown-lint.yml | 4 +- .github/linters/.protolintrc.yml | 1 + .github/linters/trivy.yaml | 1 + README.md | 103 +- api/metallb/clientset/v1beta1/client.go | 10 +- cloudbuild/postsubmit.yaml | 55 +- cloudbuild/presubmit.yaml | 3 +- cloudbuild/vendors/deployment.yaml | 1 + cmd/deploy/deploy.go | 4 +- cmd/deploy/testdata/kind-deployment.yaml | 1 + cmd/root.go | 4 +- cmd/topology/topology_test.go | 37 +- deploy/deploy.go | 7 +- deploy/kne/external-multinode-cdnos.yaml | 1 + deploy/kne/external-multinode.yaml | 1 + deploy/kne/external.yaml | 1 + deploy/kne/kind-bridge-cdnos.yaml | 3 +- deploy/kne/kind-bridge.yaml | 1 + deploy/kne/kubeadm.yaml | 1 + deploy/ubuntu/serviceaccount.yaml | 33 +- deploy/ubuntu/ubuntu.yaml | 69 +- docs/README.md | 34 +- docs/create_topology.md | 154 +- docs/interact_topology.md | 48 +- docs/kubernetes_reference.md | 6 +- docs/multinode.md | 3 +- docs/setup.md | 10 +- docs/vendor.md | 83 +- events/events.go | 6 +- events/status.go | 4 +- events/status_test.go | 4 +- examples/cisco/8000e/README.md | 97 +- examples/gobgp/r1.yaml | 13 +- examples/gobgp/r2.yaml | 13 +- examples/juniper/cptx-ixia/README.md | 64 +- exec/fake/fake_test.go | 10 +- exec/run/run_test.go | 8 +- flags/flags.go | 4 +- load/deploy.go | 10 +- load/testdata/deploy/kne/kind-bridge.yaml | 1 + load/testdata/kind/kind-no-cni.yaml | 1 + .../controllers/ceoslab/manifest.yaml | 705 ++-- .../controllers/lemming/manifest.yaml | 800 ++-- .../controllers/srlinux/manifest.yaml | 543 +-- .../manifests/keysight/ixiatg-configmap.yaml | 1 + .../manifests/keysight/ixiatg-operator.yaml | 527 +-- load/testdata/manifests/kind/kind-bridge.yaml | 125 +- .../manifests/meshnet/grpc/manifest.yaml | 217 +- .../manifests/meshnet/vxlan/manifest.yaml | 217 +- load/testdata/manifests/metallb/manifest.yaml | 2923 ++++++++------- logshim/logshim_test.go | 10 +- manifests/base/kustomization.yaml | 8 +- manifests/base/namespace.yaml | 3 +- manifests/base/neo4j.yaml | 82 +- manifests/base/serviceaccount.yaml | 1 + manifests/controllers/cdnos/manifest.yaml | 848 +++-- manifests/controllers/ceoslab/manifest.yaml | 705 ++-- manifests/controllers/lemming/manifest.yaml | 836 +++-- manifests/controllers/srlinux/manifest.yaml | 634 ++-- manifests/flannel/manifest.yaml | 216 +- manifests/keysight/ixiatg-configmap.yaml | 1 + manifests/keysight/ixiatg-operator.yaml | 527 +-- manifests/kind/bridge.yaml | 125 +- manifests/kind/config.yaml | 11 +- manifests/kind/kind-bridge.yaml | 125 +- .../kube/credential-provider-config.yaml | 25 +- manifests/meshnet/grpc/manifest.yaml | 469 +-- manifests/meshnet/vxlan/manifest.yaml | 469 +-- manifests/metallb/manifest.yaml | 3324 +++++++++-------- metrics/metrics_test.go | 33 +- pods/pods.go | 16 +- pods/status.go | 4 +- pods/status_test.go | 2 +- third_party/meshnet/README.md | 156 +- .../proto/meshnet/v1beta1/meshnet.proto | 38 +- third_party/meshnet/docs/implementation.md | 81 +- topo/node/alpine/alpine.go | 14 +- topo/node/alpine/alpine_test.go | 12 +- topo/node/arista/arista.go | 8 +- topo/node/arista/arista_test.go | 12 +- topo/node/cisco/cisco.go | 37 +- topo/node/cisco/cisco_test.go | 15 +- topo/node/drivenets/drivenets.go | 6 +- topo/node/forward/forward.go | 10 +- topo/node/inclusterproxy/README.md | 59 +- topo/node/juniper/juniper.go | 16 +- topo/node/node.go | 31 +- topo/node/node_test.go | 16 +- topo/node/nokia/nokia.go | 4 +- topo/node/openconfig/openconfig.go | 10 +- topo/node/sonic/sonic.go | 16 +- topo/node/sonic/sonic_test.go | 62 +- topo/testdata/invalid_topo.yaml | 1 + topo/testdata/valid_topo.yaml | 1 + topo/topo.go | 23 +- topo/topo_test.go | 10 +- x/webhook/README.md | 26 +- .../addcontainer/addcontainer_test.go | 1 - x/webhook/main.go | 4 +- x/webhook/manifests/deploy.yaml | 3 +- x/webhook/manifests/mutating.config.yaml | 1 + x/webhook/manifests/namespace.yaml | 1 + x/webhook/manifests/tls.secret.yaml | 1 + x/wire/file/client/main.go | 6 +- x/wire/forward/main.go | 6 +- x/wire/intf/client/main.go | 6 +- x/wire/wire.go | 6 +- 112 files changed, 8390 insertions(+), 7811 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 90e05c40d..0f95de250 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -3,9 +3,12 @@ # Please see the documentation for all configuration options: # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates +--- version: 2 updates: - package-ecosystem: "github-actions" # See documentation for possible values directory: "/" # Location of package manifests schedule: interval: "weekly" + cooldown: + default-days: 7 diff --git a/.github/linters/.checkov.yaml b/.github/linters/.checkov.yaml index 937b2a0b6..55e40987c 100644 --- a/.github/linters/.checkov.yaml +++ b/.github/linters/.checkov.yaml @@ -1,3 +1,4 @@ +--- skip-framework: - cloudformation skip-path: diff --git a/.github/linters/.codespellrc b/.github/linters/.codespellrc index 577b22986..cf0bf4c2c 100644 --- a/.github/linters/.codespellrc +++ b/.github/linters/.codespellrc @@ -1,2 +1,3 @@ [codespell] skip = *.pdf,*.png,*.jpg,*.gif,*.ico,go.sum +ignore-words-list = notin,NotIn diff --git a/.github/linters/.gitleaks.toml b/.github/linters/.gitleaks.toml index 9d0b308f0..f820c075c 100644 --- a/.github/linters/.gitleaks.toml +++ b/.github/linters/.gitleaks.toml @@ -209,6 +209,7 @@ title = "gitleaks config" paths = [ '''^\.?gitleaks.toml$''', '''topo/node/srl/generate_certificate_success$''', # exclude dummy test file with random cert + '''x/webhook/manifests/tls\.secret\.yaml$''', '''(.*?)super-linter.log$''', # exclude linter logs which might contain past errored runs with keys/certs '''(.*?)(png|jpg|gif|doc|docx|pdf|bin|xls|pyc|zip)$''', '''(go.mod|go.sum)$''' diff --git a/.github/linters/.golangci.yml b/.github/linters/.golangci.yml index 5e10a88a4..f0e73e113 100644 --- a/.github/linters/.golangci.yml +++ b/.github/linters/.golangci.yml @@ -1,4 +1,48 @@ +--- version: "2" - -issues: - new-from-rev: origin/main +linters: + enable: + - gocritic + - gosec + - revive + - unconvert + - unparam + - wastedassign + - whitespace + settings: + errcheck: + check-blank: true + gocritic: + disabled-checks: + - singleCaseSwitch + - appendAssign + revive: + severity: warning + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + rules: + - linters: + - dupl + - goconst + - gosec + path: _test\.go + paths: + - third_party$ + - builtin$ + - examples$ +formatters: + enable: + - gofmt + - goimports + exclusions: + generated: lax + paths: + - third_party$ + - builtin$ + - examples$ + - \.pb\.go diff --git a/.github/linters/.markdown-lint.yml b/.github/linters/.markdown-lint.yml index 64f68b737..f9b628240 100644 --- a/.github/linters/.markdown-lint.yml +++ b/.github/linters/.markdown-lint.yml @@ -1,4 +1,6 @@ +--- default: true +extends: markdownlint/style/prettier MD001: false # header levels @@ -6,4 +8,4 @@ MD013: false # line length MD028: false # blank lines between indents -MD033: false # inline HTML \ No newline at end of file +MD033: false # inline HTML diff --git a/.github/linters/.protolintrc.yml b/.github/linters/.protolintrc.yml index 7bb2bd1ea..057e733b6 100644 --- a/.github/linters/.protolintrc.yml +++ b/.github/linters/.protolintrc.yml @@ -1,3 +1,4 @@ +--- lint: rules: remove: # TODO: fix proto files and remove these. diff --git a/.github/linters/trivy.yaml b/.github/linters/trivy.yaml index fc175b68b..3aae11706 100644 --- a/.github/linters/trivy.yaml +++ b/.github/linters/trivy.yaml @@ -1,3 +1,4 @@ +--- scan: skip-dirs: - manifests diff --git a/README.md b/README.md index 9cd435b50..8819cb67b 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,6 @@ [![Go Report Card](https://goreportcard.com/badge/github.com/openconfig/kne)](https://goreportcard.com/report/github.com/openconfig/kne) [![GoDoc](https://godoc.org/istio.io/istio?status.svg)](https://pkg.go.dev/github.com/openconfig/kne) [![License: BSD](https://img.shields.io/badge/license-Apache%202-blue)](https://opensource.org/licenses/Apache-2.0) -[![GitHub Super-Linter](https://github.com/openconfig/kne/workflows/Lint%20Code%20Base/badge.svg)](https://github.com/marketplace/actions/super-linter) [![Coverage Status](https://coveralls.io/repos/github/openconfig/kne/badge.svg?branch=main)](https://coveralls.io/github/openconfig/kne?branch=main) This is not an officially supported Google product. @@ -12,42 +11,44 @@ This is not an officially supported Google product. ## Goal For network emulation, there are many approaches using VM's for emulation of a -hardware router. Arista, Cisco, Juniper, Drivenets, and Nokia have multiple implementations -of their network operating system and various generations of hardware emulation. -These systems are very good for most validation of vendor control plane -implementations and data plane for limited certifications. The idea of this -project is to provide a standard "interface" so that vendors can produce a -standard container implementation which can be used to build complex topologies. - -* Have standard lifecycle management infrastructure for allowing multiple vendor - device emulations to be present in a single "topology" -* Allow for control plane access via standard k8s networking -* Provide a common networking interface for the forwarding plane between network - pods. - * Data plane wires between pods - * Control plane wires between topology manager -* Define service implementation for allowing interaction with the topology +hardware router. Arista, Cisco, Juniper, Drivenets, and Nokia have multiple +implementations of their network operating system and various generations of +hardware emulation. These systems are very good for most validation of vendor +control plane implementations and data plane for limited certifications. The +idea of this project is to provide a standard "interface" so that vendors can +produce a standard container implementation which can be used to build complex +topologies. + +- Have standard lifecycle management infrastructure for allowing multiple + vendor device emulations to be present in a single "topology" +- Allow for control plane access via standard k8s networking +- Provide a common networking interface for the forwarding plane between + network pods. + - Data plane wires between pods + - Control plane wires between topology manager +- Define service implementation for allowing interaction with the topology manager service. - * Topology manager is the public API for allowing external users to manipulate - the link state in the topology. - * The topology manager will run as a service in k8s environment. - * It will provide a gRPC interface for tests to interact with - * It will listen to CRDs published via the network device pods for discovery -* Data plane connections for connectivity between pods must be a public + - Topology manager is the public API for allowing external users to + manipulate the link state in the topology. + - The topology manager will run as a service in k8s environment. + - It will provide a gRPC interface for tests to interact with + - It will listen to CRDs published via the network device pods for + discovery +- Data plane connections for connectivity between pods must be a public transport mechanism - * This can't be implemented as just exposing "x eth devices on the pod" - because Linux doesn't understand the associated control messages which are - needed to make this work like a wire. - * Transceiver state, optical characteristics, wire state, packet filtering / - shaping / drops - * LACP or other port aggregation protocols or APS cannot be simulated + - This can't be implemented as just exposing "x eth devices on the pod" + because Linux doesn't understand the associated control messages which + are needed to make this work like a wire. + - Transceiver state, optical characteristics, wire state, packet filtering + / shaping / drops + - LACP or other port aggregation protocols or APS cannot be simulated correctly - * The topology manager will start a topology agent on each host for the pod to - directly interact with. - * The topology agent will provide the connectivity between nodes -* Define how pods boot an initial configuration - * Ideally, this method would allow for dynamic -* Define how pods express services for use in-cluster as well as external + - The topology manager will start a topology agent on each host for the + pod to directly interact with. + - The topology agent will provide the connectivity between nodes +- Define how pods boot an initial configuration + - Ideally, this method would allow for dynamic +- Define how pods express services for use in-cluster as well as external services ## Use Cases @@ -88,23 +89,23 @@ Kubernetes Network Emulation (KNE). ### Usage Metrics Reporting -The KNE CLI optionally collects anonymous usage metrics. **This is turned OFF -by default.** We use the metrics to gauge the health and performance of various -KNE operations (i.e. cluster deployment, topology creation) on an **opt-in** -basis. There is a global flag `--report_usage` that when provided shares -anonymous details about certain KNE CLI commands. Collected data can be seen in -the [event proto definition](proto/event.proto). **Usage metrics are NOT shared -by default.** Additionally the PubSub project and topic the events are published -to are configurable. If you want to track your own private metrics about your -KNE usage then that is supported by providing a Cloud PubSub project/topic of -your choosing. Full details about how/when usage events are published can be -found in the codebase [here](metrics/metrics.go). We appreciate usage metric -reporting as it helps us develop a better KNE experience for all of our users. -Whether that be detecting an abnormally high number of cluster deployment -failures due to an upgrade to an underlying dependency introduced by a new -commit, or detecting a bug from a scenario where the failure rate for topologies -over *n* links is far greater than *n-1* links. Usage metric reporting is -helpful tool for the KNE developers. +The KNE CLI optionally collects anonymous usage metrics. **This is turned OFF by +default.** We use the metrics to gauge the health and performance of various KNE +operations (i.e. cluster deployment, topology creation) on an **opt-in** basis. +There is a global flag `--report_usage` that when provided shares anonymous +details about certain KNE CLI commands. Collected data can be seen in the +[event proto definition](proto/event.proto). **Usage metrics are NOT shared by +default.** Additionally the PubSub project and topic the events are published to +are configurable. If you want to track your own private metrics about your KNE +usage then that is supported by providing a Cloud PubSub project/topic of your +choosing. Full details about how/when usage events are published can be found in +the [codebase](metrics/metrics.go). We appreciate usage metric reporting as it +helps us develop a better KNE experience for all of our users. Whether that be +detecting an abnormally high number of cluster deployment failures due to an +upgrade to an underlying dependency introduced by a new commit, or detecting a +bug from a scenario where the failure rate for topologies over _n_ links is far +greater than _n-1_ links. Usage metric reporting is helpful tool for the KNE +developers. ## Thanks diff --git a/api/metallb/clientset/v1beta1/client.go b/api/metallb/clientset/v1beta1/client.go index 0c88fbb6c..1287c69bb 100644 --- a/api/metallb/clientset/v1beta1/client.go +++ b/api/metallb/clientset/v1beta1/client.go @@ -92,10 +92,14 @@ var ( ) func init() { - metallbv1.AddToScheme(Scheme) + if err := metallbv1.AddToScheme(Scheme); err != nil { + panic(err) + } metav1.AddToGroupVersion(Scheme, groupVersion) - metav1.AddMetaToScheme(Scheme) + if err := metav1.AddMetaToScheme(Scheme); err != nil { + panic(err) + } } func GV() *schema.GroupVersion { @@ -105,7 +109,7 @@ func GV() *schema.GroupVersion { // NewForConfig returns a new Clientset based on c. func NewForConfig(c *rest.Config) (*Clientset, error) { config := *c - config.ContentConfig.GroupVersion = &groupVersion + config.GroupVersion = &groupVersion config.APIPath = "/apis" config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() config.UserAgent = rest.DefaultKubernetesUserAgent() diff --git a/cloudbuild/postsubmit.yaml b/cloudbuild/postsubmit.yaml index 956bc85f5..189de3c01 100644 --- a/cloudbuild/postsubmit.yaml +++ b/cloudbuild/postsubmit.yaml @@ -1,35 +1,46 @@ +--- steps: - id: packer_init_external name: "us-west1-docker.pkg.dev/gep-kne/packer/packer:1.9.1" - args: ["init", "cloudbuild/external.pkr.hcl"] - waitFor: ["-"] # run the builds concurrently - + args: + - "init" + - "cloudbuild/external.pkr.hcl" + waitFor: + - "-" # run the builds concurrently + - id: packer_build_external name: "us-west1-docker.pkg.dev/gep-kne/packer/packer:1.9.1" - args: ["build", "cloudbuild/external.pkr.hcl"] - env: [ - "PKR_VAR_build_id=$BUILD_ID", - "PKR_VAR_short_sha=$SHORT_SHA", - "PKR_VAR_branch_name=$BRANCH_NAME", - "PKR_VAR_zone=${_ZONE}", - ] - waitFor: [packer_init_external] - + args: + - "build" + - "cloudbuild/external.pkr.hcl" + env: + - "PKR_VAR_build_id=$BUILD_ID" + - "PKR_VAR_short_sha=$SHORT_SHA" + - "PKR_VAR_branch_name=$BRANCH_NAME" + - "PKR_VAR_zone=${_ZONE}" + waitFor: + - packer_init_external + - id: packer_init_internal name: "us-west1-docker.pkg.dev/gep-kne/packer/packer:1.9.1" - args: ["init", "cloudbuild/internal.pkr.hcl"] - waitFor: ["-"] # run the builds concurrently + args: + - "init" + - "cloudbuild/internal.pkr.hcl" + waitFor: + - "-" # run the builds concurrently - id: packer_build_internal name: "us-west1-docker.pkg.dev/gep-kne/packer/packer:1.9.1" - args: ["build", "cloudbuild/internal.pkr.hcl"] - env: [ - "PKR_VAR_build_id=$BUILD_ID", - "PKR_VAR_short_sha=$SHORT_SHA", - "PKR_VAR_branch_name=$BRANCH_NAME", - "PKR_VAR_zone=${_ZONE}", - ] - waitFor: [packer_init_internal] + args: + - "build" + - "cloudbuild/internal.pkr.hcl" + env: + - "PKR_VAR_build_id=$BUILD_ID" + - "PKR_VAR_short_sha=$SHORT_SHA" + - "PKR_VAR_branch_name=$BRANCH_NAME" + - "PKR_VAR_zone=${_ZONE}" + waitFor: + - packer_init_internal timeout: 5400s diff --git a/cloudbuild/presubmit.yaml b/cloudbuild/presubmit.yaml index 2d659273b..13adf9b4c 100644 --- a/cloudbuild/presubmit.yaml +++ b/cloudbuild/presubmit.yaml @@ -1,3 +1,4 @@ +--- steps: - id: kne_test name: us-west1-docker.pkg.dev/$PROJECT_ID/utilities/remote-builder @@ -26,4 +27,4 @@ timeout: 2700s options: pool: - name: 'projects/kne-external/locations/us-central1/workerPools/kne-cloudbuild-pool' + name: "projects/kne-external/locations/us-central1/workerPools/kne-cloudbuild-pool" diff --git a/cloudbuild/vendors/deployment.yaml b/cloudbuild/vendors/deployment.yaml index fdd38c018..0103a30a5 100644 --- a/cloudbuild/vendors/deployment.yaml +++ b/cloudbuild/vendors/deployment.yaml @@ -1,6 +1,7 @@ # kind-bridge.yaml cluster config file sets up a kind cluster where default PTP CNI plugin # is swapped with the Bridge CNI plugin. # Bridge CNI plugin is required by some Network OSes to operate. +--- cluster: kind: Kind spec: diff --git a/cmd/deploy/deploy.go b/cmd/deploy/deploy.go index f55ad53fe..389205697 100644 --- a/cmd/deploy/deploy.go +++ b/cmd/deploy/deploy.go @@ -84,10 +84,10 @@ func newDeployment(cfgPath string, testing bool) (*deploy.Deployment, error) { return nil, err } if cfg.Cluster == nil { - return nil, fmt.Errorf("Cluster not specified") + return nil, fmt.Errorf("cluster not specified") } if cfg.Ingress == nil { - return nil, fmt.Errorf("Ingress not specified") + return nil, fmt.Errorf("ingress not specified") } if cfg.CNI == nil { return nil, fmt.Errorf("CNI not specified") diff --git a/cmd/deploy/testdata/kind-deployment.yaml b/cmd/deploy/testdata/kind-deployment.yaml index b7faf3241..f40a3a6af 100644 --- a/cmd/deploy/testdata/kind-deployment.yaml +++ b/cmd/deploy/testdata/kind-deployment.yaml @@ -1,3 +1,4 @@ +--- cluster: kind: Kind spec: diff --git a/cmd/root.go b/cmd/root.go index af6a54f9e..884e4bc1a 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -54,7 +54,9 @@ environment.`, return fmt.Errorf("error reading config: %w", err) } } - viper.BindPFlags(cmd.Flags()) + if err := viper.BindPFlags(cmd.Flags()); err != nil { + return err + } viper.SetDefault("report_usage", false) return nil } diff --git a/cmd/topology/topology_test.go b/cmd/topology/topology_test.go index 7aa1a1924..bc3f3bb7a 100644 --- a/cmd/topology/topology_test.go +++ b/cmd/topology/topology_test.go @@ -150,7 +150,7 @@ func TestReset(t *testing.T) { } fConfigRelative, closer := writeTopology(t, tWithConfigRelative) defer closer() - tWithConfigDNE := &tpb.Topology{ + tWithConfigMissing := &tpb.Topology{ Nodes: []*tpb.Node{{ Name: "resettable1", Vendor: tpb.Vendor(1001), @@ -164,7 +164,7 @@ func TestReset(t *testing.T) { Vendor: tpb.Vendor(1001), Config: &tpb.Config{ ConfigData: &tpb.Config_File{ - File: "dne", + File: "missing", }, }, }, { @@ -172,7 +172,7 @@ func TestReset(t *testing.T) { Vendor: tpb.Vendor(1002), }}, } - fConfigDNE, closer := writeTopology(t, tWithConfigDNE) + fConfigMissing, closer := writeTopology(t, tWithConfigMissing) defer closer() node.Vendor(tpb.Vendor(1001), NewR) node.Vendor(tpb.Vendor(1002), NewNR) @@ -206,15 +206,15 @@ func TestReset(t *testing.T) { desc: "valid topology push with relative file location", args: []string{"reset", fConfigRelative.Name(), "--skip", "--push"}, }, { - desc: "valid topology push with config DNE", - args: []string{"reset", fConfigDNE.Name(), "--skip", "--push"}, + desc: "valid topology push with config missing", + args: []string{"reset", fConfigMissing.Name(), "--skip", "--push"}, wantErr: "no such file or directory", }, { - desc: "valid topology push with config DNE single device", - args: []string{"reset", fConfigDNE.Name(), "--skip", "--push", "resettable1"}, + desc: "valid topology push with config missing single device", + args: []string{"reset", fConfigMissing.Name(), "--skip", "--push", "resettable1"}, }, { - desc: "valid topology push with config DNE single device invalid", - args: []string{"reset", fConfigDNE.Name(), "--skip", "--push", "dne"}, + desc: "valid topology push with config missing single device invalid", + args: []string{"reset", fConfigMissing.Name(), "--skip", "--push", "missing"}, wantErr: "not found", }} @@ -234,8 +234,7 @@ func TestReset(t *testing.T) { }() rCmd.PersistentFlags().String("kubecfg", "", "") rCmd.PersistentPreRunE = func(cmd *cobra.Command, args []string) error { - viper.BindPFlags(cmd.Flags()) - return nil + return viper.BindPFlags(cmd.Flags()) } buf := bytes.NewBuffer([]byte{}) rCmd.SetOut(buf) @@ -370,7 +369,7 @@ func TestGenerateRing(t *testing.T) { wantErr: "links must be positive", }, { desc: "file not found", - args: []string{"generate", "ring", "dne.textproto", "2", "8"}, + args: []string{"generate", "ring", "missing.textproto", "2", "8"}, wantErr: "no such file", }, { desc: "empty topology", @@ -571,10 +570,10 @@ func TestPush(t *testing.T) { defer os.Remove(confFile.Name()) tWithConfig := &tpb.Topology{ Nodes: []*tpb.Node{{ - Name: "configable", + Name: "configurable", Vendor: tpb.Vendor(1003), }, { - Name: "notconfigable", + Name: "notconfigurable", Vendor: tpb.Vendor(1004), }}, } @@ -594,22 +593,22 @@ func TestPush(t *testing.T) { }, { desc: "missing args", wantErr: "invalid args", - args: []string{"push", fConfig.Name(), "configable"}, + args: []string{"push", fConfig.Name(), "configurable"}, }, { desc: "no file", - args: []string{"push", fConfig.Name(), "configable", "filedne"}, + args: []string{"push", fConfig.Name(), "configurable", "filemissing"}, wantErr: "no such file", }, { desc: "valid file invalid device", args: []string{"push", fConfig.Name(), "foo", confFile.Name()}, wantErr: `node "foo" not found`, }, { - desc: "valid file notconfigable device", - args: []string{"push", fConfig.Name(), "notconfigable", confFile.Name()}, + desc: "valid file notconfigurable device", + args: []string{"push", fConfig.Name(), "notconfigurable", confFile.Name()}, wantErr: "does not implement ConfigPusher", }, { desc: "valid file", - args: []string{"push", fConfig.Name(), "configable", confFile.Name()}, + args: []string{"push", fConfig.Name(), "configurable", confFile.Name()}, }} rCmd := New() diff --git a/deploy/deploy.go b/deploy/deploy.go index 47ae5cc1a..1523e519e 100644 --- a/deploy/deploy.go +++ b/deploy/deploy.go @@ -110,7 +110,10 @@ type Deployment struct { } func (d *Deployment) String() string { - b, _ := json.MarshalIndent(d, "", "\t") + b, err := json.MarshalIndent(d, "", "\t") + if err != nil { + return fmt.Sprintf("Deployment: %+v (marshal error: %v)", *d, err) + } return string(b) } @@ -219,7 +222,7 @@ func (d *Deployment) Deploy(ctx context.Context, kubecfg string) (rerr error) { ctx, cancel := context.WithCancel(ctx) - // Watch the containter status of the pods so we can fail if a container fails to start running. + // Watch the container status of the pods so we can fail if a container fails to start running. if w, err := pods.NewWatcher(ctx, kClient, cancel); err != nil { log.Warningf("Failed to start pod watcher: %v", err) } else { diff --git a/deploy/kne/external-multinode-cdnos.yaml b/deploy/kne/external-multinode-cdnos.yaml index 256496eb5..40884be34 100644 --- a/deploy/kne/external-multinode-cdnos.yaml +++ b/deploy/kne/external-multinode-cdnos.yaml @@ -1,6 +1,7 @@ # external-multinode.yaml cluster config file sets up ingress, cni, and controllers in an existing k8 cluster. # This spec instructs Metallb to use a docker network named multinode. # The "external" cluster lifecycle is not managed by the KNE deployment. +--- cluster: kind: External spec: diff --git a/deploy/kne/external-multinode.yaml b/deploy/kne/external-multinode.yaml index 56665504c..2f63acc0a 100644 --- a/deploy/kne/external-multinode.yaml +++ b/deploy/kne/external-multinode.yaml @@ -1,6 +1,7 @@ # external-multinode.yaml cluster config file sets up ingress, cni, and controllers in an existing k8 cluster. # This spec instructs Metallb to use a docker network named multinode. # The "external" cluster lifecycle is not managed by the KNE deployment. +--- cluster: kind: External spec: diff --git a/deploy/kne/external.yaml b/deploy/kne/external.yaml index 4d808e182..b8dc3dcb5 100644 --- a/deploy/kne/external.yaml +++ b/deploy/kne/external.yaml @@ -1,5 +1,6 @@ # external.yaml cluster config file sets up ingress, cni, and controllers in an existing k8 cluster. # The "external" cluster lifecycle is not managed by the KNE deployment. +--- cluster: kind: External ingress: diff --git a/deploy/kne/kind-bridge-cdnos.yaml b/deploy/kne/kind-bridge-cdnos.yaml index c07f19e32..7cefa0fc0 100644 --- a/deploy/kne/kind-bridge-cdnos.yaml +++ b/deploy/kne/kind-bridge-cdnos.yaml @@ -1,6 +1,7 @@ # kind-bridge.yaml cluster config file sets up a kind cluster where default PTP CNI plugin # is swapped with the Bridge CNI plugin. # Bridge CNI plugin is required by some Network OSes to operate. +--- cluster: kind: Kind spec: @@ -36,4 +37,4 @@ controllers: operator: ../../manifests/controllers/lemming/manifest.yaml - kind: Cdnos spec: - operator: ../../manifests/controllers/cdnos/manifest.yaml \ No newline at end of file + operator: ../../manifests/controllers/cdnos/manifest.yaml diff --git a/deploy/kne/kind-bridge.yaml b/deploy/kne/kind-bridge.yaml index afe6d381b..54a3fe36b 100644 --- a/deploy/kne/kind-bridge.yaml +++ b/deploy/kne/kind-bridge.yaml @@ -1,6 +1,7 @@ # kind-bridge.yaml cluster config file sets up a kind cluster where default PTP CNI plugin # is swapped with the Bridge CNI plugin. # Bridge CNI plugin is required by some Network OSes to operate. +--- cluster: kind: Kind spec: diff --git a/deploy/kne/kubeadm.yaml b/deploy/kne/kubeadm.yaml index a2bd07a0d..827ef7a67 100644 --- a/deploy/kne/kubeadm.yaml +++ b/deploy/kne/kubeadm.yaml @@ -1,6 +1,7 @@ # kubeadm.yaml cluster config file sets up ingress, cni, and controllers in a new k8 cluster # created using kubeadm. The kubeadm cluster starts as a single node cluster but can be joined # from other hosts to create a multinode cluster. +--- cluster: kind: Kubeadm spec: diff --git a/deploy/ubuntu/serviceaccount.yaml b/deploy/ubuntu/serviceaccount.yaml index a52b76bb9..1e5b74588 100644 --- a/deploy/ubuntu/serviceaccount.yaml +++ b/deploy/ubuntu/serviceaccount.yaml @@ -1,11 +1,12 @@ +--- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: podrunner subjects: -- kind: ServiceAccount - name: podrunner - namespace: default + - kind: ServiceAccount + name: podrunner + namespace: default roleRef: kind: ClusterRole name: podrunner @@ -19,19 +20,19 @@ metadata: labels: k8s-app: foo rules: -- apiGroups: [""] - resources: - - pods - - services - - logs - verbs: - - create - - update - - patch - - delete - - get - - watch - - list + - apiGroups: [""] + resources: + - pods + - services + - logs + verbs: + - create + - update + - patch + - delete + - get + - watch + - list --- apiVersion: v1 kind: ServiceAccount diff --git a/deploy/ubuntu/ubuntu.yaml b/deploy/ubuntu/ubuntu.yaml index 916a57fb4..f59d8c549 100644 --- a/deploy/ubuntu/ubuntu.yaml +++ b/deploy/ubuntu/ubuntu.yaml @@ -1,3 +1,4 @@ +--- apiVersion: v1 kind: Pod metadata: @@ -7,40 +8,40 @@ metadata: namespace: default spec: containers: - - args: - - sleep - - "90000" - image: hfam/ubuntu:latest - imagePullPolicy: IfNotPresent - name: foo - resources: {} - stdin: true - stdinOnce: true - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - tty: true - volumeMounts: - - mountPath: /var/run/secrets/kubernetes.io/serviceaccount - name: kube-api-access-m6mv6 - readOnly: true + - args: + - sleep + - "90000" + image: hfam/ubuntu:latest + imagePullPolicy: IfNotPresent + name: foo + resources: {} + stdin: true + stdinOnce: true + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + tty: true + volumeMounts: + - mountPath: /var/run/secrets/kubernetes.io/serviceaccount + name: kube-api-access-m6mv6 + readOnly: true restartPolicy: Never serviceAccountName: podrunner volumes: - - name: kube-api-access-m6mv6 - projected: - defaultMode: 420 - sources: - - serviceAccountToken: - expirationSeconds: 3607 - path: token - - configMap: - items: - - key: ca.crt - path: ca.crt - name: kube-root-ca.crt - - downwardAPI: - items: - - fieldRef: - apiVersion: v1 - fieldPath: metadata.namespace - path: namespace + - name: kube-api-access-m6mv6 + projected: + defaultMode: 420 + sources: + - serviceAccountToken: + expirationSeconds: 3607 + path: token + - configMap: + items: + - key: ca.crt + path: ca.crt + name: kube-root-ca.crt + - downwardAPI: + items: + - fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + path: namespace diff --git a/docs/README.md b/docs/README.md index 030e23f92..c18d273ea 100644 --- a/docs/README.md +++ b/docs/README.md @@ -11,12 +11,12 @@ of containers running various device OSes. This document is meant to serve as a How-To guide for various KNE usage. The guide is broken up into multiple sections spanning multiple documents. -* [Setup](setup.md): A guide to first time setup for KNE. -* [Create a topology](create_topology.md): A guide to deploying a KNE cluster +- [Setup](setup.md): A guide to first time setup for KNE. +- [Create a topology](create_topology.md): A guide to deploying a KNE cluster and creating a topology. -* [Interact with a topology](interact_topology.md): A guide to interacting with +- [Interact with a topology](interact_topology.md): A guide to interacting with a KNE topology after creation. -* [Troubleshooting](troubleshoot.md): A troubleshooting guide if anything goes +- [Troubleshooting](troubleshoot.md): A troubleshooting guide if anything goes wrong along the way. They are recommended to be done in order. @@ -26,15 +26,15 @@ They are recommended to be done in order. [KNE with a Multi Node Cluster](multinode.md) KNE can easily be scaled to run large topologies utilizing its Kubernetes -backbone. This guide describes how to set up a k8s multi worker node cluster -and get a 150 node KNE topology up and running. +backbone. This guide describes how to set up a k8s multi worker node cluster and +get a 150 node KNE topology up and running. ## Vendor Image Requirements [Vendor Image Requirements](vendor.md) -KNE uses vendor supplied images. This document describes the expectations -for those images. +KNE uses vendor supplied images. This document describes the expectations for +those images. ## Kubernetes Reference @@ -45,7 +45,17 @@ concepts and how they are used in KNE by running through an example topology creation. ## Support for AlpineVS in KNE -[AlpineVS](https://github.com/sonic-net/sonic-alpine/blob/master/README.md) (AVS) is a SONiC Virtual Switch with dataplane deployed as a k8s Pod within KNE. It provides switch capabilities in a simulated environment with following key features: -* **Dual-Container Architecture:** Encloses a SwitchStack container (running SONiC VM) and an ASIC Simulation container through vendor node definition for [alpine](../topo/node/alpine/alpine.go). -* **Multiple Dataplanes:** Integrates with Lucius (default gRPC-based SAI implementation) as well as vendor ASIC simulations. -* **Natively in KNE:** Runs natively in KNE with simple [2-switch topologies](https://github.com/sonic-net/sonic-alpine/blob/master/src/deploy/kne/twodut-alpine-vs.pb.txt) and scaled topologies for automated testing of the SONiC stack. + +[AlpineVS](https://github.com/sonic-net/sonic-alpine/blob/master/README.md) +(AVS) is a SONiC Virtual Switch with dataplane deployed as a k8s Pod within KNE. +It provides switch capabilities in a simulated environment with following key +features: + +- **Dual-Container Architecture:** Encloses a SwitchStack container (running + SONiC VM) and an ASIC Simulation container through vendor node definition for + [alpine](https://github.com/openconfig/kne/blob/main/topo/node/alpine/alpine.go). +- **Multiple Dataplanes:** Integrates with Lucius (default gRPC-based SAI + implementation) as well as vendor ASIC simulations. +- **Natively in KNE:** Runs natively in KNE with simple + [2-switch topologies](https://github.com/sonic-net/sonic-alpine/blob/master/src/deploy/kne/twodut-alpine-vs.pb.txt) + and scaled topologies for automated testing of the SONiC stack. diff --git a/docs/create_topology.md b/docs/create_topology.md index 3f0ce0181..50994386f 100644 --- a/docs/create_topology.md +++ b/docs/create_topology.md @@ -31,12 +31,12 @@ Global Flags: -v, --verbosity string log level (default "info") ``` -A deployment yaml file specifies 4 things (*optional in italics*): +A deployment yaml file specifies 4 things (_optional in italics_): 1. A cluster spec 2. An ingress spec 3. A CNI spec -4. *A list of controller specs* +4. _A list of controller specs_ Expand the below section for a full description of all fields in the deployment yaml. @@ -48,106 +48,106 @@ yaml. > NOTE: ~~Strikethrough~~ fields are DEPRECATED and should not be used. -Field | Type | Description -------------- | ---------------- | --------------------------------------------- -`cluster` | ClusterSpec | Spec for the cluster. -`ingress` | IngressSpec | Spec for the ingress. -`cni` | CNISpec | Spec for the CNI. -`controllers` | []ControllerSpec | List of specs for the additional controllers. +| Field | Type | Description | +| ------------- | ---------------- | --------------------------------------------- | +| `cluster` | ClusterSpec | Spec for the cluster. | +| `ingress` | IngressSpec | Spec for the ingress. | +| `cni` | CNISpec | Spec for the CNI. | +| `controllers` | []ControllerSpec | List of specs for the additional controllers. | #### Cluster -Field | Type | Description ------- | --------- | --------------------------------------------------- -`kind` | string | Name of the cluster type. The options currently are `Kind` or `External`. -`spec` | yaml.Node | Fields that set the options for the cluster type. +| Field | Type | Description | +| ------ | --------- | ------------------------------------------------------------------------- | +| `kind` | string | Name of the cluster type. The options currently are `Kind` or `External`. | +| `spec` | yaml.Node | Fields that set the options for the cluster type. | ##### Kind -Field | Type | Description --------------------------- | ----------------- | -------------------------- -`name` | string | Cluster name, overrides `KIND_CLUSTER_NAME`, config (default `kind`). -`recycle` | bool | Reuse an existing cluster of the same name if it exists. -`version` | string | Desired version of the `kubectl` client. -`image` | string | Node docker image to use for booting the cluster. -`retain` | bool | Retain nodes for debugging when cluster creation fails. -`wait` | time.Duration | Wait for control plane node to be ready (default 0s). -`kubecfg` | string | Sets kubeconfig path instead of `$KUBECONFIG` or `$HOME/.kube/config`. -`googleArtifactRegistries` | []string | List of Google Artifact Registries to setup credentials for in the cluster. Example value for registry would be `us-west1-docker.pkg.dev`. Credentials used are associated with the configured `gcloud` user on the host. -`containerImages` | map[string]string | Map of source images to target images for containers to load in the cluster. Empty values cause the source image to be loaded into the cluster without being renamed. -`config` | string | Path to a kind config file. -`additionalManifests` | []string | List of paths to manifests to be applied using `kubectl` directly after cluster creation. +| Field | Type | Description | +| -------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `name` | string | Cluster name, overrides `KIND_CLUSTER_NAME`, config (default `kind`). | +| `recycle` | bool | Reuse an existing cluster of the same name if it exists. | +| `version` | string | Desired version of the `kubectl` client. | +| `image` | string | Node docker image to use for booting the cluster. | +| `retain` | bool | Retain nodes for debugging when cluster creation fails. | +| `wait` | time.Duration | Wait for control plane node to be ready (default 0s). | +| `kubecfg` | string | Sets kubeconfig path instead of `$KUBECONFIG` or `$HOME/.kube/config`. | +| `googleArtifactRegistries` | []string | List of Google Artifact Registries to setup credentials for in the cluster. Example value for registry would be `us-west1-docker.pkg.dev`. Credentials used are associated with the configured `gcloud` user on the host. | +| `containerImages` | map[string]string | Map of source images to target images for containers to load in the cluster. Empty values cause the source image to be loaded into the cluster without being renamed. | +| `config` | string | Path to a kind config file. | +| `additionalManifests` | []string | List of paths to manifests to be applied using `kubectl` directly after cluster creation. | ##### External -Field | Type | Description ---------- | ------ | ------------------------------------------------------- -`network` | string | Name of the docker network to create a pool of external IP addresses for ingress to assign to services. +| Field | Type | Description | +| --------- | ------ | ------------------------------------------------------------------------------------------------------- | +| `network` | string | Name of the docker network to create a pool of external IP addresses for ingress to assign to services. | #### Ingress -Field | Type | Description ------- | --------- | ------------------------------------------------------ -`kind` | string | Name of the ingress type. The only option currently is `MetalLB`. -`spec` | yaml.Node | Fields that set the options for the ingress type. +| Field | Type | Description | +| ------ | --------- | ----------------------------------------------------------------- | +| `kind` | string | Name of the ingress type. The only option currently is `MetalLB`. | +| `spec` | yaml.Node | Fields that set the options for the ingress type. | ##### MetalLB -Field | Type | Description ---------------- | ---------- | ----------- -`ip_count` | int | Number of IP addresses to include in the available pool. -`manifest` | string | Path of the manifest yaml file to create MetalLB in the cluster. The validated manifest for use with KNE can be found [here](https://github.com/openconfig/kne/tree/main/manifests/metallb/manifest.yaml). -~~`manifests`~~ | ~~string~~ | ~~Path of the directory holding the manifests to create MetalLB in the cluster. The directory is expected to contain a file with the name `metallb-native.yaml`.~~ +| Field | Type | Description | +| --------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `ip_count` | int | Number of IP addresses to include in the available pool. | +| `manifest` | string | Path of the manifest yaml file to create MetalLB in the cluster. The validated manifest for use with KNE can be found in the [MetalLB manifest](https://github.com/openconfig/kne/tree/main/manifests/metallb/manifest.yaml). | +| ~~`manifests`~~ | ~~string~~ | ~~Path of the directory holding the manifests to create MetalLB in the cluster. The directory is expected to contain a file with the name `metallb-native.yaml`.~~ | #### CNI -Field | Type | Description ------- | --------- | -------------------------------------------------- -`kind` | string | Name of the CNI type. The only option currently is `Meshnet`. -`spec` | yaml.Node | Fields that set the options for the CNI type. +| Field | Type | Description | +| ------ | --------- | ------------------------------------------------------------- | +| `kind` | string | Name of the CNI type. The only option currently is `Meshnet`. | +| `spec` | yaml.Node | Fields that set the options for the CNI type. | ##### Meshnet -Field | Type | Description ---------------- | ---------- | ----------- -`manifest` | string | Path of the manifest yaml file to create Meshnet in the cluster. The validated manifest for use with KNE can be found [here](https://github.com/openconfig/kne/tree/main/manifests/meshnet/grpc/manifest.yaml). -~~`manifests`~~ | ~~string~~ | ~~Path of the directory holding the manifests to create Meshnet in the cluster. The directory is expected to contain a file with the name `manifest.yaml`.~~ +| Field | Type | Description | +| --------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `manifest` | string | Path of the manifest yaml file to create Meshnet in the cluster. The validated manifest for use with KNE can be found in the [Meshnet manifest](https://github.com/openconfig/kne/tree/main/manifests/meshnet/grpc/manifest.yaml). | +| ~~`manifests`~~ | ~~string~~ | ~~Path of the directory holding the manifests to create Meshnet in the cluster. The directory is expected to contain a file with the name `manifest.yaml`.~~ | #### Controllers -Field | Type | Description ------- | --------- | ---------------------------------------------------- -`kind` | string | Name of the controller type. The current options currently are `IxiaTG`, `SRLinux`, `CEOSLab`, and `Lemming`. -`spec` | yaml.Node | Fields that set the options for the controller type. +| Field | Type | Description | +| ------ | --------- | ------------------------------------------------------------------------------------------------------------- | +| `kind` | string | Name of the controller type. The current options currently are `IxiaTG`, `SRLinux`, `CEOSLab`, and `Lemming`. | +| `spec` | yaml.Node | Fields that set the options for the controller type. | ##### IxiaTG -Field | Type | Description ---------------- | ---------- | ----------- -`operator` | string | Path of the yaml file to create an IxiaTG operator in the cluster. The validated operator for use with KNE can be found [here](https://github.com/openconfig/kne/tree/main/manifests/keysight/ixiatg-operator.yaml). -`configMap` | string | Path of the yaml file to create an IxiaTG config map in the cluster. The validated config map for use with KNE can be found [here](https://github.com/openconfig/kne/tree/main/manifests/keysight/ixiatg-configmap.yaml). -~~`manifests`~~ | ~~string~~ | ~~Path of the directory holding the manifests to create an IxiaTG operator in the cluster. The directory is expected to contain a file with the name `ixiatg-operator.yaml`. Optionally the directory can contain a file with the name `ixiatg-configmap.yaml` to apply a config map of the desired container images used by the controller.~~ +| Field | Type | Description | +| --------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `operator` | string | Path of the yaml file to create an IxiaTG operator in the cluster. The validated operator for use with KNE can be found in the [IxiaTG operator manifest](https://github.com/openconfig/kne/tree/main/manifests/keysight/ixiatg-operator.yaml). | +| `configMap` | string | Path of the yaml file to create an IxiaTG config map in the cluster. The validated config map for use with KNE can be found in the [IxiaTG config map manifest](https://github.com/openconfig/kne/tree/main/manifests/keysight/ixiatg-configmap.yaml). | +| ~~`manifests`~~ | ~~string~~ | ~~Path of the directory holding the manifests to create an IxiaTG operator in the cluster. The directory is expected to contain a file with the name `ixiatg-operator.yaml`. Optionally the directory can contain a file with the name `ixiatg-configmap.yaml` to apply a config map of the desired container images used by the controller.~~ | ##### SRLinux -Field | Type | Description ---------------- | ---------- | ----------- -`operator` | string | Path of the yaml file to create an SRLinux operator in the cluster. The validated operator for use with KNE can be found [here](https://github.com/openconfig/kne/tree/main/manifests/controllers/srlinux/manifest.yaml). -~~`manifests`~~ | ~~string~~ | ~~Path of the directory holding the manifests to create an SRLinux operator in the cluster. The directory is expected to contain a file with the name `manifest.yaml`.~~ +| Field | Type | Description | +| --------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `operator` | string | Path of the yaml file to create an SRLinux operator in the cluster. The validated operator for use with KNE can be found in the [SRLinux operator manifest](https://github.com/openconfig/kne/tree/main/manifests/controllers/srlinux/manifest.yaml). | +| ~~`manifests`~~ | ~~string~~ | ~~Path of the directory holding the manifests to create an SRLinux operator in the cluster. The directory is expected to contain a file with the name `manifest.yaml`.~~ | ##### CEOSLab -Field | Type | Description ---------------- | ---------- | ----------- -`operator` | string | Path of the yaml file to create a CEOSLab operator in the cluster. The validated operator for use with KNE can be found [here](https://github.com/openconfig/kne/tree/main/manifests/controllers/ceoslab/manifest.yaml). -~~`manifests`~~ | ~~string~~ | ~~Path of the directory holding the manifests to create a CEOSLab operator in the cluster. The directory is expected to contain a file with the name `manifest.yaml`.~~ +| Field | Type | Description | +| --------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `operator` | string | Path of the yaml file to create a CEOSLab operator in the cluster. The validated operator for use with KNE can be found in the [cEOS operator manifest](https://github.com/openconfig/kne/tree/main/manifests/controllers/ceoslab/manifest.yaml). | +| ~~`manifests`~~ | ~~string~~ | ~~Path of the directory holding the manifests to create a CEOSLab operator in the cluster. The directory is expected to contain a file with the name `manifest.yaml`.~~ | ##### Lemming -Field | Type | Description ---------------- | ---------- | ----------- -`operator` | string | Path of the yaml file to create a Lemming operator in the cluster. The validated operator for use with KNE can be found [here](https://github.com/openconfig/kne/tree/main/manifests/controllers/lemming/manifest.yaml). -~~`manifests`~~ | ~~string~~ | ~~Path of the directory holding the manifests to create a Lemming operator in the cluster. The directory is expected to contain a file with the name `manifest.yaml`.~~ +| Field | Type | Description | +| --------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `operator` | string | Path of the yaml file to create a Lemming operator in the cluster. The validated operator for use with KNE can be found in the [Lemming operator manifest](https://github.com/openconfig/kne/tree/main/manifests/controllers/lemming/manifest.yaml). | +| ~~`manifests`~~ | ~~string~~ | ~~Path of the directory holding the manifests to create a Lemming operator in the cluster. The directory is expected to contain a file with the name `manifest.yaml`.~~ | @@ -256,21 +256,21 @@ To load an image into a `kind` cluster there is a 3 step process: 1. Pull the desired image: - ```bash - docker pull src_image:src_tag - ``` + ```bash + docker pull src_image:src_tag + ``` 2. Tag the image with the desired in-cluster name: - ```bash - docker tag src_image:src_tag dst_image:dst_tag - ``` + ```bash + docker tag src_image:src_tag dst_image:dst_tag + ``` 3. Load the image into the `kind` cluster: - ```bash - kind load docker-image dst_image:dst_tag --name=kne - ``` + ```bash + kind load docker-image dst_image:dst_tag --name=kne + ``` Now the `dst_image:dst_tag` image will be present for use in the `kind` cluster. @@ -315,8 +315,8 @@ node definitions interfaces, services, and initial configs can be specified. An example topology containing 4 DUT nodes (Arista, Cisco, Nokia, and Juniper) and 1 ATE node (Keysight) can be found under the examples directory at [examples/multivendor/multivendor.pb.txt](https://github.com/openconfig/kne/blob/main/examples/multivendor/multivendor.pb.txt). -The initial vendor router configs referenced in the topology are found -[here](https://github.com/openconfig/kne/tree/main/examples/multivendor) +The initial vendor router configs referenced in the topology are found in the +[multivendor example directory](https://github.com/openconfig/kne/tree/main/examples/multivendor) See the [push config](interact_topology.md#push_config) section for details about pushing config after initial creation. diff --git a/docs/interact_topology.md b/docs/interact_topology.md index 90509c241..3c390bb93 100644 --- a/docs/interact_topology.md +++ b/docs/interact_topology.md @@ -66,32 +66,32 @@ $ ssh admin@192.168.11.50 1. Get the IP range used by KNE services: - ```bash - $ kubectl get services -n multivendor - NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE - service-gnmi-otg-controller LoadBalancer 10.96.179.48 192.168.11.55 50051:30901/TCP 4m9s - service-grpc-otg-controller LoadBalancer 10.96.33.245 192.168.11.56 40051:30449/TCP 4m9s - service-https-otg-controller LoadBalancer 10.96.215.225 192.168.11.54 443:32556/TCP 4m9s - service-otg-port-eth1 LoadBalancer 10.96.82.37 192.168.11.58 5555:30886/TCP,50071:30286/TCP 4m9s - service-otg-port-eth2 LoadBalancer 10.96.204.154 192.168.11.59 5555:31326/TCP,50071:31860/TCP 4m9s - service-otg-port-eth3 LoadBalancer 10.96.136.253 192.168.11.60 5555:30181/TCP,50071:31619/TCP 4m9s - service-otg-port-eth4 LoadBalancer 10.96.205.227 192.168.11.57 5555:32636/TCP,50071:31247/TCP 4m9s - service-r1 LoadBalancer 10.96.130.198 192.168.11.50 443:32101/TCP,22:32304/TCP,6030:32011/TCP 4m12s - service-r2 LoadBalancer 10.96.107.2 192.168.11.51 443:31942/TCP,22:30785/TCP,57400:30921/TCP 4m11s - service-r3 LoadBalancer 10.96.80.18 192.168.11.52 22:32410/TCP 4m11s - service-r4 LoadBalancer 10.96.138.204 192.168.11.53 22:31932/TCP,50051:32666/TCP 4m10s - ``` - - In this case the IP range would be `192.168.11.*`. + ```bash + $ kubectl get services -n multivendor + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE + service-gnmi-otg-controller LoadBalancer 10.96.179.48 192.168.11.55 50051:30901/TCP 4m9s + service-grpc-otg-controller LoadBalancer 10.96.33.245 192.168.11.56 40051:30449/TCP 4m9s + service-https-otg-controller LoadBalancer 10.96.215.225 192.168.11.54 443:32556/TCP 4m9s + service-otg-port-eth1 LoadBalancer 10.96.82.37 192.168.11.58 5555:30886/TCP,50071:30286/TCP 4m9s + service-otg-port-eth2 LoadBalancer 10.96.204.154 192.168.11.59 5555:31326/TCP,50071:31860/TCP 4m9s + service-otg-port-eth3 LoadBalancer 10.96.136.253 192.168.11.60 5555:30181/TCP,50071:31619/TCP 4m9s + service-otg-port-eth4 LoadBalancer 10.96.205.227 192.168.11.57 5555:32636/TCP,50071:31247/TCP 4m9s + service-r1 LoadBalancer 10.96.130.198 192.168.11.50 443:32101/TCP,22:32304/TCP,6030:32011/TCP 4m12s + service-r2 LoadBalancer 10.96.107.2 192.168.11.51 443:31942/TCP,22:30785/TCP,57400:30921/TCP 4m11s + service-r3 LoadBalancer 10.96.80.18 192.168.11.52 22:32410/TCP 4m11s + service-r4 LoadBalancer 10.96.138.204 192.168.11.53 22:31932/TCP,50051:32666/TCP 4m10s + ``` + + In this case the IP range would be `192.168.11.*`. 1. Edit your SSH config found at `~/.ssh/config` to include: - ```bash - Host 192.168.11.* - UserKnownHostsFile /dev/null - StrictHostKeyChecking no - ProxyCommand none - ``` + ```bash + Host 192.168.11.* + UserKnownHostsFile /dev/null + StrictHostKeyChecking no + ProxyCommand none + ``` @@ -252,7 +252,7 @@ See the external cptx with services -### Using OpenConfig g* services +### Using OpenConfig g\* services #### Using the CLI diff --git a/docs/kubernetes_reference.md b/docs/kubernetes_reference.md index db36dc85d..d318883a5 100644 --- a/docs/kubernetes_reference.md +++ b/docs/kubernetes_reference.md @@ -74,12 +74,12 @@ cluster creation, but regardless of which is chosen a k8s cluster will be created ready for topology creation. Currently, the most used cluster tool in KNE is **kind**. This tool actually hosts a single node k8s cluster inside of a docker container. The details here are not important for the purpose of this -reference, but if you see the term *kind* then know it may be referring to a +reference, but if you see the term _kind_ then know it may be referring to a tool for creating a k8s cluster. You can also bring your own cluster for use with KNE, this is convenient for users with custom k8s setups. -NOTE: *kind* is also a field in kubeyaml used to specify resource type, you may -see this inside of k8s manifests. However when we refer to *kind*, it's likely +NOTE: _kind_ is also a field in kubeyaml used to specify resource type, you may +see this inside of k8s manifests. However when we refer to _kind_, it's likely the cluster tool. After the cluster is created, several k8s deployments are created to initialize diff --git a/docs/multinode.md b/docs/multinode.md index 7e56ac3f7..dfbf04e98 100644 --- a/docs/multinode.md +++ b/docs/multinode.md @@ -3,8 +3,7 @@ ## Background A k8s cluster is made up of 1 or more nodes. Each node can hold up to 110 pods. -See the official large cluster considerations -[here](https://kubernetes.io/docs/setup/best-practices/cluster-large/). An +See the [official large cluster considerations](https://kubernetes.io/docs/setup/best-practices/cluster-large/). An emulated DUT in KNE brings up 1 pod. An emulated ATE in KNE brings up 1 pod per port. Together with the controller pods and other dependency pods, this in turn restricts a KNE user using kind (a single node cluster) to less than ~100 DUTs + diff --git a/docs/setup.md b/docs/setup.md index 32ad2ad05..ccbe9bc6f 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -7,11 +7,11 @@ to work with your Linux distribution. The following dependencies and required to use KNE: -* Golang -* Docker -* Kubectl -* Kind -* Make +- Golang +- Docker +- Kubectl +- Kind +- Make ## Install Golang diff --git a/docs/vendor.md b/docs/vendor.md index 093a8fe3b..7fe07f2d3 100644 --- a/docs/vendor.md +++ b/docs/vendor.md @@ -1,18 +1,19 @@ # Vendor Image Requirements A Vendor Image is a docker container that can be used with KNE to emulate a -vendor's devices. A Vendor Image might also be a fully virtual device with -no physical version, such as openconfig/lemming. +vendor's devices. A Vendor Image might also be a fully virtual device with no +physical version, such as openconfig/lemming. Without vendor images KNE is just an empty virtual machine rack that does -nothing. Vendor supplied images are what the user of KNE sees and is interested -in. This document describes the requirements and expectations of vendor images +nothing. Vendor supplied images are what the user of KNE sees and is interested +in. This document describes the requirements and expectations of vendor images and the associated code that is included in the KNE repository A vendor image requires a corresponding node implementation in topo/node/vendor -and should have working examples in examples/vendor. A single node -implementation may support multiple vendor images (e.g., cisco-xrd and cisco-8000e). A maintainer is the person or organization that maintains the vendor -specific node implementation and examples. +and should have working examples in examples/vendor. A single node +implementation may support multiple vendor images (e.g., cisco-xrd and +cisco-8000e). A maintainer is the person or organization that maintains the +vendor specific node implementation and examples. In this document a vendor is considered the person or organization that makes image containers available for use by others. @@ -20,15 +21,15 @@ image containers available for use by others. ## KNE Uses KNE was built to enable testing the functionality of networks without physical -hardware. Due to the obvious limitations of emulation, KNE is not designed to -test bandwidth and latency of connections. KNE is designed to enable testing of -the control protocols and interaction between devices. There are several +hardware. Due to the obvious limitations of emulation, KNE is not designed to +test bandwidth and latency of connections. KNE is designed to enable testing of +the control protocols and interaction between devices. There are several different types of testing. ### Testing new Topologies -KNE is used to test changes in network topology. Changes in network topology -can impact various protocols use in the network (e.g. BGP). +KNE is used to test changes in network topology. Changes in network topology can +impact various protocols use in the network (e.g. BGP). ### Testing Changes in Protocol or Configuration @@ -36,7 +37,7 @@ KNE is used to test protocol changes or other configuration changes. ### Testing Device Functionality -KNE is used to test changes to a device's Network Operating System (NOS). This +KNE is used to test changes to a device's Network Operating System (NOS). This is a crucial step in validating a devices usability for a particular purpose when a new NOS is released. @@ -45,57 +46,57 @@ when a new NOS is released. A network device in KNE can be viewed as two main components, the control plane and the data plane (the ASIC). -KNE is used to test the control plane of the NOS. This requires the control -software in the virtual device behave the same as in the hardware. It is -expected that the control software used in an image is the same as the -software used on the physical device and that it is configured and reacts in the -same way as the hardware. +KNE is used to test the control plane of the NOS. This requires the control +software in the virtual device behave the same as in the hardware. It is +expected that the control software used in an image is the same as the software +used on the physical device and that it is configured and reacts in the same way +as the hardware. -KNE is not designed to test the data plane or ASIC. The emulated data plane -must support routing and packet forwarding. ASIC specific commands and features -do not need to be supported as long as the data plane provides basic -functionality. +KNE is not designed to test the data plane or ASIC. The emulated data plane must +support routing and packet forwarding. ASIC specific commands and features do +not need to be supported as long as the data plane provides basic functionality. All of these use cases require that the vendor images to behave functionally as -if it were the hardware. The image is expected to be built from the same source -code base as the NOS used in the hardware. Faithful emulation of the ASIC is -not a requirement. The emulated ASIC (data plane) must correctly handle routing +if it were the hardware. The image is expected to be built from the same source +codebase as the NOS used in the hardware. Faithful emulation of the ASIC is not +a requirement. The emulated ASIC (data plane) must correctly handle routing changes and packet forwarding. ### Deviations The vendor should supply a document that describes what series of devices the -image emulates as well as known limits and deviations. These include +image emulates as well as known limits and deviations. These include -* Protocols not supported -* Protocols that deviate from the hardware (and how) -* OpenConfig paths only supported by hardware -* OpenConfig paths that report different results compared to the hardware. -* Known limitations of the emulated device -* Supported port configurations (e.g, number of ports, line cards, etc). +- Protocols not supported +- Protocols that deviate from the hardware (and how) +- OpenConfig paths only supported by hardware +- OpenConfig paths that report different results compared to the hardware. +- Known limitations of the emulated device +- Supported port configurations (e.g, number of ports, line cards, etc). -The listed OpenConfig paths need not be leaf nodes. Wildcards may be used in -the path where applicable. +The listed OpenConfig paths need not be leaf nodes. Wildcards may be used in the +path where applicable. ## Testing -Vendor images must be tested prior to publication. A standard set of tests is -found at . At a minimum, a KNE node using that image should -start and not cause the KNE emulation to hang. It should work in both a single -Kubernetes Worker Node environment as well as a multi-worker node environment. +Vendor images must be tested prior to publication. A standard set of tests is +found at `under development`. At a minimum, a KNE node using that image should +start and not cause the KNE emulation to stop responding. It should work in both +a single Kubernetes Worker Node environment as well as a multi-worker node +environment. It is expected that released images undergo repeated testing to identify non-deterministic errors. ## Support -Vendors are responsible for support of their images. The maintainer (typically +Vendors are responsible for support of their images. The maintainer (typically the person or organization that provides the associated container images) is responsible for the support of the vendor image specific node implementation in [kne/topo/node](https://github.com/openconfig/kne/tree/main/topo/node), the vendor specific examples in [kne/examples](https://github.com/openconfig/kne/tree/main/examples), as well as -other vendor software reqiured by the node implementation (e.g., controller or -operator). The maintainer should be responsive to community contributions. In +other vendor software required by the node implementation (e.g., controller or +operator). The maintainer should be responsive to community contributions. In the event the maintainer of a particular node implementation is unresponsive a new maintainer may take over that implementation. diff --git a/events/events.go b/events/events.go index 15ee0cec2..62218a338 100644 --- a/events/events.go +++ b/events/events.go @@ -102,9 +102,9 @@ func WatchEventStatus(ctx context.Context, client kubernetes.Interface, namespac // EventToStatus returns a pointer to a new EventStatus for an event. func EventToStatus(event *corev1.Event) *EventStatus { s := EventStatus{ - Name: event.ObjectMeta.Name, - Namespace: event.ObjectMeta.Namespace, - UID: event.ObjectMeta.UID, + Name: event.Name, + Namespace: event.Namespace, + UID: event.UID, } event.DeepCopyInto(&s.Event) event = &s.Event diff --git a/events/status.go b/events/status.go index 2df348290..1c9a3168a 100644 --- a/events/status.go +++ b/events/status.go @@ -63,7 +63,7 @@ func newWatcher(ctx context.Context, cancel func(), ch chan *EventStatus, stop f return w } -// SetProgress determins if progress output should be displayed while watching. +// SetProgress determines if progress output should be displayed while watching. func (w *Watcher) SetProgress(value bool) { w.mu.Lock() w.progress = value @@ -126,7 +126,7 @@ func (w *Watcher) isEventNormal(s *EventStatus) bool { for _, m := range errorMsgs { // Error out if message contains predefined message if strings.Contains(message, m) { - w.errCh <- fmt.Errorf("Event failed due to %s . Message: %s", s.Event.Reason, message) + w.errCh <- fmt.Errorf("event failed due to %s. message: %s", s.Event.Reason, message) w.cancel() return false } diff --git a/events/status_test.go b/events/status_test.go index 9dbdce136..bb70c741f 100644 --- a/events/status_test.go +++ b/events/status_test.go @@ -266,7 +266,7 @@ func TestIsEventNormal(t *testing.T) { want: ` 01:23:45 NS: ns1 Event name: event2 Type: Warning Message: 0/1 nodes are available: 1 Insufficient cpu. preemption: 0/1 nodes are available: 1 No preemption victims found for incoming pod.. `[1:], - errch: "Event failed due to . Message: 0/1 nodes are available: 1 Insufficient cpu. preemption: 0/1 nodes are available: 1 No preemption victims found for incoming pod..", + errch: "event failed due to . message: 0/1 nodes are available: 1 Insufficient cpu. preemption: 0/1 nodes are available: 1 No preemption victims found for incoming pod..", canceled: true, }, { @@ -275,7 +275,7 @@ func TestIsEventNormal(t *testing.T) { want: ` 01:23:45 NS: ns1 Event name: event3 Type: Warning Message: 0/1 nodes are available: 1 Insufficient memory. preemption: 0/1 nodes are available: 1 No preemption victims found for incoming pod.. `[1:], - errch: "Event failed due to . Message: 0/1 nodes are available: 1 Insufficient memory. preemption: 0/1 nodes are available: 1 No preemption victims found for incoming pod..", + errch: "event failed due to . message: 0/1 nodes are available: 1 Insufficient memory. preemption: 0/1 nodes are available: 1 No preemption victims found for incoming pod..", canceled: true, }, } { diff --git a/examples/cisco/8000e/README.md b/examples/cisco/8000e/README.md index 7ea53bd90..656232b22 100644 --- a/examples/cisco/8000e/README.md +++ b/examples/cisco/8000e/README.md @@ -2,19 +2,30 @@ **Note:** The following instruction is validated on Ubuntu 20.04.1. -## Check perquisites and create a kne topology using topology [8000e-ixia.pb.txt](8000e-ixia.pb.txt) - -- Ensure you have a healthy kind cluster. Please refer [setup](../../../docs/setup.md) and [topology](../../../docs/create_topology.md) documents for the detailed instructions. -- Verify if nested virtualization is configured correctly by checking presence of /dev/kvm (`ls /dev/kvm`). -- Verify if Open vSwitch is installed by running `ovs-vswitchd --version` and install if it is missing by running `sudo apt-get install openvswitch-switch-dpdk`. -- Set pid_max <= 1048575 using `echo "kernel.pid_max=1048575" >> /etc/sysctl.conf` or `sysctl kernel.pid_max=1048575`. +## Check prerequisites and create a kne topology using topology [8000e-ixia.pb.txt](8000e-ixia.pb.txt) + +- Ensure you have a healthy kind cluster. Please refer + [setup](../../../docs/setup.md) and + [topology](../../../docs/create_topology.md) documents for the detailed + instructions. +- Verify if nested virtualization is configured correctly by checking presence + of /dev/kvm (`ls /dev/kvm`). +- Verify if Open vSwitch is installed by running `ovs-vswitchd --version` and + install if it is missing by running `sudo apt-get install +openvswitch-switch-dpdk`. +- Set pid_max <= 1048575 using `echo "kernel.pid_max=1048575" >> +/etc/sysctl.conf` or `sysctl kernel.pid_max=1048575`. - Create a KNE topology using `kne create path/to/8000e-ixia.pb.txt` ## Make sure the topology is healthy -- Make sure nodes are up and running by running command `kubectl get pods -A`. The output of the command should contain namespace `cisco-ixia` and 6 nodes with status `Running`. 4 otg ports (`otg-port-*`), one otg controller (`otg-controller`), and one cisco 8000e (`8000e`) are expected to be shown if the topology is created successfully. - -``` bash +- Make sure nodes are up and running by running command `kubectl get pods -A`. + The output of the command should contain namespace `cisco-ixia` and 6 nodes + with status `Running`. 4 otg ports (`otg-port-*`), one otg controller + (`otg-controller`), and one cisco 8000e (`8000e`) are expected to be shown + if the topology is created successfully. + +```bash kubectl get pods -A NAMESPACE NAME READY STATUS RESTARTS AGE cisco-ixia 8000e 1/1 Running 0 4m28s @@ -23,13 +34,17 @@ cisco-ixia otg-port-eth1 2/2 Run cisco-ixia otg-port-eth2 2/2 Running 0 4m28s cisco-ixia otg-port-eth3 2/2 Running 0 4m28s cisco-ixia otg-port-eth4 2/2 Running 0 4m27s --- omitted -- - +-- omitted -- + ``` -- Make sure external ip are mapped correctly by running command `kubectl get services -n cisco-ixia`. It is expected an external ip is assigned to each of the six nodes mentioned above. Also, the port mapping of the gnmi/gnoi/gribi/p4rt/ssh services for 8000e should match the port mapping in the topology file. - -``` bash +- Make sure external ip are mapped correctly by running command `kubectl get +services -n cisco-ixia`. It is expected an external ip is assigned to each + of the six nodes mentioned above. Also, the port mapping of the + gnmi/gnoi/gribi/p4rt/ssh services for 8000e should match the port mapping in + the topology file. + +```bash kubectl get services -n cisco-ixia NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service-8000e LoadBalancer 10.96.195.26 172.18.0.50 22:31633/TCP,9339:31543/TCP,9340:30751/TCP,9337:30331/TCP,9559:31439/TCP 7m45s @@ -40,23 +55,25 @@ service-otg-port-eth1 LoadBalancer 10.96.70.21 172.18.0.54 5555 service-otg-port-eth2 LoadBalancer 10.96.166.2 172.18.0.55 5555:31205/TCP,50071:32376/TCP 7m45s service-otg-port-eth3 LoadBalancer 10.96.108.38 172.18.0.56 5555:32396/TCP,50071:30361/TCP 7m45s service-otg-port-eth4 LoadBalancer 10.96.24.228 172.18.0.57 5555:31664/TCP,50071:30416/TCP 7m44s - ``` +``` ## Check 8000e status -- Based on the above output, you may use `ssh cisco@172.18.0.50` with user/pass (`cisco/cisco123`) to access cisco e8000 instance (`e8000`). +- Based on the above output, you may use `ssh cisco@172.18.0.50` with + user/pass (`cisco/cisco123`) to access cisco e8000 instance (`e8000`). -``` bash -ssh cisco@172.18.0.50 -Password: +```bash +ssh cisco@172.18.0.50 +Password: Last login: Thu Feb 23 05:03:48 2023 from 10.244.0.1 -RP/0/RP0/CPU0:ios# +RP/0/RP0/CPU0:ios# ``` -- You can also use `kubectl exec -it -n cisco-ixia 8000e -- telnet 0 60000` to get console access to the device. - -``` bash +- You can also use `kubectl exec -it -n cisco-ixia 8000e -- telnet 0 60000` to + get console access to the device. + +```bash kubectl exec -it -n cisco-ixia 8000e -- telnet 0 60000 Defaulted container "vxr" out of: vxr, init-vxr (init) Trying 0.0.0.0... @@ -64,23 +81,27 @@ Connected to 0. Escape character is '^]'. RP/0/RP0/CPU0:ios# - ``` +``` -**Note:** Depending on the model, it may takes around 6 minutes for the 8000e to be fully up. You may check `startup.log` and `startup.err` using the following steps if the telnet fails: +**Note:** Depending on the model, it may takes around 6 minutes for the 8000e to +be fully up. You may check `startup.log` and `startup.err` using the following +steps if the telnet fails: -``` bash -$ kubectl exec -it -n cisco-ixia 8000e -- bash +```bash +$ kubectl exec -it -n cisco-ixia 8000e -- bash Defaulted container "8000e" out of: 8000e, init-8000e (init) root@8000e:/# cd /nobackup/ root@8000e:/nobackup# ls -ltr -rw-r--r-- 1 root root 0 Feb 23 14:14 startup.err -rw-r--r-- 1 root root 4894 Feb 23 14:18 startup.log -root@8000e:/nobackup# +root@8000e:/nobackup# ``` -To check if the grpc is configured, you may use `show running-config grpc` after login to the router. By default grpc for 8000e is configured using tls without authentication (`insecure: false & skip_verify: true`). +To check if the grpc is configured, you may use `show running-config grpc` after +login to the router. By default grpc for 8000e is configured using tls without +authentication (`insecure: false & skip_verify: true`). -``` bash +```bash RP/0/RP0/CPU0:ios#show running-config grpc Thu Feb 23 06:04:04.562 UTC grpc @@ -97,7 +118,7 @@ RP/0/RP0/CPU0:ios# ## Test GNMI using external service ip and outside port -``` bash +```bash gnmic -a 172.18.0.50:9339 -u cisco -p cisco123 capabilities --skip-verify gNMI version: 0.8.0 supported encodings: @@ -130,12 +151,12 @@ supported models: ] } ] - + ``` ## Test gNOI service using external service ip and outside port -``` bash +```bash gnoic -a 172.18.0.50:9337 --skip-verify -u cisco -p cisco123 system ping --destination 44.44.44.44 100 bytes from 44.44.44.44: icmp_seq=1 ttl=255 time=3ns 100 bytes from 44.44.44.44: icmp_seq=2 ttl=255 time=1ns @@ -149,11 +170,11 @@ round-trip min/avg/max/stddev = 1.000/1.000/3.000/1.000 ms ## Test gRIBI service using external service ip and outside port -``` bash -gribic -a 172.18.0.50:9340 -u cisco -p cisco --skip-verify flush --ns DEFAULT -INFO[0000] got 1 results +```bash +gribic -a 172.18.0.50:9340 -u cisco -p cisco --skip-verify flush --ns DEFAULT +INFO[0000] got 1 results INFO[0000] "172.18.0.50:9340": timestamp: 1677161921484040943 -result: OK -$ +result: OK +$ ``` diff --git a/examples/gobgp/r1.yaml b/examples/gobgp/r1.yaml index 721e34299..8f77a5316 100644 --- a/examples/gobgp/r1.yaml +++ b/examples/gobgp/r1.yaml @@ -1,8 +1,9 @@ +--- global: - config: - as: 65001 - router-id: 10.1.0.1 + config: + as: 65001 + router-id: 10.1.0.1 neighbors: - - config: - neighbor-address: 10.0.0.2 - peer-as: 65002 \ No newline at end of file + - config: + neighbor-address: 10.0.0.2 + peer-as: 65002 diff --git a/examples/gobgp/r2.yaml b/examples/gobgp/r2.yaml index b770e9fa4..a35bc06a2 100644 --- a/examples/gobgp/r2.yaml +++ b/examples/gobgp/r2.yaml @@ -1,8 +1,9 @@ +--- global: - config: - as: 65002 - router-id: 10.1.0.2 + config: + as: 65002 + router-id: 10.1.0.2 neighbors: - - config: - neighbor-address: 10.0.0.1 - peer-as: 65001 \ No newline at end of file + - config: + neighbor-address: 10.0.0.1 + peer-as: 65001 diff --git a/examples/juniper/cptx-ixia/README.md b/examples/juniper/cptx-ixia/README.md index df981f7c5..f88719bed 100644 --- a/examples/juniper/cptx-ixia/README.md +++ b/examples/juniper/cptx-ixia/README.md @@ -167,35 +167,39 @@ entry: { - cPTX can be configured in a channelized or non-channelized mode. - cPTX will be started in channelized mode if any of the interfaces in the interface mapping of KNE config are channelized. - cPTX ethernet interfaces to software wire interface mapping (channelized). Follow the `juniper.config` for more info. Here is an example. - ```bash - et-0/0/0:0 (eth4) - et-0/0/0:1 (eth5) - -- snip -- - et-0/0/1:0 (eth12) - et-0/0/1:1 (eth13) - -- snip -- - et-0/0/2:0 (eth20) - -- snip -- - et-0/0/3:0 (eth28) - et-0/0/4:0 (eth36) - et-0/0/5:0 (unused) - et-0/0/6:0 (eth40) - -- snip -- - et-0/0/7:0 (unused) - -- snip -- - et-0/0/11:0 (eth68) - ``` + + ```bash + et-0/0/0:0 (eth4) + et-0/0/0:1 (eth5) + -- snip -- + et-0/0/1:0 (eth12) + et-0/0/1:1 (eth13) + -- snip -- + et-0/0/2:0 (eth20) + -- snip -- + et-0/0/3:0 (eth28) + et-0/0/4:0 (eth36) + et-0/0/5:0 (unused) + et-0/0/6:0 (eth40) + -- snip -- + et-0/0/7:0 (unused) + -- snip -- + et-0/0/11:0 (eth68) + ``` + - cPTX ethernet interfaces to software wire interface mapping (non-channelized). Here is an example. - ```bash - et-0/0/0 (eth4) - et-0/0/1 (eth5) - et-0/0/2 (eth6) - -- snip -- - et-0/0/5 (unused) - et-0/0/6 (eth10) - et-0/0/7 (unused) - et-0/0/8 (eth12) - -- snip -- - et-0/0/11 (eth15) - ``` + + ```bash + et-0/0/0 (eth4) + et-0/0/1 (eth5) + et-0/0/2 (eth6) + -- snip -- + et-0/0/5 (unused) + et-0/0/6 (eth10) + et-0/0/7 (unused) + et-0/0/8 (eth12) + -- snip -- + et-0/0/11 (eth15) + ``` + - Pass gRPC client option `-skip-verify` as only self-signed TLS certificates are configured as of today. diff --git a/exec/fake/fake_test.go b/exec/fake/fake_test.go index 351518788..3b60c125b 100644 --- a/exec/fake/fake_test.go +++ b/exec/fake/fake_test.go @@ -284,11 +284,11 @@ func TestFailed(t *testing.T) { } } for _, u := range cmds.unexpected { - var ue Response + var unexpectedResp Response if len(tt.unexpected) > 0 { - ue = tt.unexpected[0] + unexpectedResp = tt.unexpected[0] } - t.Logf("Compare %v and %v", u, ue) + t.Logf("Compare %v and %v", u, unexpectedResp) if len(tt.unexpected) > 0 && tt.unexpected[0].String() == u.String() { tt.unexpected = tt.unexpected[1:] continue @@ -385,7 +385,9 @@ unexpected executions: c := cmds.Command(cmd.Cmd, cmd.Args...) c.SetStdout(&stdout) c.SetStderr(&stderr) - _ = c.Run() + if err := c.Run(); err != nil { + t.Errorf("c.Run() returned unexpected error: %v", err) + } } err := cmds.Done() if err.Error() != tt.done { diff --git a/exec/run/run_test.go b/exec/run/run_test.go index b57a6bc92..71c784571 100644 --- a/exec/run/run_test.go +++ b/exec/run/run_test.go @@ -111,11 +111,11 @@ func TestRunCommand(t *testing.T) { if string(got) != tt.want { t.Errorf("runCommand() got output %v, want %v", string(got), tt.want) } - if string(infos.Bytes()) != tt.wantInfos { - t.Errorf("runCommand() got info logs %v, want %v", string(infos.Bytes()), tt.wantInfos) + if infos.String() != tt.wantInfos { + t.Errorf("runCommand() got info logs %v, want %v", infos.String(), tt.wantInfos) } - if string(warnings.Bytes()) != tt.wantWarnings { - t.Errorf("runCommand() got warning logs %v, want %v", string(warnings.Bytes()), tt.wantWarnings) + if warnings.String() != tt.wantWarnings { + t.Errorf("runCommand() got warning logs %v, want %v", warnings.String(), tt.wantWarnings) } }) } diff --git a/flags/flags.go b/flags/flags.go index 765b9e354..6e58d3307 100644 --- a/flags/flags.go +++ b/flags/flags.go @@ -35,7 +35,9 @@ func Import(defmap map[string]string) { flag.Set("stderrthreshold", "INFO") //nolint:errcheck for k, v := range defmap { if f := flag.Lookup(k); f != nil { - f.Value.Set(v) + if err := f.Value.Set(v); err != nil { + klog.Warningf("Failed to set default value %q for flag %q: %v", v, k, err) + } f.DefValue = v } } diff --git a/load/deploy.go b/load/deploy.go index 684e363db..aaf427001 100644 --- a/load/deploy.go +++ b/load/deploy.go @@ -13,7 +13,7 @@ import ( var yamlNodeType = reflect.TypeOf(yaml.Node{}) -// open is overriden in tests. +// open is overridden in tests. var open = os.Open // A Spec represents a structure that yaml can be decoded into. The type is the @@ -43,7 +43,7 @@ func Register(kind string, spec *Spec) { // A Config represents a KNE deployment configuration. type Config struct { Path string // Path of the configuration file - Dir string // Absolute path of the diretory Path is in + Dir string // Absolute path of the directory Path is in Config interface{} // The configuration structure Deployment interface{} // Filled by Config.Decode @@ -179,7 +179,7 @@ func (c *Config) decode(v reflect.Value, path []string, tag reflect.StructTag) ( } case "spec": if sf.Type != yamlNodeType { - return fmt.Errorf("%s is not of type %v\n", strings.Join(append(path, sf.Name), "."), yamlNodeType) + return fmt.Errorf("%s is not of type %v", strings.Join(append(path, sf.Name), "."), yamlNodeType) } node := sv.Interface().(yaml.Node) spec = &node @@ -193,9 +193,9 @@ func (c *Config) decode(v reflect.Value, path []string, tag reflect.StructTag) ( switch { case kind == "" && spec == nil: case kind == "": - return fmt.Errorf("spec field without kind: %s\n", strings.Join(path, ".")) + return fmt.Errorf("spec field without kind: %s", strings.Join(path, ".")) case spec == nil: - return fmt.Errorf("kind field without spec: %s\n", strings.Join(path, ".")) + return fmt.Errorf("kind field without spec: %s", strings.Join(path, ".")) default: // kind and spec have been supplied. diff --git a/load/testdata/deploy/kne/kind-bridge.yaml b/load/testdata/deploy/kne/kind-bridge.yaml index 0832c0c2f..00bcbf8b9 100644 --- a/load/testdata/deploy/kne/kind-bridge.yaml +++ b/load/testdata/deploy/kne/kind-bridge.yaml @@ -1,6 +1,7 @@ # kind-bridge.yaml cluster config file sets up a kind cluster where default PTP CNI plugin # is swapped with the Bridge CNI plugin. # Bridge CNI plugin is required by some Network OSes to operate. +--- cluster: kind: Kind spec: diff --git a/load/testdata/kind/kind-no-cni.yaml b/load/testdata/kind/kind-no-cni.yaml index 1494699dc..aa3bb8295 100644 --- a/load/testdata/kind/kind-no-cni.yaml +++ b/load/testdata/kind/kind-no-cni.yaml @@ -1,3 +1,4 @@ +--- kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 networking: diff --git a/load/testdata/manifests/controllers/ceoslab/manifest.yaml b/load/testdata/manifests/controllers/ceoslab/manifest.yaml index da7def69c..b21d6793f 100644 --- a/load/testdata/manifests/controllers/ceoslab/manifest.yaml +++ b/load/testdata/manifests/controllers/ceoslab/manifest.yaml @@ -1,3 +1,4 @@ +--- apiVersion: v1 kind: Namespace metadata: @@ -21,193 +22,193 @@ spec: singular: ceoslabdevice scope: Namespaced versions: - - name: v1alpha1 - schema: - openAPIV3Schema: - description: CEosLabDevice is the Schema for the ceoslabdevices API - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: CEosLabDeviceSpec defines the desired state of CEosLabDevice - properties: - args: - description: Additional arguments to pass to /sbin/init. Those necessary to boot properly are already present. - items: - type: string - type: array - certconfig: - description: X.509 certificate configuration. - properties: - selfsignedcerts: - description: Configuration for self-signed certificates. - items: - properties: - certname: - description: Certificate name on the node. - type: string - commonname: - description: Common name to set in the cert. - type: string - keyname: - description: Key name on the node. - type: string - keysize: - description: RSA keysize to use for key generation. - format: int32 - type: integer - type: object - type: array - type: object - envvars: - additionalProperties: - type: string - description: Additional environment variables. Those necessary to boot properly are already present. - type: object - image: - description: 'Image name. Default: ceos:latest' - type: string - initcontainerimage: - description: 'Init container image name. Default: networkop/init-wait:latest' - type: string - intfmapping: - additionalProperties: - type: string - description: Explicit interface mapping between kernel devices and interface names. If this is defined, any unmapped devices are ignored. - type: object - numinterfaces: - description: 'Number of data interfaces to create. An additional interface (eth0) is created for pod connectivity. Default: 0 interfaces' - format: int32 - type: integer - resourcerequirements: - additionalProperties: - type: string - description: 'Resource requests to configure on the pod. Default: none' - type: object - services: - additionalProperties: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: CEosLabDevice is the Schema for the ceoslabdevices API + properties: + apiVersion: + description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + metadata: + type: object + spec: + description: CEosLabDeviceSpec defines the desired state of CEosLabDevice + properties: + args: + description: Additional arguments to pass to /sbin/init. Those necessary to boot properly are already present. + items: + type: string + type: array + certconfig: + description: X.509 certificate configuration. properties: - tcpports: - description: TCP ports to forward to the pod. + selfsignedcerts: + description: Configuration for self-signed certificates. items: properties: - in: - description: Port inside the container. - format: int32 - type: integer - out: - description: Port outside the container. Defaults to the same as in. + certname: + description: Certificate name on the node. + type: string + commonname: + description: Common name to set in the cert. + type: string + keyname: + description: Key name on the node. + type: string + keysize: + description: RSA keysize to use for key generation. format: int32 type: integer type: object type: array type: object - description: 'Port mappings for container services. Default: none' - type: object - sleep: - description: 'Time (in seconds) to wait before starting the device. Default: 0 seconds' - format: int32 - type: integer - toggleoverrides: - additionalProperties: - type: boolean - description: EOS feature toggle overrides - type: object - waitforagents: - description: EOS agents to for the startup probe to block on - items: + envvars: + additionalProperties: + type: string + description: Additional environment variables. Those necessary to boot properly are already present. + type: object + image: + description: "Image name. Default: ceos:latest" type: string - type: array - type: object - status: - description: CEosLabDeviceStatus defines the observed state of CEosLabDevice - properties: - configmapconfig: - description: ConfigMap state as configured in configmaps - properties: - intfmappingstatus: - additionalProperties: - type: string + initcontainerimage: + description: "Init container image name. Default: networkop/init-wait:latest" + type: string + intfmapping: + additionalProperties: + type: string + description: Explicit interface mapping between kernel devices and interface names. If this is defined, any unmapped devices are ignored. + type: object + numinterfaces: + description: "Number of data interfaces to create. An additional interface (eth0) is created for pod connectivity. Default: 0 interfaces" + format: int32 + type: integer + resourcerequirements: + additionalProperties: + type: string + description: "Resource requests to configure on the pod. Default: none" + type: object + services: + additionalProperties: + properties: + tcpports: + description: TCP ports to forward to the pod. + items: + properties: + in: + description: Port inside the container. + format: int32 + type: integer + out: + description: Port outside the container. Defaults to the same as in. + format: int32 + type: integer + type: object + type: array type: object - rceosstale: + description: "Port mappings for container services. Default: none" + type: object + sleep: + description: "Time (in seconds) to wait before starting the device. Default: 0 seconds" + format: int32 + type: integer + toggleoverrides: + additionalProperties: type: boolean - selfsignedcertstatus: - additionalProperties: - properties: - certname: - description: Certificate name on the node. - type: string - commonname: - description: Common name to set in the cert. - type: string - keyname: - description: Key name on the node. - type: string - keysize: - description: RSA keysize to use for key generation. - format: int32 - type: integer - type: object - type: object - startupconfigresourceversion: + description: EOS feature toggle overrides + type: object + waitforagents: + description: EOS agents to for the startup probe to block on + items: type: string - toggleoverridesstatus: - additionalProperties: + type: array + type: object + status: + description: CEosLabDeviceStatus defines the observed state of CEosLabDevice + properties: + configmapconfig: + description: ConfigMap state as configured in configmaps + properties: + intfmappingstatus: + additionalProperties: + type: string + type: object + rceosstale: type: boolean - type: object - type: object - podconfigmapconfig: - description: ConfigMap state as present in the pod. If these diverge, we need to restart the pod to update. Even if an in-place update is possible these are needed at boot time. - properties: - intfmappingstatus: - additionalProperties: + selfsignedcertstatus: + additionalProperties: + properties: + certname: + description: Certificate name on the node. + type: string + commonname: + description: Common name to set in the cert. + type: string + keyname: + description: Key name on the node. + type: string + keysize: + description: RSA keysize to use for key generation. + format: int32 + type: integer + type: object + type: object + startupconfigresourceversion: type: string - type: object - rceosstale: - type: boolean - selfsignedcertstatus: - additionalProperties: - properties: - certname: - description: Certificate name on the node. - type: string - commonname: - description: Common name to set in the cert. - type: string - keyname: - description: Key name on the node. - type: string - keysize: - description: RSA keysize to use for key generation. - format: int32 - type: integer + toggleoverridesstatus: + additionalProperties: + type: boolean type: object - type: object - startupconfigresourceversion: - type: string - toggleoverridesstatus: - additionalProperties: + type: object + podconfigmapconfig: + description: ConfigMap state as present in the pod. If these diverge, we need to restart the pod to update. Even if an in-place update is possible these are needed at boot time. + properties: + intfmappingstatus: + additionalProperties: + type: string + type: object + rceosstale: type: boolean - type: object - type: object - reason: - description: Reason for potential failure - type: string - status: - description: Device status - type: string - type: object - type: object - served: true - storage: true - subresources: - status: {} + selfsignedcertstatus: + additionalProperties: + properties: + certname: + description: Certificate name on the node. + type: string + commonname: + description: Common name to set in the cert. + type: string + keyname: + description: Key name on the node. + type: string + keysize: + description: RSA keysize to use for key generation. + format: int32 + type: integer + type: object + type: object + startupconfigresourceversion: + type: string + toggleoverridesstatus: + additionalProperties: + type: boolean + type: object + type: object + reason: + description: Reason for potential failure + type: string + status: + description: Device status + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} status: acceptedNames: kind: "" @@ -227,37 +228,37 @@ metadata: name: arista-ceoslab-operator-leader-election-role namespace: arista-ceoslab-operator-system rules: -- apiGroups: - - "" - resources: - - configmaps - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - "" - resources: - - events - verbs: - - create - - patch + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole @@ -265,108 +266,108 @@ metadata: creationTimestamp: null name: arista-ceoslab-operator-manager-role rules: -- apiGroups: - - ceoslab.arista.com - resources: - - ceoslabdevices - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - ceoslab.arista.com - resources: - - ceoslabdevices/finalizers - verbs: - - update -- apiGroups: - - ceoslab.arista.com - resources: - - ceoslabdevices/status - verbs: - - get - - patch - - update -- apiGroups: - - "" - resources: - - configmaps - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - pods - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - secrets - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - services - verbs: - - create - - delete - - get - - list - - patch - - update - - watch + - apiGroups: + - ceoslab.arista.com + resources: + - ceoslabdevices + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - ceoslab.arista.com + resources: + - ceoslabdevices/finalizers + verbs: + - update + - apiGroups: + - ceoslab.arista.com + resources: + - ceoslabdevices/status + verbs: + - get + - patch + - update + - apiGroups: + - "" + resources: + - configmaps + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - "" + resources: + - pods + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - "" + resources: + - secrets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - "" + resources: + - services + verbs: + - create + - delete + - get + - list + - patch + - update + - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: arista-ceoslab-operator-metrics-reader rules: -- nonResourceURLs: - - /metrics - verbs: - - get + - nonResourceURLs: + - /metrics + verbs: + - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: arista-ceoslab-operator-proxy-role rules: -- apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create -- apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -378,9 +379,9 @@ roleRef: kind: Role name: arista-ceoslab-operator-leader-election-role subjects: -- kind: ServiceAccount - name: arista-ceoslab-operator-controller-manager - namespace: arista-ceoslab-operator-system + - kind: ServiceAccount + name: arista-ceoslab-operator-controller-manager + namespace: arista-ceoslab-operator-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -391,9 +392,9 @@ roleRef: kind: ClusterRole name: arista-ceoslab-operator-manager-role subjects: -- kind: ServiceAccount - name: arista-ceoslab-operator-controller-manager - namespace: arista-ceoslab-operator-system + - kind: ServiceAccount + name: arista-ceoslab-operator-controller-manager + namespace: arista-ceoslab-operator-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -404,9 +405,9 @@ roleRef: kind: ClusterRole name: arista-ceoslab-operator-proxy-role subjects: -- kind: ServiceAccount - name: arista-ceoslab-operator-controller-manager - namespace: arista-ceoslab-operator-system + - kind: ServiceAccount + name: arista-ceoslab-operator-controller-manager + namespace: arista-ceoslab-operator-system --- apiVersion: v1 data: @@ -436,10 +437,10 @@ metadata: namespace: arista-ceoslab-operator-system spec: ports: - - name: https - port: 8443 - protocol: TCP - targetPort: https + - name: https + port: 8443 + protocol: TCP + targetPort: https selector: control-plane: controller-manager --- @@ -463,53 +464,53 @@ spec: control-plane: controller-manager spec: containers: - - args: - - --secure-listen-address=0.0.0.0:8443 - - --upstream=http://127.0.0.1:8080/ - - --logtostderr=true - - --v=0 - image: registry.k8s.io/kubebuilder/kube-rbac-proxy:v0.11.0 - name: kube-rbac-proxy - ports: - - containerPort: 8443 - name: https - protocol: TCP - resources: - limits: - cpu: 500m - memory: 128Mi - requests: - cpu: 5m - memory: 64Mi - - args: - - --health-probe-bind-address=:8081 - - --metrics-bind-address=127.0.0.1:8080 - - --leader-elect - command: - - /manager - image: ghcr.io/aristanetworks/arista-ceoslab-operator:v2.0.1 - livenessProbe: - httpGet: - path: /healthz - port: 8081 - initialDelaySeconds: 15 - periodSeconds: 20 - name: manager - readinessProbe: - httpGet: - path: /readyz - port: 8081 - initialDelaySeconds: 5 - periodSeconds: 10 - resources: - limits: - cpu: 500m - memory: 128Mi - requests: - cpu: 10m - memory: 64Mi - securityContext: - allowPrivilegeEscalation: false + - args: + - --secure-listen-address=0.0.0.0:8443 + - --upstream=http://127.0.0.1:8080/ + - --logtostderr=true + - --v=0 + image: registry.k8s.io/kubebuilder/kube-rbac-proxy:v0.11.0 + name: kube-rbac-proxy + ports: + - containerPort: 8443 + name: https + protocol: TCP + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 5m + memory: 64Mi + - args: + - --health-probe-bind-address=:8081 + - --metrics-bind-address=127.0.0.1:8080 + - --leader-elect + command: + - /manager + image: ghcr.io/aristanetworks/arista-ceoslab-operator:v2.0.1 + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 10m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false securityContext: runAsNonRoot: true serviceAccountName: arista-ceoslab-operator-controller-manager diff --git a/load/testdata/manifests/controllers/lemming/manifest.yaml b/load/testdata/manifests/controllers/lemming/manifest.yaml index 273dc2d43..70931f9d3 100644 --- a/load/testdata/manifests/controllers/lemming/manifest.yaml +++ b/load/testdata/manifests/controllers/lemming/manifest.yaml @@ -1,3 +1,4 @@ +--- apiVersion: v1 kind: Namespace metadata: @@ -21,245 +22,268 @@ spec: singular: lemming scope: Namespaced versions: - - name: v1alpha1 - schema: - openAPIV3Schema: - description: Lemming is the Schema for the lemmings API - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: LemmingSpec defines the desired state of Lemming. - properties: - args: - description: Args are the args to pass to the command. - items: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: Lemming is the Schema for the lemmings API + properties: + apiVersion: + description: + "APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: + "Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + metadata: + type: object + spec: + description: LemmingSpec defines the desired state of Lemming. + properties: + args: + description: Args are the args to pass to the command. + items: + type: string + type: array + command: + description: Command is the name of the executable to run. type: string - type: array - command: - description: Command is the name of the executable to run. - type: string - configFile: - description: ConfigFile is the default configuration file name for - the pod. - type: string - configPath: - description: ConfigPath is the mount point for configuration inside - the pod. - type: string - env: - description: Env are the environment variables to set for the container. - items: - description: EnvVar represents an environment variable present in - a Container. - properties: - name: - description: Name of the environment variable. Must be a C_IDENTIFIER. - type: string - value: - description: 'Variable references $(VAR_NAME) are expanded using - the previously defined environment variables in the container - and any service environment variables. If a variable cannot - be resolved, the reference in the input string will be unchanged. - Double $$ are reduced to a single $, which allows for escaping - the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will produce the - string literal "$(VAR_NAME)". Escaped references will never - be expanded, regardless of whether the variable exists or - not. Defaults to "".' - type: string - valueFrom: - description: Source for the environment variable's value. Cannot - be used if value is not empty. - properties: - configMapKeyRef: - description: Selects a key of a ConfigMap. - properties: - key: - description: The key to select. - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, uid?' - type: string - optional: - description: Specify whether the ConfigMap or its key - must be defined - type: boolean - required: - - key - type: object - fieldRef: - description: 'Selects a field of the pod: supports metadata.name, - metadata.namespace, `metadata.labels['''']`, `metadata.annotations['''']`, - spec.nodeName, spec.serviceAccountName, status.hostIP, - status.podIP, status.podIPs.' - properties: - apiVersion: - description: Version of the schema the FieldPath is - written in terms of, defaults to "v1". - type: string - fieldPath: - description: Path of the field to select in the specified - API version. - type: string - required: - - fieldPath - type: object - resourceFieldRef: - description: 'Selects a resource of the container: only - resources limits and requests (limits.cpu, limits.memory, - limits.ephemeral-storage, requests.cpu, requests.memory - and requests.ephemeral-storage) are currently supported.' - properties: - containerName: - description: 'Container name: required for volumes, - optional for env vars' - type: string - divisor: - anyOf: - - type: integer - - type: string - description: Specifies the output format of the exposed - resources, defaults to "1" - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - description: 'Required: resource to select' - type: string - required: - - resource - type: object - secretKeyRef: - description: Selects a key of a secret in the pod's namespace - properties: - key: - description: The key of the secret to select from. Must - be a valid secret key. - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, uid?' - type: string - optional: - description: Specify whether the Secret or its key must - be defined - type: boolean - required: - - key - type: object - type: object - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - image: - description: Image is the container image to run. - type: string - initImage: - description: InitImage is the docker image to use as an init container - for the pod. - type: string - initSleep: - description: InitSleep is the time sleep in the init container - type: integer - interfaceCount: - description: InterfaceCount is number of interfaces to be attached - to the pod. - type: integer - ports: - additionalProperties: - description: ServicePort describes an external L4 port on the device. - properties: - innerPort: - description: InnerPort is port on the container to expose. - format: int32 - type: integer - outerPort: - description: OuterPort is port on the container to expose. - format: int32 - type: integer - required: - - innerPort - - outerPort - type: object - description: Ports are ports to create on the service. - type: object - resources: - description: Resources are the K8s resources to allocate to lemming - container. - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - description: 'Limits describes the maximum amount of compute resources - allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - description: 'Requests describes the minimum amount of compute - resources required. If Requests is omitted for a container, - it defaults to Limits if that is explicitly specified, otherwise - to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' - type: object - type: object - tls: - description: TLS is the configuration the key/certs to use for management. - properties: - selfSigned: - description: SelfSigned generates a new self signed certificate. + configFile: + description: + ConfigFile is the default configuration file name for + the pod. + type: string + configPath: + description: + ConfigPath is the mount point for configuration inside + the pod. + type: string + env: + description: Env are the environment variables to set for the container. + items: + description: + EnvVar represents an environment variable present in + a Container. properties: - commonName: - description: / Common name to set in the cert. + name: + description: Name of the environment variable. Must be a C_IDENTIFIER. + type: string + value: + description: + 'Variable references $(VAR_NAME) are expanded using + the previously defined environment variables in the container + and any service environment variables. If a variable cannot + be resolved, the reference in the input string will be unchanged. + Double $$ are reduced to a single $, which allows for escaping + the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will produce the + string literal "$(VAR_NAME)". Escaped references will never + be expanded, regardless of whether the variable exists or + not. Defaults to "".' type: string - keySize: - description: RSA keysize to use for key generation. + valueFrom: + description: + Source for the environment variable's value. Cannot + be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: + "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?" + type: string + optional: + description: + Specify whether the ConfigMap or its key + must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: + "Selects a field of the pod: supports metadata.name, + metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, + spec.nodeName, spec.serviceAccountName, status.hostIP, + status.podIP, status.podIPs." + properties: + apiVersion: + description: + Version of the schema the FieldPath is + written in terms of, defaults to "v1". + type: string + fieldPath: + description: + Path of the field to select in the specified + API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: + "Selects a resource of the container: only + resources limits and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, requests.memory + and requests.ephemeral-storage) are currently supported." + properties: + containerName: + description: + "Container name: required for volumes, + optional for env vars" + type: string + divisor: + anyOf: + - type: integer + - type: string + description: + Specifies the output format of the exposed + resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: "Required: resource to select" + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in the pod's namespace + properties: + key: + description: + The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: + "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?" + type: string + optional: + description: + Specify whether the Secret or its key must + be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + image: + description: Image is the container image to run. + type: string + initImage: + description: + InitImage is the docker image to use as an init container + for the pod. + type: string + initSleep: + description: InitSleep is the time sleep in the init container + type: integer + interfaceCount: + description: + InterfaceCount is number of interfaces to be attached + to the pod. + type: integer + ports: + additionalProperties: + description: ServicePort describes an external L4 port on the device. + properties: + innerPort: + description: InnerPort is port on the container to expose. + format: int32 + type: integer + outerPort: + description: OuterPort is port on the container to expose. + format: int32 type: integer required: - - commonName - - keySize + - innerPort + - outerPort type: object - type: object - type: object - status: - description: LemmingStatus defines the observed state of Lemming - properties: - message: - description: Message describes why the lemming is in the current phase. - type: string - phase: - description: Phase is the overall status of the Lemming. - type: string - required: - - message - - phase - type: object - type: object - served: true - storage: true - subresources: - status: {} + description: Ports are ports to create on the service. + type: object + resources: + description: + Resources are the K8s resources to allocate to lemming + container. + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: + "Limits describes the maximum amount of compute resources + allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/" + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: + "Requests describes the minimum amount of compute + resources required. If Requests is omitted for a container, + it defaults to Limits if that is explicitly specified, otherwise + to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/" + type: object + type: object + tls: + description: TLS is the configuration the key/certs to use for management. + properties: + selfSigned: + description: SelfSigned generates a new self signed certificate. + properties: + commonName: + description: / Common name to set in the cert. + type: string + keySize: + description: RSA keysize to use for key generation. + type: integer + required: + - commonName + - keySize + type: object + type: object + type: object + status: + description: LemmingStatus defines the observed state of Lemming + properties: + message: + description: Message describes why the lemming is in the current phase. + type: string + phase: + description: Phase is the overall status of the Lemming. + type: string + required: + - message + - phase + type: object + type: object + served: true + storage: true + subresources: + status: {} --- apiVersion: v1 kind: ServiceAccount @@ -273,37 +297,37 @@ metadata: name: lemming-leader-election-role namespace: lemming-operator rules: -- apiGroups: - - "" - resources: - - configmaps - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - "" - resources: - - events - verbs: - - create - - patch + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole @@ -311,74 +335,74 @@ metadata: creationTimestamp: null name: lemming-manager-role rules: -- apiGroups: - - "" - resources: - - pods - - secrets - - services - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - lemming.openconfig.net - resources: - - lemmings - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - lemming.openconfig.net - resources: - - lemmings/finalizers - verbs: - - update -- apiGroups: - - lemming.openconfig.net - resources: - - lemmings/status - verbs: - - get - - patch - - update + - apiGroups: + - "" + resources: + - pods + - secrets + - services + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - lemming.openconfig.net + resources: + - lemmings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - lemming.openconfig.net + resources: + - lemmings/finalizers + verbs: + - update + - apiGroups: + - lemming.openconfig.net + resources: + - lemmings/status + verbs: + - get + - patch + - update --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: lemming-metrics-reader rules: -- nonResourceURLs: - - /metrics - verbs: - - get + - nonResourceURLs: + - /metrics + verbs: + - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: lemming-proxy-role rules: -- apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create -- apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -390,9 +414,9 @@ roleRef: kind: Role name: lemming-leader-election-role subjects: -- kind: ServiceAccount - name: lemming-controller-manager - namespace: lemming-operator + - kind: ServiceAccount + name: lemming-controller-manager + namespace: lemming-operator --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -403,9 +427,9 @@ roleRef: kind: ClusterRole name: lemming-manager-role subjects: -- kind: ServiceAccount - name: lemming-controller-manager - namespace: lemming-operator + - kind: ServiceAccount + name: lemming-controller-manager + namespace: lemming-operator --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -416,9 +440,9 @@ roleRef: kind: ClusterRole name: lemming-proxy-role subjects: -- kind: ServiceAccount - name: lemming-controller-manager - namespace: lemming-operator + - kind: ServiceAccount + name: lemming-controller-manager + namespace: lemming-operator --- apiVersion: v1 data: @@ -458,10 +482,10 @@ metadata: namespace: lemming-operator spec: ports: - - name: https - port: 8443 - protocol: TCP - targetPort: https + - name: https + port: 8443 + protocol: TCP + targetPort: https selector: control-plane: controller-manager --- @@ -485,61 +509,61 @@ spec: control-plane: controller-manager spec: containers: - - args: - - --secure-listen-address=0.0.0.0:8443 - - --upstream=http://127.0.0.1:8080/ - - --logtostderr=true - - --v=0 - image: registry.k8s.io/kubebuilder/kube-rbac-proxy:v0.12.0 - name: kube-rbac-proxy - ports: - - containerPort: 8443 - name: https - protocol: TCP - resources: - limits: - cpu: 500m - memory: 128Mi - requests: - cpu: 5m - memory: 64Mi - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - - args: - - --health-probe-bind-address=:8081 - - --metrics-bind-address=127.0.0.1:8080 - - --leader-elect - command: - - /manager - image: us-west1-docker.pkg.dev/openconfig-lemming/release/operator:v0.2.3 - livenessProbe: - httpGet: - path: /healthz - port: 8081 - initialDelaySeconds: 15 - periodSeconds: 20 - name: manager - readinessProbe: - httpGet: - path: /readyz - port: 8081 - initialDelaySeconds: 5 - periodSeconds: 10 - resources: - limits: - cpu: 500m - memory: 128Mi - requests: - cpu: 10m - memory: 64Mi - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL + - args: + - --secure-listen-address=0.0.0.0:8443 + - --upstream=http://127.0.0.1:8080/ + - --logtostderr=true + - --v=0 + image: registry.k8s.io/kubebuilder/kube-rbac-proxy:v0.12.0 + name: kube-rbac-proxy + ports: + - containerPort: 8443 + name: https + protocol: TCP + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 5m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + - args: + - --health-probe-bind-address=:8081 + - --metrics-bind-address=127.0.0.1:8080 + - --leader-elect + command: + - /manager + image: us-west1-docker.pkg.dev/openconfig-lemming/release/operator:v0.2.3 + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 10m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL securityContext: runAsNonRoot: true serviceAccountName: lemming-controller-manager diff --git a/load/testdata/manifests/controllers/srlinux/manifest.yaml b/load/testdata/manifests/controllers/srlinux/manifest.yaml index da3d2c48a..6ba42e3f3 100644 --- a/load/testdata/manifests/controllers/srlinux/manifest.yaml +++ b/load/testdata/manifests/controllers/srlinux/manifest.yaml @@ -1,3 +1,4 @@ +--- apiVersion: v1 kind: Namespace metadata: @@ -21,119 +22,127 @@ spec: singular: srlinux scope: Namespaced versions: - - additionalPrinterColumns: - - jsonPath: .status.image - name: Image - type: string - - jsonPath: .metadata.creationTimestamp - name: Age - type: date - name: v1alpha1 - schema: - openAPIV3Schema: - description: Srlinux is the Schema for the srlinuxes API - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - license_key: - description: license key from license secret that contains a license file - for this Srlinux - type: string - metadata: - type: object - spec: - description: SrlinuxSpec defines the desired state of Srlinux. - properties: - config: - description: NodeConfig represents srlinux node configuration parameters. - properties: - args: - items: - type: string - type: array - cert: - description: CertificateCfg represents srlinux certificate configuration - parameters. - properties: - cert_name: - description: Certificate name on the node. - type: string - common_name: - description: Common name to set in the cert. + - additionalPrinterColumns: + - jsonPath: .status.image + name: Image + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: Srlinux is the Schema for the srlinuxes API + properties: + apiVersion: + description: + "APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: + "Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + license_key: + description: + license key from license secret that contains a license file + for this Srlinux + type: string + metadata: + type: object + spec: + description: SrlinuxSpec defines the desired state of Srlinux. + properties: + config: + description: NodeConfig represents srlinux node configuration parameters. + properties: + args: + items: type: string - key_name: - description: Key name on the node. + type: array + cert: + description: + CertificateCfg represents srlinux certificate configuration + parameters. + properties: + cert_name: + description: Certificate name on the node. + type: string + common_name: + description: Common name to set in the cert. + type: string + key_name: + description: Key name on the node. + type: string + key_size: + description: RSA keysize to use for key generation. + format: int32 + type: integer + type: object + command: + items: type: string - key_size: - description: RSA keysize to use for key generation. - format: int32 - type: integer - type: object - command: - items: + type: array + config_data_present: + description: + When set to true by kne, srlinux controller will + attempt to mount the file with startup config to the pod + type: boolean + config_file: + description: + Startup configuration file name for the pod. Set + in the kne topo and created by kne as a config map type: string - type: array - config_data_present: - description: When set to true by kne, srlinux controller will - attempt to mount the file with startup config to the pod - type: boolean - config_file: - description: Startup configuration file name for the pod. Set - in the kne topo and created by kne as a config map - type: string - config_path: - description: Mount point for configuration inside the pod. Should - point to a dir that contains ConfigFile - type: string - entry_command: - description: Specific entry point command for accessing the pod. - type: string - env: - additionalProperties: + config_path: + description: + Mount point for configuration inside the pod. Should + point to a dir that contains ConfigFile + type: string + entry_command: + description: Specific entry point command for accessing the pod. + type: string + env: + additionalProperties: + type: string + description: Map of environment variables to pass into the pod. + type: object + image: type: string - description: Map of environment variables to pass into the pod. - type: object - image: + sleep: + format: int32 + type: integer + type: object + constraints: + additionalProperties: type: string - sleep: - format: int32 - type: integer - type: object - constraints: - additionalProperties: + type: object + model: + description: Model encodes SR Linux variant (ixr-d3, ixr-6e, etc) type: string - type: object - model: - description: Model encodes SR Linux variant (ixr-d3, ixr-6e, etc) - type: string - num-interfaces: - type: integer - version: - description: Version may be set in kne topology as a mean to explicitly - provide version information in case it is not encoded in the image - tag - type: string - type: object - status: - description: SrlinuxStatus defines the observed state of Srlinux. - properties: - image: - description: Image used to run srlinux pod - type: string - type: object - type: object - served: true - storage: true - subresources: - status: {} + num-interfaces: + type: integer + version: + description: + Version may be set in kne topology as a mean to explicitly + provide version information in case it is not encoded in the image + tag + type: string + type: object + status: + description: SrlinuxStatus defines the observed state of Srlinux. + properties: + image: + description: Image used to run srlinux pod + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} status: acceptedNames: kind: "" @@ -153,37 +162,37 @@ metadata: name: srlinux-controller-leader-election-role namespace: srlinux-controller rules: -- apiGroups: - - "" - resources: - - configmaps - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - "" - resources: - - events - verbs: - - create - - patch + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole @@ -191,96 +200,96 @@ metadata: creationTimestamp: null name: srlinux-controller-manager-role rules: -- apiGroups: - - "" - resources: - - configmaps - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - pods - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - secrets - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - kne.srlinux.dev - resources: - - srlinuxes - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - kne.srlinux.dev - resources: - - srlinuxes/finalizers - verbs: - - update -- apiGroups: - - kne.srlinux.dev - resources: - - srlinuxes/status - verbs: - - get - - patch - - update + - apiGroups: + - "" + resources: + - configmaps + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - "" + resources: + - pods + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - "" + resources: + - secrets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - kne.srlinux.dev + resources: + - srlinuxes + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - kne.srlinux.dev + resources: + - srlinuxes/finalizers + verbs: + - update + - apiGroups: + - kne.srlinux.dev + resources: + - srlinuxes/status + verbs: + - get + - patch + - update --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: srlinux-controller-metrics-reader rules: -- nonResourceURLs: - - /metrics - verbs: - - get + - nonResourceURLs: + - /metrics + verbs: + - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: srlinux-controller-proxy-role rules: -- apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create -- apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -292,9 +301,9 @@ roleRef: kind: Role name: srlinux-controller-leader-election-role subjects: -- kind: ServiceAccount - name: srlinux-controller-controller-manager - namespace: srlinux-controller + - kind: ServiceAccount + name: srlinux-controller-controller-manager + namespace: srlinux-controller --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -305,9 +314,9 @@ roleRef: kind: ClusterRole name: srlinux-controller-manager-role subjects: -- kind: ServiceAccount - name: srlinux-controller-controller-manager - namespace: srlinux-controller + - kind: ServiceAccount + name: srlinux-controller-controller-manager + namespace: srlinux-controller --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -318,9 +327,9 @@ roleRef: kind: ClusterRole name: srlinux-controller-proxy-role subjects: -- kind: ServiceAccount - name: srlinux-controller-controller-manager - namespace: srlinux-controller + - kind: ServiceAccount + name: srlinux-controller-controller-manager + namespace: srlinux-controller --- apiVersion: v1 data: @@ -354,9 +363,9 @@ metadata: namespace: srlinux-controller spec: ports: - - name: https - port: 8443 - targetPort: https + - name: https + port: 8443 + targetPort: https selector: control-plane: controller-manager --- @@ -378,45 +387,45 @@ spec: control-plane: controller-manager spec: containers: - - args: - - --secure-listen-address=0.0.0.0:8443 - - --upstream=http://127.0.0.1:8080/ - - --logtostderr=true - - --v=10 - image: registry.k8s.io/kubebuilder/kube-rbac-proxy:v0.8.0 - name: kube-rbac-proxy - ports: - - containerPort: 8443 - name: https - - args: - - --health-probe-bind-address=:8081 - - --metrics-bind-address=127.0.0.1:8080 - - --leader-elect - command: - - /manager - image: ghcr.io/srl-labs/srl-controller:0.4.6 - livenessProbe: - httpGet: - path: /healthz - port: 8081 - initialDelaySeconds: 15 - periodSeconds: 20 - name: manager - readinessProbe: - httpGet: - path: /readyz - port: 8081 - initialDelaySeconds: 5 - periodSeconds: 10 - resources: - limits: - cpu: 100m - memory: 30Mi - requests: - cpu: 100m - memory: 20Mi - securityContext: - allowPrivilegeEscalation: false + - args: + - --secure-listen-address=0.0.0.0:8443 + - --upstream=http://127.0.0.1:8080/ + - --logtostderr=true + - --v=10 + image: registry.k8s.io/kubebuilder/kube-rbac-proxy:v0.8.0 + name: kube-rbac-proxy + ports: + - containerPort: 8443 + name: https + - args: + - --health-probe-bind-address=:8081 + - --metrics-bind-address=127.0.0.1:8080 + - --leader-elect + command: + - /manager + image: ghcr.io/srl-labs/srl-controller:0.4.6 + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 100m + memory: 30Mi + requests: + cpu: 100m + memory: 20Mi + securityContext: + allowPrivilegeEscalation: false securityContext: runAsNonRoot: true serviceAccountName: srlinux-controller-controller-manager diff --git a/load/testdata/manifests/keysight/ixiatg-configmap.yaml b/load/testdata/manifests/keysight/ixiatg-configmap.yaml index d66becc56..48b03c804 100644 --- a/load/testdata/manifests/keysight/ixiatg-configmap.yaml +++ b/load/testdata/manifests/keysight/ixiatg-configmap.yaml @@ -1,3 +1,4 @@ +--- apiVersion: v1 kind: ConfigMap metadata: diff --git a/load/testdata/manifests/keysight/ixiatg-operator.yaml b/load/testdata/manifests/keysight/ixiatg-operator.yaml index 004e58503..94537d4e6 100644 --- a/load/testdata/manifests/keysight/ixiatg-operator.yaml +++ b/load/testdata/manifests/keysight/ixiatg-operator.yaml @@ -1,3 +1,4 @@ +--- apiVersion: v1 kind: Namespace metadata: @@ -21,104 +22,104 @@ spec: singular: ixiatg scope: Namespaced versions: - - name: v1beta1 - schema: - openAPIV3Schema: - description: IxiaTG is the Schema for the ixiatg API - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: IxiaTGSpec defines the desired state of IxiaTG - properties: - api_endpoint_map: - additionalProperties: - description: IxiaTGSvcPort defines the endpoint services for configuration and stats for the OTG node - properties: - in: - format: int32 - type: integer - out: - format: int32 - type: integer - required: - - in + - name: v1beta1 + schema: + openAPIV3Schema: + description: IxiaTG is the Schema for the ixiatg API + properties: + apiVersion: + description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + metadata: + type: object + spec: + description: IxiaTGSpec defines the desired state of IxiaTG + properties: + api_endpoint_map: + additionalProperties: + description: IxiaTGSvcPort defines the endpoint services for configuration and stats for the OTG node + properties: + in: + format: int32 + type: integer + out: + format: int32 + type: integer + required: + - in + type: object + description: ApiEndPoint as define in OTG config type: object - description: ApiEndPoint as define in OTG config - type: object - desired_state: - description: Desired state by network emulation (KNE) - type: string - init_container: - description: Init container image of the node - properties: - image: - type: string - sleep: - format: int32 - type: integer - type: object - interfaces: - description: Interfaces with DUT - items: - description: IxiaTGSvcPort defines the endpoint ports for network traffic for the OTG node + desired_state: + description: Desired state by network emulation (KNE) + type: string + init_container: + description: Init container image of the node properties: - group: - type: string - name: + image: type: string - required: - - name + sleep: + format: int32 + type: integer type: object - type: array - release: - description: Version of the node - type: string - type: object - status: - description: IxiaTGStatus defines the observed state of IxiaTG - properties: - api_endpoint: - description: List of OTG service names - properties: - pod_name: - type: string - service_names: - items: - type: string - type: array - type: object - interfaces: - description: List of OTG port and pod mapping - items: - description: IxiaTGIntfStatus defines the mapping between endpoint ports and encasing pods + interfaces: + description: Interfaces with DUT + items: + description: IxiaTGSvcPort defines the endpoint ports for network traffic for the OTG node + properties: + group: + type: string + name: + type: string + required: + - name + type: object + type: array + release: + description: Version of the node + type: string + type: object + status: + description: IxiaTGStatus defines the observed state of IxiaTG + properties: + api_endpoint: + description: List of OTG service names properties: - interface: - type: string - name: - type: string pod_name: type: string + service_names: + items: + type: string + type: array type: object - type: array - reason: - description: Reason in case of failure - type: string - state: - description: Observed state - type: string - type: object - type: object - served: true - storage: true - subresources: - status: {} + interfaces: + description: List of OTG port and pod mapping + items: + description: IxiaTGIntfStatus defines the mapping between endpoint ports and encasing pods + properties: + interface: + type: string + name: + type: string + pod_name: + type: string + type: object + type: array + reason: + description: Reason in case of failure + type: string + state: + description: Observed state + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} status: acceptedNames: kind: "" @@ -138,37 +139,37 @@ metadata: name: ixiatg-op-leader-election-role namespace: ixiatg-op-system rules: -- apiGroups: - - "" - resources: - - configmaps - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - "" - resources: - - events - verbs: - - create - - patch + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole @@ -176,108 +177,108 @@ metadata: creationTimestamp: null name: ixiatg-op-manager-role rules: -- apiGroups: - - "" - resources: - - configmaps - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - pods - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - secrets - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - services - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - network.keysight.com - resources: - - ixiatgs - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - network.keysight.com - resources: - - ixiatgs/finalizers - verbs: - - update -- apiGroups: - - network.keysight.com - resources: - - ixiatgs/status - verbs: - - get - - patch - - update + - apiGroups: + - "" + resources: + - configmaps + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - "" + resources: + - pods + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - "" + resources: + - secrets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - "" + resources: + - services + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - network.keysight.com + resources: + - ixiatgs + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - network.keysight.com + resources: + - ixiatgs/finalizers + verbs: + - update + - apiGroups: + - network.keysight.com + resources: + - ixiatgs/status + verbs: + - get + - patch + - update --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: ixiatg-op-metrics-reader rules: -- nonResourceURLs: - - /metrics - verbs: - - get + - nonResourceURLs: + - /metrics + verbs: + - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: ixiatg-op-proxy-role rules: -- apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create -- apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -289,9 +290,9 @@ roleRef: kind: Role name: ixiatg-op-leader-election-role subjects: -- kind: ServiceAccount - name: ixiatg-op-controller-manager - namespace: ixiatg-op-system + - kind: ServiceAccount + name: ixiatg-op-controller-manager + namespace: ixiatg-op-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -302,9 +303,9 @@ roleRef: kind: ClusterRole name: ixiatg-op-manager-role subjects: -- kind: ServiceAccount - name: ixiatg-op-controller-manager - namespace: ixiatg-op-system + - kind: ServiceAccount + name: ixiatg-op-controller-manager + namespace: ixiatg-op-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -315,9 +316,9 @@ roleRef: kind: ClusterRole name: ixiatg-op-proxy-role subjects: -- kind: ServiceAccount - name: ixiatg-op-controller-manager - namespace: ixiatg-op-system + - kind: ServiceAccount + name: ixiatg-op-controller-manager + namespace: ixiatg-op-system --- apiVersion: v1 data: @@ -347,9 +348,9 @@ metadata: namespace: ixiatg-op-system spec: ports: - - name: https - port: 8443 - targetPort: https + - name: https + port: 8443 + targetPort: https selector: control-plane: controller-manager --- @@ -371,47 +372,47 @@ spec: control-plane: controller-manager spec: containers: - - args: - - --secure-listen-address=0.0.0.0:8443 - - --upstream=http://127.0.0.1:8080/ - - --logtostderr=true - - --v=10 - image: registry.k8s.io/kubebuilder/kube-rbac-proxy:v0.8.0 - name: kube-rbac-proxy - ports: - - containerPort: 8443 - name: https - - args: - - --health-probe-bind-address=:8081 - - --metrics-bind-address=127.0.0.1:8080 - - --leader-elect - command: - - /manager - image: ghcr.io/open-traffic-generator/keng-operator:0.3.13 - livenessProbe: - httpGet: - path: /healthz - port: 8081 - initialDelaySeconds: 15 - periodSeconds: 20 - name: manager - readinessProbe: - httpGet: - path: /readyz - port: 8081 - initialDelaySeconds: 5 - periodSeconds: 10 - resources: - limits: - cpu: 100m - memory: 200Mi - requests: - cpu: 100m - memory: 20Mi - securityContext: - allowPrivilegeEscalation: false + - args: + - --secure-listen-address=0.0.0.0:8443 + - --upstream=http://127.0.0.1:8080/ + - --logtostderr=true + - --v=10 + image: registry.k8s.io/kubebuilder/kube-rbac-proxy:v0.8.0 + name: kube-rbac-proxy + ports: + - containerPort: 8443 + name: https + - args: + - --health-probe-bind-address=:8081 + - --metrics-bind-address=127.0.0.1:8080 + - --leader-elect + command: + - /manager + image: ghcr.io/open-traffic-generator/keng-operator:0.3.13 + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 100m + memory: 200Mi + requests: + cpu: 100m + memory: 20Mi + securityContext: + allowPrivilegeEscalation: false imagePullSecrets: - - name: ixia-pull-secret + - name: ixia-pull-secret securityContext: runAsNonRoot: true serviceAccountName: ixiatg-op-controller-manager diff --git a/load/testdata/manifests/kind/kind-bridge.yaml b/load/testdata/manifests/kind/kind-bridge.yaml index 83d9c92f9..2b9b7246a 100644 --- a/load/testdata/manifests/kind/kind-bridge.yaml +++ b/load/testdata/manifests/kind/kind-bridge.yaml @@ -13,7 +13,7 @@ rules: - watch - patch - apiGroups: - - "" + - "" resources: - configmaps verbs: @@ -28,9 +28,9 @@ roleRef: kind: ClusterRole name: kindnet subjects: -- kind: ServiceAccount - name: kindnet - namespace: kube-system + - kind: ServiceAccount + name: kindnet + namespace: kube-system --- apiVersion: v1 kind: ServiceAccount @@ -60,66 +60,71 @@ spec: spec: hostNetwork: true tolerations: - - operator: Exists - effect: NoSchedule + - operator: Exists + effect: NoSchedule serviceAccountName: kindnet initContainers: - - name: install-cni-bin - image: ghcr.io/aojea/kindnetd:v1.1.0 - command: ['sh', '-c', 'cd /opt/cni/bin; for i in * ; do cat $i > /cni/$i ; chmod +x /cni/$i ; done'] - volumeMounts: - - name: cni-bin - mountPath: /cni + - name: install-cni-bin + image: ghcr.io/aojea/kindnetd:v1.1.0 + command: + [ + "sh", + "-c", + "cd /opt/cni/bin; for i in * ; do cat $i > /cni/$i ; chmod +x /cni/$i ; done", + ] + volumeMounts: + - name: cni-bin + mountPath: /cni containers: - - name: kindnet-cni - image: ghcr.io/aojea/kindnetd:v1.1.0 - env: - - name: HOST_IP - valueFrom: - fieldRef: - fieldPath: status.hostIP - - name: POD_IP - valueFrom: - fieldRef: - fieldPath: status.podIP - - name: CNI_BRIDGE - value: "true" - - name: DISABLE_CNI_BRIDGE_OFFLOAD - value: "true" - volumeMounts: + - name: kindnet-cni + image: ghcr.io/aojea/kindnetd:v1.1.0 + env: + - name: HOST_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: CNI_BRIDGE + value: "true" + - name: DISABLE_CNI_BRIDGE_OFFLOAD + value: "true" + volumeMounts: + - name: cni-cfg + mountPath: /etc/cni/net.d + - name: xtables-lock + mountPath: /run/xtables.lock + readOnly: false + - name: lib-modules + mountPath: /lib/modules + readOnly: true + resources: + requests: + cpu: "100m" + memory: "50Mi" + limits: + cpu: "100m" + memory: "50Mi" + securityContext: + privileged: false + capabilities: + add: ["NET_RAW", "NET_ADMIN"] + volumes: + - name: cni-bin + hostPath: + path: /opt/cni/bin + type: DirectoryOrCreate - name: cni-cfg - mountPath: /etc/cni/net.d + hostPath: + path: /etc/cni/net.d + type: DirectoryOrCreate - name: xtables-lock - mountPath: /run/xtables.lock - readOnly: false + hostPath: + path: /run/xtables.lock + type: FileOrCreate - name: lib-modules - mountPath: /lib/modules - readOnly: true - resources: - requests: - cpu: "100m" - memory: "50Mi" - limits: - cpu: "100m" - memory: "50Mi" - securityContext: - privileged: false - capabilities: - add: ["NET_RAW", "NET_ADMIN"] - volumes: - - name: cni-bin - hostPath: - path: /opt/cni/bin - type: DirectoryOrCreate - - name: cni-cfg - hostPath: - path: /etc/cni/net.d - type: DirectoryOrCreate - - name: xtables-lock - hostPath: - path: /run/xtables.lock - type: FileOrCreate - - name: lib-modules - hostPath: - path: /lib/modules + hostPath: + path: /lib/modules --- diff --git a/load/testdata/manifests/meshnet/grpc/manifest.yaml b/load/testdata/manifests/meshnet/grpc/manifest.yaml index c3a3e3f33..b2b75db48 100644 --- a/load/testdata/manifests/meshnet/grpc/manifest.yaml +++ b/load/testdata/manifests/meshnet/grpc/manifest.yaml @@ -1,3 +1,4 @@ +--- apiVersion: v1 kind: Namespace metadata: @@ -17,66 +18,66 @@ spec: kind: Topology plural: topologies shortNames: - - topo + - topo singular: topology scope: Namespaced versions: - - name: v1beta1 - schema: - openAPIV3Schema: - properties: - spec: - properties: - links: - items: - description: A complete definition of a p2p link - properties: - local_intf: - description: Local interface name - type: string - local_ip: - description: (Optional) Local IP address - type: string - peer_intf: - description: Peer interface name - type: string - peer_ip: - description: (Optional) Peer IP address - type: string - peer_pod: - description: Name of the peer pod - type: string - uid: - description: Unique identified of a p2p link - type: integer - required: - - uid - - peer_pod - - local_intf - - peer_intf - type: object - type: array - type: object - status: - properties: - net_ns: - description: Network namespace of the POD - type: string - skipped: - description: List of pods that are skipped by local pod - items: - description: peer pod name + - name: v1beta1 + schema: + openAPIV3Schema: + properties: + spec: + properties: + links: + items: + description: A complete definition of a p2p link + properties: + local_intf: + description: Local interface name + type: string + local_ip: + description: (Optional) Local IP address + type: string + peer_intf: + description: Peer interface name + type: string + peer_ip: + description: (Optional) Peer IP address + type: string + peer_pod: + description: Name of the peer pod + type: string + uid: + description: Unique identified of a p2p link + type: integer + required: + - uid + - peer_pod + - local_intf + - peer_intf + type: object + type: array + type: object + status: + properties: + net_ns: + description: Network namespace of the POD + type: string + skipped: + description: List of pods that are skipped by local pod + items: + description: peer pod name + type: string + type: array + src_ip: + description: Source IP of the POD type: string - type: array - src_ip: - description: Source IP of the POD - type: string - type: object - type: object - served: true - storage: true - subresources: - status: {} + type: object + type: object + served: true + storage: true + subresources: + status: {} status: acceptedNames: kind: "" @@ -99,18 +100,18 @@ metadata: app: meshnet name: meshnet-clusterrole rules: -- apiGroups: - - networkop.co.uk - resources: - - topologies - verbs: - - '*' -- apiGroups: - - networkop.co.uk - resources: - - topologies/status - verbs: - - '*' + - apiGroups: + - networkop.co.uk + resources: + - topologies + verbs: + - "*" + - apiGroups: + - networkop.co.uk + resources: + - topologies/status + verbs: + - "*" --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -123,9 +124,9 @@ roleRef: kind: ClusterRole name: meshnet-clusterrole subjects: -- kind: ServiceAccount - name: meshnet - namespace: meshnet + - kind: ServiceAccount + name: meshnet + namespace: meshnet --- apiVersion: apps/v1 kind: DaemonSet @@ -147,32 +148,32 @@ spec: name: meshnet spec: containers: - - env: - - name: HOST_IP - valueFrom: - fieldRef: - fieldPath: status.hostIP - - name: INTER_NODE_LINK_TYPE - value: GRPC - image: us-west1-docker.pkg.dev/kne-external/kne/networkop/meshnet:v0.3.1 - imagePullPolicy: IfNotPresent - name: meshnet - resources: - limits: - memory: 1000Mi - requests: - cpu: 100m - memory: 1000Mi - securityContext: - privileged: true - volumeMounts: - - mountPath: /etc/cni/net.d - name: cni-cfg - - mountPath: /opt/cni/bin - name: cni-bin - - mountPath: /var/run/netns - mountPropagation: Bidirectional - name: var-run-netns + - env: + - name: HOST_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: INTER_NODE_LINK_TYPE + value: GRPC + image: us-west1-docker.pkg.dev/kne-external/kne/networkop/meshnet:v0.3.1 + imagePullPolicy: IfNotPresent + name: meshnet + resources: + limits: + memory: 1000Mi + requests: + cpu: 100m + memory: 1000Mi + securityContext: + privileged: true + volumeMounts: + - mountPath: /etc/cni/net.d + name: cni-cfg + - mountPath: /opt/cni/bin + name: cni-bin + - mountPath: /var/run/netns + mountPropagation: Bidirectional + name: var-run-netns hostIPC: true hostNetwork: true hostPID: true @@ -181,15 +182,15 @@ spec: serviceAccountName: meshnet terminationGracePeriodSeconds: 30 tolerations: - - effect: NoSchedule - operator: Exists + - effect: NoSchedule + operator: Exists volumes: - - hostPath: - path: /opt/cni/bin - name: cni-bin - - hostPath: - path: /etc/cni/net.d - name: cni-cfg - - hostPath: - path: /var/run/netns - name: var-run-netns + - hostPath: + path: /opt/cni/bin + name: cni-bin + - hostPath: + path: /etc/cni/net.d + name: cni-cfg + - hostPath: + path: /var/run/netns + name: var-run-netns diff --git a/load/testdata/manifests/meshnet/vxlan/manifest.yaml b/load/testdata/manifests/meshnet/vxlan/manifest.yaml index 47ae67f1c..5c05eb71c 100644 --- a/load/testdata/manifests/meshnet/vxlan/manifest.yaml +++ b/load/testdata/manifests/meshnet/vxlan/manifest.yaml @@ -1,3 +1,4 @@ +--- apiVersion: v1 kind: Namespace metadata: @@ -17,66 +18,66 @@ spec: kind: Topology plural: topologies shortNames: - - topo + - topo singular: topology scope: Namespaced versions: - - name: v1beta1 - schema: - openAPIV3Schema: - properties: - spec: - properties: - links: - items: - description: A complete definition of a p2p link - properties: - local_intf: - description: Local interface name - type: string - local_ip: - description: (Optional) Local IP address - type: string - peer_intf: - description: Peer interface name - type: string - peer_ip: - description: (Optional) Peer IP address - type: string - peer_pod: - description: Name of the peer pod - type: string - uid: - description: Unique identified of a p2p link - type: integer - required: - - uid - - peer_pod - - local_intf - - peer_intf - type: object - type: array - type: object - status: - properties: - net_ns: - description: Network namespace of the POD - type: string - skipped: - description: List of pods that are skipped by local pod - items: - description: peer pod name + - name: v1beta1 + schema: + openAPIV3Schema: + properties: + spec: + properties: + links: + items: + description: A complete definition of a p2p link + properties: + local_intf: + description: Local interface name + type: string + local_ip: + description: (Optional) Local IP address + type: string + peer_intf: + description: Peer interface name + type: string + peer_ip: + description: (Optional) Peer IP address + type: string + peer_pod: + description: Name of the peer pod + type: string + uid: + description: Unique identified of a p2p link + type: integer + required: + - uid + - peer_pod + - local_intf + - peer_intf + type: object + type: array + type: object + status: + properties: + net_ns: + description: Network namespace of the POD + type: string + skipped: + description: List of pods that are skipped by local pod + items: + description: peer pod name + type: string + type: array + src_ip: + description: Source IP of the POD type: string - type: array - src_ip: - description: Source IP of the POD - type: string - type: object - type: object - served: true - storage: true - subresources: - status: {} + type: object + type: object + served: true + storage: true + subresources: + status: {} status: acceptedNames: kind: "" @@ -99,18 +100,18 @@ metadata: app: meshnet name: meshnet-clusterrole rules: -- apiGroups: - - networkop.co.uk - resources: - - topologies - verbs: - - '*' -- apiGroups: - - networkop.co.uk - resources: - - topologies/status - verbs: - - '*' + - apiGroups: + - networkop.co.uk + resources: + - topologies + verbs: + - "*" + - apiGroups: + - networkop.co.uk + resources: + - topologies/status + verbs: + - "*" --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -123,9 +124,9 @@ roleRef: kind: ClusterRole name: meshnet-clusterrole subjects: -- kind: ServiceAccount - name: meshnet - namespace: meshnet + - kind: ServiceAccount + name: meshnet + namespace: meshnet --- apiVersion: apps/v1 kind: DaemonSet @@ -147,32 +148,32 @@ spec: name: meshnet spec: containers: - - env: - - name: HOST_IP - valueFrom: - fieldRef: - fieldPath: status.hostIP - - name: INTER_NODE_LINK_TYPE - value: VXLAN - image: us-west1-docker.pkg.dev/kne-external/kne/networkop/meshnet:v0.3.1 - imagePullPolicy: IfNotPresent - name: meshnet - resources: - limits: - memory: 200Mi - requests: - cpu: 100m - memory: 200Mi - securityContext: - privileged: true - volumeMounts: - - mountPath: /etc/cni/net.d - name: cni-cfg - - mountPath: /opt/cni/bin - name: cni-bin - - mountPath: /var/run/netns - mountPropagation: Bidirectional - name: var-run-netns + - env: + - name: HOST_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: INTER_NODE_LINK_TYPE + value: VXLAN + image: us-west1-docker.pkg.dev/kne-external/kne/networkop/meshnet:v0.3.1 + imagePullPolicy: IfNotPresent + name: meshnet + resources: + limits: + memory: 200Mi + requests: + cpu: 100m + memory: 200Mi + securityContext: + privileged: true + volumeMounts: + - mountPath: /etc/cni/net.d + name: cni-cfg + - mountPath: /opt/cni/bin + name: cni-bin + - mountPath: /var/run/netns + mountPropagation: Bidirectional + name: var-run-netns hostIPC: true hostNetwork: true hostPID: true @@ -181,15 +182,15 @@ spec: serviceAccountName: meshnet terminationGracePeriodSeconds: 30 tolerations: - - effect: NoSchedule - operator: Exists + - effect: NoSchedule + operator: Exists volumes: - - hostPath: - path: /opt/cni/bin - name: cni-bin - - hostPath: - path: /etc/cni/net.d - name: cni-cfg - - hostPath: - path: /var/run/netns - name: var-run-netns + - hostPath: + path: /opt/cni/bin + name: cni-bin + - hostPath: + path: /etc/cni/net.d + name: cni-cfg + - hostPath: + path: /var/run/netns + name: var-run-netns diff --git a/load/testdata/manifests/metallb/manifest.yaml b/load/testdata/manifests/metallb/manifest.yaml index 0f41d0c11..138a9526d 100644 --- a/load/testdata/manifests/metallb/manifest.yaml +++ b/load/testdata/manifests/metallb/manifest.yaml @@ -1,3 +1,4 @@ +--- apiVersion: v1 kind: Namespace metadata: @@ -24,8 +25,8 @@ spec: namespace: metallb-system path: /convert conversionReviewVersions: - - v1alpha1 - - v1beta1 + - v1alpha1 + - v1beta1 group: metallb.io names: kind: AddressPool @@ -34,184 +35,205 @@ spec: singular: addresspool scope: Namespaced versions: - - deprecated: true - deprecationWarning: metallb.io v1alpha1 AddressPool is deprecated - name: v1alpha1 - schema: - openAPIV3Schema: - description: AddressPool is the Schema for the addresspools API. - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: AddressPoolSpec defines the desired state of AddressPool. - properties: - addresses: - description: A list of IP address ranges over which MetalLB has authority. - You can list multiple ranges in a single pool, they will all share - the same settings. Each range can be either a CIDR prefix, or an - explicit start-end range of IPs. - items: + - deprecated: true + deprecationWarning: metallb.io v1alpha1 AddressPool is deprecated + name: v1alpha1 + schema: + openAPIV3Schema: + description: AddressPool is the Schema for the addresspools API. + properties: + apiVersion: + description: + "APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: + "Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + metadata: + type: object + spec: + description: AddressPoolSpec defines the desired state of AddressPool. + properties: + addresses: + description: + A list of IP address ranges over which MetalLB has authority. + You can list multiple ranges in a single pool, they will all share + the same settings. Each range can be either a CIDR prefix, or an + explicit start-end range of IPs. + items: + type: string + type: array + autoAssign: + default: true + description: + AutoAssign flag used to prevent MetallB from automatic + allocation for a pool. + type: boolean + bgpAdvertisements: + description: + When an IP is allocated from this pool, how should it + be translated into BGP announcements? + items: + properties: + aggregationLength: + default: 32 + description: + The aggregation-length advertisement option lets + you “roll up” the /32s into a larger prefix. + format: int32 + minimum: 1 + type: integer + aggregationLengthV6: + default: 128 + description: + Optional, defaults to 128 (i.e. no aggregation) + if not specified. + format: int32 + type: integer + communities: + description: BGP communities + items: + type: string + type: array + localPref: + description: + BGP LOCAL_PREF attribute which is used by BGP best + path algorithm, Path with higher localpref is preferred over + one with lower localpref. + format: int32 + type: integer + type: object + type: array + protocol: + description: + Protocol can be used to select how the announcement is + done. + enum: + - layer2 + - bgp type: string - type: array - autoAssign: - default: true - description: AutoAssign flag used to prevent MetallB from automatic - allocation for a pool. - type: boolean - bgpAdvertisements: - description: When an IP is allocated from this pool, how should it - be translated into BGP announcements? - items: - properties: - aggregationLength: - default: 32 - description: The aggregation-length advertisement option lets - you “roll up” the /32s into a larger prefix. - format: int32 - minimum: 1 - type: integer - aggregationLengthV6: - default: 128 - description: Optional, defaults to 128 (i.e. no aggregation) - if not specified. - format: int32 - type: integer - communities: - description: BGP communities - items: - type: string - type: array - localPref: - description: BGP LOCAL_PREF attribute which is used by BGP best - path algorithm, Path with higher localpref is preferred over - one with lower localpref. - format: int32 - type: integer - type: object - type: array - protocol: - description: Protocol can be used to select how the announcement is - done. - enum: - - layer2 - - bgp - type: string - required: - - addresses - - protocol - type: object - status: - description: AddressPoolStatus defines the observed state of AddressPool. - type: object - required: - - spec - type: object - served: true - storage: false - subresources: - status: {} - - deprecated: true - deprecationWarning: metallb.io v1beta1 AddressPool is deprecated, consider using - IPAddressPool - name: v1beta1 - schema: - openAPIV3Schema: - description: AddressPool represents a pool of IP addresses that can be allocated - to LoadBalancer services. AddressPool is deprecated and being replaced by - IPAddressPool. - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: AddressPoolSpec defines the desired state of AddressPool. - properties: - addresses: - description: A list of IP address ranges over which MetalLB has authority. - You can list multiple ranges in a single pool, they will all share - the same settings. Each range can be either a CIDR prefix, or an - explicit start-end range of IPs. - items: + required: + - addresses + - protocol + type: object + status: + description: AddressPoolStatus defines the observed state of AddressPool. + type: object + required: + - spec + type: object + served: true + storage: false + subresources: + status: {} + - deprecated: true + deprecationWarning: + metallb.io v1beta1 AddressPool is deprecated, consider using + IPAddressPool + name: v1beta1 + schema: + openAPIV3Schema: + description: + AddressPool represents a pool of IP addresses that can be allocated + to LoadBalancer services. AddressPool is deprecated and being replaced by + IPAddressPool. + properties: + apiVersion: + description: + "APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: + "Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + metadata: + type: object + spec: + description: AddressPoolSpec defines the desired state of AddressPool. + properties: + addresses: + description: + A list of IP address ranges over which MetalLB has authority. + You can list multiple ranges in a single pool, they will all share + the same settings. Each range can be either a CIDR prefix, or an + explicit start-end range of IPs. + items: + type: string + type: array + autoAssign: + default: true + description: + AutoAssign flag used to prevent MetallB from automatic + allocation for a pool. + type: boolean + bgpAdvertisements: + description: + Drives how an IP allocated from this pool should translated + into BGP announcements. + items: + properties: + aggregationLength: + default: 32 + description: + The aggregation-length advertisement option lets + you “roll up” the /32s into a larger prefix. + format: int32 + minimum: 1 + type: integer + aggregationLengthV6: + default: 128 + description: + Optional, defaults to 128 (i.e. no aggregation) + if not specified. + format: int32 + type: integer + communities: + description: + BGP communities to be associated with the given + advertisement. + items: + type: string + type: array + localPref: + description: + BGP LOCAL_PREF attribute which is used by BGP best + path algorithm, Path with higher localpref is preferred over + one with lower localpref. + format: int32 + type: integer + type: object + type: array + protocol: + description: + Protocol can be used to select how the announcement is + done. + enum: + - layer2 + - bgp type: string - type: array - autoAssign: - default: true - description: AutoAssign flag used to prevent MetallB from automatic - allocation for a pool. - type: boolean - bgpAdvertisements: - description: Drives how an IP allocated from this pool should translated - into BGP announcements. - items: - properties: - aggregationLength: - default: 32 - description: The aggregation-length advertisement option lets - you “roll up” the /32s into a larger prefix. - format: int32 - minimum: 1 - type: integer - aggregationLengthV6: - default: 128 - description: Optional, defaults to 128 (i.e. no aggregation) - if not specified. - format: int32 - type: integer - communities: - description: BGP communities to be associated with the given - advertisement. - items: - type: string - type: array - localPref: - description: BGP LOCAL_PREF attribute which is used by BGP best - path algorithm, Path with higher localpref is preferred over - one with lower localpref. - format: int32 - type: integer - type: object - type: array - protocol: - description: Protocol can be used to select how the announcement is - done. - enum: - - layer2 - - bgp - type: string - required: - - addresses - - protocol - type: object - status: - description: AddressPoolStatus defines the observed state of AddressPool. - type: object - required: - - spec - type: object - served: true - storage: true - subresources: - status: {} + required: + - addresses + - protocol + type: object + status: + description: AddressPoolStatus defines the observed state of AddressPool. + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} status: acceptedNames: kind: "" @@ -235,83 +257,93 @@ spec: singular: bfdprofile scope: Namespaced versions: - - name: v1beta1 - schema: - openAPIV3Schema: - description: BFDProfile represents the settings of the bfd session that can - be optionally associated with a BGP session. - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: BFDProfileSpec defines the desired state of BFDProfile. - properties: - detectMultiplier: - description: Configures the detection multiplier to determine packet - loss. The remote transmission interval will be multiplied by this - value to determine the connection loss detection timer. - format: int32 - maximum: 255 - minimum: 2 - type: integer - echoInterval: - description: Configures the minimal echo receive transmission interval - that this system is capable of handling in milliseconds. Defaults - to 50ms - format: int32 - maximum: 60000 - minimum: 10 - type: integer - echoMode: - description: Enables or disables the echo transmission mode. This - mode is disabled by default, and not supported on multi hops setups. - type: boolean - minimumTtl: - description: 'For multi hop sessions only: configure the minimum expected - TTL for an incoming BFD control packet.' - format: int32 - maximum: 254 - minimum: 1 - type: integer - passiveMode: - description: 'Mark session as passive: a passive session will not - attempt to start the connection and will wait for control packets - from peer before it begins replying.' - type: boolean - receiveInterval: - description: The minimum interval that this system is capable of receiving - control packets in milliseconds. Defaults to 300ms. - format: int32 - maximum: 60000 - minimum: 10 - type: integer - transmitInterval: - description: The minimum transmission interval (less jitter) that - this system wants to use to send BFD control packets in milliseconds. - Defaults to 300ms - format: int32 - maximum: 60000 - minimum: 10 - type: integer - type: object - status: - description: BFDProfileStatus defines the observed state of BFDProfile. - type: object - type: object - served: true - storage: true - subresources: - status: {} + - name: v1beta1 + schema: + openAPIV3Schema: + description: + BFDProfile represents the settings of the bfd session that can + be optionally associated with a BGP session. + properties: + apiVersion: + description: + "APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: + "Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + metadata: + type: object + spec: + description: BFDProfileSpec defines the desired state of BFDProfile. + properties: + detectMultiplier: + description: + Configures the detection multiplier to determine packet + loss. The remote transmission interval will be multiplied by this + value to determine the connection loss detection timer. + format: int32 + maximum: 255 + minimum: 2 + type: integer + echoInterval: + description: + Configures the minimal echo receive transmission interval + that this system is capable of handling in milliseconds. Defaults + to 50ms + format: int32 + maximum: 60000 + minimum: 10 + type: integer + echoMode: + description: + Enables or disables the echo transmission mode. This + mode is disabled by default, and not supported on multi hops setups. + type: boolean + minimumTtl: + description: + "For multi hop sessions only: configure the minimum expected + TTL for an incoming BFD control packet." + format: int32 + maximum: 254 + minimum: 1 + type: integer + passiveMode: + description: + "Mark session as passive: a passive session will not + attempt to start the connection and will wait for control packets + from peer before it begins replying." + type: boolean + receiveInterval: + description: + The minimum interval that this system is capable of receiving + control packets in milliseconds. Defaults to 300ms. + format: int32 + maximum: 60000 + minimum: 10 + type: integer + transmitInterval: + description: + The minimum transmission interval (less jitter) that + this system wants to use to send BFD control packets in milliseconds. + Defaults to 300ms + format: int32 + maximum: 60000 + minimum: 10 + type: integer + type: object + status: + description: BFDProfileStatus defines the observed state of BFDProfile. + type: object + type: object + served: true + storage: true + subresources: + status: {} status: acceptedNames: kind: "" @@ -335,181 +367,206 @@ spec: singular: bgpadvertisement scope: Namespaced versions: - - name: v1beta1 - schema: - openAPIV3Schema: - description: BGPAdvertisement allows to advertise the IPs coming from the - selected IPAddressPools via BGP, setting the parameters of the BGP Advertisement. - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: BGPAdvertisementSpec defines the desired state of BGPAdvertisement. - properties: - aggregationLength: - default: 32 - description: The aggregation-length advertisement option lets you - “roll up” the /32s into a larger prefix. Defaults to 32. Works for - IPv4 addresses. - format: int32 - minimum: 1 - type: integer - aggregationLengthV6: - default: 128 - description: The aggregation-length advertisement option lets you - “roll up” the /128s into a larger prefix. Defaults to 128. Works - for IPv6 addresses. - format: int32 - type: integer - communities: - description: The BGP communities to be associated with the announcement. - Each item can be a community of the form 1234:1234 or the name of - an alias defined in the Community CRD. - items: - type: string - type: array - ipAddressPoolSelectors: - description: A selector for the IPAddressPools which would get advertised - via this advertisement. If no IPAddressPool is selected by this - or by the list, the advertisement is applied to all the IPAddressPools. - items: - description: A label selector is a label query over a set of resources. - The result of matchLabels and matchExpressions are ANDed. An empty - label selector matches all objects. A null label selector matches - no objects. - properties: - matchExpressions: - description: matchExpressions is a list of label selector requirements. - The requirements are ANDed. - items: - description: A label selector requirement is a selector that - contains values, a key, and an operator that relates the - key and values. - properties: - key: - description: key is the label key that the selector applies - to. - type: string - operator: - description: operator represents a key's relationship - to a set of values. Valid operators are In, NotIn, Exists - and DoesNotExist. - type: string - values: - description: values is an array of string values. If the - operator is In or NotIn, the values array must be non-empty. - If the operator is Exists or DoesNotExist, the values - array must be empty. This array is replaced during a - strategic merge patch. - items: + - name: v1beta1 + schema: + openAPIV3Schema: + description: + BGPAdvertisement allows to advertise the IPs coming from the + selected IPAddressPools via BGP, setting the parameters of the BGP Advertisement. + properties: + apiVersion: + description: + "APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: + "Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + metadata: + type: object + spec: + description: BGPAdvertisementSpec defines the desired state of BGPAdvertisement. + properties: + aggregationLength: + default: 32 + description: + The aggregation-length advertisement option lets you + “roll up” the /32s into a larger prefix. Defaults to 32. Works for + IPv4 addresses. + format: int32 + minimum: 1 + type: integer + aggregationLengthV6: + default: 128 + description: + The aggregation-length advertisement option lets you + “roll up” the /128s into a larger prefix. Defaults to 128. Works + for IPv6 addresses. + format: int32 + type: integer + communities: + description: + The BGP communities to be associated with the announcement. + Each item can be a community of the form 1234:1234 or the name of + an alias defined in the Community CRD. + items: + type: string + type: array + ipAddressPoolSelectors: + description: + A selector for the IPAddressPools which would get advertised + via this advertisement. If no IPAddressPool is selected by this + or by the list, the advertisement is applied to all the IPAddressPools. + items: + description: + A label selector is a label query over a set of resources. + The result of matchLabels and matchExpressions are ANDed. An empty + label selector matches all objects. A null label selector matches + no objects. + properties: + matchExpressions: + description: + matchExpressions is a list of label selector requirements. + The requirements are ANDed. + items: + description: + A label selector requirement is a selector that + contains values, a key, and an operator that relates the + key and values. + properties: + key: + description: + key is the label key that the selector applies + to. + type: string + operator: + description: + operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, Exists + and DoesNotExist. type: string - type: array - required: - - key - - operator + values: + description: + values is an array of string values. If the + operator is In or NotIn, the values array must be non-empty. + If the operator is Exists or DoesNotExist, the values + array must be empty. This array is replaced during a + strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: + matchLabels is a map of {key,value} pairs. A single + {key,value} in the matchLabels map is equivalent to an element + of matchExpressions, whose key field is "key", the operator + is "In", and the values array contains only "value". The requirements + are ANDed. type: object - type: array - matchLabels: - additionalProperties: - type: string - description: matchLabels is a map of {key,value} pairs. A single - {key,value} in the matchLabels map is equivalent to an element - of matchExpressions, whose key field is "key", the operator - is "In", and the values array contains only "value". The requirements - are ANDed. - type: object - type: object - type: array - ipAddressPools: - description: The list of IPAddressPools to advertise via this advertisement, - selected by name. - items: - type: string - type: array - localPref: - description: The BGP LOCAL_PREF attribute which is used by BGP best - path algorithm, Path with higher localpref is preferred over one - with lower localpref. - format: int32 - type: integer - nodeSelectors: - description: NodeSelectors allows to limit the nodes to announce as - next hops for the LoadBalancer IP. When empty, all the nodes having are - announced as next hops. - items: - description: A label selector is a label query over a set of resources. - The result of matchLabels and matchExpressions are ANDed. An empty - label selector matches all objects. A null label selector matches - no objects. - properties: - matchExpressions: - description: matchExpressions is a list of label selector requirements. - The requirements are ANDed. - items: - description: A label selector requirement is a selector that - contains values, a key, and an operator that relates the - key and values. - properties: - key: - description: key is the label key that the selector applies - to. - type: string - operator: - description: operator represents a key's relationship - to a set of values. Valid operators are In, NotIn, Exists - and DoesNotExist. - type: string - values: - description: values is an array of string values. If the - operator is In or NotIn, the values array must be non-empty. - If the operator is Exists or DoesNotExist, the values - array must be empty. This array is replaced during a - strategic merge patch. - items: + type: object + type: array + ipAddressPools: + description: + The list of IPAddressPools to advertise via this advertisement, + selected by name. + items: + type: string + type: array + localPref: + description: + The BGP LOCAL_PREF attribute which is used by BGP best + path algorithm, Path with higher localpref is preferred over one + with lower localpref. + format: int32 + type: integer + nodeSelectors: + description: + NodeSelectors allows to limit the nodes to announce as + next hops for the LoadBalancer IP. When empty, all the nodes having are + announced as next hops. + items: + description: + A label selector is a label query over a set of resources. + The result of matchLabels and matchExpressions are ANDed. An empty + label selector matches all objects. A null label selector matches + no objects. + properties: + matchExpressions: + description: + matchExpressions is a list of label selector requirements. + The requirements are ANDed. + items: + description: + A label selector requirement is a selector that + contains values, a key, and an operator that relates the + key and values. + properties: + key: + description: + key is the label key that the selector applies + to. + type: string + operator: + description: + operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, Exists + and DoesNotExist. type: string - type: array - required: - - key - - operator + values: + description: + values is an array of string values. If the + operator is In or NotIn, the values array must be non-empty. + If the operator is Exists or DoesNotExist, the values + array must be empty. This array is replaced during a + strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: + matchLabels is a map of {key,value} pairs. A single + {key,value} in the matchLabels map is equivalent to an element + of matchExpressions, whose key field is "key", the operator + is "In", and the values array contains only "value". The requirements + are ANDed. type: object - type: array - matchLabels: - additionalProperties: - type: string - description: matchLabels is a map of {key,value} pairs. A single - {key,value} in the matchLabels map is equivalent to an element - of matchExpressions, whose key field is "key", the operator - is "In", and the values array contains only "value". The requirements - are ANDed. - type: object - type: object - type: array - peers: - description: Peers limits the bgppeer to advertise the ips of the - selected pools to. When empty, the loadbalancer IP is announced - to all the BGPPeers configured. - items: - type: string - type: array - type: object - status: - description: BGPAdvertisementStatus defines the observed state of BGPAdvertisement. - type: object - type: object - served: true - storage: true - subresources: - status: {} + type: object + type: array + peers: + description: + Peers limits the bgppeer to advertise the ips of the + selected pools to. When empty, the loadbalancer IP is announced + to all the BGPPeers configured. + items: + type: string + type: array + type: object + status: + description: BGPAdvertisementStatus defines the observed state of BGPAdvertisement. + type: object + type: object + served: true + storage: true + subresources: + status: {} status: acceptedNames: kind: "" @@ -534,8 +591,8 @@ spec: namespace: metallb-system path: /convert conversionReviewVersions: - - v1beta1 - - v1beta2 + - v1beta1 + - v1beta2 group: metallb.io names: kind: BGPPeer @@ -544,254 +601,274 @@ spec: singular: bgppeer scope: Namespaced versions: - - name: v1beta1 - schema: - openAPIV3Schema: - description: BGPPeer is the Schema for the peers API. - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: BGPPeerSpec defines the desired state of Peer. - properties: - bfdProfile: - type: string - ebgpMultiHop: - description: EBGP peer is multi-hops away - type: boolean - holdTime: - description: Requested BGP hold time, per RFC4271. - type: string - keepaliveTime: - description: Requested BGP keepalive time, per RFC4271. - type: string - myASN: - description: AS number to use for the local end of the session. - format: int32 - maximum: 4294967295 - minimum: 0 - type: integer - nodeSelectors: - description: Only connect to this peer on nodes that match one of - these selectors. - items: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + - name: v1beta1 + schema: + openAPIV3Schema: + description: BGPPeer is the Schema for the peers API. + properties: + apiVersion: + description: + "APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: + "Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + metadata: + type: object + spec: + description: BGPPeerSpec defines the desired state of Peer. + properties: + bfdProfile: + type: string + ebgpMultiHop: + description: EBGP peer is multi-hops away + type: boolean + holdTime: + description: Requested BGP hold time, per RFC4271. + type: string + keepaliveTime: + description: Requested BGP keepalive time, per RFC4271. + type: string + myASN: + description: AS number to use for the local end of the session. + format: int32 + maximum: 4294967295 + minimum: 0 + type: integer + nodeSelectors: + description: + Only connect to this peer on nodes that match one of + these selectors. + items: + properties: + matchExpressions: + items: + properties: + key: type: string - minItems: 1 - type: array - required: - - key - - operator - - values + operator: + type: string + values: + items: + type: string + minItems: 1 + type: array + required: + - key + - operator + - values + type: object + type: array + matchLabels: + additionalProperties: + type: string type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - type: array - password: - description: Authentication password for routers enforcing TCP MD5 - authenticated sessions - type: string - peerASN: - description: AS number to expect from the remote end of the session. - format: int32 - maximum: 4294967295 - minimum: 0 - type: integer - peerAddress: - description: Address to dial when establishing the session. - type: string - peerPort: - description: Port to dial when establishing the session. - maximum: 16384 - minimum: 0 - type: integer - routerID: - description: BGP router ID to advertise to the peer - type: string - sourceAddress: - description: Source address to use when establishing the session. - type: string - required: - - myASN - - peerASN - - peerAddress - type: object - status: - description: BGPPeerStatus defines the observed state of Peer. - type: object - type: object - served: true - storage: false - subresources: - status: {} - - name: v1beta2 - schema: - openAPIV3Schema: - description: BGPPeer is the Schema for the peers API. - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: BGPPeerSpec defines the desired state of Peer. - properties: - bfdProfile: - description: The name of the BFD Profile to be used for the BFD session - associated to the BGP session. If not set, the BFD session won't - be set up. - type: string - ebgpMultiHop: - description: To set if the BGPPeer is multi-hops away. Needed for - FRR mode only. - type: boolean - holdTime: - description: Requested BGP hold time, per RFC4271. - type: string - keepaliveTime: - description: Requested BGP keepalive time, per RFC4271. - type: string - myASN: - description: AS number to use for the local end of the session. - format: int32 - maximum: 4294967295 - minimum: 0 - type: integer - nodeSelectors: - description: Only connect to this peer on nodes that match one of - these selectors. - items: - description: A label selector is a label query over a set of resources. - The result of matchLabels and matchExpressions are ANDed. An empty - label selector matches all objects. A null label selector matches - no objects. - properties: - matchExpressions: - description: matchExpressions is a list of label selector requirements. - The requirements are ANDed. - items: - description: A label selector requirement is a selector that - contains values, a key, and an operator that relates the - key and values. - properties: - key: - description: key is the label key that the selector applies - to. - type: string - operator: - description: operator represents a key's relationship - to a set of values. Valid operators are In, NotIn, Exists - and DoesNotExist. - type: string - values: - description: values is an array of string values. If the - operator is In or NotIn, the values array must be non-empty. - If the operator is Exists or DoesNotExist, the values - array must be empty. This array is replaced during a - strategic merge patch. - items: + type: object + type: array + password: + description: + Authentication password for routers enforcing TCP MD5 + authenticated sessions + type: string + peerASN: + description: AS number to expect from the remote end of the session. + format: int32 + maximum: 4294967295 + minimum: 0 + type: integer + peerAddress: + description: Address to dial when establishing the session. + type: string + peerPort: + description: Port to dial when establishing the session. + maximum: 16384 + minimum: 0 + type: integer + routerID: + description: BGP router ID to advertise to the peer + type: string + sourceAddress: + description: Source address to use when establishing the session. + type: string + required: + - myASN + - peerASN + - peerAddress + type: object + status: + description: BGPPeerStatus defines the observed state of Peer. + type: object + type: object + served: true + storage: false + subresources: + status: {} + - name: v1beta2 + schema: + openAPIV3Schema: + description: BGPPeer is the Schema for the peers API. + properties: + apiVersion: + description: + "APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: + "Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + metadata: + type: object + spec: + description: BGPPeerSpec defines the desired state of Peer. + properties: + bfdProfile: + description: + The name of the BFD Profile to be used for the BFD session + associated to the BGP session. If not set, the BFD session won't + be set up. + type: string + ebgpMultiHop: + description: + To set if the BGPPeer is multi-hops away. Needed for + FRR mode only. + type: boolean + holdTime: + description: Requested BGP hold time, per RFC4271. + type: string + keepaliveTime: + description: Requested BGP keepalive time, per RFC4271. + type: string + myASN: + description: AS number to use for the local end of the session. + format: int32 + maximum: 4294967295 + minimum: 0 + type: integer + nodeSelectors: + description: + Only connect to this peer on nodes that match one of + these selectors. + items: + description: + A label selector is a label query over a set of resources. + The result of matchLabels and matchExpressions are ANDed. An empty + label selector matches all objects. A null label selector matches + no objects. + properties: + matchExpressions: + description: + matchExpressions is a list of label selector requirements. + The requirements are ANDed. + items: + description: + A label selector requirement is a selector that + contains values, a key, and an operator that relates the + key and values. + properties: + key: + description: + key is the label key that the selector applies + to. type: string - type: array - required: - - key - - operator + operator: + description: + operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: + values is an array of string values. If the + operator is In or NotIn, the values array must be non-empty. + If the operator is Exists or DoesNotExist, the values + array must be empty. This array is replaced during a + strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: + matchLabels is a map of {key,value} pairs. A single + {key,value} in the matchLabels map is equivalent to an element + of matchExpressions, whose key field is "key", the operator + is "In", and the values array contains only "value". The requirements + are ANDed. type: object - type: array - matchLabels: - additionalProperties: - type: string - description: matchLabels is a map of {key,value} pairs. A single - {key,value} in the matchLabels map is equivalent to an element - of matchExpressions, whose key field is "key", the operator - is "In", and the values array contains only "value". The requirements - are ANDed. - type: object + type: object + type: array + password: + description: + Authentication password for routers enforcing TCP MD5 + authenticated sessions + type: string + passwordSecret: + description: + passwordSecret is name of the authentication secret for + BGP Peer. the secret must be of type "kubernetes.io/basic-auth", + and created in the same namespace as the MetalLB deployment. The + password is stored in the secret as the key "password". + properties: + name: + description: + name is unique within a namespace to reference a + secret resource. + type: string + namespace: + description: + namespace defines the space within which the secret + name must be unique. + type: string type: object - type: array - password: - description: Authentication password for routers enforcing TCP MD5 - authenticated sessions - type: string - passwordSecret: - description: passwordSecret is name of the authentication secret for - BGP Peer. the secret must be of type "kubernetes.io/basic-auth", - and created in the same namespace as the MetalLB deployment. The - password is stored in the secret as the key "password". - properties: - name: - description: name is unique within a namespace to reference a - secret resource. - type: string - namespace: - description: namespace defines the space within which the secret - name must be unique. - type: string - type: object - peerASN: - description: AS number to expect from the remote end of the session. - format: int32 - maximum: 4294967295 - minimum: 0 - type: integer - peerAddress: - description: Address to dial when establishing the session. - type: string - peerPort: - default: 179 - description: Port to dial when establishing the session. - maximum: 16384 - minimum: 0 - type: integer - routerID: - description: BGP router ID to advertise to the peer - type: string - sourceAddress: - description: Source address to use when establishing the session. - type: string - required: - - myASN - - peerASN - - peerAddress - type: object - status: - description: BGPPeerStatus defines the observed state of Peer. - type: object - type: object - served: true - storage: true - subresources: - status: {} + peerASN: + description: AS number to expect from the remote end of the session. + format: int32 + maximum: 4294967295 + minimum: 0 + type: integer + peerAddress: + description: Address to dial when establishing the session. + type: string + peerPort: + default: 179 + description: Port to dial when establishing the session. + maximum: 16384 + minimum: 0 + type: integer + routerID: + description: BGP router ID to advertise to the peer + type: string + sourceAddress: + description: Source address to use when establishing the session. + type: string + required: + - myASN + - peerASN + - peerAddress + type: object + status: + description: BGPPeerStatus defines the observed state of Peer. + type: object + type: object + served: true + storage: true + subresources: + status: {} status: acceptedNames: kind: "" @@ -815,48 +892,52 @@ spec: singular: community scope: Namespaced versions: - - name: v1beta1 - schema: - openAPIV3Schema: - description: Community is a collection of aliases for communities. Users can - define named aliases to be used in the BGPPeer CRD. - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: CommunitySpec defines the desired state of Community. - properties: - communities: - items: - properties: - name: - description: The name of the alias for the community. - type: string - value: - description: The BGP community value corresponding to the given - name. - type: string - type: object - type: array - type: object - status: - description: CommunityStatus defines the observed state of Community. - type: object - type: object - served: true - storage: true - subresources: - status: {} + - name: v1beta1 + schema: + openAPIV3Schema: + description: + Community is a collection of aliases for communities. Users can + define named aliases to be used in the BGPPeer CRD. + properties: + apiVersion: + description: + "APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: + "Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + metadata: + type: object + spec: + description: CommunitySpec defines the desired state of Community. + properties: + communities: + items: + properties: + name: + description: The name of the alias for the community. + type: string + value: + description: + The BGP community value corresponding to the given + name. + type: string + type: object + type: array + type: object + status: + description: CommunityStatus defines the observed state of Community. + type: object + type: object + served: true + storage: true + subresources: + status: {} status: acceptedNames: kind: "" @@ -880,58 +961,64 @@ spec: singular: ipaddresspool scope: Namespaced versions: - - name: v1beta1 - schema: - openAPIV3Schema: - description: IPAddressPool represents a pool of IP addresses that can be allocated - to LoadBalancer services. - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: IPAddressPoolSpec defines the desired state of IPAddressPool. - properties: - addresses: - description: A list of IP address ranges over which MetalLB has authority. - You can list multiple ranges in a single pool, they will all share - the same settings. Each range can be either a CIDR prefix, or an - explicit start-end range of IPs. - items: - type: string - type: array - autoAssign: - default: true - description: AutoAssign flag used to prevent MetallB from automatic - allocation for a pool. - type: boolean - avoidBuggyIPs: - default: false - description: AvoidBuggyIPs prevents addresses ending with .0 and .255 - to be used by a pool. - type: boolean - required: - - addresses - type: object - status: - description: IPAddressPoolStatus defines the observed state of IPAddressPool. - type: object - required: - - spec - type: object - served: true - storage: true - subresources: - status: {} + - name: v1beta1 + schema: + openAPIV3Schema: + description: + IPAddressPool represents a pool of IP addresses that can be allocated + to LoadBalancer services. + properties: + apiVersion: + description: + "APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: + "Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + metadata: + type: object + spec: + description: IPAddressPoolSpec defines the desired state of IPAddressPool. + properties: + addresses: + description: + A list of IP address ranges over which MetalLB has authority. + You can list multiple ranges in a single pool, they will all share + the same settings. Each range can be either a CIDR prefix, or an + explicit start-end range of IPs. + items: + type: string + type: array + autoAssign: + default: true + description: + AutoAssign flag used to prevent MetallB from automatic + allocation for a pool. + type: boolean + avoidBuggyIPs: + default: false + description: + AvoidBuggyIPs prevents addresses ending with .0 and .255 + to be used by a pool. + type: boolean + required: + - addresses + type: object + status: + description: IPAddressPoolStatus defines the observed state of IPAddressPool. + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} status: acceptedNames: kind: "" @@ -955,146 +1042,166 @@ spec: singular: l2advertisement scope: Namespaced versions: - - name: v1beta1 - schema: - openAPIV3Schema: - description: L2Advertisement allows to advertise the LoadBalancer IPs provided - by the selected pools via L2. - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: L2AdvertisementSpec defines the desired state of L2Advertisement. - properties: - ipAddressPoolSelectors: - description: A selector for the IPAddressPools which would get advertised - via this advertisement. If no IPAddressPool is selected by this - or by the list, the advertisement is applied to all the IPAddressPools. - items: - description: A label selector is a label query over a set of resources. - The result of matchLabels and matchExpressions are ANDed. An empty - label selector matches all objects. A null label selector matches - no objects. - properties: - matchExpressions: - description: matchExpressions is a list of label selector requirements. - The requirements are ANDed. - items: - description: A label selector requirement is a selector that - contains values, a key, and an operator that relates the - key and values. - properties: - key: - description: key is the label key that the selector applies - to. - type: string - operator: - description: operator represents a key's relationship - to a set of values. Valid operators are In, NotIn, Exists - and DoesNotExist. - type: string - values: - description: values is an array of string values. If the - operator is In or NotIn, the values array must be non-empty. - If the operator is Exists or DoesNotExist, the values - array must be empty. This array is replaced during a - strategic merge patch. - items: + - name: v1beta1 + schema: + openAPIV3Schema: + description: + L2Advertisement allows to advertise the LoadBalancer IPs provided + by the selected pools via L2. + properties: + apiVersion: + description: + "APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: + "Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + metadata: + type: object + spec: + description: L2AdvertisementSpec defines the desired state of L2Advertisement. + properties: + ipAddressPoolSelectors: + description: + A selector for the IPAddressPools which would get advertised + via this advertisement. If no IPAddressPool is selected by this + or by the list, the advertisement is applied to all the IPAddressPools. + items: + description: + A label selector is a label query over a set of resources. + The result of matchLabels and matchExpressions are ANDed. An empty + label selector matches all objects. A null label selector matches + no objects. + properties: + matchExpressions: + description: + matchExpressions is a list of label selector requirements. + The requirements are ANDed. + items: + description: + A label selector requirement is a selector that + contains values, a key, and an operator that relates the + key and values. + properties: + key: + description: + key is the label key that the selector applies + to. type: string - type: array - required: - - key - - operator + operator: + description: + operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: + values is an array of string values. If the + operator is In or NotIn, the values array must be non-empty. + If the operator is Exists or DoesNotExist, the values + array must be empty. This array is replaced during a + strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: + matchLabels is a map of {key,value} pairs. A single + {key,value} in the matchLabels map is equivalent to an element + of matchExpressions, whose key field is "key", the operator + is "In", and the values array contains only "value". The requirements + are ANDed. type: object - type: array - matchLabels: - additionalProperties: - type: string - description: matchLabels is a map of {key,value} pairs. A single - {key,value} in the matchLabels map is equivalent to an element - of matchExpressions, whose key field is "key", the operator - is "In", and the values array contains only "value". The requirements - are ANDed. - type: object - type: object - type: array - ipAddressPools: - description: The list of IPAddressPools to advertise via this advertisement, - selected by name. - items: - type: string - type: array - nodeSelectors: - description: NodeSelectors allows to limit the nodes to announce as - next hops for the LoadBalancer IP. When empty, all the nodes having are - announced as next hops. - items: - description: A label selector is a label query over a set of resources. - The result of matchLabels and matchExpressions are ANDed. An empty - label selector matches all objects. A null label selector matches - no objects. - properties: - matchExpressions: - description: matchExpressions is a list of label selector requirements. - The requirements are ANDed. - items: - description: A label selector requirement is a selector that - contains values, a key, and an operator that relates the - key and values. - properties: - key: - description: key is the label key that the selector applies - to. - type: string - operator: - description: operator represents a key's relationship - to a set of values. Valid operators are In, NotIn, Exists - and DoesNotExist. - type: string - values: - description: values is an array of string values. If the - operator is In or NotIn, the values array must be non-empty. - If the operator is Exists or DoesNotExist, the values - array must be empty. This array is replaced during a - strategic merge patch. - items: + type: object + type: array + ipAddressPools: + description: + The list of IPAddressPools to advertise via this advertisement, + selected by name. + items: + type: string + type: array + nodeSelectors: + description: + NodeSelectors allows to limit the nodes to announce as + next hops for the LoadBalancer IP. When empty, all the nodes having are + announced as next hops. + items: + description: + A label selector is a label query over a set of resources. + The result of matchLabels and matchExpressions are ANDed. An empty + label selector matches all objects. A null label selector matches + no objects. + properties: + matchExpressions: + description: + matchExpressions is a list of label selector requirements. + The requirements are ANDed. + items: + description: + A label selector requirement is a selector that + contains values, a key, and an operator that relates the + key and values. + properties: + key: + description: + key is the label key that the selector applies + to. type: string - type: array - required: - - key - - operator + operator: + description: + operator represents a key's relationship + to a set of values. Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: + values is an array of string values. If the + operator is In or NotIn, the values array must be non-empty. + If the operator is Exists or DoesNotExist, the values + array must be empty. This array is replaced during a + strategic merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + matchLabels: + additionalProperties: + type: string + description: + matchLabels is a map of {key,value} pairs. A single + {key,value} in the matchLabels map is equivalent to an element + of matchExpressions, whose key field is "key", the operator + is "In", and the values array contains only "value". The requirements + are ANDed. type: object - type: array - matchLabels: - additionalProperties: - type: string - description: matchLabels is a map of {key,value} pairs. A single - {key,value} in the matchLabels map is equivalent to an element - of matchExpressions, whose key field is "key", the operator - is "In", and the values array contains only "value". The requirements - are ANDed. - type: object - type: object - type: array - type: object - status: - description: L2AdvertisementStatus defines the observed state of L2Advertisement. - type: object - type: object - served: true - storage: true - subresources: - status: {} + type: object + type: array + type: object + status: + description: L2AdvertisementStatus defines the observed state of L2Advertisement. + type: object + type: object + served: true + storage: true + subresources: + status: {} status: acceptedNames: kind: "" @@ -1126,89 +1233,89 @@ metadata: name: controller namespace: metallb-system rules: -- apiGroups: - - "" - resources: - - secrets - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resourceNames: - - memberlist - resources: - - secrets - verbs: - - list -- apiGroups: - - apps - resourceNames: - - controller - resources: - - deployments - verbs: - - get -- apiGroups: - - metallb.io - resources: - - bgppeers - verbs: - - get - - list -- apiGroups: - - metallb.io - resources: - - addresspools - verbs: - - get - - list - - watch -- apiGroups: - - metallb.io - resources: - - bfdprofiles - verbs: - - get - - list - - watch -- apiGroups: - - metallb.io - resources: - - ipaddresspools - verbs: - - get - - list - - watch -- apiGroups: - - metallb.io - resources: - - bgpadvertisements - verbs: - - get - - list - - watch -- apiGroups: - - metallb.io - resources: - - l2advertisements - verbs: - - get - - list - - watch -- apiGroups: - - metallb.io - resources: - - communities - verbs: - - get - - list - - watch + - apiGroups: + - "" + resources: + - secrets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - "" + resourceNames: + - memberlist + resources: + - secrets + verbs: + - list + - apiGroups: + - apps + resourceNames: + - controller + resources: + - deployments + verbs: + - get + - apiGroups: + - metallb.io + resources: + - bgppeers + verbs: + - get + - list + - apiGroups: + - metallb.io + resources: + - addresspools + verbs: + - get + - list + - watch + - apiGroups: + - metallb.io + resources: + - bfdprofiles + verbs: + - get + - list + - watch + - apiGroups: + - metallb.io + resources: + - ipaddresspools + verbs: + - get + - list + - watch + - apiGroups: + - metallb.io + resources: + - bgpadvertisements + verbs: + - get + - list + - watch + - apiGroups: + - metallb.io + resources: + - l2advertisements + verbs: + - get + - list + - watch + - apiGroups: + - metallb.io + resources: + - communities + verbs: + - get + - list + - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role @@ -1218,76 +1325,76 @@ metadata: name: pod-lister namespace: metallb-system rules: -- apiGroups: - - "" - resources: - - pods - verbs: - - list -- apiGroups: - - "" - resources: - - secrets - verbs: - - get - - list - - watch -- apiGroups: - - metallb.io - resources: - - addresspools - verbs: - - get - - list - - watch -- apiGroups: - - metallb.io - resources: - - bfdprofiles - verbs: - - get - - list - - watch -- apiGroups: - - metallb.io - resources: - - bgppeers - verbs: - - get - - list - - watch -- apiGroups: - - metallb.io - resources: - - l2advertisements - verbs: - - get - - list - - watch -- apiGroups: - - metallb.io - resources: - - bgpadvertisements - verbs: - - get - - list - - watch -- apiGroups: - - metallb.io - resources: - - ipaddresspools - verbs: - - get - - list - - watch -- apiGroups: - - metallb.io - resources: - - communities - verbs: - - get - - list - - watch + - apiGroups: + - "" + resources: + - pods + verbs: + - list + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - list + - watch + - apiGroups: + - metallb.io + resources: + - addresspools + verbs: + - get + - list + - watch + - apiGroups: + - metallb.io + resources: + - bfdprofiles + verbs: + - get + - list + - watch + - apiGroups: + - metallb.io + resources: + - bgppeers + verbs: + - get + - list + - watch + - apiGroups: + - metallb.io + resources: + - l2advertisements + verbs: + - get + - list + - watch + - apiGroups: + - metallb.io + resources: + - bgpadvertisements + verbs: + - get + - list + - watch + - apiGroups: + - metallb.io + resources: + - ipaddresspools + verbs: + - get + - list + - watch + - apiGroups: + - metallb.io + resources: + - communities + verbs: + - get + - list + - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole @@ -1296,60 +1403,60 @@ metadata: app: metallb name: metallb-system:controller rules: -- apiGroups: - - "" - resources: - - services - verbs: - - get - - list - - watch -- apiGroups: - - "" - resources: - - services/status - verbs: - - update -- apiGroups: - - "" - resources: - - events - verbs: - - create - - patch -- apiGroups: - - policy - resourceNames: - - controller - resources: - - podsecuritypolicies - verbs: - - use -- apiGroups: - - admissionregistration.k8s.io - resources: - - validatingwebhookconfigurations - - mutatingwebhookconfigurations - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - apiextensions.k8s.io - resources: - - customresourcedefinitions - verbs: - - create - - delete - - get - - list - - patch - - update - - watch + - apiGroups: + - "" + resources: + - services + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - services/status + verbs: + - update + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch + - apiGroups: + - policy + resourceNames: + - controller + resources: + - podsecuritypolicies + verbs: + - use + - apiGroups: + - admissionregistration.k8s.io + resources: + - validatingwebhookconfigurations + - mutatingwebhookconfigurations + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - create + - delete + - get + - list + - patch + - update + - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole @@ -1358,39 +1465,39 @@ metadata: app: metallb name: metallb-system:speaker rules: -- apiGroups: - - "" - resources: - - services - - endpoints - - nodes - verbs: - - get - - list - - watch -- apiGroups: - - discovery.k8s.io - resources: - - endpointslices - verbs: - - get - - list - - watch -- apiGroups: - - "" - resources: - - events - verbs: - - create - - patch -- apiGroups: - - policy - resourceNames: - - speaker - resources: - - podsecuritypolicies - verbs: - - use + - apiGroups: + - "" + resources: + - services + - endpoints + - nodes + verbs: + - get + - list + - watch + - apiGroups: + - discovery.k8s.io + resources: + - endpointslices + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch + - apiGroups: + - policy + resourceNames: + - speaker + resources: + - podsecuritypolicies + verbs: + - use --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -1404,9 +1511,9 @@ roleRef: kind: Role name: controller subjects: -- kind: ServiceAccount - name: controller - namespace: metallb-system + - kind: ServiceAccount + name: controller + namespace: metallb-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -1420,9 +1527,9 @@ roleRef: kind: Role name: pod-lister subjects: -- kind: ServiceAccount - name: speaker - namespace: metallb-system + - kind: ServiceAccount + name: speaker + namespace: metallb-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -1435,9 +1542,9 @@ roleRef: kind: ClusterRole name: metallb-system:controller subjects: -- kind: ServiceAccount - name: controller - namespace: metallb-system + - kind: ServiceAccount + name: controller + namespace: metallb-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -1450,9 +1557,9 @@ roleRef: kind: ClusterRole name: metallb-system:speaker subjects: -- kind: ServiceAccount - name: speaker - namespace: metallb-system + - kind: ServiceAccount + name: speaker + namespace: metallb-system --- apiVersion: v1 kind: Secret @@ -1467,8 +1574,8 @@ metadata: namespace: metallb-system spec: ports: - - port: 443 - targetPort: 9443 + - port: 443 + targetPort: 9443 selector: component: controller --- @@ -1496,50 +1603,50 @@ spec: component: controller spec: containers: - - args: - - --port=7472 - - --log-level=info - env: - - name: METALLB_ML_SECRET_NAME - value: memberlist - - name: METALLB_DEPLOYMENT - value: controller - image: us-west1-docker.pkg.dev/kne-external/kne/metallb/controller:v0.13.5 - livenessProbe: - failureThreshold: 3 - httpGet: - path: /metrics - port: monitoring - initialDelaySeconds: 10 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 1 - name: controller - ports: - - containerPort: 7472 - name: monitoring - - containerPort: 9443 - name: webhook-server - protocol: TCP - readinessProbe: - failureThreshold: 3 - httpGet: - path: /metrics - port: monitoring - initialDelaySeconds: 10 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 1 - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - all - readOnlyRootFilesystem: true - volumeMounts: - - mountPath: /tmp/k8s-webhook-server/serving-certs - name: cert - readOnly: true + - args: + - --port=7472 + - --log-level=info + env: + - name: METALLB_ML_SECRET_NAME + value: memberlist + - name: METALLB_DEPLOYMENT + value: controller + image: us-west1-docker.pkg.dev/kne-external/kne/metallb/controller:v0.13.5 + livenessProbe: + failureThreshold: 3 + httpGet: + path: /metrics + port: monitoring + initialDelaySeconds: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + name: controller + ports: + - containerPort: 7472 + name: monitoring + - containerPort: 9443 + name: webhook-server + protocol: TCP + readinessProbe: + failureThreshold: 3 + httpGet: + path: /metrics + port: monitoring + initialDelaySeconds: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - all + readOnlyRootFilesystem: true + volumeMounts: + - mountPath: /tmp/k8s-webhook-server/serving-certs + name: cert + readOnly: true nodeSelector: kubernetes.io/os: linux securityContext: @@ -1549,10 +1656,10 @@ spec: serviceAccountName: controller terminationGracePeriodSeconds: 0 volumes: - - name: cert - secret: - defaultMode: 420 - secretName: webhook-server-cert + - name: cert + secret: + defaultMode: 420 + secretName: webhook-server-cert --- apiVersion: apps/v1 kind: DaemonSet @@ -1577,77 +1684,77 @@ spec: component: speaker spec: containers: - - args: - - --port=7472 - - --log-level=info - env: - - name: METALLB_NODE_NAME - valueFrom: - fieldRef: - fieldPath: spec.nodeName - - name: METALLB_HOST - valueFrom: - fieldRef: - fieldPath: status.hostIP - - name: METALLB_ML_BIND_ADDR - valueFrom: - fieldRef: - fieldPath: status.podIP - - name: METALLB_ML_LABELS - value: app=metallb,component=speaker - - name: METALLB_ML_SECRET_KEY - valueFrom: - secretKeyRef: - key: secretkey - name: memberlist - image: us-west1-docker.pkg.dev/kne-external/kne/metallb/speaker:v0.13.5 - livenessProbe: - failureThreshold: 3 - httpGet: - path: /metrics - port: monitoring - initialDelaySeconds: 10 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 1 - name: speaker - ports: - - containerPort: 7472 - name: monitoring - - containerPort: 7946 - name: memberlist-tcp - - containerPort: 7946 - name: memberlist-udp - protocol: UDP - readinessProbe: - failureThreshold: 3 - httpGet: - path: /metrics - port: monitoring - initialDelaySeconds: 10 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 1 - securityContext: - allowPrivilegeEscalation: false - capabilities: - add: - - NET_RAW - drop: - - ALL - readOnlyRootFilesystem: true + - args: + - --port=7472 + - --log-level=info + env: + - name: METALLB_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: METALLB_HOST + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: METALLB_ML_BIND_ADDR + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: METALLB_ML_LABELS + value: app=metallb,component=speaker + - name: METALLB_ML_SECRET_KEY + valueFrom: + secretKeyRef: + key: secretkey + name: memberlist + image: us-west1-docker.pkg.dev/kne-external/kne/metallb/speaker:v0.13.5 + livenessProbe: + failureThreshold: 3 + httpGet: + path: /metrics + port: monitoring + initialDelaySeconds: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + name: speaker + ports: + - containerPort: 7472 + name: monitoring + - containerPort: 7946 + name: memberlist-tcp + - containerPort: 7946 + name: memberlist-udp + protocol: UDP + readinessProbe: + failureThreshold: 3 + httpGet: + path: /metrics + port: monitoring + initialDelaySeconds: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + securityContext: + allowPrivilegeEscalation: false + capabilities: + add: + - NET_RAW + drop: + - ALL + readOnlyRootFilesystem: true hostNetwork: true nodeSelector: kubernetes.io/os: linux serviceAccountName: speaker terminationGracePeriodSeconds: 2 tolerations: - - effect: NoSchedule - key: node-role.kubernetes.io/master - operator: Exists - - effect: NoSchedule - key: node-role.kubernetes.io/control-plane - operator: Exists + - effect: NoSchedule + key: node-role.kubernetes.io/master + operator: Exists + - effect: NoSchedule + key: node-role.kubernetes.io/control-plane + operator: Exists --- apiVersion: admissionregistration.k8s.io/v1 kind: ValidatingWebhookConfiguration @@ -1655,143 +1762,143 @@ metadata: creationTimestamp: null name: metallb-webhook-configuration webhooks: -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: webhook-service - namespace: metallb-system - path: /validate-metallb-io-v1beta2-bgppeer - failurePolicy: Fail - name: bgppeersvalidationwebhook.metallb.io - rules: - - apiGroups: - - metallb.io - apiVersions: - - v1beta2 - operations: - - CREATE - - UPDATE - resources: - - bgppeers - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: webhook-service - namespace: metallb-system - path: /validate-metallb-io-v1beta1-addresspool - failurePolicy: Fail - name: addresspoolvalidationwebhook.metallb.io - rules: - - apiGroups: - - metallb.io - apiVersions: - - v1beta1 - operations: - - CREATE - - UPDATE - resources: - - addresspools - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: webhook-service - namespace: metallb-system - path: /validate-metallb-io-v1beta1-bfdprofile - failurePolicy: Fail - name: bfdprofilevalidationwebhook.metallb.io - rules: - - apiGroups: - - metallb.io - apiVersions: - - v1beta1 - operations: - - CREATE - - DELETE - resources: - - bfdprofiles - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: webhook-service - namespace: metallb-system - path: /validate-metallb-io-v1beta1-bgpadvertisement - failurePolicy: Fail - name: bgpadvertisementvalidationwebhook.metallb.io - rules: - - apiGroups: - - metallb.io - apiVersions: - - v1beta1 - operations: - - CREATE - - UPDATE - resources: - - bgpadvertisements - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: webhook-service - namespace: metallb-system - path: /validate-metallb-io-v1beta1-community - failurePolicy: Fail - name: communityvalidationwebhook.metallb.io - rules: - - apiGroups: - - metallb.io - apiVersions: - - v1beta1 - operations: - - CREATE - - UPDATE - resources: - - communities - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: webhook-service - namespace: metallb-system - path: /validate-metallb-io-v1beta1-ipaddresspool - failurePolicy: Fail - name: ipaddresspoolvalidationwebhook.metallb.io - rules: - - apiGroups: - - metallb.io - apiVersions: - - v1beta1 - operations: - - CREATE - - UPDATE - resources: - - ipaddresspools - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: webhook-service - namespace: metallb-system - path: /validate-metallb-io-v1beta1-l2advertisement - failurePolicy: Fail - name: l2advertisementvalidationwebhook.metallb.io - rules: - - apiGroups: - - metallb.io - apiVersions: - - v1beta1 - operations: - - CREATE - - UPDATE - resources: - - l2advertisements - sideEffects: None + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: webhook-service + namespace: metallb-system + path: /validate-metallb-io-v1beta2-bgppeer + failurePolicy: Fail + name: bgppeersvalidationwebhook.metallb.io + rules: + - apiGroups: + - metallb.io + apiVersions: + - v1beta2 + operations: + - CREATE + - UPDATE + resources: + - bgppeers + sideEffects: None + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: webhook-service + namespace: metallb-system + path: /validate-metallb-io-v1beta1-addresspool + failurePolicy: Fail + name: addresspoolvalidationwebhook.metallb.io + rules: + - apiGroups: + - metallb.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - addresspools + sideEffects: None + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: webhook-service + namespace: metallb-system + path: /validate-metallb-io-v1beta1-bfdprofile + failurePolicy: Fail + name: bfdprofilevalidationwebhook.metallb.io + rules: + - apiGroups: + - metallb.io + apiVersions: + - v1beta1 + operations: + - CREATE + - DELETE + resources: + - bfdprofiles + sideEffects: None + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: webhook-service + namespace: metallb-system + path: /validate-metallb-io-v1beta1-bgpadvertisement + failurePolicy: Fail + name: bgpadvertisementvalidationwebhook.metallb.io + rules: + - apiGroups: + - metallb.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - bgpadvertisements + sideEffects: None + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: webhook-service + namespace: metallb-system + path: /validate-metallb-io-v1beta1-community + failurePolicy: Fail + name: communityvalidationwebhook.metallb.io + rules: + - apiGroups: + - metallb.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - communities + sideEffects: None + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: webhook-service + namespace: metallb-system + path: /validate-metallb-io-v1beta1-ipaddresspool + failurePolicy: Fail + name: ipaddresspoolvalidationwebhook.metallb.io + rules: + - apiGroups: + - metallb.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - ipaddresspools + sideEffects: None + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: webhook-service + namespace: metallb-system + path: /validate-metallb-io-v1beta1-l2advertisement + failurePolicy: Fail + name: l2advertisementvalidationwebhook.metallb.io + rules: + - apiGroups: + - metallb.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - l2advertisements + sideEffects: None diff --git a/logshim/logshim_test.go b/logshim/logshim_test.go index d63735c2a..114254235 100644 --- a/logshim/logshim_test.go +++ b/logshim/logshim_test.go @@ -36,10 +36,12 @@ Prefix:Line 3 want3 := want2 + `Prefix:partial line 2 ` // Writing with a partial line. - s.Write([]byte(`Line 1 + if _, err := s.Write([]byte(`Line 1 Line 2 Line 3 -partial line 1`)) +partial line 1`)); err != nil { + t.Fatalf("Write failed: %v", err) + } if got := b.String(); got != want1 { t.Errorf("First: Got %q, want %q", got, want1) } @@ -54,7 +56,9 @@ partial line 1`)) } // Write another partial line and close the shim - s.Write([]byte(`partial line 2`)) + if _, err := s.Write([]byte(`partial line 2`)); err != nil { + t.Fatalf("Write failed: %v", err) + } s.Close() if got := b.String(); got != want3 { t.Errorf("Second: Got %q, want %q", got, want3) diff --git a/manifests/base/kustomization.yaml b/manifests/base/kustomization.yaml index 10db6cfa8..aef5c5f36 100644 --- a/manifests/base/kustomization.yaml +++ b/manifests/base/kustomization.yaml @@ -1,10 +1,10 @@ +--- apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: neo4j commonLabels: app: neo4j resources: -- namespace.yaml -- serviceaccount.yaml -- neo4j.yaml - + - namespace.yaml + - serviceaccount.yaml + - neo4j.yaml diff --git a/manifests/base/namespace.yaml b/manifests/base/namespace.yaml index 087d8b0d3..f78e7bb80 100644 --- a/manifests/base/namespace.yaml +++ b/manifests/base/namespace.yaml @@ -1,4 +1,5 @@ +--- apiVersion: v1 kind: Namespace metadata: - name: neo4j \ No newline at end of file + name: neo4j diff --git a/manifests/base/neo4j.yaml b/manifests/base/neo4j.yaml index c5aef9dc3..9bf61586f 100644 --- a/manifests/base/neo4j.yaml +++ b/manifests/base/neo4j.yaml @@ -132,48 +132,48 @@ spec: app: neo4j spec: containers: - - name: neo4j - resources: - requests: - memory: "512Mi" - cpu: "250m" - limits: - memory: "1024Mi" - cpu: "500m" - image: neo4j:latest - ports: - - containerPort: 7474 - - containerPort: 7687 - env: - - name: SIMPLE_SERVICE_VERSION - value: "0.9" - - name: NEO4J_AUTH - value: neo4j/test - - name: NEO4J_dbms_connector_https_advertised__address - value: "localhost:7473" - - name: NEO4J_dbms_connector_http_advertised__address - value: "localhost:7474" - - name: NEO4J_dbms_connector_bolt_advertised__address - value: "localhost:7687" - volumeMounts: + - name: neo4j + resources: + requests: + memory: "512Mi" + cpu: "250m" + limits: + memory: "1024Mi" + cpu: "500m" + image: neo4j:latest + ports: + - containerPort: 7474 + - containerPort: 7687 + env: + - name: SIMPLE_SERVICE_VERSION + value: "0.9" + - name: NEO4J_AUTH + value: neo4j/test + - name: NEO4J_dbms_connector_https_advertised__address + value: "localhost:7473" + - name: NEO4J_dbms_connector_http_advertised__address + value: "localhost:7474" + - name: NEO4J_dbms_connector_bolt_advertised__address + value: "localhost:7687" + volumeMounts: + - name: neo4j-data + mountPath: /data + - name: neo4j-logs + mountPath: /logs + - name: neo4j-plugins + mountPath: /plugins + - name: neo4j-import + mountPath: /var/lib/neo4j/import + volumes: - name: neo4j-data - mountPath: /data + persistentVolumeClaim: + claimName: neo4j-data - name: neo4j-logs - mountPath: /logs + persistentVolumeClaim: + claimName: neo4j-logs - name: neo4j-plugins - mountPath: /plugins + persistentVolumeClaim: + claimName: neo4j-plugins - name: neo4j-import - mountPath: /var/lib/neo4j/import - volumes: - - name: neo4j-data - persistentVolumeClaim: - claimName: neo4j-data - - name: neo4j-logs - persistentVolumeClaim: - claimName: neo4j-logs - - name: neo4j-plugins - persistentVolumeClaim: - claimName: neo4j-plugins - - name: neo4j-import - persistentVolumeClaim: - claimName: neo4j-import \ No newline at end of file + persistentVolumeClaim: + claimName: neo4j-import diff --git a/manifests/base/serviceaccount.yaml b/manifests/base/serviceaccount.yaml index aac1834e3..9ec267ed7 100644 --- a/manifests/base/serviceaccount.yaml +++ b/manifests/base/serviceaccount.yaml @@ -1,3 +1,4 @@ +--- apiVersion: v1 kind: ServiceAccount metadata: diff --git a/manifests/controllers/cdnos/manifest.yaml b/manifests/controllers/cdnos/manifest.yaml index 0815bf137..2c9113ecf 100644 --- a/manifests/controllers/cdnos/manifest.yaml +++ b/manifests/controllers/cdnos/manifest.yaml @@ -1,3 +1,4 @@ +--- apiVersion: v1 kind: Namespace metadata: @@ -26,271 +27,296 @@ spec: singular: cdnos scope: Namespaced versions: - - name: v1 - schema: - openAPIV3Schema: - description: Cdnos is the Schema for the cdnoss API - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: CdnosSpec defines the desired state of Cdnos - properties: - args: - description: Args are the args to pass to the command. - items: + - name: v1 + schema: + openAPIV3Schema: + description: Cdnos is the Schema for the cdnoss API + properties: + apiVersion: + description: + "APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: + "Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + metadata: + type: object + spec: + description: CdnosSpec defines the desired state of Cdnos + properties: + args: + description: Args are the args to pass to the command. + items: + type: string + type: array + command: + description: Command is the name of the executable to run. + type: string + configFile: + description: + ConfigFile is the default configuration file name for + the pod. + type: string + configPath: + description: + ConfigPath is the mount point for configuration inside + the pod. + type: string + env: + description: Env are the environment variables to set for the container. + items: + description: + EnvVar represents an environment variable present in + a Container. + properties: + name: + description: Name of the environment variable. Must be a C_IDENTIFIER. + type: string + value: + description: + 'Variable references $(VAR_NAME) are expanded using + the previously defined environment variables in the container + and any service environment variables. If a variable cannot + be resolved, the reference in the input string will be unchanged. + Double $$ are reduced to a single $, which allows for escaping + the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will produce the + string literal "$(VAR_NAME)". Escaped references will never + be expanded, regardless of whether the variable exists or + not. Defaults to "".' + type: string + valueFrom: + description: + Source for the environment variable's value. Cannot + be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: + "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?" + type: string + optional: + description: + Specify whether the ConfigMap or its key + must be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + fieldRef: + description: + "Selects a field of the pod: supports metadata.name, + metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, + spec.nodeName, spec.serviceAccountName, status.hostIP, + status.podIP, status.podIPs." + properties: + apiVersion: + description: + Version of the schema the FieldPath is + written in terms of, defaults to "v1". + type: string + fieldPath: + description: + Path of the field to select in the specified + API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + resourceFieldRef: + description: + "Selects a resource of the container: only + resources limits and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, requests.memory + and requests.ephemeral-storage) are currently supported." + properties: + containerName: + description: + "Container name: required for volumes, + optional for env vars" + type: string + divisor: + anyOf: + - type: integer + - type: string + description: + Specifies the output format of the exposed + resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: "Required: resource to select" + type: string + required: + - resource + type: object + x-kubernetes-map-type: atomic + secretKeyRef: + description: Selects a key of a secret in the pod's namespace + properties: + key: + description: + The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: + "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?" + type: string + optional: + description: + Specify whether the Secret or its key must + be defined + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + image: + description: Image to use for the CDNOS container + type: string + initImage: + description: + InitImage is the docker image to use as an init container + for the pod. type: string - type: array - command: - description: Command is the name of the executable to run. - type: string - configFile: - description: ConfigFile is the default configuration file name for - the pod. - type: string - configPath: - description: ConfigPath is the mount point for configuration inside - the pod. - type: string - env: - description: Env are the environment variables to set for the container. - items: - description: EnvVar represents an environment variable present in - a Container. + initSleep: + description: InitSleep is the time sleep in the init container + type: integer + interfaceCount: + description: + InterfaceCount is number of interfaces to be attached + to the pod. + type: integer + ports: + additionalProperties: + description: ServicePort describes an external L4 port on the device. + properties: + innerPort: + description: InnerPort is port on the container to expose. + format: int32 + type: integer + outerPort: + description: OuterPort is port on the container to expose. + format: int32 + type: integer + required: + - innerPort + - outerPort + type: object + description: Ports are ports to create on the service. + type: object + resources: + description: + Resources are the K8s resources to allocate to cdnos + container. properties: - name: - description: Name of the environment variable. Must be a C_IDENTIFIER. - type: string - value: - description: 'Variable references $(VAR_NAME) are expanded using - the previously defined environment variables in the container - and any service environment variables. If a variable cannot - be resolved, the reference in the input string will be unchanged. - Double $$ are reduced to a single $, which allows for escaping - the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will produce the - string literal "$(VAR_NAME)". Escaped references will never - be expanded, regardless of whether the variable exists or - not. Defaults to "".' - type: string - valueFrom: - description: Source for the environment variable's value. Cannot - be used if value is not empty. - properties: - configMapKeyRef: - description: Selects a key of a ConfigMap. - properties: - key: - description: The key to select. - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, uid?' - type: string - optional: - description: Specify whether the ConfigMap or its key - must be defined - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - fieldRef: - description: 'Selects a field of the pod: supports metadata.name, - metadata.namespace, `metadata.labels['''']`, `metadata.annotations['''']`, - spec.nodeName, spec.serviceAccountName, status.hostIP, - status.podIP, status.podIPs.' - properties: - apiVersion: - description: Version of the schema the FieldPath is - written in terms of, defaults to "v1". - type: string - fieldPath: - description: Path of the field to select in the specified - API version. - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - resourceFieldRef: - description: 'Selects a resource of the container: only - resources limits and requests (limits.cpu, limits.memory, - limits.ephemeral-storage, requests.cpu, requests.memory - and requests.ephemeral-storage) are currently supported.' - properties: - containerName: - description: 'Container name: required for volumes, - optional for env vars' - type: string - divisor: - anyOf: - - type: integer - - type: string - description: Specifies the output format of the exposed - resources, defaults to "1" - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - description: 'Required: resource to select' - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - secretKeyRef: - description: Selects a key of a secret in the pod's namespace - properties: - key: - description: The key of the secret to select from. Must - be a valid secret key. - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, uid?' - type: string - optional: - description: Specify whether the Secret or its key must - be defined - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic + claims: + description: + "Claims lists the names of resources, defined in + spec.resourceClaims, that are used by this container. \n This + is an alpha field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable. It can only be set + for containers." + items: + description: ResourceClaim references one entry in PodSpec.ResourceClaims. + properties: + name: + description: + Name must match the name of one entry in pod.spec.resourceClaims + of the Pod where this field is used. It makes that resource + available inside a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: + "Limits describes the maximum amount of compute resources + allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/" + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: + "Requests describes the minimum amount of compute + resources required. If Requests is omitted for a container, + it defaults to Limits if that is explicitly specified, otherwise + to an implementation-defined value. Requests cannot exceed Limits. + More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/" type: object - required: - - name type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - image: - description: Image to use for the CDNOS container - type: string - initImage: - description: InitImage is the docker image to use as an init container - for the pod. - type: string - initSleep: - description: InitSleep is the time sleep in the init container - type: integer - interfaceCount: - description: InterfaceCount is number of interfaces to be attached - to the pod. - type: integer - ports: - additionalProperties: - description: ServicePort describes an external L4 port on the device. + tls: + description: TLS is the configuration the key/certs to use for management. properties: - innerPort: - description: InnerPort is port on the container to expose. - format: int32 - type: integer - outerPort: - description: OuterPort is port on the container to expose. - format: int32 - type: integer - required: - - innerPort - - outerPort - type: object - description: Ports are ports to create on the service. - type: object - resources: - description: Resources are the K8s resources to allocate to cdnos - container. - properties: - claims: - description: "Claims lists the names of resources, defined in - spec.resourceClaims, that are used by this container. \n This - is an alpha field and requires enabling the DynamicResourceAllocation - feature gate. \n This field is immutable. It can only be set - for containers." - items: - description: ResourceClaim references one entry in PodSpec.ResourceClaims. + selfSigned: + description: SelfSigned generates a new self signed certificate. properties: - name: - description: Name must match the name of one entry in pod.spec.resourceClaims - of the Pod where this field is used. It makes that resource - available inside a container. + commonName: + description: / Common name to set in the cert. type: string + keySize: + description: RSA keysize to use for key generation. + type: integer required: - - name + - commonName + - keySize type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - description: 'Limits describes the maximum amount of compute resources - allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - description: 'Requests describes the minimum amount of compute - resources required. If Requests is omitted for a container, - it defaults to Limits if that is explicitly specified, otherwise - to an implementation-defined value. Requests cannot exceed Limits. - More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' - type: object - type: object - tls: - description: TLS is the configuration the key/certs to use for management. - properties: - selfSigned: - description: SelfSigned generates a new self signed certificate. - properties: - commonName: - description: / Common name to set in the cert. - type: string - keySize: - description: RSA keysize to use for key generation. - type: integer - required: - - commonName - - keySize - type: object - type: object - type: object - status: - description: CdnosStatus defines the observed state of Cdnos - properties: - message: - description: Message describes why the Cdnos is in the current phase. - type: string - phase: - description: Phase is the overall status of the Cdnos. - type: string - required: - - message - - phase - type: object - type: object - served: true - storage: true - subresources: - status: {} + type: object + type: object + status: + description: CdnosStatus defines the observed state of Cdnos + properties: + message: + description: Message describes why the Cdnos is in the current phase. + type: string + phase: + description: Phase is the overall status of the Cdnos. + type: string + required: + - message + - phase + type: object + type: object + served: true + storage: true + subresources: + status: {} --- apiVersion: v1 kind: ServiceAccount @@ -318,83 +344,83 @@ metadata: name: cdnos-controller-leader-election-role namespace: cdnos-controller-system rules: -- apiGroups: - - "" - resources: - - configmaps - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - "" - resources: - - events - verbs: - - create - - patch + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: cdnos-controller-manager-role rules: -- apiGroups: - - cdnos.dev.drivenets.net - resources: - - cdnoss - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - cdnos.dev.drivenets.net - resources: - - cdnoss/finalizers - verbs: - - update -- apiGroups: - - cdnos.dev.drivenets.net - resources: - - cdnoss/status - verbs: - - get - - patch - - update -- apiGroups: - - "" - resources: - - pods - - secrets - - services - verbs: - - create - - delete - - get - - list - - patch - - update - - watch + - apiGroups: + - cdnos.dev.drivenets.net + resources: + - cdnoss + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - cdnos.dev.drivenets.net + resources: + - cdnoss/finalizers + verbs: + - update + - apiGroups: + - cdnos.dev.drivenets.net + resources: + - cdnoss/status + verbs: + - get + - patch + - update + - apiGroups: + - "" + resources: + - pods + - secrets + - services + verbs: + - create + - delete + - get + - list + - patch + - update + - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole @@ -408,10 +434,10 @@ metadata: app.kubernetes.io/part-of: cdnos-controller name: cdnos-controller-metrics-reader rules: -- nonResourceURLs: - - /metrics - verbs: - - get + - nonResourceURLs: + - /metrics + verbs: + - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole @@ -425,18 +451,18 @@ metadata: app.kubernetes.io/part-of: cdnos-controller name: cdnos-controller-proxy-role rules: -- apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create -- apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -455,9 +481,9 @@ roleRef: kind: Role name: cdnos-controller-leader-election-role subjects: -- kind: ServiceAccount - name: cdnos-controller-controller-manager - namespace: cdnos-controller-system + - kind: ServiceAccount + name: cdnos-controller-controller-manager + namespace: cdnos-controller-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -475,9 +501,9 @@ roleRef: kind: ClusterRole name: cdnos-controller-manager-role subjects: -- kind: ServiceAccount - name: cdnos-controller-controller-manager - namespace: cdnos-controller-system + - kind: ServiceAccount + name: cdnos-controller-controller-manager + namespace: cdnos-controller-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -495,9 +521,9 @@ roleRef: kind: ClusterRole name: cdnos-controller-proxy-role subjects: -- kind: ServiceAccount - name: cdnos-controller-controller-manager - namespace: cdnos-controller-system + - kind: ServiceAccount + name: cdnos-controller-controller-manager + namespace: cdnos-controller-system --- apiVersion: v1 kind: Service @@ -514,10 +540,10 @@ metadata: namespace: cdnos-controller-system spec: ports: - - name: https - port: 8443 - protocol: TCP - targetPort: https + - name: https + port: 8443 + protocol: TCP + targetPort: https selector: control-plane: controller-manager --- @@ -547,61 +573,61 @@ spec: control-plane: controller-manager spec: containers: - - args: - - --secure-listen-address=0.0.0.0:8443 - - --upstream=http://127.0.0.1:8080/ - - --logtostderr=true - - --v=0 - image: registry.k8s.io/kubebuilder/kube-rbac-proxy:v0.15.0 - name: kube-rbac-proxy - ports: - - containerPort: 8443 - name: https - protocol: TCP - resources: - limits: - cpu: 500m - memory: 128Mi - requests: - cpu: 5m - memory: 64Mi - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - - args: - - --health-probe-bind-address=:8081 - - --metrics-bind-address=127.0.0.1:8080 - - --leader-elect - command: - - /manager - image: public.ecr.aws/dn/cdnos-controller:1.7.5 - livenessProbe: - httpGet: - path: /healthz - port: 8081 - initialDelaySeconds: 15 - periodSeconds: 20 - name: manager - readinessProbe: - httpGet: - path: /readyz - port: 8081 - initialDelaySeconds: 5 - periodSeconds: 10 - resources: - limits: - cpu: 500m - memory: 128Mi - requests: - cpu: 10m - memory: 64Mi - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL + - args: + - --secure-listen-address=0.0.0.0:8443 + - --upstream=http://127.0.0.1:8080/ + - --logtostderr=true + - --v=0 + image: registry.k8s.io/kubebuilder/kube-rbac-proxy:v0.15.0 + name: kube-rbac-proxy + ports: + - containerPort: 8443 + name: https + protocol: TCP + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 5m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + - args: + - --health-probe-bind-address=:8081 + - --metrics-bind-address=127.0.0.1:8080 + - --leader-elect + command: + - /manager + image: public.ecr.aws/dn/cdnos-controller:1.7.5 + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 10m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL securityContext: runAsNonRoot: true serviceAccountName: cdnos-controller-controller-manager diff --git a/manifests/controllers/ceoslab/manifest.yaml b/manifests/controllers/ceoslab/manifest.yaml index f9d2be424..2f085db4c 100644 --- a/manifests/controllers/ceoslab/manifest.yaml +++ b/manifests/controllers/ceoslab/manifest.yaml @@ -1,3 +1,4 @@ +--- apiVersion: v1 kind: Namespace metadata: @@ -21,193 +22,193 @@ spec: singular: ceoslabdevice scope: Namespaced versions: - - name: v1alpha1 - schema: - openAPIV3Schema: - description: CEosLabDevice is the Schema for the ceoslabdevices API - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: CEosLabDeviceSpec defines the desired state of CEosLabDevice - properties: - args: - description: Additional arguments to pass to /sbin/init. Those necessary to boot properly are already present. - items: - type: string - type: array - certconfig: - description: X.509 certificate configuration. - properties: - selfsignedcerts: - description: Configuration for self-signed certificates. - items: - properties: - certname: - description: Certificate name on the node. - type: string - commonname: - description: Common name to set in the cert. - type: string - keyname: - description: Key name on the node. - type: string - keysize: - description: RSA keysize to use for key generation. - format: int32 - type: integer - type: object - type: array - type: object - envvars: - additionalProperties: - type: string - description: Additional environment variables. Those necessary to boot properly are already present. - type: object - image: - description: 'Image name. Default: ceos:latest' - type: string - initcontainerimage: - description: 'Init container image name. Default: networkop/init-wait:latest' - type: string - intfmapping: - additionalProperties: - type: string - description: Explicit interface mapping between kernel devices and interface names. If this is defined, any unmapped devices are ignored. - type: object - numinterfaces: - description: 'Number of data interfaces to create. An additional interface (eth0) is created for pod connectivity. Default: 0 interfaces' - format: int32 - type: integer - resourcerequirements: - additionalProperties: - type: string - description: 'Resource requests to configure on the pod. Default: none' - type: object - services: - additionalProperties: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: CEosLabDevice is the Schema for the ceoslabdevices API + properties: + apiVersion: + description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + metadata: + type: object + spec: + description: CEosLabDeviceSpec defines the desired state of CEosLabDevice + properties: + args: + description: Additional arguments to pass to /sbin/init. Those necessary to boot properly are already present. + items: + type: string + type: array + certconfig: + description: X.509 certificate configuration. properties: - tcpports: - description: TCP ports to forward to the pod. + selfsignedcerts: + description: Configuration for self-signed certificates. items: properties: - in: - description: Port inside the container. - format: int32 - type: integer - out: - description: Port outside the container. Defaults to the same as in. + certname: + description: Certificate name on the node. + type: string + commonname: + description: Common name to set in the cert. + type: string + keyname: + description: Key name on the node. + type: string + keysize: + description: RSA keysize to use for key generation. format: int32 type: integer type: object type: array type: object - description: 'Port mappings for container services. Default: none' - type: object - sleep: - description: 'Time (in seconds) to wait before starting the device. Default: 0 seconds' - format: int32 - type: integer - toggleoverrides: - additionalProperties: - type: boolean - description: EOS feature toggle overrides - type: object - waitforagents: - description: EOS agents to for the startup probe to block on - items: + envvars: + additionalProperties: + type: string + description: Additional environment variables. Those necessary to boot properly are already present. + type: object + image: + description: "Image name. Default: ceos:latest" type: string - type: array - type: object - status: - description: CEosLabDeviceStatus defines the observed state of CEosLabDevice - properties: - configmapconfig: - description: ConfigMap state as configured in configmaps - properties: - intfmappingstatus: - additionalProperties: - type: string + initcontainerimage: + description: "Init container image name. Default: networkop/init-wait:latest" + type: string + intfmapping: + additionalProperties: + type: string + description: Explicit interface mapping between kernel devices and interface names. If this is defined, any unmapped devices are ignored. + type: object + numinterfaces: + description: "Number of data interfaces to create. An additional interface (eth0) is created for pod connectivity. Default: 0 interfaces" + format: int32 + type: integer + resourcerequirements: + additionalProperties: + type: string + description: "Resource requests to configure on the pod. Default: none" + type: object + services: + additionalProperties: + properties: + tcpports: + description: TCP ports to forward to the pod. + items: + properties: + in: + description: Port inside the container. + format: int32 + type: integer + out: + description: Port outside the container. Defaults to the same as in. + format: int32 + type: integer + type: object + type: array type: object - rceosstale: + description: "Port mappings for container services. Default: none" + type: object + sleep: + description: "Time (in seconds) to wait before starting the device. Default: 0 seconds" + format: int32 + type: integer + toggleoverrides: + additionalProperties: type: boolean - selfsignedcertstatus: - additionalProperties: - properties: - certname: - description: Certificate name on the node. - type: string - commonname: - description: Common name to set in the cert. - type: string - keyname: - description: Key name on the node. - type: string - keysize: - description: RSA keysize to use for key generation. - format: int32 - type: integer - type: object - type: object - startupconfigresourceversion: + description: EOS feature toggle overrides + type: object + waitforagents: + description: EOS agents to for the startup probe to block on + items: type: string - toggleoverridesstatus: - additionalProperties: + type: array + type: object + status: + description: CEosLabDeviceStatus defines the observed state of CEosLabDevice + properties: + configmapconfig: + description: ConfigMap state as configured in configmaps + properties: + intfmappingstatus: + additionalProperties: + type: string + type: object + rceosstale: type: boolean - type: object - type: object - podconfigmapconfig: - description: ConfigMap state as present in the pod. If these diverge, we need to restart the pod to update. Even if an in-place update is possible these are needed at boot time. - properties: - intfmappingstatus: - additionalProperties: + selfsignedcertstatus: + additionalProperties: + properties: + certname: + description: Certificate name on the node. + type: string + commonname: + description: Common name to set in the cert. + type: string + keyname: + description: Key name on the node. + type: string + keysize: + description: RSA keysize to use for key generation. + format: int32 + type: integer + type: object + type: object + startupconfigresourceversion: type: string - type: object - rceosstale: - type: boolean - selfsignedcertstatus: - additionalProperties: - properties: - certname: - description: Certificate name on the node. - type: string - commonname: - description: Common name to set in the cert. - type: string - keyname: - description: Key name on the node. - type: string - keysize: - description: RSA keysize to use for key generation. - format: int32 - type: integer + toggleoverridesstatus: + additionalProperties: + type: boolean type: object - type: object - startupconfigresourceversion: - type: string - toggleoverridesstatus: - additionalProperties: + type: object + podconfigmapconfig: + description: ConfigMap state as present in the pod. If these diverge, we need to restart the pod to update. Even if an in-place update is possible these are needed at boot time. + properties: + intfmappingstatus: + additionalProperties: + type: string + type: object + rceosstale: type: boolean - type: object - type: object - reason: - description: Reason for potential failure - type: string - status: - description: Device status - type: string - type: object - type: object - served: true - storage: true - subresources: - status: {} + selfsignedcertstatus: + additionalProperties: + properties: + certname: + description: Certificate name on the node. + type: string + commonname: + description: Common name to set in the cert. + type: string + keyname: + description: Key name on the node. + type: string + keysize: + description: RSA keysize to use for key generation. + format: int32 + type: integer + type: object + type: object + startupconfigresourceversion: + type: string + toggleoverridesstatus: + additionalProperties: + type: boolean + type: object + type: object + reason: + description: Reason for potential failure + type: string + status: + description: Device status + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} status: acceptedNames: kind: "" @@ -227,37 +228,37 @@ metadata: name: arista-ceoslab-operator-leader-election-role namespace: arista-ceoslab-operator-system rules: -- apiGroups: - - "" - resources: - - configmaps - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - "" - resources: - - events - verbs: - - create - - patch + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole @@ -265,108 +266,108 @@ metadata: creationTimestamp: null name: arista-ceoslab-operator-manager-role rules: -- apiGroups: - - ceoslab.arista.com - resources: - - ceoslabdevices - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - ceoslab.arista.com - resources: - - ceoslabdevices/finalizers - verbs: - - update -- apiGroups: - - ceoslab.arista.com - resources: - - ceoslabdevices/status - verbs: - - get - - patch - - update -- apiGroups: - - "" - resources: - - configmaps - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - pods - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - secrets - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - services - verbs: - - create - - delete - - get - - list - - patch - - update - - watch + - apiGroups: + - ceoslab.arista.com + resources: + - ceoslabdevices + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - ceoslab.arista.com + resources: + - ceoslabdevices/finalizers + verbs: + - update + - apiGroups: + - ceoslab.arista.com + resources: + - ceoslabdevices/status + verbs: + - get + - patch + - update + - apiGroups: + - "" + resources: + - configmaps + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - "" + resources: + - pods + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - "" + resources: + - secrets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - "" + resources: + - services + verbs: + - create + - delete + - get + - list + - patch + - update + - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: arista-ceoslab-operator-metrics-reader rules: -- nonResourceURLs: - - /metrics - verbs: - - get + - nonResourceURLs: + - /metrics + verbs: + - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: arista-ceoslab-operator-proxy-role rules: -- apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create -- apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -378,9 +379,9 @@ roleRef: kind: Role name: arista-ceoslab-operator-leader-election-role subjects: -- kind: ServiceAccount - name: arista-ceoslab-operator-controller-manager - namespace: arista-ceoslab-operator-system + - kind: ServiceAccount + name: arista-ceoslab-operator-controller-manager + namespace: arista-ceoslab-operator-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -391,9 +392,9 @@ roleRef: kind: ClusterRole name: arista-ceoslab-operator-manager-role subjects: -- kind: ServiceAccount - name: arista-ceoslab-operator-controller-manager - namespace: arista-ceoslab-operator-system + - kind: ServiceAccount + name: arista-ceoslab-operator-controller-manager + namespace: arista-ceoslab-operator-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -404,9 +405,9 @@ roleRef: kind: ClusterRole name: arista-ceoslab-operator-proxy-role subjects: -- kind: ServiceAccount - name: arista-ceoslab-operator-controller-manager - namespace: arista-ceoslab-operator-system + - kind: ServiceAccount + name: arista-ceoslab-operator-controller-manager + namespace: arista-ceoslab-operator-system --- apiVersion: v1 data: @@ -436,10 +437,10 @@ metadata: namespace: arista-ceoslab-operator-system spec: ports: - - name: https - port: 8443 - protocol: TCP - targetPort: https + - name: https + port: 8443 + protocol: TCP + targetPort: https selector: control-plane: controller-manager --- @@ -463,53 +464,53 @@ spec: control-plane: controller-manager spec: containers: - - args: - - --secure-listen-address=0.0.0.0:8443 - - --upstream=http://127.0.0.1:8080/ - - --logtostderr=true - - --v=0 - image: registry.k8s.io/kubebuilder/kube-rbac-proxy:v0.11.0 - name: kube-rbac-proxy - ports: - - containerPort: 8443 - name: https - protocol: TCP - resources: - limits: - cpu: 500m - memory: 128Mi - requests: - cpu: 5m - memory: 64Mi - - args: - - --health-probe-bind-address=:8081 - - --metrics-bind-address=127.0.0.1:8080 - - --leader-elect - command: - - /manager - image: ghcr.io/aristanetworks/arista-ceoslab-operator:v2.1.2 - livenessProbe: - httpGet: - path: /healthz - port: 8081 - initialDelaySeconds: 15 - periodSeconds: 20 - name: manager - readinessProbe: - httpGet: - path: /readyz - port: 8081 - initialDelaySeconds: 5 - periodSeconds: 10 - resources: - limits: - cpu: 500m - memory: 128Mi - requests: - cpu: 10m - memory: 64Mi - securityContext: - allowPrivilegeEscalation: false + - args: + - --secure-listen-address=0.0.0.0:8443 + - --upstream=http://127.0.0.1:8080/ + - --logtostderr=true + - --v=0 + image: registry.k8s.io/kubebuilder/kube-rbac-proxy:v0.11.0 + name: kube-rbac-proxy + ports: + - containerPort: 8443 + name: https + protocol: TCP + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 5m + memory: 64Mi + - args: + - --health-probe-bind-address=:8081 + - --metrics-bind-address=127.0.0.1:8080 + - --leader-elect + command: + - /manager + image: ghcr.io/aristanetworks/arista-ceoslab-operator:v2.1.2 + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 10m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false securityContext: runAsNonRoot: true serviceAccountName: arista-ceoslab-operator-controller-manager diff --git a/manifests/controllers/lemming/manifest.yaml b/manifests/controllers/lemming/manifest.yaml index 3f3b60158..eb5ad8118 100644 --- a/manifests/controllers/lemming/manifest.yaml +++ b/manifests/controllers/lemming/manifest.yaml @@ -1,3 +1,4 @@ +--- apiVersion: v1 kind: Namespace metadata: @@ -21,265 +22,290 @@ spec: singular: lemming scope: Namespaced versions: - - name: v1alpha1 - schema: - openAPIV3Schema: - description: Lemming is the Schema for the lemmings API - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: LemmingSpec defines the desired state of Lemming. - properties: - args: - description: Args are the args to pass to the command. - items: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: Lemming is the Schema for the lemmings API + properties: + apiVersion: + description: + "APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: + "Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + metadata: + type: object + spec: + description: LemmingSpec defines the desired state of Lemming. + properties: + args: + description: Args are the args to pass to the command. + items: + type: string + type: array + command: + description: Command is the name of the executable to run. + type: string + configFile: + description: + ConfigFile is the default configuration file name for + the pod. + type: string + configPath: + description: + ConfigPath is the mount point for configuration inside + the pod. + type: string + env: + description: Env are the environment variables to set for the container. + items: + description: + EnvVar represents an environment variable present in + a Container. + properties: + name: + description: Name of the environment variable. Must be a C_IDENTIFIER. + type: string + value: + description: + 'Variable references $(VAR_NAME) are expanded using + the previously defined environment variables in the container + and any service environment variables. If a variable cannot + be resolved, the reference in the input string will be unchanged. + Double $$ are reduced to a single $, which allows for escaping + the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will produce the + string literal "$(VAR_NAME)". Escaped references will never + be expanded, regardless of whether the variable exists or + not. Defaults to "".' + type: string + valueFrom: + description: + Source for the environment variable's value. Cannot + be used if value is not empty. + properties: + configMapKeyRef: + description: Selects a key of a ConfigMap. + properties: + key: + description: The key to select. + type: string + name: + description: + "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?" + type: string + optional: + description: + Specify whether the ConfigMap or its key + must be defined + type: boolean + required: + - key + type: object + fieldRef: + description: + "Selects a field of the pod: supports metadata.name, + metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, + spec.nodeName, spec.serviceAccountName, status.hostIP, + status.podIP, status.podIPs." + properties: + apiVersion: + description: + Version of the schema the FieldPath is + written in terms of, defaults to "v1". + type: string + fieldPath: + description: + Path of the field to select in the specified + API version. + type: string + required: + - fieldPath + type: object + resourceFieldRef: + description: + "Selects a resource of the container: only + resources limits and requests (limits.cpu, limits.memory, + limits.ephemeral-storage, requests.cpu, requests.memory + and requests.ephemeral-storage) are currently supported." + properties: + containerName: + description: + "Container name: required for volumes, + optional for env vars" + type: string + divisor: + anyOf: + - type: integer + - type: string + description: + Specifies the output format of the exposed + resources, defaults to "1" + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + resource: + description: "Required: resource to select" + type: string + required: + - resource + type: object + secretKeyRef: + description: Selects a key of a secret in the pod's namespace + properties: + key: + description: + The key of the secret to select from. Must + be a valid secret key. + type: string + name: + description: + "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + TODO: Add other useful fields. apiVersion, kind, uid?" + type: string + optional: + description: + Specify whether the Secret or its key must + be defined + type: boolean + required: + - key + type: object + type: object + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + image: + description: Image is the container image to run. + type: string + initImage: + description: + InitImage is the docker image to use as an init container + for the pod. type: string - type: array - command: - description: Command is the name of the executable to run. - type: string - configFile: - description: ConfigFile is the default configuration file name for - the pod. - type: string - configPath: - description: ConfigPath is the mount point for configuration inside - the pod. - type: string - env: - description: Env are the environment variables to set for the container. - items: - description: EnvVar represents an environment variable present in - a Container. + initSleep: + description: InitSleep is the time sleep in the init container + type: integer + interfaceCount: + description: + InterfaceCount is number of interfaces to be attached + to the pod. + type: integer + ports: + additionalProperties: + description: ServicePort describes an external L4 port on the device. + properties: + innerPort: + description: InnerPort is port on the container to expose. + format: int32 + type: integer + outerPort: + description: OuterPort is port on the container to expose. + format: int32 + type: integer + required: + - innerPort + - outerPort + type: object + description: Ports are ports to create on the service. + type: object + resources: + description: + Resources are the K8s resources to allocate to lemming + container. properties: - name: - description: Name of the environment variable. Must be a C_IDENTIFIER. - type: string - value: - description: 'Variable references $(VAR_NAME) are expanded using - the previously defined environment variables in the container - and any service environment variables. If a variable cannot - be resolved, the reference in the input string will be unchanged. - Double $$ are reduced to a single $, which allows for escaping - the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will produce the - string literal "$(VAR_NAME)". Escaped references will never - be expanded, regardless of whether the variable exists or - not. Defaults to "".' - type: string - valueFrom: - description: Source for the environment variable's value. Cannot - be used if value is not empty. - properties: - configMapKeyRef: - description: Selects a key of a ConfigMap. - properties: - key: - description: The key to select. - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, uid?' - type: string - optional: - description: Specify whether the ConfigMap or its key - must be defined - type: boolean - required: - - key - type: object - fieldRef: - description: 'Selects a field of the pod: supports metadata.name, - metadata.namespace, `metadata.labels['''']`, `metadata.annotations['''']`, - spec.nodeName, spec.serviceAccountName, status.hostIP, - status.podIP, status.podIPs.' - properties: - apiVersion: - description: Version of the schema the FieldPath is - written in terms of, defaults to "v1". - type: string - fieldPath: - description: Path of the field to select in the specified - API version. - type: string - required: - - fieldPath - type: object - resourceFieldRef: - description: 'Selects a resource of the container: only - resources limits and requests (limits.cpu, limits.memory, - limits.ephemeral-storage, requests.cpu, requests.memory - and requests.ephemeral-storage) are currently supported.' - properties: - containerName: - description: 'Container name: required for volumes, - optional for env vars' - type: string - divisor: - anyOf: - - type: integer - - type: string - description: Specifies the output format of the exposed - resources, defaults to "1" - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - description: 'Required: resource to select' - type: string - required: - - resource - type: object - secretKeyRef: - description: Selects a key of a secret in the pod's namespace - properties: - key: - description: The key of the secret to select from. Must - be a valid secret key. - type: string - name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names - TODO: Add other useful fields. apiVersion, kind, uid?' - type: string - optional: - description: Specify whether the Secret or its key must - be defined - type: boolean - required: - - key - type: object + claims: + description: + "Claims lists the names of resources, defined in + spec.resourceClaims, that are used by this container. \n This + is an alpha field and requires enabling the DynamicResourceAllocation + feature gate. \n This field is immutable." + items: + description: ResourceClaim references one entry in PodSpec.ResourceClaims. + properties: + name: + description: + Name must match the name of one entry in pod.spec.resourceClaims + of the Pod where this field is used. It makes that resource + available inside a container. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: + "Limits describes the maximum amount of compute resources + allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/" + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: + "Requests describes the minimum amount of compute + resources required. If Requests is omitted for a container, + it defaults to Limits if that is explicitly specified, otherwise + to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/" type: object - required: - - name type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - image: - description: Image is the container image to run. - type: string - initImage: - description: InitImage is the docker image to use as an init container - for the pod. - type: string - initSleep: - description: InitSleep is the time sleep in the init container - type: integer - interfaceCount: - description: InterfaceCount is number of interfaces to be attached - to the pod. - type: integer - ports: - additionalProperties: - description: ServicePort describes an external L4 port on the device. + tls: + description: TLS is the configuration the key/certs to use for management. properties: - innerPort: - description: InnerPort is port on the container to expose. - format: int32 - type: integer - outerPort: - description: OuterPort is port on the container to expose. - format: int32 - type: integer - required: - - innerPort - - outerPort - type: object - description: Ports are ports to create on the service. - type: object - resources: - description: Resources are the K8s resources to allocate to lemming - container. - properties: - claims: - description: "Claims lists the names of resources, defined in - spec.resourceClaims, that are used by this container. \n This - is an alpha field and requires enabling the DynamicResourceAllocation - feature gate. \n This field is immutable." - items: - description: ResourceClaim references one entry in PodSpec.ResourceClaims. + selfSigned: + description: SelfSigned generates a new self signed certificate. properties: - name: - description: Name must match the name of one entry in pod.spec.resourceClaims - of the Pod where this field is used. It makes that resource - available inside a container. + commonName: + description: / Common name to set in the cert. type: string + keySize: + description: RSA keysize to use for key generation. + type: integer required: - - name + - commonName + - keySize type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - description: 'Limits describes the maximum amount of compute resources - allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - description: 'Requests describes the minimum amount of compute - resources required. If Requests is omitted for a container, - it defaults to Limits if that is explicitly specified, otherwise - to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' - type: object - type: object - tls: - description: TLS is the configuration the key/certs to use for management. - properties: - selfSigned: - description: SelfSigned generates a new self signed certificate. - properties: - commonName: - description: / Common name to set in the cert. - type: string - keySize: - description: RSA keysize to use for key generation. - type: integer - required: - - commonName - - keySize - type: object - type: object - type: object - status: - description: LemmingStatus defines the observed state of Lemming - properties: - message: - description: Message describes why the lemming is in the current phase. - type: string - phase: - description: Phase is the overall status of the Lemming. - type: string - required: - - message - - phase - type: object - type: object - served: true - storage: true - subresources: - status: {} + type: object + type: object + status: + description: LemmingStatus defines the observed state of Lemming + properties: + message: + description: Message describes why the lemming is in the current phase. + type: string + phase: + description: Phase is the overall status of the Lemming. + type: string + required: + - message + - phase + type: object + type: object + served: true + storage: true + subresources: + status: {} --- apiVersion: v1 kind: ServiceAccount @@ -293,37 +319,37 @@ metadata: name: lemming-leader-election-role namespace: lemming-operator rules: -- apiGroups: - - "" - resources: - - configmaps - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - "" - resources: - - events - verbs: - - create - - patch + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole @@ -331,74 +357,74 @@ metadata: creationTimestamp: null name: lemming-manager-role rules: -- apiGroups: - - "" - resources: - - pods - - secrets - - services - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - lemming.openconfig.net - resources: - - lemmings - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - lemming.openconfig.net - resources: - - lemmings/finalizers - verbs: - - update -- apiGroups: - - lemming.openconfig.net - resources: - - lemmings/status - verbs: - - get - - patch - - update + - apiGroups: + - "" + resources: + - pods + - secrets + - services + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - lemming.openconfig.net + resources: + - lemmings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - lemming.openconfig.net + resources: + - lemmings/finalizers + verbs: + - update + - apiGroups: + - lemming.openconfig.net + resources: + - lemmings/status + verbs: + - get + - patch + - update --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: lemming-metrics-reader rules: -- nonResourceURLs: - - /metrics - verbs: - - get + - nonResourceURLs: + - /metrics + verbs: + - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: lemming-proxy-role rules: -- apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create -- apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -410,9 +436,9 @@ roleRef: kind: Role name: lemming-leader-election-role subjects: -- kind: ServiceAccount - name: lemming-controller-manager - namespace: lemming-operator + - kind: ServiceAccount + name: lemming-controller-manager + namespace: lemming-operator --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -423,9 +449,9 @@ roleRef: kind: ClusterRole name: lemming-manager-role subjects: -- kind: ServiceAccount - name: lemming-controller-manager - namespace: lemming-operator + - kind: ServiceAccount + name: lemming-controller-manager + namespace: lemming-operator --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -436,9 +462,9 @@ roleRef: kind: ClusterRole name: lemming-proxy-role subjects: -- kind: ServiceAccount - name: lemming-controller-manager - namespace: lemming-operator + - kind: ServiceAccount + name: lemming-controller-manager + namespace: lemming-operator --- apiVersion: v1 data: @@ -478,10 +504,10 @@ metadata: namespace: lemming-operator spec: ports: - - name: https - port: 8443 - protocol: TCP - targetPort: https + - name: https + port: 8443 + protocol: TCP + targetPort: https selector: control-plane: controller-manager --- @@ -505,61 +531,61 @@ spec: control-plane: controller-manager spec: containers: - - args: - - --secure-listen-address=0.0.0.0:8443 - - --upstream=http://127.0.0.1:8080/ - - --logtostderr=true - - --v=0 - image: registry.k8s.io/kubebuilder/kube-rbac-proxy:v0.12.0 - name: kube-rbac-proxy - ports: - - containerPort: 8443 - name: https - protocol: TCP - resources: - limits: - cpu: 500m - memory: 128Mi - requests: - cpu: 5m - memory: 64Mi - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - - args: - - --health-probe-bind-address=:8081 - - --metrics-bind-address=127.0.0.1:8080 - - --leader-elect - command: - - /manager - image: us-west1-docker.pkg.dev/openconfig-lemming/release/operator:v0.2.4 - livenessProbe: - httpGet: - path: /healthz - port: 8081 - initialDelaySeconds: 15 - periodSeconds: 20 - name: manager - readinessProbe: - httpGet: - path: /readyz - port: 8081 - initialDelaySeconds: 5 - periodSeconds: 10 - resources: - limits: - cpu: 500m - memory: 128Mi - requests: - cpu: 10m - memory: 64Mi - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL + - args: + - --secure-listen-address=0.0.0.0:8443 + - --upstream=http://127.0.0.1:8080/ + - --logtostderr=true + - --v=0 + image: registry.k8s.io/kubebuilder/kube-rbac-proxy:v0.12.0 + name: kube-rbac-proxy + ports: + - containerPort: 8443 + name: https + protocol: TCP + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 5m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + - args: + - --health-probe-bind-address=:8081 + - --metrics-bind-address=127.0.0.1:8080 + - --leader-elect + command: + - /manager + image: us-west1-docker.pkg.dev/openconfig-lemming/release/operator:v0.2.4 + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 10m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL securityContext: runAsNonRoot: true serviceAccountName: lemming-controller-manager diff --git a/manifests/controllers/srlinux/manifest.yaml b/manifests/controllers/srlinux/manifest.yaml index ba211a4b2..6936bb2f2 100644 --- a/manifests/controllers/srlinux/manifest.yaml +++ b/manifests/controllers/srlinux/manifest.yaml @@ -1,3 +1,4 @@ +--- apiVersion: v1 kind: Namespace metadata: @@ -26,159 +27,166 @@ spec: singular: srlinux scope: Namespaced versions: - - additionalPrinterColumns: - - jsonPath: .metadata.creationTimestamp - name: Age - type: date - - jsonPath: .status.image - name: Image - type: string - - jsonPath: .status.status - name: Status - type: string - - jsonPath: .status.ready - name: Ready - type: boolean - - jsonPath: .status.startup-config.phase - name: Config - type: string - name: v1 - schema: - openAPIV3Schema: - description: Srlinux is the Schema for the srlinuxes API. - properties: - apiVersion: - description: |- - APIVersion defines the versioned schema of this representation of an object. - Servers should convert recognized schemas to the latest internal value, and - may reject unrecognized values. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources - type: string - kind: - description: |- - Kind is a string value representing the REST resource this object represents. - Servers may infer this from the endpoint the client submits requests to. - Cannot be updated. - In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds - type: string - license_key: - description: license key from license secret that contains a license file - for this Srlinux - type: string - metadata: - type: object - spec: - description: SrlinuxSpec defines the desired state of Srlinux. - properties: - config: - description: NodeConfig represents srlinux node configuration parameters. - properties: - args: - description: Command args to pass into the pod. - items: - type: string - type: array - cert: - description: CertificateCfg represents srlinux certificate configuration - parameters. - properties: - cert_name: - description: Certificate name on the node. + - additionalPrinterColumns: + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.image + name: Image + type: string + - jsonPath: .status.status + name: Status + type: string + - jsonPath: .status.ready + name: Ready + type: boolean + - jsonPath: .status.startup-config.phase + name: Config + type: string + name: v1 + schema: + openAPIV3Schema: + description: Srlinux is the Schema for the srlinuxes API. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + license_key: + description: + license key from license secret that contains a license file + for this Srlinux + type: string + metadata: + type: object + spec: + description: SrlinuxSpec defines the desired state of Srlinux. + properties: + config: + description: NodeConfig represents srlinux node configuration parameters. + properties: + args: + description: Command args to pass into the pod. + items: type: string - common_name: - description: Common name to set in the cert. + type: array + cert: + description: + CertificateCfg represents srlinux certificate configuration + parameters. + properties: + cert_name: + description: Certificate name on the node. + type: string + common_name: + description: Common name to set in the cert. + type: string + key_name: + description: Key name on the node. + type: string + key_size: + description: RSA keysize to use for key generation. + format: int32 + type: integer + type: object + command: + description: Command to pass into pod. + items: type: string - key_name: - description: Key name on the node. + type: array + config_data_present: + description: + When set to true by kne, srlinux controller will + attempt to mount the file with startup config to the pod + type: boolean + config_file: + description: + Startup configuration file name for the pod. Set + in the kne topo and created by kne as a config map + type: string + config_path: + description: + Mount point for configuration inside the pod. Should + point to a dir that contains ConfigFile + type: string + entry_command: + description: Specific entry point command for accessing the pod. + type: string + env: + additionalProperties: type: string - key_size: - description: RSA keysize to use for key generation. - format: int32 - type: integer - type: object - command: - description: Command to pass into pod. - items: + description: Map of environment variables to pass into the pod. + type: object + image: + description: Container image to use with for the SR Linux container. type: string - type: array - config_data_present: - description: When set to true by kne, srlinux controller will - attempt to mount the file with startup config to the pod - type: boolean - config_file: - description: Startup configuration file name for the pod. Set - in the kne topo and created by kne as a config map - type: string - config_path: - description: Mount point for configuration inside the pod. Should - point to a dir that contains ConfigFile - type: string - entry_command: - description: Specific entry point command for accessing the pod. - type: string - env: - additionalProperties: + init-image: + description: + Init container image to use with for the SR Linux + container. type: string - description: Map of environment variables to pass into the pod. - type: object - image: - description: Container image to use with for the SR Linux container. + sleep: + description: Sleep time before starting the pod. + format: int32 + type: integer + type: object + constraints: + additionalProperties: type: string - init-image: - description: Init container image to use with for the SR Linux - container. - type: string - sleep: - description: Sleep time before starting the pod. - format: int32 - type: integer - type: object - constraints: - additionalProperties: + type: object + model: + description: Model encodes SR Linux variant (ixr-d3, ixr-6e, etc) type: string - type: object - model: - description: Model encodes SR Linux variant (ixr-d3, ixr-6e, etc) - type: string - num-interfaces: - type: integer - version: - description: |- - Version may be set in kne topology as a mean to explicitly provide version information - in case it is not encoded in the image tag - type: string - type: object - status: - description: SrlinuxStatus defines the observed state of Srlinux. - properties: - image: - description: Image used to run srlinux pod - type: string - ready: - description: |- - Ready is true if the srlinux NOS is ready to receive config. - This is when management server is running and initial commit is processed. - type: boolean - startup-config: - description: StartupConfig contains the status of the startup-config. - properties: - phase: - description: 'Phase is the phase startup-config is in. Can be - one of: "pending", "loaded", "not-provided", "failed".' - type: string - type: object - status: - description: |- - Status is the status of the srlinux custom resource. - Can be one of: "created", "running", "error". - type: string - type: object - type: object - served: true - storage: true - subresources: - status: {} + num-interfaces: + type: integer + version: + description: |- + Version may be set in kne topology as a mean to explicitly provide version information + in case it is not encoded in the image tag + type: string + type: object + status: + description: SrlinuxStatus defines the observed state of Srlinux. + properties: + image: + description: Image used to run srlinux pod + type: string + ready: + description: |- + Ready is true if the srlinux NOS is ready to receive config. + This is when management server is running and initial commit is processed. + type: boolean + startup-config: + description: StartupConfig contains the status of the startup-config. + properties: + phase: + description: + 'Phase is the phase startup-config is in. Can be + one of: "pending", "loaded", "not-provided", "failed".' + type: string + type: object + status: + description: |- + Status is the status of the srlinux custom resource. + Can be one of: "created", "running", "error". + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} --- apiVersion: v1 kind: ServiceAccount @@ -206,83 +214,83 @@ metadata: name: srlinux-controller-leader-election-role namespace: srlinux-controller rules: -- apiGroups: - - "" - resources: - - configmaps - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - "" - resources: - - events - verbs: - - create - - patch + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: srlinux-controller-manager-role rules: -- apiGroups: - - "" - resources: - - configmaps - - pods - - secrets - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - kne.srlinux.dev - resources: - - srlinuxes - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - kne.srlinux.dev - resources: - - srlinuxes/finalizers - verbs: - - update -- apiGroups: - - kne.srlinux.dev - resources: - - srlinuxes/status - verbs: - - get - - patch - - update + - apiGroups: + - "" + resources: + - configmaps + - pods + - secrets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - kne.srlinux.dev + resources: + - srlinuxes + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - kne.srlinux.dev + resources: + - srlinuxes/finalizers + verbs: + - update + - apiGroups: + - kne.srlinux.dev + resources: + - srlinuxes/status + verbs: + - get + - patch + - update --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole @@ -296,10 +304,10 @@ metadata: app.kubernetes.io/part-of: srlinux-controller name: srlinux-controller-metrics-reader rules: -- nonResourceURLs: - - /metrics - verbs: - - get + - nonResourceURLs: + - /metrics + verbs: + - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole @@ -313,18 +321,18 @@ metadata: app.kubernetes.io/part-of: srlinux-controller name: srlinux-controller-proxy-role rules: -- apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create -- apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -343,9 +351,9 @@ roleRef: kind: Role name: srlinux-controller-leader-election-role subjects: -- kind: ServiceAccount - name: srlinux-controller-controller-manager - namespace: srlinux-controller + - kind: ServiceAccount + name: srlinux-controller-controller-manager + namespace: srlinux-controller --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -363,9 +371,9 @@ roleRef: kind: ClusterRole name: srlinux-controller-manager-role subjects: -- kind: ServiceAccount - name: srlinux-controller-controller-manager - namespace: srlinux-controller + - kind: ServiceAccount + name: srlinux-controller-controller-manager + namespace: srlinux-controller --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -383,9 +391,9 @@ roleRef: kind: ClusterRole name: srlinux-controller-proxy-role subjects: -- kind: ServiceAccount - name: srlinux-controller-controller-manager - namespace: srlinux-controller + - kind: ServiceAccount + name: srlinux-controller-controller-manager + namespace: srlinux-controller --- apiVersion: v1 kind: Service @@ -402,10 +410,10 @@ metadata: namespace: srlinux-controller spec: ports: - - name: https - port: 8443 - protocol: TCP - targetPort: https + - name: https + port: 8443 + protocol: TCP + targetPort: https selector: control-plane: controller-manager --- @@ -438,74 +446,74 @@ spec: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - - matchExpressions: - - key: kubernetes.io/arch - operator: In - values: - - amd64 - - arm64 - - ppc64le - - s390x - - key: kubernetes.io/os - operator: In - values: - - linux + - matchExpressions: + - key: kubernetes.io/arch + operator: In + values: + - amd64 + - arm64 + - ppc64le + - s390x + - key: kubernetes.io/os + operator: In + values: + - linux containers: - - args: - - --secure-listen-address=0.0.0.0:8443 - - --upstream=http://127.0.0.1:8080/ - - --logtostderr=true - - --v=0 - image: registry.k8s.io/kubebuilder/kube-rbac-proxy:v0.13.1 - name: kube-rbac-proxy - ports: - - containerPort: 8443 - name: https - protocol: TCP - resources: - limits: - cpu: 500m - memory: 128Mi - requests: - cpu: 5m - memory: 64Mi - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - - args: - - --health-probe-bind-address=:8081 - - --metrics-bind-address=127.0.0.1:8080 - - --leader-elect - command: - - /manager - image: ghcr.io/srl-labs/srl-controller:v0.7.1 - livenessProbe: - httpGet: - path: /healthz - port: 8081 - initialDelaySeconds: 15 - periodSeconds: 20 - name: manager - readinessProbe: - httpGet: - path: /readyz - port: 8081 - initialDelaySeconds: 5 - periodSeconds: 10 - resources: - limits: - cpu: 500m - memory: 128Mi - requests: - cpu: 10m - memory: 64Mi - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL + - args: + - --secure-listen-address=0.0.0.0:8443 + - --upstream=http://127.0.0.1:8080/ + - --logtostderr=true + - --v=0 + image: registry.k8s.io/kubebuilder/kube-rbac-proxy:v0.13.1 + name: kube-rbac-proxy + ports: + - containerPort: 8443 + name: https + protocol: TCP + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 5m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + - args: + - --health-probe-bind-address=:8081 + - --metrics-bind-address=127.0.0.1:8080 + - --leader-elect + command: + - /manager + image: ghcr.io/srl-labs/srl-controller:v0.7.1 + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 10m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL securityContext: runAsNonRoot: true serviceAccountName: srlinux-controller-controller-manager diff --git a/manifests/flannel/manifest.yaml b/manifests/flannel/manifest.yaml index 9f7b2eb53..e846108ab 100644 --- a/manifests/flannel/manifest.yaml +++ b/manifests/flannel/manifest.yaml @@ -14,33 +14,33 @@ metadata: k8s-app: flannel name: flannel rules: -- apiGroups: - - "" - resources: - - pods - verbs: - - get -- apiGroups: - - "" - resources: - - nodes - verbs: - - get - - list - - watch -- apiGroups: - - "" - resources: - - nodes/status - verbs: - - patch -- apiGroups: - - networking.k8s.io - resources: - - clustercidrs - verbs: - - list - - watch + - apiGroups: + - "" + resources: + - pods + verbs: + - get + - apiGroups: + - "" + resources: + - nodes + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - nodes/status + verbs: + - patch + - apiGroups: + - networking.k8s.io + resources: + - clustercidrs + verbs: + - list + - watch --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 @@ -53,9 +53,9 @@ roleRef: kind: ClusterRole name: flannel subjects: -- kind: ServiceAccount - name: flannel - namespace: kube-flannel + - kind: ServiceAccount + name: flannel + namespace: kube-flannel --- apiVersion: v1 kind: ServiceAccount @@ -126,90 +126,90 @@ spec: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - - matchExpressions: - - key: kubernetes.io/os - operator: In - values: - - linux + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - linux hostNetwork: true priorityClassName: system-node-critical tolerations: - - operator: Exists - effect: NoSchedule + - operator: Exists + effect: NoSchedule serviceAccountName: flannel initContainers: - - name: install-cni-plugin - image: docker.io/flannel/flannel-cni-plugin:v1.4.0-flannel1 - command: - - cp - args: - - -f - - /flannel - - /opt/cni/bin/flannel - volumeMounts: - - name: cni-plugin - mountPath: /opt/cni/bin - - name: install-cni - image: docker.io/flannel/flannel:v0.24.3 - command: - - cp - args: - - -f - - /etc/kube-flannel/cni-conf.json - - /etc/cni/net.d/10-flannel.conflist - volumeMounts: - - name: cni - mountPath: /etc/cni/net.d - - name: flannel-cfg - mountPath: /etc/kube-flannel/ + - name: install-cni-plugin + image: docker.io/flannel/flannel-cni-plugin:v1.4.0-flannel1 + command: + - cp + args: + - -f + - /flannel + - /opt/cni/bin/flannel + volumeMounts: + - name: cni-plugin + mountPath: /opt/cni/bin + - name: install-cni + image: docker.io/flannel/flannel:v0.24.3 + command: + - cp + args: + - -f + - /etc/kube-flannel/cni-conf.json + - /etc/cni/net.d/10-flannel.conflist + volumeMounts: + - name: cni + mountPath: /etc/cni/net.d + - name: flannel-cfg + mountPath: /etc/kube-flannel/ containers: - - name: kube-flannel - image: docker.io/flannel/flannel:v0.24.3 - command: - - /opt/bin/flanneld - args: - - --ip-masq - - --kube-subnet-mgr - resources: - requests: - cpu: "100m" - memory: "50Mi" - securityContext: - privileged: false - capabilities: - add: ["NET_ADMIN", "NET_RAW"] - env: - - name: POD_NAME - valueFrom: - fieldRef: - fieldPath: metadata.name - - name: POD_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - - name: EVENT_QUEUE_DEPTH - value: "5000" - volumeMounts: + - name: kube-flannel + image: docker.io/flannel/flannel:v0.24.3 + command: + - /opt/bin/flanneld + args: + - --ip-masq + - --kube-subnet-mgr + resources: + requests: + cpu: "100m" + memory: "50Mi" + securityContext: + privileged: false + capabilities: + add: ["NET_ADMIN", "NET_RAW"] + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: EVENT_QUEUE_DEPTH + value: "5000" + volumeMounts: + - name: run + mountPath: /run/flannel + - name: flannel-cfg + mountPath: /etc/kube-flannel/ + - name: xtables-lock + mountPath: /run/xtables.lock + volumes: - name: run - mountPath: /run/flannel + hostPath: + path: /run/flannel + - name: cni-plugin + hostPath: + path: /opt/cni/bin + - name: cni + hostPath: + path: /etc/cni/net.d - name: flannel-cfg - mountPath: /etc/kube-flannel/ + configMap: + name: kube-flannel-cfg - name: xtables-lock - mountPath: /run/xtables.lock - volumes: - - name: run - hostPath: - path: /run/flannel - - name: cni-plugin - hostPath: - path: /opt/cni/bin - - name: cni - hostPath: - path: /etc/cni/net.d - - name: flannel-cfg - configMap: - name: kube-flannel-cfg - - name: xtables-lock - hostPath: - path: /run/xtables.lock - type: FileOrCreate + hostPath: + path: /run/xtables.lock + type: FileOrCreate diff --git a/manifests/keysight/ixiatg-configmap.yaml b/manifests/keysight/ixiatg-configmap.yaml index 2028969b0..f3fe166b2 100644 --- a/manifests/keysight/ixiatg-configmap.yaml +++ b/manifests/keysight/ixiatg-configmap.yaml @@ -1,3 +1,4 @@ +--- apiVersion: v1 kind: ConfigMap metadata: diff --git a/manifests/keysight/ixiatg-operator.yaml b/manifests/keysight/ixiatg-operator.yaml index 7905959fe..4d24e137c 100644 --- a/manifests/keysight/ixiatg-operator.yaml +++ b/manifests/keysight/ixiatg-operator.yaml @@ -1,3 +1,4 @@ +--- apiVersion: v1 kind: Namespace metadata: @@ -21,104 +22,104 @@ spec: singular: ixiatg scope: Namespaced versions: - - name: v1beta1 - schema: - openAPIV3Schema: - description: IxiaTG is the Schema for the ixiatg API - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: IxiaTGSpec defines the desired state of IxiaTG - properties: - api_endpoint_map: - additionalProperties: - description: IxiaTGSvcPort defines the endpoint services for configuration and stats for the OTG node - properties: - in: - format: int32 - type: integer - out: - format: int32 - type: integer - required: - - in + - name: v1beta1 + schema: + openAPIV3Schema: + description: IxiaTG is the Schema for the ixiatg API + properties: + apiVersion: + description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + metadata: + type: object + spec: + description: IxiaTGSpec defines the desired state of IxiaTG + properties: + api_endpoint_map: + additionalProperties: + description: IxiaTGSvcPort defines the endpoint services for configuration and stats for the OTG node + properties: + in: + format: int32 + type: integer + out: + format: int32 + type: integer + required: + - in + type: object + description: ApiEndPoint as define in OTG config type: object - description: ApiEndPoint as define in OTG config - type: object - desired_state: - description: Desired state by network emulation (KNE) - type: string - init_container: - description: Init container image of the node - properties: - image: - type: string - sleep: - format: int32 - type: integer - type: object - interfaces: - description: Interfaces with DUT - items: - description: IxiaTGSvcPort defines the endpoint ports for network traffic for the OTG node + desired_state: + description: Desired state by network emulation (KNE) + type: string + init_container: + description: Init container image of the node properties: - group: - type: string - name: + image: type: string - required: - - name + sleep: + format: int32 + type: integer type: object - type: array - release: - description: Version of the node - type: string - type: object - status: - description: IxiaTGStatus defines the observed state of IxiaTG - properties: - api_endpoint: - description: List of OTG service names - properties: - pod_name: - type: string - service_names: - items: - type: string - type: array - type: object - interfaces: - description: List of OTG port and pod mapping - items: - description: IxiaTGIntfStatus defines the mapping between endpoint ports and encasing pods + interfaces: + description: Interfaces with DUT + items: + description: IxiaTGSvcPort defines the endpoint ports for network traffic for the OTG node + properties: + group: + type: string + name: + type: string + required: + - name + type: object + type: array + release: + description: Version of the node + type: string + type: object + status: + description: IxiaTGStatus defines the observed state of IxiaTG + properties: + api_endpoint: + description: List of OTG service names properties: - interface: - type: string - name: - type: string pod_name: type: string + service_names: + items: + type: string + type: array type: object - type: array - reason: - description: Reason in case of failure - type: string - state: - description: Observed state - type: string - type: object - type: object - served: true - storage: true - subresources: - status: {} + interfaces: + description: List of OTG port and pod mapping + items: + description: IxiaTGIntfStatus defines the mapping between endpoint ports and encasing pods + properties: + interface: + type: string + name: + type: string + pod_name: + type: string + type: object + type: array + reason: + description: Reason in case of failure + type: string + state: + description: Observed state + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} status: acceptedNames: kind: "" @@ -138,37 +139,37 @@ metadata: name: ixiatg-op-leader-election-role namespace: ixiatg-op-system rules: -- apiGroups: - - "" - resources: - - configmaps - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - "" - resources: - - events - verbs: - - create - - patch + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole @@ -176,108 +177,108 @@ metadata: creationTimestamp: null name: ixiatg-op-manager-role rules: -- apiGroups: - - "" - resources: - - configmaps - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - pods - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - secrets - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - services - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - network.keysight.com - resources: - - ixiatgs - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - network.keysight.com - resources: - - ixiatgs/finalizers - verbs: - - update -- apiGroups: - - network.keysight.com - resources: - - ixiatgs/status - verbs: - - get - - patch - - update + - apiGroups: + - "" + resources: + - configmaps + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - "" + resources: + - pods + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - "" + resources: + - secrets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - "" + resources: + - services + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - network.keysight.com + resources: + - ixiatgs + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - network.keysight.com + resources: + - ixiatgs/finalizers + verbs: + - update + - apiGroups: + - network.keysight.com + resources: + - ixiatgs/status + verbs: + - get + - patch + - update --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: ixiatg-op-metrics-reader rules: -- nonResourceURLs: - - /metrics - verbs: - - get + - nonResourceURLs: + - /metrics + verbs: + - get --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: ixiatg-op-proxy-role rules: -- apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create -- apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create + - apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create + - apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -289,9 +290,9 @@ roleRef: kind: Role name: ixiatg-op-leader-election-role subjects: -- kind: ServiceAccount - name: ixiatg-op-controller-manager - namespace: ixiatg-op-system + - kind: ServiceAccount + name: ixiatg-op-controller-manager + namespace: ixiatg-op-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -302,9 +303,9 @@ roleRef: kind: ClusterRole name: ixiatg-op-manager-role subjects: -- kind: ServiceAccount - name: ixiatg-op-controller-manager - namespace: ixiatg-op-system + - kind: ServiceAccount + name: ixiatg-op-controller-manager + namespace: ixiatg-op-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -315,9 +316,9 @@ roleRef: kind: ClusterRole name: ixiatg-op-proxy-role subjects: -- kind: ServiceAccount - name: ixiatg-op-controller-manager - namespace: ixiatg-op-system + - kind: ServiceAccount + name: ixiatg-op-controller-manager + namespace: ixiatg-op-system --- apiVersion: v1 data: @@ -347,9 +348,9 @@ metadata: namespace: ixiatg-op-system spec: ports: - - name: https - port: 8443 - targetPort: https + - name: https + port: 8443 + targetPort: https selector: control-plane: controller-manager --- @@ -371,47 +372,47 @@ spec: control-plane: controller-manager spec: containers: - - args: - - --secure-listen-address=0.0.0.0:8443 - - --upstream=http://127.0.0.1:8080/ - - --logtostderr=true - - --v=10 - image: registry.k8s.io/kubebuilder/kube-rbac-proxy:v0.8.0 - name: kube-rbac-proxy - ports: - - containerPort: 8443 - name: https - - args: - - --health-probe-bind-address=:8081 - - --metrics-bind-address=127.0.0.1:8080 - - --leader-elect - command: - - /manager - image: ghcr.io/open-traffic-generator/keng-operator:0.3.34 - livenessProbe: - httpGet: - path: /healthz - port: 8081 - initialDelaySeconds: 15 - periodSeconds: 20 - name: manager - readinessProbe: - httpGet: - path: /readyz - port: 8081 - initialDelaySeconds: 5 - periodSeconds: 10 - resources: - limits: - cpu: 100m - memory: 200Mi - requests: - cpu: 100m - memory: 20Mi - securityContext: - allowPrivilegeEscalation: false + - args: + - --secure-listen-address=0.0.0.0:8443 + - --upstream=http://127.0.0.1:8080/ + - --logtostderr=true + - --v=10 + image: registry.k8s.io/kubebuilder/kube-rbac-proxy:v0.8.0 + name: kube-rbac-proxy + ports: + - containerPort: 8443 + name: https + - args: + - --health-probe-bind-address=:8081 + - --metrics-bind-address=127.0.0.1:8080 + - --leader-elect + command: + - /manager + image: ghcr.io/open-traffic-generator/keng-operator:0.3.34 + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 100m + memory: 200Mi + requests: + cpu: 100m + memory: 20Mi + securityContext: + allowPrivilegeEscalation: false imagePullSecrets: - - name: ixia-pull-secret + - name: ixia-pull-secret securityContext: runAsNonRoot: true serviceAccountName: ixiatg-op-controller-manager diff --git a/manifests/kind/bridge.yaml b/manifests/kind/bridge.yaml index 84915de60..2f7d6991d 100644 --- a/manifests/kind/bridge.yaml +++ b/manifests/kind/bridge.yaml @@ -13,7 +13,7 @@ rules: - watch - patch - apiGroups: - - "" + - "" resources: - configmaps verbs: @@ -28,9 +28,9 @@ roleRef: kind: ClusterRole name: kindnet subjects: -- kind: ServiceAccount - name: kindnet - namespace: kube-system + - kind: ServiceAccount + name: kindnet + namespace: kube-system --- apiVersion: v1 kind: ServiceAccount @@ -60,66 +60,71 @@ spec: spec: hostNetwork: true tolerations: - - operator: Exists - effect: NoSchedule + - operator: Exists + effect: NoSchedule serviceAccountName: kindnet initContainers: - - name: install-cni-bin - image: ghcr.io/aojea/kindnetd:v1.7.0 - command: ['sh', '-c', 'cd /opt/cni/bin; for i in * ; do cat $i > /cni/$i ; chmod +x /cni/$i ; done'] - volumeMounts: - - name: cni-bin - mountPath: /cni + - name: install-cni-bin + image: ghcr.io/aojea/kindnetd:v1.7.0 + command: + [ + "sh", + "-c", + "cd /opt/cni/bin; for i in * ; do cat $i > /cni/$i ; chmod +x /cni/$i ; done", + ] + volumeMounts: + - name: cni-bin + mountPath: /cni containers: - - name: kindnet-cni - image: ghcr.io/aojea/kindnetd:v1.7.0 - env: - - name: HOST_IP - valueFrom: - fieldRef: - fieldPath: status.hostIP - - name: POD_IP - valueFrom: - fieldRef: - fieldPath: status.podIP - - name: CNI_BRIDGE - value: "true" - - name: DISABLE_CNI_BRIDGE_OFFLOAD - value: "true" - volumeMounts: + - name: kindnet-cni + image: ghcr.io/aojea/kindnetd:v1.7.0 + env: + - name: HOST_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: CNI_BRIDGE + value: "true" + - name: DISABLE_CNI_BRIDGE_OFFLOAD + value: "true" + volumeMounts: + - name: cni-cfg + mountPath: /etc/cni/net.d + - name: xtables-lock + mountPath: /run/xtables.lock + readOnly: false + - name: lib-modules + mountPath: /lib/modules + readOnly: true + resources: + requests: + cpu: "100m" + memory: "50Mi" + limits: + cpu: "100m" + memory: "50Mi" + securityContext: + privileged: false + capabilities: + add: ["NET_RAW", "NET_ADMIN"] + volumes: + - name: cni-bin + hostPath: + path: /opt/cni/bin + type: DirectoryOrCreate - name: cni-cfg - mountPath: /etc/cni/net.d + hostPath: + path: /etc/cni/net.d + type: DirectoryOrCreate - name: xtables-lock - mountPath: /run/xtables.lock - readOnly: false + hostPath: + path: /run/xtables.lock + type: FileOrCreate - name: lib-modules - mountPath: /lib/modules - readOnly: true - resources: - requests: - cpu: "100m" - memory: "50Mi" - limits: - cpu: "100m" - memory: "50Mi" - securityContext: - privileged: false - capabilities: - add: ["NET_RAW", "NET_ADMIN"] - volumes: - - name: cni-bin - hostPath: - path: /opt/cni/bin - type: DirectoryOrCreate - - name: cni-cfg - hostPath: - path: /etc/cni/net.d - type: DirectoryOrCreate - - name: xtables-lock - hostPath: - path: /run/xtables.lock - type: FileOrCreate - - name: lib-modules - hostPath: - path: /lib/modules + hostPath: + path: /lib/modules --- diff --git a/manifests/kind/config.yaml b/manifests/kind/config.yaml index 332ed08cb..5181a8603 100644 --- a/manifests/kind/config.yaml +++ b/manifests/kind/config.yaml @@ -1,11 +1,12 @@ +--- kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 networking: # the default CNI will not be installed disableDefaultCNI: true nodes: -- role: control-plane - # add a mount from /tmp/kne on the host to /tmp/kne on the node - extraMounts: - - hostPath: /tmp/kne - containerPath: /tmp/kne + - role: control-plane + # add a mount from /tmp/kne on the host to /tmp/kne on the node + extraMounts: + - hostPath: /tmp/kne + containerPath: /tmp/kne diff --git a/manifests/kind/kind-bridge.yaml b/manifests/kind/kind-bridge.yaml index 84915de60..2f7d6991d 100644 --- a/manifests/kind/kind-bridge.yaml +++ b/manifests/kind/kind-bridge.yaml @@ -13,7 +13,7 @@ rules: - watch - patch - apiGroups: - - "" + - "" resources: - configmaps verbs: @@ -28,9 +28,9 @@ roleRef: kind: ClusterRole name: kindnet subjects: -- kind: ServiceAccount - name: kindnet - namespace: kube-system + - kind: ServiceAccount + name: kindnet + namespace: kube-system --- apiVersion: v1 kind: ServiceAccount @@ -60,66 +60,71 @@ spec: spec: hostNetwork: true tolerations: - - operator: Exists - effect: NoSchedule + - operator: Exists + effect: NoSchedule serviceAccountName: kindnet initContainers: - - name: install-cni-bin - image: ghcr.io/aojea/kindnetd:v1.7.0 - command: ['sh', '-c', 'cd /opt/cni/bin; for i in * ; do cat $i > /cni/$i ; chmod +x /cni/$i ; done'] - volumeMounts: - - name: cni-bin - mountPath: /cni + - name: install-cni-bin + image: ghcr.io/aojea/kindnetd:v1.7.0 + command: + [ + "sh", + "-c", + "cd /opt/cni/bin; for i in * ; do cat $i > /cni/$i ; chmod +x /cni/$i ; done", + ] + volumeMounts: + - name: cni-bin + mountPath: /cni containers: - - name: kindnet-cni - image: ghcr.io/aojea/kindnetd:v1.7.0 - env: - - name: HOST_IP - valueFrom: - fieldRef: - fieldPath: status.hostIP - - name: POD_IP - valueFrom: - fieldRef: - fieldPath: status.podIP - - name: CNI_BRIDGE - value: "true" - - name: DISABLE_CNI_BRIDGE_OFFLOAD - value: "true" - volumeMounts: + - name: kindnet-cni + image: ghcr.io/aojea/kindnetd:v1.7.0 + env: + - name: HOST_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: CNI_BRIDGE + value: "true" + - name: DISABLE_CNI_BRIDGE_OFFLOAD + value: "true" + volumeMounts: + - name: cni-cfg + mountPath: /etc/cni/net.d + - name: xtables-lock + mountPath: /run/xtables.lock + readOnly: false + - name: lib-modules + mountPath: /lib/modules + readOnly: true + resources: + requests: + cpu: "100m" + memory: "50Mi" + limits: + cpu: "100m" + memory: "50Mi" + securityContext: + privileged: false + capabilities: + add: ["NET_RAW", "NET_ADMIN"] + volumes: + - name: cni-bin + hostPath: + path: /opt/cni/bin + type: DirectoryOrCreate - name: cni-cfg - mountPath: /etc/cni/net.d + hostPath: + path: /etc/cni/net.d + type: DirectoryOrCreate - name: xtables-lock - mountPath: /run/xtables.lock - readOnly: false + hostPath: + path: /run/xtables.lock + type: FileOrCreate - name: lib-modules - mountPath: /lib/modules - readOnly: true - resources: - requests: - cpu: "100m" - memory: "50Mi" - limits: - cpu: "100m" - memory: "50Mi" - securityContext: - privileged: false - capabilities: - add: ["NET_RAW", "NET_ADMIN"] - volumes: - - name: cni-bin - hostPath: - path: /opt/cni/bin - type: DirectoryOrCreate - - name: cni-cfg - hostPath: - path: /etc/cni/net.d - type: DirectoryOrCreate - - name: xtables-lock - hostPath: - path: /run/xtables.lock - type: FileOrCreate - - name: lib-modules - hostPath: - path: /lib/modules + hostPath: + path: /lib/modules --- diff --git a/manifests/kube/credential-provider-config.yaml b/manifests/kube/credential-provider-config.yaml index bd5cdd310..074161856 100644 --- a/manifests/kube/credential-provider-config.yaml +++ b/manifests/kube/credential-provider-config.yaml @@ -1,15 +1,16 @@ +--- kind: CredentialProviderConfig apiVersion: kubelet.config.k8s.io/v1 providers: -- name: auth-provider-gcp - apiVersion: credentialprovider.kubelet.k8s.io/v1 - matchImages: - - "container.cloud.google.com" - - "gcr.io" - - "*.gcr.io" - - "*.pkg.dev" - - "registry.k8s.io" - args: - - get-credentials - - --v=3 - defaultCacheDuration: 1m + - name: auth-provider-gcp + apiVersion: credentialprovider.kubelet.k8s.io/v1 + matchImages: + - "container.cloud.google.com" + - "gcr.io" + - "*.gcr.io" + - "*.pkg.dev" + - "registry.k8s.io" + args: + - get-credentials + - --v=3 + defaultCacheDuration: 1m diff --git a/manifests/meshnet/grpc/manifest.yaml b/manifests/meshnet/grpc/manifest.yaml index bcda4c210..76bb464b3 100644 --- a/manifests/meshnet/grpc/manifest.yaml +++ b/manifests/meshnet/grpc/manifest.yaml @@ -1,3 +1,4 @@ +--- apiVersion: v1 kind: Namespace metadata: @@ -23,100 +24,110 @@ spec: singular: gwirekobj scope: Namespaced versions: - - name: v1beta1 - schema: - openAPIV3Schema: - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource - this object represents. Servers may infer this from the endpoint - the client submits requests to. Cannot be updated. In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - uids: - description: unique link id - items: - type: integer - type: array - type: object - status: - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - grpcWireItems: - items: - properties: - gwire_peer_node_ip: - description: peer node IP address - type: string - link_id: - description: Unique link id as assigned by meshnet - format: int64 - type: integer - local_pod_iface_name: - description: Local pod interface name that is specified in topology - CR and is created by meshnet - type: string - local_pod_ip: - description: Local pod ip as specified in topology CR - type: string - local_pod_name: - description: Local pod name as specified in topology CR - type: string - local_pod_net_ns: - description: Netwokr namespace of the local pod holding the - wire end - type: string - node_name: - description: Name of the node holding the wire end - type: string - topo_namespace: - description: The topology namespace. - type: string - wire_iface_id_on_peer_node: - description: The interface id, in the peer node adn is connected - with remote pod. This is used for de-multiplexing received - packet from grpcwire - format: int64 - type: integer - wire_iface_name_on_local_node: - description: The interface(name) in the local node and is connected - with local pod - type: string - type: object - type: array - kind: - description: 'Kind is a string value representing the REST resource - this object represents. Servers may infer this from the endpoint - the client submits requests to. Cannot be updated. In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - type: object - type: object - served: true - storage: true + - name: v1beta1 + schema: + openAPIV3Schema: + properties: + apiVersion: + description: + "APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: + "Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + metadata: + type: object + spec: + properties: + apiVersion: + description: + "APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: + "Kind is a string value representing the REST resource + this object represents. Servers may infer this from the endpoint + the client submits requests to. Cannot be updated. In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + uids: + description: unique link id + items: + type: integer + type: array + type: object + status: + properties: + apiVersion: + description: + "APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + grpcWireItems: + items: + properties: + gwire_peer_node_ip: + description: peer node IP address + type: string + link_id: + description: Unique link id as assigned by meshnet + format: int64 + type: integer + local_pod_iface_name: + description: + Local pod interface name that is specified in topology + CR and is created by meshnet + type: string + local_pod_ip: + description: Local pod ip as specified in topology CR + type: string + local_pod_name: + description: Local pod name as specified in topology CR + type: string + local_pod_net_ns: + description: + Netwokr namespace of the local pod holding the + wire end + type: string + node_name: + description: Name of the node holding the wire end + type: string + topo_namespace: + description: The topology namespace. + type: string + wire_iface_id_on_peer_node: + description: + The interface id, in the peer node and is connected + with remote pod. This is used for de-multiplexing received + packet from grpcwire + format: int64 + type: integer + wire_iface_name_on_local_node: + description: + The interface(name) in the local node and is connected + with local pod + type: string + type: object + type: array + kind: + description: + "Kind is a string value representing the REST resource + this object represents. Servers may infer this from the endpoint + the client submits requests to. Cannot be updated. In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + type: object + type: object + served: true + storage: true --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition @@ -130,75 +141,75 @@ spec: kind: Topology plural: topologies shortNames: - - topo + - topo singular: topology scope: Namespaced versions: - - name: v1beta1 - schema: - openAPIV3Schema: - properties: - spec: - properties: - links: - items: - description: A complete definition of a p2p link - properties: - local_intf: - description: Local interface name - type: string - local_ip: - description: (Optional) Peer IP address - type: string - peer_intf: - description: Peer interface name - type: string - peer_ip: - description: (Optional) Local IP address - type: string - peer_pod: - description: Name of the peer pod - type: string - uid: - description: Unique identified of a p2p link - type: integer - required: - - uid - - peer_pod - - local_intf - - peer_intf - type: object - type: array - type: object - status: - properties: - container_id: - description: Sandbox ID of the POD - type: string - net_ns: - description: Network namespace of the POD - type: string - skipped: - description: List of pods/interfaces that are skipped by local pod - items: - properties: - link_id: - format: int64 - type: integer - pod_name: - description: peer pod name - type: string - type: object - type: array - src_ip: - description: Source IP of the POD - type: string - type: object - type: object - served: true - storage: true - subresources: - status: {} + - name: v1beta1 + schema: + openAPIV3Schema: + properties: + spec: + properties: + links: + items: + description: A complete definition of a p2p link + properties: + local_intf: + description: Local interface name + type: string + local_ip: + description: (Optional) Peer IP address + type: string + peer_intf: + description: Peer interface name + type: string + peer_ip: + description: (Optional) Local IP address + type: string + peer_pod: + description: Name of the peer pod + type: string + uid: + description: Unique identified of a p2p link + type: integer + required: + - uid + - peer_pod + - local_intf + - peer_intf + type: object + type: array + type: object + status: + properties: + container_id: + description: Sandbox ID of the POD + type: string + net_ns: + description: Network namespace of the POD + type: string + skipped: + description: List of pods/interfaces that are skipped by local pod + items: + properties: + link_id: + format: int64 + type: integer + pod_name: + description: peer pod name + type: string + type: object + type: array + src_ip: + description: Source IP of the POD + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} status: acceptedNames: kind: "" @@ -221,21 +232,21 @@ metadata: app: meshnet name: meshnet-clusterrole rules: -- apiGroups: - - networkop.co.uk - resources: - - topologies - - gwirekobjs - verbs: - - '*' -- apiGroups: - - networkop.co.uk - resources: - - topologies/status - - gwirekobjs/spec - - gwirekobjs/status - verbs: - - '*' + - apiGroups: + - networkop.co.uk + resources: + - topologies + - gwirekobjs + verbs: + - "*" + - apiGroups: + - networkop.co.uk + resources: + - topologies/status + - gwirekobjs/spec + - gwirekobjs/status + verbs: + - "*" --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -248,9 +259,9 @@ roleRef: kind: ClusterRole name: meshnet-clusterrole subjects: -- kind: ServiceAccount - name: meshnet - namespace: meshnet + - kind: ServiceAccount + name: meshnet + namespace: meshnet --- apiVersion: apps/v1 kind: DaemonSet @@ -272,46 +283,46 @@ spec: name: meshnet spec: containers: - - command: - - ./entrypoint.sh - env: - - name: HOST_IP - valueFrom: - fieldRef: - fieldPath: status.hostIP - - name: INTER_NODE_LINK_TYPE - value: GRPC - - name: NODE_NAME - valueFrom: - fieldRef: - fieldPath: spec.nodeName - - name: POD_NAME - valueFrom: - fieldRef: - fieldPath: metadata.name - - name: POD_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - image: us-west1-docker.pkg.dev/kne-external/kne/networkop/meshnet:v0.3.2 - imagePullPolicy: IfNotPresent - name: meshnet - resources: - limits: - memory: 10G - requests: - cpu: 200m - memory: 1G - securityContext: - privileged: true - volumeMounts: - - mountPath: /etc/cni/net.d - name: cni-cfg - - mountPath: /opt/cni/bin - name: cni-bin - - mountPath: /var/run/netns - mountPropagation: Bidirectional - name: var-run-netns + - command: + - ./entrypoint.sh + env: + - name: HOST_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: INTER_NODE_LINK_TYPE + value: GRPC + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: us-west1-docker.pkg.dev/kne-external/kne/networkop/meshnet:v0.3.2 + imagePullPolicy: IfNotPresent + name: meshnet + resources: + limits: + memory: 10G + requests: + cpu: 200m + memory: 1G + securityContext: + privileged: true + volumeMounts: + - mountPath: /etc/cni/net.d + name: cni-cfg + - mountPath: /opt/cni/bin + name: cni-bin + - mountPath: /var/run/netns + mountPropagation: Bidirectional + name: var-run-netns hostIPC: true hostNetwork: true hostPID: true @@ -320,15 +331,15 @@ spec: serviceAccountName: meshnet terminationGracePeriodSeconds: 30 tolerations: - - effect: NoSchedule - operator: Exists + - effect: NoSchedule + operator: Exists volumes: - - hostPath: - path: /opt/cni/bin - name: cni-bin - - hostPath: - path: /etc/cni/net.d - name: cni-cfg - - hostPath: - path: /var/run/netns - name: var-run-netns + - hostPath: + path: /opt/cni/bin + name: cni-bin + - hostPath: + path: /etc/cni/net.d + name: cni-cfg + - hostPath: + path: /var/run/netns + name: var-run-netns diff --git a/manifests/meshnet/vxlan/manifest.yaml b/manifests/meshnet/vxlan/manifest.yaml index e9e99e9f5..5a6824b93 100644 --- a/manifests/meshnet/vxlan/manifest.yaml +++ b/manifests/meshnet/vxlan/manifest.yaml @@ -1,3 +1,4 @@ +--- apiVersion: v1 kind: Namespace metadata: @@ -23,100 +24,110 @@ spec: singular: gwirekobj scope: Namespaced versions: - - name: v1beta1 - schema: - openAPIV3Schema: - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource - this object represents. Servers may infer this from the endpoint - the client submits requests to. Cannot be updated. In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - uids: - description: unique link id - items: - type: integer - type: array - type: object - status: - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - grpcWireItems: - items: - properties: - gwire_peer_node_ip: - description: peer node IP address - type: string - link_id: - description: Unique link id as assigned by meshnet - format: int64 - type: integer - local_pod_iface_name: - description: Local pod interface name that is specified in topology - CR and is created by meshnet - type: string - local_pod_ip: - description: Local pod ip as specified in topology CR - type: string - local_pod_name: - description: Local pod name as specified in topology CR - type: string - local_pod_net_ns: - description: Netwokr namespace of the local pod holding the - wire end - type: string - node_name: - description: Name of the node holding the wire end - type: string - topo_namespace: - description: The topology namespace. - type: string - wire_iface_id_on_peer_node: - description: The interface id, in the peer node adn is connected - with remote pod. This is used for de-multiplexing received - packet from grpcwire - format: int64 - type: integer - wire_iface_name_on_local_node: - description: The interface(name) in the local node and is connected - with local pod - type: string - type: object - type: array - kind: - description: 'Kind is a string value representing the REST resource - this object represents. Servers may infer this from the endpoint - the client submits requests to. Cannot be updated. In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - type: object - type: object - served: true - storage: true + - name: v1beta1 + schema: + openAPIV3Schema: + properties: + apiVersion: + description: + "APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: + "Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + metadata: + type: object + spec: + properties: + apiVersion: + description: + "APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + kind: + description: + "Kind is a string value representing the REST resource + this object represents. Servers may infer this from the endpoint + the client submits requests to. Cannot be updated. In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + uids: + description: unique link id + items: + type: integer + type: array + type: object + status: + properties: + apiVersion: + description: + "APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources" + type: string + grpcWireItems: + items: + properties: + gwire_peer_node_ip: + description: peer node IP address + type: string + link_id: + description: Unique link id as assigned by meshnet + format: int64 + type: integer + local_pod_iface_name: + description: + Local pod interface name that is specified in topology + CR and is created by meshnet + type: string + local_pod_ip: + description: Local pod ip as specified in topology CR + type: string + local_pod_name: + description: Local pod name as specified in topology CR + type: string + local_pod_net_ns: + description: + Netwokr namespace of the local pod holding the + wire end + type: string + node_name: + description: Name of the node holding the wire end + type: string + topo_namespace: + description: The topology namespace. + type: string + wire_iface_id_on_peer_node: + description: + The interface id, in the peer node and is connected + with remote pod. This is used for de-multiplexing received + packet from grpcwire + format: int64 + type: integer + wire_iface_name_on_local_node: + description: + The interface(name) in the local node and is connected + with local pod + type: string + type: object + type: array + kind: + description: + "Kind is a string value representing the REST resource + this object represents. Servers may infer this from the endpoint + the client submits requests to. Cannot be updated. In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds" + type: string + type: object + type: object + served: true + storage: true --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition @@ -130,75 +141,75 @@ spec: kind: Topology plural: topologies shortNames: - - topo + - topo singular: topology scope: Namespaced versions: - - name: v1beta1 - schema: - openAPIV3Schema: - properties: - spec: - properties: - links: - items: - description: A complete definition of a p2p link - properties: - local_intf: - description: Local interface name - type: string - local_ip: - description: (Optional) Peer IP address - type: string - peer_intf: - description: Peer interface name - type: string - peer_ip: - description: (Optional) Local IP address - type: string - peer_pod: - description: Name of the peer pod - type: string - uid: - description: Unique identified of a p2p link - type: integer - required: - - uid - - peer_pod - - local_intf - - peer_intf - type: object - type: array - type: object - status: - properties: - container_id: - description: Sandbox ID of the POD - type: string - net_ns: - description: Network namespace of the POD - type: string - skipped: - description: List of pods/interfaces that are skipped by local pod - items: - properties: - link_id: - format: int64 - type: integer - pod_name: - description: peer pod name - type: string - type: object - type: array - src_ip: - description: Source IP of the POD - type: string - type: object - type: object - served: true - storage: true - subresources: - status: {} + - name: v1beta1 + schema: + openAPIV3Schema: + properties: + spec: + properties: + links: + items: + description: A complete definition of a p2p link + properties: + local_intf: + description: Local interface name + type: string + local_ip: + description: (Optional) Peer IP address + type: string + peer_intf: + description: Peer interface name + type: string + peer_ip: + description: (Optional) Local IP address + type: string + peer_pod: + description: Name of the peer pod + type: string + uid: + description: Unique identified of a p2p link + type: integer + required: + - uid + - peer_pod + - local_intf + - peer_intf + type: object + type: array + type: object + status: + properties: + container_id: + description: Sandbox ID of the POD + type: string + net_ns: + description: Network namespace of the POD + type: string + skipped: + description: List of pods/interfaces that are skipped by local pod + items: + properties: + link_id: + format: int64 + type: integer + pod_name: + description: peer pod name + type: string + type: object + type: array + src_ip: + description: Source IP of the POD + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} status: acceptedNames: kind: "" @@ -221,21 +232,21 @@ metadata: app: meshnet name: meshnet-clusterrole rules: -- apiGroups: - - networkop.co.uk - resources: - - topologies - - gwirekobjs - verbs: - - '*' -- apiGroups: - - networkop.co.uk - resources: - - topologies/status - - gwirekobjs/spec - - gwirekobjs/status - verbs: - - '*' + - apiGroups: + - networkop.co.uk + resources: + - topologies + - gwirekobjs + verbs: + - "*" + - apiGroups: + - networkop.co.uk + resources: + - topologies/status + - gwirekobjs/spec + - gwirekobjs/status + verbs: + - "*" --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -248,9 +259,9 @@ roleRef: kind: ClusterRole name: meshnet-clusterrole subjects: -- kind: ServiceAccount - name: meshnet - namespace: meshnet + - kind: ServiceAccount + name: meshnet + namespace: meshnet --- apiVersion: apps/v1 kind: DaemonSet @@ -272,46 +283,46 @@ spec: name: meshnet spec: containers: - - command: - - ./entrypoint.sh - env: - - name: HOST_IP - valueFrom: - fieldRef: - fieldPath: status.hostIP - - name: INTER_NODE_LINK_TYPE - value: VXLAN - - name: NODE_NAME - valueFrom: - fieldRef: - fieldPath: spec.nodeName - - name: POD_NAME - valueFrom: - fieldRef: - fieldPath: metadata.name - - name: POD_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - image: us-west1-docker.pkg.dev/kne-external/kne/networkop/meshnet:v0.3.2 - imagePullPolicy: IfNotPresent - name: meshnet - resources: - limits: - memory: 10G - requests: - cpu: 200m - memory: 1G - securityContext: - privileged: true - volumeMounts: - - mountPath: /etc/cni/net.d - name: cni-cfg - - mountPath: /opt/cni/bin - name: cni-bin - - mountPath: /var/run/netns - mountPropagation: Bidirectional - name: var-run-netns + - command: + - ./entrypoint.sh + env: + - name: HOST_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: INTER_NODE_LINK_TYPE + value: VXLAN + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: us-west1-docker.pkg.dev/kne-external/kne/networkop/meshnet:v0.3.2 + imagePullPolicy: IfNotPresent + name: meshnet + resources: + limits: + memory: 10G + requests: + cpu: 200m + memory: 1G + securityContext: + privileged: true + volumeMounts: + - mountPath: /etc/cni/net.d + name: cni-cfg + - mountPath: /opt/cni/bin + name: cni-bin + - mountPath: /var/run/netns + mountPropagation: Bidirectional + name: var-run-netns hostIPC: true hostNetwork: true hostPID: true @@ -320,15 +331,15 @@ spec: serviceAccountName: meshnet terminationGracePeriodSeconds: 30 tolerations: - - effect: NoSchedule - operator: Exists + - effect: NoSchedule + operator: Exists volumes: - - hostPath: - path: /opt/cni/bin - name: cni-bin - - hostPath: - path: /etc/cni/net.d - name: cni-cfg - - hostPath: - path: /var/run/netns - name: var-run-netns + - hostPath: + path: /opt/cni/bin + name: cni-bin + - hostPath: + path: /etc/cni/net.d + name: cni-cfg + - hostPath: + path: /var/run/netns + name: var-run-netns diff --git a/manifests/metallb/manifest.yaml b/manifests/metallb/manifest.yaml index 48454a684..e005898a2 100644 --- a/manifests/metallb/manifest.yaml +++ b/manifests/metallb/manifest.yaml @@ -1,3 +1,4 @@ +--- apiVersion: v1 kind: Namespace metadata: @@ -22,111 +23,111 @@ spec: singular: bfdprofile scope: Namespaced versions: - - additionalPrinterColumns: - - jsonPath: .spec.passiveMode - name: Passive Mode - type: boolean - - jsonPath: .spec.transmitInterval - name: Transmit Interval - type: integer - - jsonPath: .spec.receiveInterval - name: Receive Interval - type: integer - - jsonPath: .spec.detectMultiplier - name: Multiplier - type: integer - name: v1beta1 - schema: - openAPIV3Schema: - description: |- - BFDProfile represents the settings of the bfd session that can be - optionally associated with a BGP session. - properties: - apiVersion: - description: |- - APIVersion defines the versioned schema of this representation of an object. - Servers should convert recognized schemas to the latest internal value, and - may reject unrecognized values. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources - type: string - kind: - description: |- - Kind is a string value representing the REST resource this object represents. - Servers may infer this from the endpoint the client submits requests to. - Cannot be updated. - In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds - type: string - metadata: - type: object - spec: - description: BFDProfileSpec defines the desired state of BFDProfile. - properties: - detectMultiplier: - description: |- - Configures the detection multiplier to determine - packet loss. The remote transmission interval will be multiplied - by this value to determine the connection loss detection timer. - format: int32 - maximum: 255 - minimum: 2 - type: integer - echoInterval: - description: |- - Configures the minimal echo receive transmission - interval that this system is capable of handling in milliseconds. - Defaults to 50ms - format: int32 - maximum: 60000 - minimum: 10 - type: integer - echoMode: - description: |- - Enables or disables the echo transmission mode. - This mode is disabled by default, and not supported on multi - hops setups. - type: boolean - minimumTtl: - description: |- - For multi hop sessions only: configure the minimum - expected TTL for an incoming BFD control packet. - format: int32 - maximum: 254 - minimum: 1 - type: integer - passiveMode: - description: |- - Mark session as passive: a passive session will not - attempt to start the connection and will wait for control packets - from peer before it begins replying. - type: boolean - receiveInterval: - description: |- - The minimum interval that this system is capable of - receiving control packets in milliseconds. - Defaults to 300ms. - format: int32 - maximum: 60000 - minimum: 10 - type: integer - transmitInterval: - description: |- - The minimum transmission interval (less jitter) - that this system wants to use to send BFD control packets in - milliseconds. Defaults to 300ms - format: int32 - maximum: 60000 - minimum: 10 - type: integer - type: object - status: - description: BFDProfileStatus defines the observed state of BFDProfile. - type: object - type: object - served: true - storage: true - subresources: - status: {} + - additionalPrinterColumns: + - jsonPath: .spec.passiveMode + name: Passive Mode + type: boolean + - jsonPath: .spec.transmitInterval + name: Transmit Interval + type: integer + - jsonPath: .spec.receiveInterval + name: Receive Interval + type: integer + - jsonPath: .spec.detectMultiplier + name: Multiplier + type: integer + name: v1beta1 + schema: + openAPIV3Schema: + description: |- + BFDProfile represents the settings of the bfd session that can be + optionally associated with a BGP session. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: BFDProfileSpec defines the desired state of BFDProfile. + properties: + detectMultiplier: + description: |- + Configures the detection multiplier to determine + packet loss. The remote transmission interval will be multiplied + by this value to determine the connection loss detection timer. + format: int32 + maximum: 255 + minimum: 2 + type: integer + echoInterval: + description: |- + Configures the minimal echo receive transmission + interval that this system is capable of handling in milliseconds. + Defaults to 50ms + format: int32 + maximum: 60000 + minimum: 10 + type: integer + echoMode: + description: |- + Enables or disables the echo transmission mode. + This mode is disabled by default, and not supported on multi + hops setups. + type: boolean + minimumTtl: + description: |- + For multi hop sessions only: configure the minimum + expected TTL for an incoming BFD control packet. + format: int32 + maximum: 254 + minimum: 1 + type: integer + passiveMode: + description: |- + Mark session as passive: a passive session will not + attempt to start the connection and will wait for control packets + from peer before it begins replying. + type: boolean + receiveInterval: + description: |- + The minimum interval that this system is capable of + receiving control packets in milliseconds. + Defaults to 300ms. + format: int32 + maximum: 60000 + minimum: 10 + type: integer + transmitInterval: + description: |- + The minimum transmission interval (less jitter) + that this system wants to use to send BFD control packets in + milliseconds. Defaults to 300ms + format: int32 + maximum: 60000 + minimum: 10 + type: integer + type: object + status: + description: BFDProfileStatus defines the observed state of BFDProfile. + type: object + type: object + served: true + storage: true + subresources: + status: {} --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition @@ -143,207 +144,215 @@ spec: singular: bgpadvertisement scope: Namespaced versions: - - additionalPrinterColumns: - - jsonPath: .spec.ipAddressPools - name: IPAddressPools - type: string - - jsonPath: .spec.ipAddressPoolSelectors - name: IPAddressPool Selectors - type: string - - jsonPath: .spec.peers - name: Peers - type: string - - jsonPath: .spec.nodeSelectors - name: Node Selectors - priority: 10 - type: string - name: v1beta1 - schema: - openAPIV3Schema: - description: |- - BGPAdvertisement allows to advertise the IPs coming - from the selected IPAddressPools via BGP, setting the parameters of the - BGP Advertisement. - properties: - apiVersion: - description: |- - APIVersion defines the versioned schema of this representation of an object. - Servers should convert recognized schemas to the latest internal value, and - may reject unrecognized values. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources - type: string - kind: - description: |- - Kind is a string value representing the REST resource this object represents. - Servers may infer this from the endpoint the client submits requests to. - Cannot be updated. - In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds - type: string - metadata: - type: object - spec: - description: BGPAdvertisementSpec defines the desired state of BGPAdvertisement. - properties: - aggregationLength: - default: 32 - description: The aggregation-length advertisement option lets you - “roll up” the /32s into a larger prefix. Defaults to 32. Works for - IPv4 addresses. - format: int32 - minimum: 1 - type: integer - aggregationLengthV6: - default: 128 - description: The aggregation-length advertisement option lets you - “roll up” the /128s into a larger prefix. Defaults to 128. Works - for IPv6 addresses. - format: int32 - type: integer - communities: - description: |- - The BGP communities to be associated with the announcement. Each item can be a standard community of the - form 1234:1234, a large community of the form large:1234:1234:1234 or the name of an alias defined in the - Community CRD. - items: - type: string - type: array - ipAddressPoolSelectors: - description: |- - A selector for the IPAddressPools which would get advertised via this advertisement. - If no IPAddressPool is selected by this or by the list, the advertisement is applied to all the IPAddressPools. - items: + - additionalPrinterColumns: + - jsonPath: .spec.ipAddressPools + name: IPAddressPools + type: string + - jsonPath: .spec.ipAddressPoolSelectors + name: IPAddressPool Selectors + type: string + - jsonPath: .spec.peers + name: Peers + type: string + - jsonPath: .spec.nodeSelectors + name: Node Selectors + priority: 10 + type: string + name: v1beta1 + schema: + openAPIV3Schema: + description: |- + BGPAdvertisement allows to advertise the IPs coming + from the selected IPAddressPools via BGP, setting the parameters of the + BGP Advertisement. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: BGPAdvertisementSpec defines the desired state of BGPAdvertisement. + properties: + aggregationLength: + default: 32 + description: + The aggregation-length advertisement option lets you + “roll up” the /32s into a larger prefix. Defaults to 32. Works for + IPv4 addresses. + format: int32 + minimum: 1 + type: integer + aggregationLengthV6: + default: 128 + description: + The aggregation-length advertisement option lets you + “roll up” the /128s into a larger prefix. Defaults to 128. Works + for IPv6 addresses. + format: int32 + type: integer + communities: description: |- - A label selector is a label query over a set of resources. The result of matchLabels and - matchExpressions are ANDed. An empty label selector matches all objects. A null - label selector matches no objects. - properties: - matchExpressions: - description: matchExpressions is a list of label selector requirements. - The requirements are ANDed. - items: - description: |- - A label selector requirement is a selector that contains values, a key, and an operator that - relates the key and values. - properties: - key: - description: key is the label key that the selector applies - to. - type: string - operator: - description: |- - operator represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: |- - values is an array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced during a strategic - merge patch. - items: + The BGP communities to be associated with the announcement. Each item can be a standard community of the + form 1234:1234, a large community of the form large:1234:1234:1234 or the name of an alias defined in the + Community CRD. + items: + type: string + type: array + ipAddressPoolSelectors: + description: |- + A selector for the IPAddressPools which would get advertised via this advertisement. + If no IPAddressPool is selected by this or by the list, the advertisement is applied to all the IPAddressPools. + items: + description: |- + A label selector is a label query over a set of resources. The result of matchLabels and + matchExpressions are ANDed. An empty label selector matches all objects. A null + label selector matches no objects. + properties: + matchExpressions: + description: + matchExpressions is a list of label selector requirements. + The requirements are ANDed. + items: + description: |- + A label selector requirement is a selector that contains values, a key, and an operator that + relates the key and values. + properties: + key: + description: + key is the label key that the selector applies + to. type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator + operator: + description: |- + operator represents a key's relationship to a set of values. + Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: |- + values is an array of string values. If the operator is In or NotIn, + the values array must be non-empty. If the operator is Exists or DoesNotExist, + the values array must be empty. This array is replaced during a strategic + merge patch. + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + description: |- + matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, whose key field is "key", the + operator is "In", and the values array contains only "value". The requirements are ANDed. type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - description: |- - matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, whose key field is "key", the - operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - type: object - x-kubernetes-map-type: atomic - type: array - ipAddressPools: - description: The list of IPAddressPools to advertise via this advertisement, - selected by name. - items: - type: string - type: array - localPref: - description: |- - The BGP LOCAL_PREF attribute which is used by BGP best path algorithm, - Path with higher localpref is preferred over one with lower localpref. - format: int32 - type: integer - nodeSelectors: - description: NodeSelectors allows to limit the nodes to announce as - next hops for the LoadBalancer IP. When empty, all the nodes having are - announced as next hops. - items: + type: object + x-kubernetes-map-type: atomic + type: array + ipAddressPools: + description: + The list of IPAddressPools to advertise via this advertisement, + selected by name. + items: + type: string + type: array + localPref: description: |- - A label selector is a label query over a set of resources. The result of matchLabels and - matchExpressions are ANDed. An empty label selector matches all objects. A null - label selector matches no objects. - properties: - matchExpressions: - description: matchExpressions is a list of label selector requirements. - The requirements are ANDed. - items: - description: |- - A label selector requirement is a selector that contains values, a key, and an operator that - relates the key and values. - properties: - key: - description: key is the label key that the selector applies - to. - type: string - operator: - description: |- - operator represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: |- - values is an array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced during a strategic - merge patch. - items: + The BGP LOCAL_PREF attribute which is used by BGP best path algorithm, + Path with higher localpref is preferred over one with lower localpref. + format: int32 + type: integer + nodeSelectors: + description: + NodeSelectors allows to limit the nodes to announce as + next hops for the LoadBalancer IP. When empty, all the nodes having are + announced as next hops. + items: + description: |- + A label selector is a label query over a set of resources. The result of matchLabels and + matchExpressions are ANDed. An empty label selector matches all objects. A null + label selector matches no objects. + properties: + matchExpressions: + description: + matchExpressions is a list of label selector requirements. + The requirements are ANDed. + items: + description: |- + A label selector requirement is a selector that contains values, a key, and an operator that + relates the key and values. + properties: + key: + description: + key is the label key that the selector applies + to. type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator + operator: + description: |- + operator represents a key's relationship to a set of values. + Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: |- + values is an array of string values. If the operator is In or NotIn, + the values array must be non-empty. If the operator is Exists or DoesNotExist, + the values array must be empty. This array is replaced during a strategic + merge patch. + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + description: |- + matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, whose key field is "key", the + operator is "In", and the values array contains only "value". The requirements are ANDed. type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - description: |- - matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, whose key field is "key", the - operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - type: object - x-kubernetes-map-type: atomic - type: array - peers: - description: |- - Peers limits the bgppeer to advertise the ips of the selected pools to. - When empty, the loadbalancer IP is announced to all the BGPPeers configured. - items: - type: string - type: array - type: object - status: - description: BGPAdvertisementStatus defines the observed state of BGPAdvertisement. - type: object - type: object - served: true - storage: true - subresources: - status: {} + type: object + x-kubernetes-map-type: atomic + type: array + peers: + description: |- + Peers limits the bgppeer to advertise the ips of the selected pools to. + When empty, the loadbalancer IP is announced to all the BGPPeers configured. + items: + type: string + type: array + type: object + status: + description: BGPAdvertisementStatus defines the observed state of BGPAdvertisement. + type: object + type: object + served: true + storage: true + subresources: + status: {} --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition @@ -362,8 +371,8 @@ spec: namespace: metallb-system path: /convert conversionReviewVersions: - - v1beta1 - - v1beta2 + - v1beta1 + - v1beta2 group: metallb.io names: kind: BGPPeer @@ -372,340 +381,351 @@ spec: singular: bgppeer scope: Namespaced versions: - - additionalPrinterColumns: - - jsonPath: .spec.peerAddress - name: Address - type: string - - jsonPath: .spec.peerASN - name: ASN - type: string - - jsonPath: .spec.bfdProfile - name: BFD Profile - type: string - - jsonPath: .spec.ebgpMultiHop - name: Multi Hops - type: string - deprecated: true - deprecationWarning: v1beta1 is deprecated, please use v1beta2 - name: v1beta1 - schema: - openAPIV3Schema: - description: BGPPeer is the Schema for the peers API. - properties: - apiVersion: - description: |- - APIVersion defines the versioned schema of this representation of an object. - Servers should convert recognized schemas to the latest internal value, and - may reject unrecognized values. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources - type: string - kind: - description: |- - Kind is a string value representing the REST resource this object represents. - Servers may infer this from the endpoint the client submits requests to. - Cannot be updated. - In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds - type: string - metadata: - type: object - spec: - description: BGPPeerSpec defines the desired state of Peer. - properties: - bfdProfile: - type: string - ebgpMultiHop: - description: EBGP peer is multi-hops away - type: boolean - holdTime: - description: Requested BGP hold time, per RFC4271. - type: string - keepaliveTime: - description: Requested BGP keepalive time, per RFC4271. - type: string - myASN: - description: AS number to use for the local end of the session. - format: int32 - maximum: 4294967295 - minimum: 0 - type: integer - nodeSelectors: - description: |- - Only connect to this peer on nodes that match one of these - selectors. - items: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: + - additionalPrinterColumns: + - jsonPath: .spec.peerAddress + name: Address + type: string + - jsonPath: .spec.peerASN + name: ASN + type: string + - jsonPath: .spec.bfdProfile + name: BFD Profile + type: string + - jsonPath: .spec.ebgpMultiHop + name: Multi Hops + type: string + deprecated: true + deprecationWarning: v1beta1 is deprecated, please use v1beta2 + name: v1beta1 + schema: + openAPIV3Schema: + description: BGPPeer is the Schema for the peers API. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: BGPPeerSpec defines the desired state of Peer. + properties: + bfdProfile: + type: string + ebgpMultiHop: + description: EBGP peer is multi-hops away + type: boolean + holdTime: + description: Requested BGP hold time, per RFC4271. + type: string + keepaliveTime: + description: Requested BGP keepalive time, per RFC4271. + type: string + myASN: + description: AS number to use for the local end of the session. + format: int32 + maximum: 4294967295 + minimum: 0 + type: integer + nodeSelectors: + description: |- + Only connect to this peer on nodes that match one of these + selectors. + items: + properties: + matchExpressions: + items: + properties: + key: type: string - minItems: 1 - type: array - required: - - key - - operator - - values + operator: + type: string + values: + items: + type: string + minItems: 1 + type: array + required: + - key + - operator + - values + type: object + type: array + matchLabels: + additionalProperties: + type: string type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - type: array - password: - description: Authentication password for routers enforcing TCP MD5 - authenticated sessions - type: string - peerASN: - description: AS number to expect from the remote end of the session. - format: int32 - maximum: 4294967295 - minimum: 0 - type: integer - peerAddress: - description: Address to dial when establishing the session. - type: string - peerPort: - description: Port to dial when establishing the session. - maximum: 16384 - minimum: 0 - type: integer - routerID: - description: BGP router ID to advertise to the peer - type: string - sourceAddress: - description: Source address to use when establishing the session. - type: string - required: - - myASN - - peerASN - - peerAddress - type: object - status: - description: BGPPeerStatus defines the observed state of Peer. - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - jsonPath: .spec.peerAddress - name: Address - type: string - - jsonPath: .spec.peerASN - name: ASN - type: string - - jsonPath: .spec.bfdProfile - name: BFD Profile - type: string - - jsonPath: .spec.ebgpMultiHop - name: Multi Hops - type: string - name: v1beta2 - schema: - openAPIV3Schema: - description: BGPPeer is the Schema for the peers API. - properties: - apiVersion: - description: |- - APIVersion defines the versioned schema of this representation of an object. - Servers should convert recognized schemas to the latest internal value, and - may reject unrecognized values. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources - type: string - kind: - description: |- - Kind is a string value representing the REST resource this object represents. - Servers may infer this from the endpoint the client submits requests to. - Cannot be updated. - In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds - type: string - metadata: - type: object - spec: - description: BGPPeerSpec defines the desired state of Peer. - properties: - bfdProfile: - description: The name of the BFD Profile to be used for the BFD session - associated to the BGP session. If not set, the BFD session won't - be set up. - type: string - connectTime: - description: Requested BGP connect time, controls how long BGP waits - between connection attempts to a neighbor. - type: string - x-kubernetes-validations: - - message: connect time should be between 1 seconds to 65535 - rule: duration(self).getSeconds() >= 1 && duration(self).getSeconds() - <= 65535 - - message: connect time should contain a whole number of seconds - rule: duration(self).getMilliseconds() % 1000 == 0 - disableMP: - default: false - description: To set if we want to disable MP BGP that will separate - IPv4 and IPv6 route exchanges into distinct BGP sessions. - type: boolean - dynamicASN: - description: |- - DynamicASN detects the AS number to use for the remote end of the session - without explicitly setting it via the ASN field. Limited to: - internal - if the neighbor's ASN is different than MyASN connection is denied. - external - if the neighbor's ASN is the same as MyASN the connection is denied. - ASN and DynamicASN are mutually exclusive and one of them must be specified. - enum: - - internal - - external - type: string - ebgpMultiHop: - description: To set if the BGPPeer is multi-hops away. Needed for - FRR mode only. - type: boolean - enableGracefulRestart: - description: |- - EnableGracefulRestart allows BGP peer to continue to forward data packets - along known routes while the routing protocol information is being - restored. This field is immutable because it requires restart of the BGP - session. Supported for FRR mode only. - type: boolean - x-kubernetes-validations: - - message: EnableGracefulRestart cannot be changed after creation - rule: self == oldSelf - holdTime: - description: Requested BGP hold time, per RFC4271. - type: string - keepaliveTime: - description: Requested BGP keepalive time, per RFC4271. - type: string - myASN: - description: AS number to use for the local end of the session. - format: int32 - maximum: 4294967295 - minimum: 0 - type: integer - nodeSelectors: - description: |- - Only connect to this peer on nodes that match one of these - selectors. - items: + type: object + type: array + password: + description: + Authentication password for routers enforcing TCP MD5 + authenticated sessions + type: string + peerASN: + description: AS number to expect from the remote end of the session. + format: int32 + maximum: 4294967295 + minimum: 0 + type: integer + peerAddress: + description: Address to dial when establishing the session. + type: string + peerPort: + description: Port to dial when establishing the session. + maximum: 16384 + minimum: 0 + type: integer + routerID: + description: BGP router ID to advertise to the peer + type: string + sourceAddress: + description: Source address to use when establishing the session. + type: string + required: + - myASN + - peerASN + - peerAddress + type: object + status: + description: BGPPeerStatus defines the observed state of Peer. + type: object + type: object + served: true + storage: false + subresources: + status: {} + - additionalPrinterColumns: + - jsonPath: .spec.peerAddress + name: Address + type: string + - jsonPath: .spec.peerASN + name: ASN + type: string + - jsonPath: .spec.bfdProfile + name: BFD Profile + type: string + - jsonPath: .spec.ebgpMultiHop + name: Multi Hops + type: string + name: v1beta2 + schema: + openAPIV3Schema: + description: BGPPeer is the Schema for the peers API. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: BGPPeerSpec defines the desired state of Peer. + properties: + bfdProfile: + description: + The name of the BFD Profile to be used for the BFD session + associated to the BGP session. If not set, the BFD session won't + be set up. + type: string + connectTime: + description: + Requested BGP connect time, controls how long BGP waits + between connection attempts to a neighbor. + type: string + x-kubernetes-validations: + - message: connect time should be between 1 seconds to 65535 + rule: + duration(self).getSeconds() >= 1 && duration(self).getSeconds() + <= 65535 + - message: connect time should contain a whole number of seconds + rule: duration(self).getMilliseconds() % 1000 == 0 + disableMP: + default: false + description: + To set if we want to disable MP BGP that will separate + IPv4 and IPv6 route exchanges into distinct BGP sessions. + type: boolean + dynamicASN: description: |- - A label selector is a label query over a set of resources. The result of matchLabels and - matchExpressions are ANDed. An empty label selector matches all objects. A null - label selector matches no objects. - properties: - matchExpressions: - description: matchExpressions is a list of label selector requirements. - The requirements are ANDed. - items: - description: |- - A label selector requirement is a selector that contains values, a key, and an operator that - relates the key and values. - properties: - key: - description: key is the label key that the selector applies - to. - type: string - operator: - description: |- - operator represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: |- - values is an array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced during a strategic - merge patch. - items: + DynamicASN detects the AS number to use for the remote end of the session + without explicitly setting it via the ASN field. Limited to: + internal - if the neighbor's ASN is different than MyASN connection is denied. + external - if the neighbor's ASN is the same as MyASN the connection is denied. + ASN and DynamicASN are mutually exclusive and one of them must be specified. + enum: + - internal + - external + type: string + ebgpMultiHop: + description: + To set if the BGPPeer is multi-hops away. Needed for + FRR mode only. + type: boolean + enableGracefulRestart: + description: |- + EnableGracefulRestart allows BGP peer to continue to forward data packets + along known routes while the routing protocol information is being + restored. This field is immutable because it requires restart of the BGP + session. Supported for FRR mode only. + type: boolean + x-kubernetes-validations: + - message: EnableGracefulRestart cannot be changed after creation + rule: self == oldSelf + holdTime: + description: Requested BGP hold time, per RFC4271. + type: string + keepaliveTime: + description: Requested BGP keepalive time, per RFC4271. + type: string + myASN: + description: AS number to use for the local end of the session. + format: int32 + maximum: 4294967295 + minimum: 0 + type: integer + nodeSelectors: + description: |- + Only connect to this peer on nodes that match one of these + selectors. + items: + description: |- + A label selector is a label query over a set of resources. The result of matchLabels and + matchExpressions are ANDed. An empty label selector matches all objects. A null + label selector matches no objects. + properties: + matchExpressions: + description: + matchExpressions is a list of label selector requirements. + The requirements are ANDed. + items: + description: |- + A label selector requirement is a selector that contains values, a key, and an operator that + relates the key and values. + properties: + key: + description: + key is the label key that the selector applies + to. type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator + operator: + description: |- + operator represents a key's relationship to a set of values. + Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: |- + values is an array of string values. If the operator is In or NotIn, + the values array must be non-empty. If the operator is Exists or DoesNotExist, + the values array must be empty. This array is replaced during a strategic + merge patch. + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + description: |- + matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, whose key field is "key", the + operator is "In", and the values array contains only "value". The requirements are ANDed. type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - description: |- - matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, whose key field is "key", the - operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object + type: object + x-kubernetes-map-type: atomic + type: array + password: + description: + Authentication password for routers enforcing TCP MD5 + authenticated sessions + type: string + passwordSecret: + description: |- + passwordSecret is name of the authentication secret for BGP Peer. + the secret must be of type "kubernetes.io/basic-auth", and created in the + same namespace as the MetalLB deployment. The password is stored in the + secret as the key "password". + properties: + name: + description: + name is unique within a namespace to reference a + secret resource. + type: string + namespace: + description: + namespace defines the space within which the secret + name must be unique. + type: string type: object x-kubernetes-map-type: atomic - type: array - password: - description: Authentication password for routers enforcing TCP MD5 - authenticated sessions - type: string - passwordSecret: - description: |- - passwordSecret is name of the authentication secret for BGP Peer. - the secret must be of type "kubernetes.io/basic-auth", and created in the - same namespace as the MetalLB deployment. The password is stored in the - secret as the key "password". - properties: - name: - description: name is unique within a namespace to reference a - secret resource. - type: string - namespace: - description: namespace defines the space within which the secret - name must be unique. - type: string - type: object - x-kubernetes-map-type: atomic - peerASN: - description: |- - AS number to expect from the remote end of the session. - ASN and DynamicASN are mutually exclusive and one of them must be specified. - format: int32 - maximum: 4294967295 - minimum: 0 - type: integer - peerAddress: - description: Address to dial when establishing the session. - type: string - peerPort: - default: 179 - description: Port to dial when establishing the session. - maximum: 16384 - minimum: 0 - type: integer - routerID: - description: BGP router ID to advertise to the peer - type: string - sourceAddress: - description: Source address to use when establishing the session. - type: string - vrf: - description: |- - To set if we want to peer with the BGPPeer using an interface belonging to - a host vrf - type: string - required: - - myASN - - peerAddress - type: object - status: - description: BGPPeerStatus defines the observed state of Peer. - type: object - type: object - served: true - storage: true - subresources: - status: {} + peerASN: + description: |- + AS number to expect from the remote end of the session. + ASN and DynamicASN are mutually exclusive and one of them must be specified. + format: int32 + maximum: 4294967295 + minimum: 0 + type: integer + peerAddress: + description: Address to dial when establishing the session. + type: string + peerPort: + default: 179 + description: Port to dial when establishing the session. + maximum: 16384 + minimum: 0 + type: integer + routerID: + description: BGP router ID to advertise to the peer + type: string + sourceAddress: + description: Source address to use when establishing the session. + type: string + vrf: + description: |- + To set if we want to peer with the BGPPeer using an interface belonging to + a host vrf + type: string + required: + - myASN + - peerAddress + type: object + status: + description: BGPPeerStatus defines the observed state of Peer. + type: object + type: object + served: true + storage: true + subresources: + status: {} --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition @@ -722,55 +742,55 @@ spec: singular: community scope: Namespaced versions: - - name: v1beta1 - schema: - openAPIV3Schema: - description: |- - Community is a collection of aliases for communities. - Users can define named aliases to be used in the BGPPeer CRD. - properties: - apiVersion: - description: |- - APIVersion defines the versioned schema of this representation of an object. - Servers should convert recognized schemas to the latest internal value, and - may reject unrecognized values. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources - type: string - kind: - description: |- - Kind is a string value representing the REST resource this object represents. - Servers may infer this from the endpoint the client submits requests to. - Cannot be updated. - In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds - type: string - metadata: - type: object - spec: - description: CommunitySpec defines the desired state of Community. - properties: - communities: - items: - properties: - name: - description: The name of the alias for the community. - type: string - value: - description: |- - The BGP community value corresponding to the given name. Can be a standard community of the form 1234:1234 - or a large community of the form large:1234:1234:1234. - type: string - type: object - type: array - type: object - status: - description: CommunityStatus defines the observed state of Community. - type: object - type: object - served: true - storage: true - subresources: - status: {} + - name: v1beta1 + schema: + openAPIV3Schema: + description: |- + Community is a collection of aliases for communities. + Users can define named aliases to be used in the BGPPeer CRD. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: CommunitySpec defines the desired state of Community. + properties: + communities: + items: + properties: + name: + description: The name of the alias for the community. + type: string + value: + description: |- + The BGP community value corresponding to the given name. Can be a standard community of the form 1234:1234 + or a large community of the form large:1234:1234:1234. + type: string + type: object + type: array + type: object + status: + description: CommunityStatus defines the observed state of Community. + type: object + type: object + served: true + storage: true + subresources: + status: {} --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition @@ -787,206 +807,212 @@ spec: singular: ipaddresspool scope: Namespaced versions: - - additionalPrinterColumns: - - jsonPath: .spec.autoAssign - name: Auto Assign - type: boolean - - jsonPath: .spec.avoidBuggyIPs - name: Avoid Buggy IPs - type: boolean - - jsonPath: .spec.addresses - name: Addresses - type: string - name: v1beta1 - schema: - openAPIV3Schema: - description: |- - IPAddressPool represents a pool of IP addresses that can be allocated - to LoadBalancer services. - properties: - apiVersion: - description: |- - APIVersion defines the versioned schema of this representation of an object. - Servers should convert recognized schemas to the latest internal value, and - may reject unrecognized values. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources - type: string - kind: - description: |- - Kind is a string value representing the REST resource this object represents. - Servers may infer this from the endpoint the client submits requests to. - Cannot be updated. - In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds - type: string - metadata: - type: object - spec: - description: IPAddressPoolSpec defines the desired state of IPAddressPool. - properties: - addresses: - description: |- - A list of IP address ranges over which MetalLB has authority. - You can list multiple ranges in a single pool, they will all share the - same settings. Each range can be either a CIDR prefix, or an explicit - start-end range of IPs. - items: - type: string - type: array - autoAssign: - default: true - description: |- - AutoAssign flag used to prevent MetallB from automatic allocation - for a pool. - type: boolean - avoidBuggyIPs: - default: false - description: |- - AvoidBuggyIPs prevents addresses ending with .0 and .255 - to be used by a pool. - type: boolean - serviceAllocation: - description: |- - AllocateTo makes ip pool allocation to specific namespace and/or service. - The controller will use the pool with lowest value of priority in case of - multiple matches. A pool with no priority set will be used only if the - pools with priority can't be used. If multiple matching IPAddressPools are - available it will check for the availability of IPs sorting the matching - IPAddressPools by priority, starting from the highest to the lowest. If - multiple IPAddressPools have the same priority, choice will be random. - properties: - namespaceSelectors: - description: |- - NamespaceSelectors list of label selectors to select namespace(s) for ip pool, - an alternative to using namespace list. - items: + - additionalPrinterColumns: + - jsonPath: .spec.autoAssign + name: Auto Assign + type: boolean + - jsonPath: .spec.avoidBuggyIPs + name: Avoid Buggy IPs + type: boolean + - jsonPath: .spec.addresses + name: Addresses + type: string + name: v1beta1 + schema: + openAPIV3Schema: + description: |- + IPAddressPool represents a pool of IP addresses that can be allocated + to LoadBalancer services. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: IPAddressPoolSpec defines the desired state of IPAddressPool. + properties: + addresses: + description: |- + A list of IP address ranges over which MetalLB has authority. + You can list multiple ranges in a single pool, they will all share the + same settings. Each range can be either a CIDR prefix, or an explicit + start-end range of IPs. + items: + type: string + type: array + autoAssign: + default: true + description: |- + AutoAssign flag used to prevent MetallB from automatic allocation + for a pool. + type: boolean + avoidBuggyIPs: + default: false + description: |- + AvoidBuggyIPs prevents addresses ending with .0 and .255 + to be used by a pool. + type: boolean + serviceAllocation: + description: |- + AllocateTo makes ip pool allocation to specific namespace and/or service. + The controller will use the pool with lowest value of priority in case of + multiple matches. A pool with no priority set will be used only if the + pools with priority can't be used. If multiple matching IPAddressPools are + available it will check for the availability of IPs sorting the matching + IPAddressPools by priority, starting from the highest to the lowest. If + multiple IPAddressPools have the same priority, choice will be random. + properties: + namespaceSelectors: description: |- - A label selector is a label query over a set of resources. The result of matchLabels and - matchExpressions are ANDed. An empty label selector matches all objects. A null - label selector matches no objects. - properties: - matchExpressions: - description: matchExpressions is a list of label selector - requirements. The requirements are ANDed. - items: - description: |- - A label selector requirement is a selector that contains values, a key, and an operator that - relates the key and values. - properties: - key: - description: key is the label key that the selector - applies to. - type: string - operator: - description: |- - operator represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: |- - values is an array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced during a strategic - merge patch. - items: + NamespaceSelectors list of label selectors to select namespace(s) for ip pool, + an alternative to using namespace list. + items: + description: |- + A label selector is a label query over a set of resources. The result of matchLabels and + matchExpressions are ANDed. An empty label selector matches all objects. A null + label selector matches no objects. + properties: + matchExpressions: + description: + matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: |- + A label selector requirement is a selector that contains values, a key, and an operator that + relates the key and values. + properties: + key: + description: + key is the label key that the selector + applies to. type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator + operator: + description: |- + operator represents a key's relationship to a set of values. + Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: |- + values is an array of string values. If the operator is In or NotIn, + the values array must be non-empty. If the operator is Exists or DoesNotExist, + the values array must be empty. This array is replaced during a strategic + merge patch. + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + description: |- + matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, whose key field is "key", the + operator is "In", and the values array contains only "value". The requirements are ANDed. type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - description: |- - matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, whose key field is "key", the - operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - type: object - x-kubernetes-map-type: atomic - type: array - namespaces: - description: Namespaces list of namespace(s) on which ip pool - can be attached. - items: - type: string - type: array - priority: - description: Priority priority given for ip pool while ip allocation - on a service. - type: integer - serviceSelectors: - description: |- - ServiceSelectors list of label selector to select service(s) for which ip pool - can be used for ip allocation. - items: + type: object + x-kubernetes-map-type: atomic + type: array + namespaces: + description: + Namespaces list of namespace(s) on which ip pool + can be attached. + items: + type: string + type: array + priority: + description: + Priority priority given for ip pool while ip allocation + on a service. + type: integer + serviceSelectors: description: |- - A label selector is a label query over a set of resources. The result of matchLabels and - matchExpressions are ANDed. An empty label selector matches all objects. A null - label selector matches no objects. - properties: - matchExpressions: - description: matchExpressions is a list of label selector - requirements. The requirements are ANDed. - items: - description: |- - A label selector requirement is a selector that contains values, a key, and an operator that - relates the key and values. - properties: - key: - description: key is the label key that the selector - applies to. - type: string - operator: - description: |- - operator represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: |- - values is an array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced during a strategic - merge patch. - items: + ServiceSelectors list of label selector to select service(s) for which ip pool + can be used for ip allocation. + items: + description: |- + A label selector is a label query over a set of resources. The result of matchLabels and + matchExpressions are ANDed. An empty label selector matches all objects. A null + label selector matches no objects. + properties: + matchExpressions: + description: + matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: |- + A label selector requirement is a selector that contains values, a key, and an operator that + relates the key and values. + properties: + key: + description: + key is the label key that the selector + applies to. type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator + operator: + description: |- + operator represents a key's relationship to a set of values. + Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: |- + values is an array of string values. If the operator is In or NotIn, + the values array must be non-empty. If the operator is Exists or DoesNotExist, + the values array must be empty. This array is replaced during a strategic + merge patch. + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + description: |- + matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, whose key field is "key", the + operator is "In", and the values array contains only "value". The requirements are ANDed. type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - description: |- - matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, whose key field is "key", the - operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - type: object - x-kubernetes-map-type: atomic - type: array - type: object - required: - - addresses - type: object - status: - description: IPAddressPoolStatus defines the observed state of IPAddressPool. - type: object - required: - - spec - type: object - served: true - storage: true - subresources: - status: {} + type: object + x-kubernetes-map-type: atomic + type: array + type: object + required: + - addresses + type: object + status: + description: IPAddressPoolStatus defines the observed state of IPAddressPool. + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition @@ -1003,177 +1029,183 @@ spec: singular: l2advertisement scope: Namespaced versions: - - additionalPrinterColumns: - - jsonPath: .spec.ipAddressPools - name: IPAddressPools - type: string - - jsonPath: .spec.ipAddressPoolSelectors - name: IPAddressPool Selectors - type: string - - jsonPath: .spec.interfaces - name: Interfaces - type: string - - jsonPath: .spec.nodeSelectors - name: Node Selectors - priority: 10 - type: string - name: v1beta1 - schema: - openAPIV3Schema: - description: |- - L2Advertisement allows to advertise the LoadBalancer IPs provided - by the selected pools via L2. - properties: - apiVersion: - description: |- - APIVersion defines the versioned schema of this representation of an object. - Servers should convert recognized schemas to the latest internal value, and - may reject unrecognized values. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources - type: string - kind: - description: |- - Kind is a string value representing the REST resource this object represents. - Servers may infer this from the endpoint the client submits requests to. - Cannot be updated. - In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds - type: string - metadata: - type: object - spec: - description: L2AdvertisementSpec defines the desired state of L2Advertisement. - properties: - interfaces: - description: |- - A list of interfaces to announce from. The LB IP will be announced only from these interfaces. - If the field is not set, we advertise from all the interfaces on the host. - items: - type: string - type: array - ipAddressPoolSelectors: - description: |- - A selector for the IPAddressPools which would get advertised via this advertisement. - If no IPAddressPool is selected by this or by the list, the advertisement is applied to all the IPAddressPools. - items: + - additionalPrinterColumns: + - jsonPath: .spec.ipAddressPools + name: IPAddressPools + type: string + - jsonPath: .spec.ipAddressPoolSelectors + name: IPAddressPool Selectors + type: string + - jsonPath: .spec.interfaces + name: Interfaces + type: string + - jsonPath: .spec.nodeSelectors + name: Node Selectors + priority: 10 + type: string + name: v1beta1 + schema: + openAPIV3Schema: + description: |- + L2Advertisement allows to advertise the LoadBalancer IPs provided + by the selected pools via L2. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: L2AdvertisementSpec defines the desired state of L2Advertisement. + properties: + interfaces: description: |- - A label selector is a label query over a set of resources. The result of matchLabels and - matchExpressions are ANDed. An empty label selector matches all objects. A null - label selector matches no objects. - properties: - matchExpressions: - description: matchExpressions is a list of label selector requirements. - The requirements are ANDed. - items: - description: |- - A label selector requirement is a selector that contains values, a key, and an operator that - relates the key and values. - properties: - key: - description: key is the label key that the selector applies - to. - type: string - operator: - description: |- - operator represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: |- - values is an array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced during a strategic - merge patch. - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - description: |- - matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, whose key field is "key", the - operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - type: object - x-kubernetes-map-type: atomic - type: array - ipAddressPools: - description: The list of IPAddressPools to advertise via this advertisement, - selected by name. - items: - type: string - type: array - nodeSelectors: - description: NodeSelectors allows to limit the nodes to announce as - next hops for the LoadBalancer IP. When empty, all the nodes having are - announced as next hops. - items: + A list of interfaces to announce from. The LB IP will be announced only from these interfaces. + If the field is not set, we advertise from all the interfaces on the host. + items: + type: string + type: array + ipAddressPoolSelectors: description: |- - A label selector is a label query over a set of resources. The result of matchLabels and - matchExpressions are ANDed. An empty label selector matches all objects. A null - label selector matches no objects. - properties: - matchExpressions: - description: matchExpressions is a list of label selector requirements. - The requirements are ANDed. - items: + A selector for the IPAddressPools which would get advertised via this advertisement. + If no IPAddressPool is selected by this or by the list, the advertisement is applied to all the IPAddressPools. + items: + description: |- + A label selector is a label query over a set of resources. The result of matchLabels and + matchExpressions are ANDed. An empty label selector matches all objects. A null + label selector matches no objects. + properties: + matchExpressions: + description: + matchExpressions is a list of label selector requirements. + The requirements are ANDed. + items: + description: |- + A label selector requirement is a selector that contains values, a key, and an operator that + relates the key and values. + properties: + key: + description: + key is the label key that the selector applies + to. + type: string + operator: + description: |- + operator represents a key's relationship to a set of values. + Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: |- + values is an array of string values. If the operator is In or NotIn, + the values array must be non-empty. If the operator is Exists or DoesNotExist, + the values array must be empty. This array is replaced during a strategic + merge patch. + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string description: |- - A label selector requirement is a selector that contains values, a key, and an operator that - relates the key and values. - properties: - key: - description: key is the label key that the selector applies - to. - type: string - operator: - description: |- - operator represents a key's relationship to a set of values. - Valid operators are In, NotIn, Exists and DoesNotExist. - type: string - values: - description: |- - values is an array of string values. If the operator is In or NotIn, - the values array must be non-empty. If the operator is Exists or DoesNotExist, - the values array must be empty. This array is replaced during a strategic - merge patch. - items: + matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, whose key field is "key", the + operator is "In", and the values array contains only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + type: array + ipAddressPools: + description: + The list of IPAddressPools to advertise via this advertisement, + selected by name. + items: + type: string + type: array + nodeSelectors: + description: + NodeSelectors allows to limit the nodes to announce as + next hops for the LoadBalancer IP. When empty, all the nodes having are + announced as next hops. + items: + description: |- + A label selector is a label query over a set of resources. The result of matchLabels and + matchExpressions are ANDed. An empty label selector matches all objects. A null + label selector matches no objects. + properties: + matchExpressions: + description: + matchExpressions is a list of label selector requirements. + The requirements are ANDed. + items: + description: |- + A label selector requirement is a selector that contains values, a key, and an operator that + relates the key and values. + properties: + key: + description: + key is the label key that the selector applies + to. type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator + operator: + description: |- + operator represents a key's relationship to a set of values. + Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: |- + values is an array of string values. If the operator is In or NotIn, + the values array must be non-empty. If the operator is Exists or DoesNotExist, + the values array must be empty. This array is replaced during a strategic + merge patch. + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + description: |- + matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, whose key field is "key", the + operator is "In", and the values array contains only "value". The requirements are ANDed. type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - description: |- - matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels - map is equivalent to an element of matchExpressions, whose key field is "key", the - operator is "In", and the values array contains only "value". The requirements are ANDed. - type: object - type: object - x-kubernetes-map-type: atomic - type: array - type: object - status: - description: L2AdvertisementStatus defines the observed state of L2Advertisement. - type: object - type: object - served: true - storage: true - subresources: - status: {} + type: object + x-kubernetes-map-type: atomic + type: array + type: object + status: + description: L2AdvertisementStatus defines the observed state of L2Advertisement. + type: object + type: object + served: true + storage: true + subresources: + status: {} --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition @@ -1190,80 +1222,82 @@ spec: singular: servicel2status scope: Namespaced versions: - - additionalPrinterColumns: - - jsonPath: .status.node - name: Allocated Node - type: string - - jsonPath: .status.serviceName - name: Service Name - type: string - - jsonPath: .status.serviceNamespace - name: Service Namespace - type: string - name: v1beta1 - schema: - openAPIV3Schema: - description: ServiceL2Status reveals the actual traffic status of loadbalancer - services in layer2 mode. - properties: - apiVersion: - description: |- - APIVersion defines the versioned schema of this representation of an object. - Servers should convert recognized schemas to the latest internal value, and - may reject unrecognized values. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources - type: string - kind: - description: |- - Kind is a string value representing the REST resource this object represents. - Servers may infer this from the endpoint the client submits requests to. - Cannot be updated. - In CamelCase. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds - type: string - metadata: - type: object - spec: - description: ServiceL2StatusSpec defines the desired state of ServiceL2Status. - type: object - status: - description: MetalLBServiceL2Status defines the observed state of ServiceL2Status. - properties: - interfaces: - description: Interfaces indicates the interfaces that receive the - directed traffic - items: - description: InterfaceInfo defines interface info of layer2 announcement. - properties: - name: - description: Name the name of network interface card - type: string - type: object - type: array - node: - description: Node indicates the node that receives the directed traffic - type: string - x-kubernetes-validations: - - message: Value is immutable - rule: self == oldSelf - serviceName: - description: ServiceName indicates the service this status represents - type: string - x-kubernetes-validations: - - message: Value is immutable - rule: self == oldSelf - serviceNamespace: - description: ServiceNamespace indicates the namespace of the service - type: string - x-kubernetes-validations: - - message: Value is immutable - rule: self == oldSelf - type: object - type: object - served: true - storage: true - subresources: - status: {} + - additionalPrinterColumns: + - jsonPath: .status.node + name: Allocated Node + type: string + - jsonPath: .status.serviceName + name: Service Name + type: string + - jsonPath: .status.serviceNamespace + name: Service Namespace + type: string + name: v1beta1 + schema: + openAPIV3Schema: + description: + ServiceL2Status reveals the actual traffic status of loadbalancer + services in layer2 mode. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: ServiceL2StatusSpec defines the desired state of ServiceL2Status. + type: object + status: + description: MetalLBServiceL2Status defines the observed state of ServiceL2Status. + properties: + interfaces: + description: + Interfaces indicates the interfaces that receive the + directed traffic + items: + description: InterfaceInfo defines interface info of layer2 announcement. + properties: + name: + description: Name the name of network interface card + type: string + type: object + type: array + node: + description: Node indicates the node that receives the directed traffic + type: string + x-kubernetes-validations: + - message: Value is immutable + rule: self == oldSelf + serviceName: + description: ServiceName indicates the service this status represents + type: string + x-kubernetes-validations: + - message: Value is immutable + rule: self == oldSelf + serviceNamespace: + description: ServiceNamespace indicates the namespace of the service + type: string + x-kubernetes-validations: + - message: Value is immutable + rule: self == oldSelf + type: object + type: object + served: true + storage: true + subresources: + status: {} --- apiVersion: v1 kind: ServiceAccount @@ -1289,81 +1323,81 @@ metadata: name: controller namespace: metallb-system rules: -- apiGroups: - - "" - resources: - - secrets - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resourceNames: - - memberlist - resources: - - secrets - verbs: - - list -- apiGroups: - - apps - resourceNames: - - controller - resources: - - deployments - verbs: - - get -- apiGroups: - - metallb.io - resources: - - bgppeers - verbs: - - get - - list -- apiGroups: - - metallb.io - resources: - - bfdprofiles - verbs: - - get - - list - - watch -- apiGroups: - - metallb.io - resources: - - ipaddresspools - verbs: - - get - - list - - watch -- apiGroups: - - metallb.io - resources: - - bgpadvertisements - verbs: - - get - - list - - watch -- apiGroups: - - metallb.io - resources: - - l2advertisements - verbs: - - get - - list - - watch -- apiGroups: - - metallb.io - resources: - - communities - verbs: - - get - - list - - watch + - apiGroups: + - "" + resources: + - secrets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - "" + resourceNames: + - memberlist + resources: + - secrets + verbs: + - list + - apiGroups: + - apps + resourceNames: + - controller + resources: + - deployments + verbs: + - get + - apiGroups: + - metallb.io + resources: + - bgppeers + verbs: + - get + - list + - apiGroups: + - metallb.io + resources: + - bfdprofiles + verbs: + - get + - list + - watch + - apiGroups: + - metallb.io + resources: + - ipaddresspools + verbs: + - get + - list + - watch + - apiGroups: + - metallb.io + resources: + - bgpadvertisements + verbs: + - get + - list + - watch + - apiGroups: + - metallb.io + resources: + - l2advertisements + verbs: + - get + - list + - watch + - apiGroups: + - metallb.io + resources: + - communities + verbs: + - get + - list + - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role @@ -1373,77 +1407,77 @@ metadata: name: pod-lister namespace: metallb-system rules: -- apiGroups: - - "" - resources: - - pods - verbs: - - list - - get -- apiGroups: - - "" - resources: - - secrets - verbs: - - get - - list - - watch -- apiGroups: - - "" - resources: - - configmaps - verbs: - - get - - list - - watch -- apiGroups: - - metallb.io - resources: - - bfdprofiles - verbs: - - get - - list - - watch -- apiGroups: - - metallb.io - resources: - - bgppeers - verbs: - - get - - list - - watch -- apiGroups: - - metallb.io - resources: - - l2advertisements - verbs: - - get - - list - - watch -- apiGroups: - - metallb.io - resources: - - bgpadvertisements - verbs: - - get - - list - - watch -- apiGroups: - - metallb.io - resources: - - ipaddresspools - verbs: - - get - - list - - watch -- apiGroups: - - metallb.io - resources: - - communities - verbs: - - get - - list - - watch + - apiGroups: + - "" + resources: + - pods + verbs: + - list + - get + - apiGroups: + - "" + resources: + - secrets + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - apiGroups: + - metallb.io + resources: + - bfdprofiles + verbs: + - get + - list + - watch + - apiGroups: + - metallb.io + resources: + - bgppeers + verbs: + - get + - list + - watch + - apiGroups: + - metallb.io + resources: + - l2advertisements + verbs: + - get + - list + - watch + - apiGroups: + - metallb.io + resources: + - bgpadvertisements + verbs: + - get + - list + - watch + - apiGroups: + - metallb.io + resources: + - ipaddresspools + verbs: + - get + - list + - watch + - apiGroups: + - metallb.io + resources: + - communities + verbs: + - get + - list + - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole @@ -1452,89 +1486,89 @@ metadata: app: metallb name: metallb-system:controller rules: -- apiGroups: - - "" - resources: - - services - - namespaces - verbs: - - get - - list - - watch -- apiGroups: - - "" - resources: - - nodes - verbs: - - list -- apiGroups: - - "" - resources: - - services/status - verbs: - - update -- apiGroups: - - "" - resources: - - events - verbs: - - create - - patch -- apiGroups: - - policy - resourceNames: - - controller - resources: - - podsecuritypolicies - verbs: - - use -- apiGroups: - - admissionregistration.k8s.io - resourceNames: - - metallb-webhook-configuration - resources: - - validatingwebhookconfigurations - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - admissionregistration.k8s.io - resources: - - validatingwebhookconfigurations - verbs: - - list - - watch -- apiGroups: - - apiextensions.k8s.io - resourceNames: - - bfdprofiles.metallb.io - - bgpadvertisements.metallb.io - - bgppeers.metallb.io - - ipaddresspools.metallb.io - - l2advertisements.metallb.io - - communities.metallb.io - resources: - - customresourcedefinitions - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - apiextensions.k8s.io - resources: - - customresourcedefinitions - verbs: - - list - - watch + - apiGroups: + - "" + resources: + - services + - namespaces + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - nodes + verbs: + - list + - apiGroups: + - "" + resources: + - services/status + verbs: + - update + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch + - apiGroups: + - policy + resourceNames: + - controller + resources: + - podsecuritypolicies + verbs: + - use + - apiGroups: + - admissionregistration.k8s.io + resourceNames: + - metallb-webhook-configuration + resources: + - validatingwebhookconfigurations + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - admissionregistration.k8s.io + resources: + - validatingwebhookconfigurations + verbs: + - list + - watch + - apiGroups: + - apiextensions.k8s.io + resourceNames: + - bfdprofiles.metallb.io + - bgpadvertisements.metallb.io + - bgppeers.metallb.io + - ipaddresspools.metallb.io + - l2advertisements.metallb.io + - communities.metallb.io + resources: + - customresourcedefinitions + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - list + - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole @@ -1543,47 +1577,47 @@ metadata: app: metallb name: metallb-system:speaker rules: -- apiGroups: - - metallb.io - resources: - - servicel2statuses - - servicel2statuses/status - verbs: - - '*' -- apiGroups: - - "" - resources: - - services - - endpoints - - nodes - - namespaces - verbs: - - get - - list - - watch -- apiGroups: - - discovery.k8s.io - resources: - - endpointslices - verbs: - - get - - list - - watch -- apiGroups: - - "" - resources: - - events - verbs: - - create - - patch -- apiGroups: - - policy - resourceNames: - - speaker - resources: - - podsecuritypolicies - verbs: - - use + - apiGroups: + - metallb.io + resources: + - servicel2statuses + - servicel2statuses/status + verbs: + - "*" + - apiGroups: + - "" + resources: + - services + - endpoints + - nodes + - namespaces + verbs: + - get + - list + - watch + - apiGroups: + - discovery.k8s.io + resources: + - endpointslices + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch + - apiGroups: + - policy + resourceNames: + - speaker + resources: + - podsecuritypolicies + verbs: + - use --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -1597,9 +1631,9 @@ roleRef: kind: Role name: controller subjects: -- kind: ServiceAccount - name: controller - namespace: metallb-system + - kind: ServiceAccount + name: controller + namespace: metallb-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -1613,9 +1647,9 @@ roleRef: kind: Role name: pod-lister subjects: -- kind: ServiceAccount - name: speaker - namespace: metallb-system + - kind: ServiceAccount + name: speaker + namespace: metallb-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -1628,9 +1662,9 @@ roleRef: kind: ClusterRole name: metallb-system:controller subjects: -- kind: ServiceAccount - name: controller - namespace: metallb-system + - kind: ServiceAccount + name: controller + namespace: metallb-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -1643,9 +1677,9 @@ roleRef: kind: ClusterRole name: metallb-system:speaker subjects: -- kind: ServiceAccount - name: speaker - namespace: metallb-system + - kind: ServiceAccount + name: speaker + namespace: metallb-system --- apiVersion: v1 data: @@ -1669,8 +1703,8 @@ metadata: namespace: metallb-system spec: ports: - - port: 443 - targetPort: 9443 + - port: 443 + targetPort: 9443 selector: component: controller --- @@ -1698,51 +1732,51 @@ spec: component: controller spec: containers: - - args: - - --port=7472 - - --log-level=info - - --tls-min-version=VersionTLS12 - env: - - name: METALLB_ML_SECRET_NAME - value: memberlist - - name: METALLB_DEPLOYMENT - value: controller - image: quay.io/metallb/controller:v0.14.9 - livenessProbe: - failureThreshold: 3 - httpGet: - path: /metrics - port: monitoring - initialDelaySeconds: 10 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 1 - name: controller - ports: - - containerPort: 7472 - name: monitoring - - containerPort: 9443 - name: webhook-server - protocol: TCP - readinessProbe: - failureThreshold: 3 - httpGet: - path: /metrics - port: monitoring - initialDelaySeconds: 10 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 1 - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - all - readOnlyRootFilesystem: true - volumeMounts: - - mountPath: /tmp/k8s-webhook-server/serving-certs - name: cert - readOnly: true + - args: + - --port=7472 + - --log-level=info + - --tls-min-version=VersionTLS12 + env: + - name: METALLB_ML_SECRET_NAME + value: memberlist + - name: METALLB_DEPLOYMENT + value: controller + image: quay.io/metallb/controller:v0.14.9 + livenessProbe: + failureThreshold: 3 + httpGet: + path: /metrics + port: monitoring + initialDelaySeconds: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + name: controller + ports: + - containerPort: 7472 + name: monitoring + - containerPort: 9443 + name: webhook-server + protocol: TCP + readinessProbe: + failureThreshold: 3 + httpGet: + path: /metrics + port: monitoring + initialDelaySeconds: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - all + readOnlyRootFilesystem: true + volumeMounts: + - mountPath: /tmp/k8s-webhook-server/serving-certs + name: cert + readOnly: true nodeSelector: kubernetes.io/os: linux securityContext: @@ -1752,10 +1786,10 @@ spec: serviceAccountName: controller terminationGracePeriodSeconds: 0 volumes: - - name: cert - secret: - defaultMode: 420 - secretName: metallb-webhook-cert + - name: cert + secret: + defaultMode: 420 + secretName: metallb-webhook-cert --- apiVersion: apps/v1 kind: DaemonSet @@ -1780,94 +1814,94 @@ spec: component: speaker spec: containers: - - args: - - --port=7472 - - --log-level=info - env: - - name: METALLB_NODE_NAME - valueFrom: - fieldRef: - fieldPath: spec.nodeName - - name: METALLB_POD_NAME - valueFrom: - fieldRef: - fieldPath: metadata.name - - name: METALLB_HOST - valueFrom: - fieldRef: - fieldPath: status.hostIP - - name: METALLB_ML_BIND_ADDR - valueFrom: - fieldRef: - fieldPath: status.podIP - - name: METALLB_ML_LABELS - value: app=metallb,component=speaker - - name: METALLB_ML_SECRET_KEY_PATH - value: /etc/ml_secret_key - image: quay.io/metallb/speaker:v0.14.9 - livenessProbe: - failureThreshold: 3 - httpGet: - path: /metrics - port: monitoring - initialDelaySeconds: 10 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 1 - name: speaker - ports: - - containerPort: 7472 - name: monitoring - - containerPort: 7946 - name: memberlist-tcp - - containerPort: 7946 - name: memberlist-udp - protocol: UDP - readinessProbe: - failureThreshold: 3 - httpGet: - path: /metrics - port: monitoring - initialDelaySeconds: 10 - periodSeconds: 10 - successThreshold: 1 - timeoutSeconds: 1 - securityContext: - allowPrivilegeEscalation: false - capabilities: - add: - - NET_RAW - drop: - - ALL - readOnlyRootFilesystem: true - volumeMounts: - - mountPath: /etc/ml_secret_key - name: memberlist - readOnly: true - - mountPath: /etc/metallb - name: metallb-excludel2 - readOnly: true + - args: + - --port=7472 + - --log-level=info + env: + - name: METALLB_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: METALLB_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: METALLB_HOST + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: METALLB_ML_BIND_ADDR + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: METALLB_ML_LABELS + value: app=metallb,component=speaker + - name: METALLB_ML_SECRET_KEY_PATH + value: /etc/ml_secret_key + image: quay.io/metallb/speaker:v0.14.9 + livenessProbe: + failureThreshold: 3 + httpGet: + path: /metrics + port: monitoring + initialDelaySeconds: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + name: speaker + ports: + - containerPort: 7472 + name: monitoring + - containerPort: 7946 + name: memberlist-tcp + - containerPort: 7946 + name: memberlist-udp + protocol: UDP + readinessProbe: + failureThreshold: 3 + httpGet: + path: /metrics + port: monitoring + initialDelaySeconds: 10 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + securityContext: + allowPrivilegeEscalation: false + capabilities: + add: + - NET_RAW + drop: + - ALL + readOnlyRootFilesystem: true + volumeMounts: + - mountPath: /etc/ml_secret_key + name: memberlist + readOnly: true + - mountPath: /etc/metallb + name: metallb-excludel2 + readOnly: true hostNetwork: true nodeSelector: kubernetes.io/os: linux serviceAccountName: speaker terminationGracePeriodSeconds: 2 tolerations: - - effect: NoSchedule - key: node-role.kubernetes.io/master - operator: Exists - - effect: NoSchedule - key: node-role.kubernetes.io/control-plane - operator: Exists + - effect: NoSchedule + key: node-role.kubernetes.io/master + operator: Exists + - effect: NoSchedule + key: node-role.kubernetes.io/control-plane + operator: Exists volumes: - - name: memberlist - secret: - defaultMode: 420 - secretName: memberlist - - configMap: - defaultMode: 256 + - name: memberlist + secret: + defaultMode: 420 + secretName: memberlist + - configMap: + defaultMode: 256 + name: metallb-excludel2 name: metallb-excludel2 - name: metallb-excludel2 --- apiVersion: admissionregistration.k8s.io/v1 kind: ValidatingWebhookConfiguration @@ -1875,123 +1909,123 @@ metadata: creationTimestamp: null name: metallb-webhook-configuration webhooks: -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: metallb-webhook-service - namespace: metallb-system - path: /validate-metallb-io-v1beta2-bgppeer - failurePolicy: Fail - name: bgppeersvalidationwebhook.metallb.io - rules: - - apiGroups: - - metallb.io - apiVersions: - - v1beta2 - operations: - - CREATE - - UPDATE - resources: - - bgppeers - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: metallb-webhook-service - namespace: metallb-system - path: /validate-metallb-io-v1beta1-bfdprofile - failurePolicy: Fail - name: bfdprofilevalidationwebhook.metallb.io - rules: - - apiGroups: - - metallb.io - apiVersions: - - v1beta1 - operations: - - CREATE - - DELETE - resources: - - bfdprofiles - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: metallb-webhook-service - namespace: metallb-system - path: /validate-metallb-io-v1beta1-bgpadvertisement - failurePolicy: Fail - name: bgpadvertisementvalidationwebhook.metallb.io - rules: - - apiGroups: - - metallb.io - apiVersions: - - v1beta1 - operations: - - CREATE - - UPDATE - resources: - - bgpadvertisements - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: metallb-webhook-service - namespace: metallb-system - path: /validate-metallb-io-v1beta1-community - failurePolicy: Fail - name: communityvalidationwebhook.metallb.io - rules: - - apiGroups: - - metallb.io - apiVersions: - - v1beta1 - operations: - - CREATE - - UPDATE - resources: - - communities - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: metallb-webhook-service - namespace: metallb-system - path: /validate-metallb-io-v1beta1-ipaddresspool - failurePolicy: Fail - name: ipaddresspoolvalidationwebhook.metallb.io - rules: - - apiGroups: - - metallb.io - apiVersions: - - v1beta1 - operations: - - CREATE - - UPDATE - resources: - - ipaddresspools - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: metallb-webhook-service - namespace: metallb-system - path: /validate-metallb-io-v1beta1-l2advertisement - failurePolicy: Fail - name: l2advertisementvalidationwebhook.metallb.io - rules: - - apiGroups: - - metallb.io - apiVersions: - - v1beta1 - operations: - - CREATE - - UPDATE - resources: - - l2advertisements - sideEffects: None + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: metallb-webhook-service + namespace: metallb-system + path: /validate-metallb-io-v1beta2-bgppeer + failurePolicy: Fail + name: bgppeersvalidationwebhook.metallb.io + rules: + - apiGroups: + - metallb.io + apiVersions: + - v1beta2 + operations: + - CREATE + - UPDATE + resources: + - bgppeers + sideEffects: None + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: metallb-webhook-service + namespace: metallb-system + path: /validate-metallb-io-v1beta1-bfdprofile + failurePolicy: Fail + name: bfdprofilevalidationwebhook.metallb.io + rules: + - apiGroups: + - metallb.io + apiVersions: + - v1beta1 + operations: + - CREATE + - DELETE + resources: + - bfdprofiles + sideEffects: None + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: metallb-webhook-service + namespace: metallb-system + path: /validate-metallb-io-v1beta1-bgpadvertisement + failurePolicy: Fail + name: bgpadvertisementvalidationwebhook.metallb.io + rules: + - apiGroups: + - metallb.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - bgpadvertisements + sideEffects: None + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: metallb-webhook-service + namespace: metallb-system + path: /validate-metallb-io-v1beta1-community + failurePolicy: Fail + name: communityvalidationwebhook.metallb.io + rules: + - apiGroups: + - metallb.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - communities + sideEffects: None + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: metallb-webhook-service + namespace: metallb-system + path: /validate-metallb-io-v1beta1-ipaddresspool + failurePolicy: Fail + name: ipaddresspoolvalidationwebhook.metallb.io + rules: + - apiGroups: + - metallb.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - ipaddresspools + sideEffects: None + - admissionReviewVersions: + - v1 + clientConfig: + service: + name: metallb-webhook-service + namespace: metallb-system + path: /validate-metallb-io-v1beta1-l2advertisement + failurePolicy: Fail + name: l2advertisementvalidationwebhook.metallb.io + rules: + - apiGroups: + - metallb.io + apiVersions: + - v1beta1 + operations: + - CREATE + - UPDATE + resources: + - l2advertisements + sideEffects: None diff --git a/metrics/metrics_test.go b/metrics/metrics_test.go index 5a8501ec7..f31c4db35 100644 --- a/metrics/metrics_test.go +++ b/metrics/metrics_test.go @@ -25,6 +25,7 @@ import ( epb "github.com/openconfig/kne/proto/event" "google.golang.org/api/option" "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" "google.golang.org/protobuf/proto" ) @@ -36,7 +37,7 @@ func newTestReporter(t *testing.T, ctx context.Context) (*Reporter, *pstest.Serv // Start a fake server running locally. srv := pstest.NewServer() // Connect to the server without using TLS. - conn, err := grpc.Dial(srv.Addr, grpc.WithInsecure()) + conn, err := grpc.NewClient(srv.Addr, grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { srv.Close() t.Fatalf("failed to start fake PubSub server: %v", err) @@ -93,9 +94,9 @@ func TestReportDeployClusterStart(t *testing.T) { if _, ok := e.Event.(*epb.KNEEvent_DeployClusterStart); !ok { t.Fatalf("event is not a DeployClusterStart event") } - te := e.GetDeployClusterStart() - if te.Cluster.Cluster != epb.Cluster_CLUSTER_TYPE_EXTERNAL { - t.Errorf("event has wrong cluster type, got %v, want %v", te.Cluster.Cluster, epb.Cluster_CLUSTER_TYPE_EXTERNAL) + gotEvent := e.GetDeployClusterStart() + if gotEvent.Cluster.Cluster != epb.Cluster_CLUSTER_TYPE_EXTERNAL { + t.Errorf("event has wrong cluster type, got %v, want %v", gotEvent.Cluster.Cluster, epb.Cluster_CLUSTER_TYPE_EXTERNAL) } } @@ -129,9 +130,9 @@ func TestReportDeployClusterEnd(t *testing.T) { if _, ok := e.Event.(*epb.KNEEvent_DeployClusterEnd); !ok { t.Fatalf("event is not a DeployClusterEnd event") } - te := e.GetDeployClusterEnd() - if te.Error != eventErr.Error() { - t.Errorf("event has wrong error message, got %v, want %v", te.Error, eventErr.Error()) + gotEvent := e.GetDeployClusterEnd() + if gotEvent.Error != eventErr.Error() { + t.Errorf("event has wrong error message, got %v, want %v", gotEvent.Error, eventErr.Error()) } } @@ -164,9 +165,9 @@ func TestReportCreateTopologyStart(t *testing.T) { if _, ok := e.Event.(*epb.KNEEvent_CreateTopologyStart); !ok { t.Fatalf("event is not a CreateTopologyStart event") } - te := e.GetCreateTopologyStart() - if te.Topology.LinkCount != 3 { - t.Errorf("event has wrong link count, got %v, want 3", te.Topology.LinkCount) + gotEvent := e.GetCreateTopologyStart() + if gotEvent.Topology.LinkCount != 3 { + t.Errorf("event has wrong link count, got %v, want 3", gotEvent.Topology.LinkCount) } } @@ -200,9 +201,9 @@ func TestReportCreateTopologyEnd(t *testing.T) { if _, ok := e.Event.(*epb.KNEEvent_CreateTopologyEnd); !ok { t.Fatalf("event is not a CreateTopologyEnd event") } - te := e.GetCreateTopologyEnd() - if te.Error != eventErr.Error() { - t.Errorf("event has wrong error message, got %v, want %v", te.Error, eventErr.Error()) + gotEvent := e.GetCreateTopologyEnd() + if gotEvent.Error != eventErr.Error() { + t.Errorf("event has wrong error message, got %v, want %v", gotEvent.Error, eventErr.Error()) } } @@ -212,7 +213,7 @@ func TestNewReporter(t *testing.T) { defer srv.Close() // Test missing topic - conn1, err := grpc.Dial(srv.Addr, grpc.WithInsecure()) + conn1, err := grpc.NewClient(srv.Addr, grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { t.Fatalf("failed to dial fake PubSub server: %v", err) } @@ -222,7 +223,7 @@ func TestNewReporter(t *testing.T) { } // Create default topic for default project/topic test - conn2, err := grpc.Dial(srv.Addr, grpc.WithInsecure()) + conn2, err := grpc.NewClient(srv.Addr, grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { t.Fatalf("failed to dial fake PubSub server: %v", err) } @@ -241,7 +242,7 @@ func TestNewReporter(t *testing.T) { client.Close() // Test NewReporter success with default project/topic - conn3, err := grpc.Dial(srv.Addr, grpc.WithInsecure()) + conn3, err := grpc.NewClient(srv.Addr, grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { t.Fatalf("failed to dial fake PubSub server: %v", err) } diff --git a/pods/pods.go b/pods/pods.go index a1d33b5f7..9a79b0852 100644 --- a/pods/pods.go +++ b/pods/pods.go @@ -121,11 +121,11 @@ func (c *ContainerStatus) String() string { } func (c *ContainerStatus) Equal(oc *ContainerStatus) bool { - return !(c.Name != oc.Name || - c.Image != oc.Image || - c.Ready != oc.Ready || - c.Reason != oc.Reason || - c.Message != oc.Message) + return c.Name == oc.Name && + c.Image == oc.Image && + c.Ready == oc.Ready && + c.Reason == oc.Reason && + c.Message == oc.Message } // GetPodStatus returns the status of the pods found in the supplied namespace. @@ -183,9 +183,9 @@ func WatchPodStatus(ctx context.Context, client kubernetes.Interface, namespace // PodToStatus returns a pointer to a new PodStatus for pod. func PodToStatus(pod *corev1.Pod) *PodStatus { s := PodStatus{ - Name: pod.ObjectMeta.Name, - Namespace: pod.ObjectMeta.Namespace, - UID: pod.ObjectMeta.UID, + Name: pod.Name, + Namespace: pod.Namespace, + UID: pod.UID, Phase: pod.Status.Phase, // Ready will be set to false below if one of the containers is not ready Ready: len(pod.Status.ContainerStatuses)+len(pod.Status.InitContainerStatuses) > 0, diff --git a/pods/status.go b/pods/status.go index 6f30310b7..73ac4bf8f 100644 --- a/pods/status.go +++ b/pods/status.go @@ -71,7 +71,7 @@ func newWatcher(ctx context.Context, cancel func(), ch chan *PodStatus, stop fun return w } -// SetProgress determins if progress output should be displayed while watching. +// SetProgress determines if progress output should be displayed while watching. func (w *Watcher) SetProgress(value bool) { w.mu.Lock() w.progress = value @@ -176,7 +176,7 @@ func (w *Watcher) updatePod(s *PodStatus) bool { w.podStates[s.UID] = newState } if newState == "failed" { - w.errCh <- fmt.Errorf("Pod %s failed to deploy", s.Name) + w.errCh <- fmt.Errorf("pod %s failed to deploy", s.Name) w.cancel() return false } diff --git a/pods/status_test.go b/pods/status_test.go index f127b4cd6..c38f2b611 100644 --- a/pods/status_test.go +++ b/pods/status_test.go @@ -100,7 +100,7 @@ func TestUpdatePod(t *testing.T) { want: ` 01:23:45 POD: pod1 is now failed `[1:], - errch: `Pod pod1 failed to deploy`, + errch: `pod pod1 failed to deploy`, canceled: true, }, { diff --git a/third_party/meshnet/README.md b/third_party/meshnet/README.md index e1b3d394a..ee00f14ba 100644 --- a/third_party/meshnet/README.md +++ b/third_party/meshnet/README.md @@ -1,11 +1,19 @@ # meshnet CNI (KNE Fork) -> [!NOTE] -> This directory contains a fork of the archived [networkop/meshnet-cni](https://github.com/networkop/meshnet-cni) project, now integrated and maintained directly within the OpenConfig KNE repository. +> [!NOTE] This directory contains a fork of the archived +> [networkop/meshnet-cni](https://github.com/networkop/meshnet-cni) project, now +> integrated and maintained directly within the OpenConfig KNE repository. > -> Future development, bug fixes, and CI/CD testing are managed as part of the parent [KNE project](https://github.com/openconfig/kne). Please file any issues or pull requests in the main KNE repository. +> Future development, bug fixes, and CI/CD testing are managed as part of the +> parent [KNE project](https://github.com/openconfig/kne). Please file any +> issues or pull requests in the main KNE repository. -**meshnet** is a (K8s) CNI plugin to create arbitrary network topologies out of point-to-point links with the help of [koko](https://github.com/redhat-nfvpe/koko). Heavily inspired by [Ratchet-CNI](https://github.com/dougbtv/ratchet-cni), [kokonet](https://github.com/s1061123/kokonet) and [Multus](https://github.com/intel/multus-cni). +**meshnet** is a (K8s) CNI plugin to create arbitrary network topologies out of +point-to-point links with the help of +[koko](https://github.com/redhat-nfvpe/koko). Heavily inspired by +[Ratchet-CNI](https://github.com/dougbtv/ratchet-cni), +[kokonet](https://github.com/s1061123/kokonet) and +[Multus](https://github.com/intel/multus-cni). ## New in version 0.2.0 @@ -15,14 +23,19 @@ ## Architecture -The goal of this plugin is to interconnect pods via direct point-to-point links according to a pre-define topology. To do that, the plugin uses three types of links: +The goal of this plugin is to interconnect pods via direct point-to-point links +according to a pre-define topology. To do that, the plugin uses three types of +links: - **veth** - used to connect two pods running on the same host - **vxlan** - used to connected two pods running on different hosts - - Optionally users can opt in to use **gRPC** instead, for this use case. Check [Installation](#installation). -- **macvlan** - used to connect to external resources, i.e. any physical or virtual device outside of the Kubernetes cluster + - Optionally users can opt in to use **gRPC** instead, for this use case. + Check [Installation](#installation). +- **macvlan** - used to connect to external resources, i.e. any physical or + virtual device outside of the Kubernetes cluster -Topology information, represented as a list of links per pod, is stored in k8s's etcd datastore as custom resources: +Topology information, represented as a list of links per pod, is stored in k8s's +etcd datastore as custom resources: ```yaml apiVersion: networkop.co.uk/v1beta1 @@ -39,7 +52,8 @@ spec: peer_ip: 12.12.12.2/24 ``` -The plugin configuration file contains a "chained" `meshnet` in the list of plugins: +The plugin configuration file contains a "chained" `meshnet` in the list of +plugins: ```yaml { @@ -67,27 +81,46 @@ The plugin configuration file contains a "chained" `meshnet` in the list of plug The plugin consists of three main components: -- **datastore** - a k8s native etcd backend cluster storing topology information and runtime pod metadata (e.g. pod IP address and NetNS) +- **datastore** - a k8s native etcd backend cluster storing topology + information and runtime pod metadata (e.g. pod IP address and NetNS) - **meshnet** - a CNI binary responsible for pod's network configuration -- **meshnetd** - a daemon responsible for communication with k8s and vxlan (or grpc) link configuration updates +- **meshnetd** - a daemon responsible for communication with k8s and vxlan (or + grpc) link configuration updates ![architecture](arch_v0_2_0.png) -Below is the order of operation of the plugin from the perspective of kube-node-1: +Below is the order of operation of the plugin from the perspective of +kube-node-1: -1. Kubernetes cluster gets populated with the topology information via custom resources -2. pod-1/pod-2 come up, local kubelet calls the `meshnet` binary for each pod to setup their networking. -3. Based on the CNI configuration file, Kubelet calls meshnet to set up additional interfaces. +1. Kubernetes cluster gets populated with the topology information via custom + resources +2. pod-1/pod-2 come up, local kubelet calls the `meshnet` binary for each pod + to setup their networking. +3. Based on the CNI configuration file, Kubelet calls meshnet to set up + additional interfaces. - > Note that `eth0` is **always** setup by one of the existing CNI plugins. It is used to provide external connectivity to and from the pod + > Note that `eth0` is **always** setup by one of the existing CNI plugins. + > It is used to provide external connectivity to and from the pod -4. meshnet binary updates the topology data with pod's runtime metadata (namespace filepath and primary IP address). -5. meshnet binary (via a local meshnet daemon) retrieves the list of `links` and looks up peer pod's metadata to identify what kind of link to setup - veth, vxlan or macvlan. -6. If the peer is on the same node, it calls koko to setup a `veth` link between the two pods. -7. If the peer is on the remote node, it does two things: - - 7.1 It calls koko to setup a local `vxlan` link. - - 7.2 It makes a gRPC `Update` call to the remote node's meshnet daemon, specifying this link's metadata (e.g. VTEP IP and VNI). -8. Upon receipt of this information, remote node's `meshnetd` idepmotently updates the local vxlan link, i.e. it creates a new link, updates the existing link if there's a change or does nothing if the link attributes are the same. +4. meshnet binary updates the topology data with pod's runtime metadata + (namespace filepath and primary IP address). + +5. meshnet binary (via a local meshnet daemon) retrieves the list of `links` + and looks up peer pod's metadata to identify what kind of link to setup - + veth, vxlan or macvlan. + +6. If the peer is on the same node, it calls koko to setup a `veth` link + between the two pods. + +7. If the peer is on the remote node, it does two things: + - 7.1 It calls koko to setup a local `vxlan` link. + - 7.2 It makes a gRPC `Update` call to the remote node's meshnet daemon, + specifying this link's metadata (e.g. VTEP IP and VNI). + +8. Upon receipt of this information, remote node's `meshnetd` idepmotently + updates the local vxlan link, i.e. it creates a new link, updates the + existing link if there's a change or does nothing if the link attributes are + the same. ## Local Demo @@ -156,7 +189,8 @@ make down ## Installation -The following manifest will create all that's required for meshnet plugin to function, i.e.: +The following manifest will create all that's required for meshnet plugin to +function, i.e.: - A `meshnet` namespace - A Custom Resource Definition for network topologies @@ -172,9 +206,15 @@ kubectl apply -k manifests/overlays/grpc-link #### Interaction with existing resources -Meshnet plugin was designed to work alongside any other existing or future Kubernetes resources that may not require any special topology to be set up for them. Every pod coming up will have its first interface setup by an existing CNI plugin (e.g. flannel, weave, calico) and will only have additional interfaces connected if there's a matching custom `Topology` resource. +Meshnet plugin was designed to work alongside any other existing or future +Kubernetes resources that may not require any special topology to be set up for +them. Every pod coming up will have its first interface setup by an existing CNI +plugin (e.g. flannel, weave, calico) and will only have additional interfaces +connected if there's a matching custom `Topology` resource. -During the initial installation process, meshnet will try to insert itself into the list of CNI plugins. For example, assuming the following configuration is present in `/etc/cni/net.d/weave.conf`: +During the initial installation process, meshnet will try to insert itself into +the list of CNI plugins. For example, assuming the following configuration is +present in `/etc/cni/net.d/weave.conf`: ```json { @@ -184,7 +224,8 @@ During the initial installation process, meshnet will try to insert itself into } ``` -Meshnet will convert the above to conflist and produce the file `/etc/cni/net.d/00-meshnet.conflist` with the following content: +Meshnet will convert the above to conflist and produce the file +`/etc/cni/net.d/00-meshnet.conflist` with the following content: ```json { @@ -208,19 +249,28 @@ Meshnet will convert the above to conflist and produce the file `/etc/cni/net.d/ ### Customising installation paths -In some cases, Kubernetes distros may store CNI configuration files and binaries in non-standard directories and override them with `--cni-bin-dir` and `--cni-conf-dir` flags. In order to install meshnet into the right directories, create a new overlay under `manifests/overlays` and patch the `cni-dir` or `cni-bin` volumes with the correct location. See [kops overlay](manifests/overlays/kops) for an example. +In some cases, Kubernetes distros may store CNI configuration files and binaries +in non-standard directories and override them with `--cni-bin-dir` and +`--cni-conf-dir` flags. In order to install meshnet into the right directories, +create a new overlay under `manifests/overlays` and patch the `cni-dir` or +`cni-bin` volumes with the correct location. See +[kops overlay](manifests/overlays/kops) for an example. ### Resilient topologies -If you need to have Pods restarted and re-scheduled by the kube-controller, it's possible to deploy them as StatefulSets with replica number = 1. See [this example](/tests/2node-sts.yml). +If you need to have Pods restarted and re-scheduled by the kube-controller, it's +possible to deploy them as StatefulSets with replica number = 1. See +[this example](/tests/2node-sts.yml). ### Examples -Inside the `tests` directory there are 4 manifests with the following test topologies: +Inside the `tests` directory there are 4 manifests with the following test +topologies: - A simple point-to-point 2-node topology - A 3-node topology connected as a triangle -- A 5-node topology connected as [quincunx](https://en.wikipedia.org/wiki/Quincunx) +- A 5-node topology connected as + [quincunx](https://en.wikipedia.org/wiki/Quincunx) - A 2-node topology with 2nd node connected to a macvlan interface #### Use k8s-topo to orchestrate network topologies @@ -310,25 +360,37 @@ k8s-topo --destroy examples/builder/random.yml There are two places to collect meshnet logs: -1. Meshnet daemon logs can be collected outside of the Kubernetes cluster. For example, the below command will collect logs from all meshnet daemons using [stern](https://github.com/wercker/stern) +1. Meshnet daemon logs can be collected outside of the Kubernetes cluster. For + example, the below command will collect logs from all meshnet daemons using + [stern](https://github.com/wercker/stern) - ```sh - stern meshnet -n meshnet - ``` + ```sh + stern meshnet -n meshnet + ``` -2. Meshnet plugin (binary) logs can be collected on the respective Kubernetes nodes, e.g. +2. Meshnet plugin (binary) logs can be collected on the respective Kubernetes + nodes, e.g. - ```text - root@kind-worker:/# journalctl -u kubelet - ``` + ```text + root@kind-worker:/# journalctl -u kubelet + ``` --- -Each POD is supposed to run an `init-wait` container that waits for the right number of interface to be connected before passing the ball to the main container. However, sometimes, PODs restart resulting in the missing interfaces inside the main container process, since they may have been added _AFTER_ the process that reads the container interface list (e.g. qemu-kvm for VM-based containers). This is the procedure I use to identify the cause of the failure: - -1. Identify which POD is at fault. This will most likely be the incorrect number of interfaces. -2. Identify which interface is missing or was added last. -3. Identify the correlation between the pair of containers interconnected by the missing interface -4. Look for the peer container's failures using `kubectl get events --sort-by=.metadata.creationTimestamp'` -5. Identify which k8s node this POD is running on `kubectl get pods acme-scs1001-a -o yaml | grep node` -6. On that node check the `journalctl` for any errors associated with the POD +Each POD is supposed to run an `init-wait` container that waits for the right +number of interface to be connected before passing the ball to the main +container. However, sometimes, PODs restart resulting in the missing interfaces +inside the main container process, since they may have been added _AFTER_ the +process that reads the container interface list (e.g. qemu-kvm for VM-based +containers). This is the procedure I use to identify the cause of the failure: + +1. Identify which POD is at fault. This will most likely be the incorrect + number of interfaces. +2. Identify which interface is missing or was added last. +3. Identify the correlation between the pair of containers interconnected by + the missing interface +4. Look for the peer container's failures using `kubectl get events +--sort-by=.metadata.creationTimestamp'` +5. Identify which k8s node this POD is running on `kubectl get pods +acme-scs1001-a -o yaml | grep node` +6. On that node check the `journalctl` for any errors associated with the POD diff --git a/third_party/meshnet/daemon/proto/meshnet/v1beta1/meshnet.proto b/third_party/meshnet/daemon/proto/meshnet/v1beta1/meshnet.proto index 40a65ccd0..4c02711ed 100644 --- a/third_party/meshnet/daemon/proto/meshnet/v1beta1/meshnet.proto +++ b/third_party/meshnet/daemon/proto/meshnet/v1beta1/meshnet.proto @@ -31,10 +31,10 @@ message PodQuery { } message SkipQuery { - string pod = 1; + string pod = 1; string peer = 2; string kube_ns = 3; - int64 link_id = 4; + int64 link_id = 4; } message BoolResponse { @@ -68,12 +68,12 @@ message WireDef { // Interface name, which comes from topology definition and to be put // inside container. // This filed is used when grpc-wire to be created. - string intf_name_in_pod = 3; + string intf_name_in_pod = 3; // Network name space of the local pod which is connected to this // grpc-wire - string local_pod_net_ns = 4; - + string local_pod_net_ns = 4; + // Each meshnet link has a uid. int64 link_uid = 5; @@ -89,7 +89,6 @@ message WireDef { string topo_ns = 8; string local_pod_ip = 9; - } message WireCreateResponse { @@ -103,8 +102,8 @@ message WireDownResponse { } message Packet { - // the remote machine interface id, to which this packet should be delivered. - int64 remot_intf_id = 1; + // the remote machine interface id, to which this packet should be delivered. + int64 remot_intf_id = 1; bytes frame = 2; } @@ -113,20 +112,19 @@ message GenerateNodeInterfaceNameRequest { string pod_name = 2; } - message GenerateNodeInterfaceNameResponse { bool ok = 1; - string node_intf_name = 2; + string node_intf_name = 2; } service Local { - rpc Get (PodQuery) returns (Pod); - rpc SetAlive (Pod) returns (BoolResponse); - rpc SkipReverse (SkipQuery) returns (BoolResponse); - rpc Skip (SkipQuery) returns (BoolResponse); - rpc IsSkipped (SkipQuery) returns (BoolResponse); + rpc Get(PodQuery) returns (Pod); + rpc SetAlive(Pod) returns (BoolResponse); + rpc SkipReverse(SkipQuery) returns (BoolResponse); + rpc Skip(SkipQuery) returns (BoolResponse); + rpc IsSkipped(SkipQuery) returns (BoolResponse); - rpc GRPCWireExists(WireDef) returns (WireCreateResponse); + rpc GRPCWireExists(WireDef) returns (WireCreateResponse); rpc AddGRPCWireLocal(WireDef) returns (BoolResponse); rpc RemGRPCWire(WireDef) returns (BoolResponse); @@ -138,12 +136,12 @@ service Local { } service Remote { - rpc Update (RemotePod) returns (BoolResponse); + rpc Update(RemotePod) returns (BoolResponse); rpc AddGRPCWireRemote(WireDef) returns (WireCreateResponse); rpc GRPCWireDownRemote(WireDef) returns (WireDownResponse); } service WireProtocol { - rpc SendToOnce (Packet) returns (BoolResponse); - rpc SendToStream (stream Packet) returns (BoolResponse); -} \ No newline at end of file + rpc SendToOnce(Packet) returns (BoolResponse); + rpc SendToStream(stream Packet) returns (BoolResponse); +} diff --git a/third_party/meshnet/docs/implementation.md b/third_party/meshnet/docs/implementation.md index 1f48ad3e9..7a75e883b 100644 --- a/third_party/meshnet/docs/implementation.md +++ b/third_party/meshnet/docs/implementation.md @@ -1,21 +1,41 @@ # Motivation -In K8S usually pods across nodes are connected using VxLAN/IPnIP/GRE overlay. Our objective is to connect these pods using grpc p2p overlay. One of the advantages is that there is **no reduction of MTU**. For example adding VXLAN will reduce virtual interface MTU by 20 bytes. With grpc-wire interface MTU remains 1500 (or can be made higher - not tried yet). Other advantages could be to add telemetry, generate wire up/down signal, etc. +In K8S usually pods across nodes are connected using VxLAN/IPnIP/GRE overlay. +Our objective is to connect these pods using grpc p2p overlay. One of the +advantages is that there is **no reduction of MTU**. For example adding VXLAN +will reduce virtual interface MTU by 20 bytes. With grpc-wire interface MTU +remains 1500 (or can be made higher - not tried yet). Other advantages could be +to add telemetry, generate wire up/down signal, etc. ## Introduction -Let's take an example CRD as given in the picture below -![CRD](./pics/crd.png) +Let's take an example CRD as given in the picture below ![CRD](./pics/crd.png) -When this crd is deployed with grpc-wire CNI, then the nodes across the K8S pods will interact over a grpc channel. Each grpc channel will provide a point to point connection between pods. For example `POD-1:e1 <---> POD-2:e1` will be a dedicated grpc channel for POD1 & POD-2 communication via their `e1` virtual interfaces. +When this crd is deployed with grpc-wire CNI, then the nodes across the K8S pods +will interact over a grpc channel. Each grpc channel will provide a point to +point connection between pods. For example `POD-1:e1 <---> POD-2:e1` will be a +dedicated grpc channel for POD1 & POD-2 communication via their `e1` virtual +interfaces. ![DEPLOYMENT](./pics/deployment.png) -Each node in the cluster runs a CNI daemon set. The daemon in the node is responsible to maintain the GRPC channel and send/receive packets over it. In a node, each pod is connected with the node daemon using a veth-pair. One end of the veth pair is inside the pod and the other end is with the daemon. Pods always writes to or reads from the the interface it has got. Whereas the daemon is always listening on the other end of the veth pair. As soon as the pod writes a packet, the daemon gets it and transports it over the grpc channel to the remote node. Daemon in the remote node delivers it to the destination pod. +Each node in the cluster runs a CNI daemon set. The daemon in the node is +responsible to maintain the GRPC channel and send/receive packets over it. In a +node, each pod is connected with the node daemon using a veth-pair. One end of +the veth pair is inside the pod and the other end is with the daemon. Pods +always writes to or reads from the the interface it has got. Whereas the daemon +is always listening on the other end of the veth pair. As soon as the pod writes +a packet, the daemon gets it and transports it over the grpc channel to the +remote node. Daemon in the remote node delivers it to the destination pod. ## Details -When a pod wants to send a packet to a remote pod, it writes it on the interface inside the pod. Pod is completely unaware of the grpc overlay being used. The interface that a pod sees is one end of a veth pair. The other end of the veth pair is with meshnet daemon. The meshnet daemon receives any packet that a pod wants to send. Meshnet daemon uses the following proto to deliver the packet to the destination pod (on a different node). +When a pod wants to send a packet to a remote pod, it writes it on the interface +inside the pod. Pod is completely unaware of the grpc overlay being used. The +interface that a pod sees is one end of a veth pair. The other end of the veth +pair is with meshnet daemon. The meshnet daemon receives any packet that a pod +wants to send. Meshnet daemon uses the following proto to deliver the packet to +the destination pod (on a different node). ```go message Packet { @@ -24,7 +44,15 @@ message Packet { } ``` -The packet itself carries the id of the destination interface. Destination interface is an interface in the remote node and the meshnet daemon in the remote machine has access to this interface. This destination interface is one end of the veth pair and the other end of this veth pair is within the destination pod. This is ensured during the wire creation time. So when the packet reaches the destination daemon, the demon simply writes the received packet on the interface carried by the packet itself. Since it's a veth pair the packet goes to the destination pod which is connected at the other end. It avoids any per packet lookup and packet delivery becomes an O(1) operation. +The packet itself carries the id of the destination interface. Destination +interface is an interface in the remote node and the meshnet daemon in the +remote machine has access to this interface. This destination interface is one +end of the veth pair and the other end of this veth pair is within the +destination pod. This is ensured during the wire creation time. So when the +packet reaches the destination daemon, the demon simply writes the received +packet on the interface carried by the packet itself. Since it's a veth pair the +packet goes to the destination pod which is connected at the other end. It +avoids any per packet lookup and packet delivery becomes an O(1) operation. Overall Tx/Rx mechanism is depicted in the picture below. @@ -32,14 +60,35 @@ Overall Tx/Rx mechanism is depicted in the picture below. As shown it the picture above :- -- When the pod-1 in node-1 has to send a BGP packet, it just writes it on the pod interface eth1. (_point C1 in the picture_) -- Other end of this veth-pair (`eth1-out1`) is with the daemon, where a thread is always waiting on `go channel` to read packet. (_point 1 in the picture_) -- Since the wire creation time, the daemon in node-1 knows, any packet received on `eth1-out1` has to be delivered to the daemon running on node-2 and the destination interface in node-2 is `eth2-out1` who’s id is `X2`. -- The thread in node-1 (_point 1 in the picture_) makes a GRPC service call `SendToOnce` to deliver the packet to the service handler in node-2 (_point 2 in the picture_). During the creation time node-1 and node-2 has established the GRPC connection. -- `SendToOnce` service in node-2 receives the packet and it also receives the desired destination interface id along with it. In our case it’s `X2`. It simply writes the packet on `X2`. Packet reaches the destination pod, which is at the other end of the veth pair `eth2-out1 (X2) <---> eth1` in node-2. In this case the destination pod is pod-2 and its interface `eth2`. +- When the pod-1 in node-1 has to send a BGP packet, it just writes it on the + pod interface eth1. (_point C1 in the picture_) +- Other end of this veth-pair (`eth1-out1`) is with the daemon, where a thread + is always waiting on `go channel` to read packet. (_point 1 in the picture_) +- Since the wire creation time, the daemon in node-1 knows, any packet + received on `eth1-out1` has to be delivered to the daemon running on node-2 + and the destination interface in node-2 is `eth2-out1` who’s id is `X2`. +- The thread in node-1 (_point 1 in the picture_) makes a GRPC service call + `SendToOnce` to deliver the packet to the service handler in node-2 (_point + 2 in the picture_). During the creation time node-1 and node-2 has + established the GRPC connection. +- `SendToOnce` service in node-2 receives the packet and it also receives the + desired destination interface id along with it. In our case it’s `X2`. It + simply writes the packet on `X2`. Packet reaches the destination pod, which + is at the other end of the veth pair `eth2-out1 (X2) <---> eth1` in node-2. + In this case the destination pod is pod-2 and its interface `eth2`. - In reverse direction - - When pod-2 in node-2 wants to send a packet to pod-1 in node-1, the same process continues. Pod-2 writes it it’s interface `eth2`. (_point C2 in the picture_). The name `eth2` is assigned by meshnet CRD. + - When pod-2 in node-2 wants to send a packet to pod-1 in node-1, the same + process continues. Pod-2 writes it it’s interface `eth2`. (_point C2 in + the picture_). The name `eth2` is assigned by meshnet CRD. - The packet goes to the other end of the veth pair `eth2-out1` - - The daemon in node-2 receive the packet (_point 3 in the picture_) and makes a GRPC service call `SendToOnce` to deliver the packet to the service handler in node-1 (_point 4 in the picture_) - - Since the wire creation time, the daemon in node-2 knows, any packet received on `eth2-out1` has to be delivered to the daemon running on node-1 and the destination interface in node-1 is `eth1-out1` who’s id is `X1`. - - `SendToOnce` service in node-1 receives the packet and the desired destination interface id along with it. In our case it’s `X1`. It simply writes the packet on `X1`. Packet reaches the destination pod, which is at the other end of the veth pair `eth1-out1 (X1) <---> eth1` in node-1. + - The daemon in node-2 receive the packet (_point 3 in the picture_) and + makes a GRPC service call `SendToOnce` to deliver the packet to the + service handler in node-1 (_point 4 in the picture_) + - Since the wire creation time, the daemon in node-2 knows, any packet + received on `eth2-out1` has to be delivered to the daemon running on + node-1 and the destination interface in node-1 is `eth1-out1` who’s id + is `X1`. + - `SendToOnce` service in node-1 receives the packet and the desired + destination interface id along with it. In our case it’s `X1`. It simply + writes the packet on `X1`. Packet reaches the destination pod, which is + at the other end of the veth pair `eth1-out1 (X1) <---> eth1` in node-1. diff --git a/topo/node/alpine/alpine.go b/topo/node/alpine/alpine.go index 43ee15b23..56f452062 100644 --- a/topo/node/alpine/alpine.go +++ b/topo/node/alpine/alpine.go @@ -22,7 +22,7 @@ import ( "github.com/openconfig/kne/topo/node" "google.golang.org/protobuf/proto" - "k8s.io/utils/pointer" + "k8s.io/utils/ptr" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -123,7 +123,7 @@ func (n *Node) CreatePod(ctx context.Context) error { Resources: node.ToResourceRequirements(pb.Constraints), ImagePullPolicy: "IfNotPresent", SecurityContext: &corev1.SecurityContext{ - Privileged: pointer.Bool(true), + Privileged: ptr.To(true), }, }} @@ -193,14 +193,14 @@ func (n *Node) CreatePod(ctx context.Context) error { Resources: node.ToResourceRequirements(pb.Constraints), ImagePullPolicy: "IfNotPresent", SecurityContext: &corev1.SecurityContext{ - Privileged: pointer.Bool(true), + Privileged: ptr.To(true), }, VolumeMounts: extraMounts, } alpineContainers = append(alpineContainers, containerSpec) default: // Only Dataplane container is supported as the custom container - return fmt.Errorf("Alpine supports only 1 custom container, %d provided.", numContainers) + return fmt.Errorf("alpine supports only 1 custom container, %d provided", numContainers) } } @@ -223,11 +223,11 @@ func (n *Node) CreatePod(ctx context.Context) error { }, ImagePullPolicy: "IfNotPresent", SecurityContext: &corev1.SecurityContext{ - Privileged: pointer.Bool(true), + Privileged: ptr.To(true), }, }}, Containers: alpineContainers, - TerminationGracePeriodSeconds: pointer.Int64(0), + TerminationGracePeriodSeconds: ptr.To(int64(0)), NodeSelector: map[string]string{}, Affinity: &corev1.Affinity{ PodAntiAffinity: &corev1.PodAntiAffinity{ @@ -261,7 +261,7 @@ func (n *Node) CreatePod(ctx context.Context) error { MountPath: pb.Config.ConfigPath + "/" + pb.Config.ConfigFile, ReadOnly: true, } - if vol.VolumeSource.ConfigMap != nil { + if vol.ConfigMap != nil { vm.SubPath = pb.Config.ConfigFile } for i, c := range pod.Spec.Containers { diff --git a/topo/node/alpine/alpine_test.go b/topo/node/alpine/alpine_test.go index 56a447816..9356a1adc 100644 --- a/topo/node/alpine/alpine_test.go +++ b/topo/node/alpine/alpine_test.go @@ -29,7 +29,7 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kfake "k8s.io/client-go/kubernetes/fake" - "k8s.io/utils/pointer" + "k8s.io/utils/ptr" ) func TestNew(t *testing.T) { @@ -200,7 +200,7 @@ func TestCreatePod(t *testing.T) { Requests: corev1.ResourceList{}}, ImagePullPolicy: "IfNotPresent", SecurityContext: &corev1.SecurityContext{ - Privileged: pointer.Bool(true), + Privileged: ptr.To(true), }, }, wantDpCtr: corev1.Container{ @@ -212,7 +212,7 @@ func TestCreatePod(t *testing.T) { Requests: corev1.ResourceList{}}, ImagePullPolicy: "IfNotPresent", SecurityContext: &corev1.SecurityContext{ - Privileged: pointer.Bool(true), + Privileged: ptr.To(true), }, VolumeMounts: []corev1.VolumeMount{{Name: "files", MountPath: "/files"}}, }, @@ -246,7 +246,7 @@ func TestCreatePod(t *testing.T) { Requests: corev1.ResourceList{}}, ImagePullPolicy: "IfNotPresent", SecurityContext: &corev1.SecurityContext{ - Privileged: pointer.Bool(true), + Privileged: ptr.To(true), }, VolumeMounts: []corev1.VolumeMount{{ Name: "startup-config-volume", @@ -264,7 +264,7 @@ func TestCreatePod(t *testing.T) { Requests: corev1.ResourceList{}}, ImagePullPolicy: "IfNotPresent", SecurityContext: &corev1.SecurityContext{ - Privileged: pointer.Bool(true), + Privileged: ptr.To(true), }, VolumeMounts: []corev1.VolumeMount{{ Name: "files", @@ -297,7 +297,7 @@ func TestCreatePod(t *testing.T) { Requests: corev1.ResourceList{}}, ImagePullPolicy: "IfNotPresent", SecurityContext: &corev1.SecurityContext{ - Privileged: pointer.Bool(true), + Privileged: ptr.To(true), }, }, }} diff --git a/topo/node/arista/arista.go b/topo/node/arista/arista.go index e3c70a551..6eb5a9146 100644 --- a/topo/node/arista/arista.go +++ b/topo/node/arista/arista.go @@ -259,7 +259,7 @@ func (n *Node) CreateCRD(ctx context.Context) error { }, } for label, v := range proto.GetLabels() { - device.ObjectMeta.Labels[label] = v + device.Labels[label] = v } for _, service := range proto.GetServices() { insidePort := service.Inside @@ -396,7 +396,7 @@ func (n *Node) ConfigPush(ctx context.Context, r io.Reader) error { } if resp.Failed == nil { - log.Infof("%s - finished config push", n.Impl.Proto.Name) + log.Infof("%s - finished config push", n.Proto.Name) } return resp.Failed @@ -422,7 +422,7 @@ func (n *Node) ResetCfg(ctx context.Context) error { } if resp.Failed == nil { - log.Infof("%s - finshed resetting config", n.Name()) + log.Infof("%s - finished resetting config", n.Name()) } return resp.Failed @@ -504,7 +504,7 @@ func (n *Node) FixInterfaces() error { for k, v := range n.Proto.Interfaces { switch { default: - return fmt.Errorf("Unrecognized interface name: %s", v.Name) + return fmt.Errorf("unrecognized interface name: %s", v.Name) case !strings.HasPrefix(k, "eth"), ethIntfRe.MatchString(v.Name), mgmtIntfRe.MatchString(v.Name): case v.Name == "": n.Proto.Interfaces[k].Name = fmt.Sprintf("Ethernet%s", strings.TrimPrefix(k, "eth")) diff --git a/topo/node/arista/arista_test.go b/topo/node/arista/arista_test.go index 9a2ede06e..754d1bd98 100644 --- a/topo/node/arista/arista_test.go +++ b/topo/node/arista/arista_test.go @@ -87,7 +87,7 @@ func TestNew(t *testing.T) { }, }, }, - wantErr: "Unrecognized interface name: Ethernet1/2/3/4", + wantErr: "unrecognized interface name: Ethernet1/2/3/4", }, { desc: "invalid eth intfs 2", nImpl: &node.Impl{ @@ -97,7 +97,7 @@ func TestNew(t *testing.T) { }, }, }, - wantErr: "Unrecognized interface name: Ethernet", + wantErr: "unrecognized interface name: Ethernet", }, { desc: "invalid management intfs 1", nImpl: &node.Impl{ @@ -109,7 +109,7 @@ func TestNew(t *testing.T) { }, }, }, - wantErr: "Unrecognized interface name: Management1/2/3", + wantErr: "unrecognized interface name: Management1/2/3", }, { desc: "invalid management intfs 2", nImpl: &node.Impl{ @@ -119,7 +119,7 @@ func TestNew(t *testing.T) { }, }, }, - wantErr: "Unrecognized interface name: Management", + wantErr: "unrecognized interface name: Management", }, { desc: "default check with empty topo proto", nImpl: &node.Impl{ @@ -457,7 +457,7 @@ func TestCRD(t *testing.T) { Proto: tt.proto, }, } - node.Impl.Proto.Name = name + node.Proto.Name = name err := node.CreateCRD(ctx) if s := errdiff.Check(err, tt.wantErr); s != "" { t.Errorf("New() unexpected err: %s", s) @@ -623,7 +623,7 @@ func TestStatus(t *testing.T) { Proto: &topopb.Node{}, }, } - node.Impl.Proto.Name = name + node.Proto.Name = name status, err := node.Status(ctx) if s := errdiff.Check(err, tt.cantWatch); s != "" { t.Errorf("Status() unexpected err: %s", s) diff --git a/topo/node/cisco/cisco.go b/topo/node/cisco/cisco.go index 88bd38a5b..76298deca 100644 --- a/topo/node/cisco/cisco.go +++ b/topo/node/cisco/cisco.go @@ -37,7 +37,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/rest" log "k8s.io/klog/v2" - "k8s.io/utils/pointer" + "k8s.io/utils/ptr" ) const ( @@ -161,7 +161,7 @@ func (n *Node) Create(ctx context.Context) error { initContainerImage = node.DefaultInitContainerImage } secContext := &corev1.SecurityContext{ - Privileged: pointer.Bool(true), + Privileged: ptr.To(true), } tty := false stdin := false @@ -169,8 +169,8 @@ func (n *Node) Create(ctx context.Context) error { // terminal. This is not required for 8000e nodes. if pb.Model == ModelXRD { secContext = &corev1.SecurityContext{ - Privileged: pointer.Bool(true), - RunAsUser: pointer.Int64(0), + Privileged: ptr.To(true), + RunAsUser: ptr.To(int64(0)), Capabilities: &corev1.Capabilities{ Add: []corev1.Capability{"SYS_ADMIN"}, }, @@ -221,7 +221,7 @@ func (n *Node) Create(ctx context.Context) error { }, }, }}, - TerminationGracePeriodSeconds: pointer.Int64(0), + TerminationGracePeriodSeconds: ptr.To(int64(0)), NodeSelector: map[string]string{}, Affinity: &corev1.Affinity{ PodAntiAffinity: &corev1.PodAntiAffinity{ @@ -243,7 +243,7 @@ func (n *Node) Create(ctx context.Context) error { }, } for label, v := range n.GetProto().GetLabels() { - pod.ObjectMeta.Labels[label] = v + pod.Labels[label] = v } if pb.Config.ConfigData != nil { vol, err := n.CreateConfig(ctx) @@ -256,7 +256,7 @@ func (n *Node) Create(ctx context.Context) error { MountPath: pb.Config.ConfigPath + "/" + pb.Config.ConfigFile, ReadOnly: true, } - if vol.VolumeSource.ConfigMap != nil { + if vol.ConfigMap != nil { vm.SubPath = pb.Config.ConfigFile } for i, c := range pod.Spec.Containers { @@ -277,10 +277,10 @@ func (n *Node) Create(ctx context.Context) error { } // DefaultNodeConstraints returns default node constraints for CISCO. -// If the model for 8000e is specificied correctly it returns defaults for 8000e. +// If the model for 8000e is specified correctly it returns defaults for 8000e. // Otherwise, it returns defaults for XRD by default. func (n *Node) DefaultNodeConstraints() node.Constraints { - if n.Impl == nil || n.Impl.Proto == nil { + if n.Impl == nil || n.Proto == nil { return defaultXRDConstraints } switch n.GetProto().Model { @@ -292,7 +292,7 @@ func (n *Node) DefaultNodeConstraints() node.Constraints { return defaultXRDConstraints } -// validateHostConstraints - Validates host contraints through the default node's implementation. It skips the validation optionally +// validateHostConstraints - Validates host constraints through the default node's implementation. It skips the validation optionally // based on skipValidation flag which is useful for unit tests func validateHostConstraints(n *Node, skipValidation bool) error { if skipValidation { @@ -409,7 +409,10 @@ func getCiscoInterfaceID(pb *tpb.Node, eth string) (string, error) { return pb.Interfaces[eth].Name, nil } // ethWithIDRegx.MatchString(eth) was successful, so no need to do extra check here - ethID, _ := strconv.Atoi(ethRegx.Split(eth, -1)[1]) + ethID, err := strconv.Atoi(ethRegx.Split(eth, -1)[1]) + if err != nil { + return "", fmt.Errorf("failed to parse interface ID from %q: %w", eth, err) + } eid := ethID - 1 switch pb.Model { case "8201": @@ -657,8 +660,8 @@ func endTelnet(d *scraplinetwork.Driver) error { // sending ctrl + ] (^]) to end telnet session gracefully. Otherwise, the next connection can be blocked. endTelnet := string(byte(29)) + " quit\n" log.Infof("Closing the connection by sending ctrl+] quit \n") - d.SendCommand(endTelnet) - return nil + _, err := d.SendCommand(endTelnet) + return err } func (n *Node) ResetCfg(ctx context.Context) error { @@ -671,9 +674,9 @@ func (n *Node) ResetCfg(ctx context.Context) error { var cmd string if n.Proto.Model == ModelXRD { - // Copy the snooped management interface config from a know location and the startup config from + // Copy the snooped management interface config from a known location and the startup config from // the mounted location so it can be applied. This is required to preserve the snooped management - // IP addres and since the "copy" xr_cli command can only access files on disk 0/1. + // IP address and since the "copy" xr_cli command can only access files on disk 0/1. startup_config := n.Proto.Config.Env["XR_EVERY_BOOT_CONFIG"] if startup_config == "" { return status.Errorf(codes.InvalidArgument, "XR_EVERY_BOOT_CONFIG is not set") @@ -748,7 +751,7 @@ func (n *Node) ConfigPush(ctx context.Context, r io.Reader) error { return err } if resp.Failed == nil { - log.Infof("%s - finished config push", n.Impl.Proto.Name) + log.Infof("%s - finished config push", n.Proto.Name) } return resp.Failed @@ -757,7 +760,7 @@ func (n *Node) ConfigPush(ctx context.Context, r io.Reader) error { func (n *Node) GenerateSelfSigned(context.Context) error { // IOS XR automatically generates a self-signed certificate when gRPC is first enabled. // If the startup configuration contains a gRPC configuration, or if the user configures - // gRPC after bootup, the self-signed cert will automatically be created and used. + // gRPC after boot up, the self-signed cert will automatically be created and used. return status.Errorf(codes.Unimplemented, "certificate generation is not supported") } diff --git a/topo/node/cisco/cisco_test.go b/topo/node/cisco/cisco_test.go index 7950127b0..c0d1eec61 100644 --- a/topo/node/cisco/cisco_test.go +++ b/topo/node/cisco/cisco_test.go @@ -41,7 +41,10 @@ func init() { } func defaultNode(pb *tpb.Node) *tpb.Node { - node, _ := defaults(pb) + node, err := defaults(pb) + if err != nil { + panic(err) + } return node } @@ -945,8 +948,14 @@ func TestNodeStatus(t *testing.T) { }() podIsUpRegex = regexp.MustCompile("fake log") // this is the expected log from a fake pod } - nImpl, _ := New(tt.ni) - n, _ := nImpl.(*Node) + nImpl, err := New(tt.ni) + if err != nil { + t.Fatalf("New() failed: %v", err) + } + n, ok := nImpl.(*Node) + if !ok { + t.Fatalf("nImpl is not a *Node") + } status, err := n.Status(ctx) if err != nil { t.Errorf("Error is not expected for Node Status") diff --git a/topo/node/drivenets/drivenets.go b/topo/node/drivenets/drivenets.go index 56fb895a4..85be438f9 100644 --- a/topo/node/drivenets/drivenets.go +++ b/topo/node/drivenets/drivenets.go @@ -121,7 +121,7 @@ var clientFn = func(c *rest.Config) (clientset.Interface, error) { } func (n *Node) Create(ctx context.Context) error { - if n.Impl.Proto.Model != modelCdnos { + if n.Proto.Model != modelCdnos { return fmt.Errorf("cannot create an instance of an unknown model") } return n.cdnosCreate(ctx) @@ -200,7 +200,7 @@ func (n *Node) cdnosCreate(ctx context.Context) error { } func (n *Node) Status(ctx context.Context) (node.Status, error) { - if n.Impl.Proto.Model != modelCdnos { + if n.Proto.Model != modelCdnos { return node.StatusUnknown, fmt.Errorf("invalid model specified") } return n.cdnosStatus(ctx) @@ -228,7 +228,7 @@ func (n *Node) cdnosStatus(ctx context.Context) (node.Status, error) { } func (n *Node) Delete(ctx context.Context) error { - if n.Impl.Proto.Model != modelCdnos { + if n.Proto.Model != modelCdnos { return fmt.Errorf("unknown model") } return n.cdnosDelete(ctx) diff --git a/topo/node/forward/forward.go b/topo/node/forward/forward.go index 5d4a63870..cb1c12f2b 100644 --- a/topo/node/forward/forward.go +++ b/topo/node/forward/forward.go @@ -26,7 +26,7 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" log "k8s.io/klog/v2" - "k8s.io/utils/pointer" + "k8s.io/utils/ptr" ) const ( @@ -168,10 +168,10 @@ func (n *Node) CreatePod(ctx context.Context) error { Resources: node.ToResourceRequirements(pb.Constraints), ImagePullPolicy: "IfNotPresent", SecurityContext: &corev1.SecurityContext{ - Privileged: pointer.Bool(true), + Privileged: ptr.To(true), }, }}, - TerminationGracePeriodSeconds: pointer.Int64(0), + TerminationGracePeriodSeconds: ptr.To(int64(0)), NodeSelector: map[string]string{}, Affinity: &corev1.Affinity{ PodAntiAffinity: &corev1.PodAntiAffinity{ @@ -193,7 +193,7 @@ func (n *Node) CreatePod(ctx context.Context) error { }, } for label, v := range n.GetProto().GetLabels() { - pod.ObjectMeta.Labels[label] = v + pod.Labels[label] = v } if pb.Config.ConfigData != nil { vol, err := n.CreateConfig(ctx) @@ -206,7 +206,7 @@ func (n *Node) CreatePod(ctx context.Context) error { MountPath: pb.Config.ConfigPath + "/" + pb.Config.ConfigFile, ReadOnly: true, } - if vol.VolumeSource.ConfigMap != nil { + if vol.ConfigMap != nil { vm.SubPath = pb.Config.ConfigFile } for i, c := range pod.Spec.Containers { diff --git a/topo/node/inclusterproxy/README.md b/topo/node/inclusterproxy/README.md index 4e030f12c..5862bf60d 100644 --- a/topo/node/inclusterproxy/README.md +++ b/topo/node/inclusterproxy/README.md @@ -1,41 +1,53 @@ # IN_CLUSTER_PROXY Node Type -The `IN_CLUSTER_PROXY` node type is a specialized KNE node designed to act as a back-to-back proxy inside the cluster. It binds to a specific target node (e.g., a Device Under Test / DUT) over a single dedicated link and forwards configured ports to it using `socat`. +The `IN_CLUSTER_PROXY` node type is a specialized KNE node designed to act as a +back-to-back proxy inside the cluster. It binds to a specific target node (e.g., +a Device Under Test / DUT) over a single dedicated link and forwards configured +ports to it using `socat`. ## Features -- **Automatic Command Generation**: Automatically computes static IP address sizing for sidecar point-to-point subnets and generates `socat` listener scriptlets directly without writing bash boilerplate. -- **Cross-Stack Support**: Transparently supports both point-to-point **IPv4 (`/31`)** and **IPv6 (`/127`)** addressing setups. -- **Static Topology Integrity Verification**: Proactively verifies that `eth1` connects directly to the declared target node backplane before attempting to load or deploy. +- **Automatic Command Generation**: Automatically computes static IP address + sizing for sidecar point-to-point subnets and generates `socat` listener + scriptlets directly without writing bash boilerplate. +- **Cross-Stack Support**: Transparently supports both point-to-point **IPv4 + (`/31`)** and **IPv6 (`/127`)** addressing setups. +- **Static Topology Integrity Verification**: Proactively verifies that `eth1` + connects directly to the declared target node backplane before attempting to + load or deploy. ## Node Constraints To pass static validation, the node **must** meet the following conditions: -| Parameter | Constraint | -| :--- | :--- | -| **Interfaces** | Exactly one interface named `eth1`. | -| **Links** | `eth1` **must** link directly to the node specified in the `proxy-pool-for` label. | -| **Services** | Exactly one Service mapping must be provided inside `Services` map. | -| **Labels** | The node must have the `proxy-pool-for` label correctly populated. | +| Parameter | Constraint | +| :------------- | :--------------------------------------------------------------------------------- | +| **Interfaces** | Exactly one interface named `eth1`. | +| **Links** | `eth1` **must** link directly to the node specified in the `proxy-pool-for` label. | +| **Services** | Exactly one Service mapping must be provided inside `Services` map. | +| **Labels** | The node must have the `proxy-pool-for` label correctly populated. | ## Configuration Labels -| Label Key | Type | Required | Description | -| :--- | :--- | :--- | :--- | -| `proxy-pool-for` | String | **Yes** | Name of the target node this proxy is mediating. | -| `peer-ip` | IP | No (Opt-in) | IP address of the peer (DUT) connected over `eth1` (e.g. `192.168.100.1` or `2001:db8::1`). | -| `peer-prefix` | String | No (Opt-in) | Prefix length of the peer IP (e.g. `31` or `127`). | -| `target-port` | Integer | No (Opt-in) | Port on the peer node to forward proxy streams to. | +| Label Key | Type | Required | Description | +| :--------------- | :------ | :---------- | :------------------------------------------------------------------------------------------ | +| `proxy-pool-for` | String | **Yes** | Name of the target node this proxy is mediating. | +| `peer-ip` | IP | No (Opt-in) | IP address of the peer (DUT) connected over `eth1` (e.g. `192.168.100.1` or `2001:db8::1`). | +| `peer-prefix` | String | No (Opt-in) | Prefix length of the peer IP (e.g. `31` or `127`). | +| `target-port` | Integer | No (Opt-in) | Port on the peer node to forward proxy streams to. | -> **Note on Opt-in Automatic Setup**: -> If **all three of** `peer-ip`, `peer-prefix`, and `target-port` are provided, the controller will automatically calculate the inverse IP (your side of the `/31` or `/127` link) and generate full commands addressing `socat`. If omitted, users must configure `command` and `args` in `.Config` structures manually. +> **Note on Opt-in Automatic Setup**: If **all three of** `peer-ip`, +> `peer-prefix`, and `target-port` are provided, the controller will +> automatically calculate the inverse IP (your side of the `/31` or `/127` link) +> and generate full commands addressing `socat`. If omitted, users must +> configure `command` and `args` in `.Config` structures manually. --- ## Example (Protobuf text format) -Below is an example of an `IN_CLUSTER_PROXY` node mediating a BGP lookup connection to node `cx1`. +Below is an example of an `IN_CLUSTER_PROXY` node mediating a BGP lookup +connection to node `cx1`. ```protobuf nodes: { @@ -59,9 +71,9 @@ nodes: { } services: { key: 1790 - value: { - name: "bgp-proxy" - inside: 1790 + value: { + name: "bgp-proxy" + inside: 1790 } } } @@ -77,4 +89,5 @@ links: { In this example, the proxy container will automatically spin up to: 1. Assign `192.168.100.0/31` to its `eth1` interface. -2. Run `socat` forwarding any stream sent to port `1790` out to `192.168.100.1:179` across the wire. +2. Run `socat` forwarding any stream sent to port `1790` out to + `192.168.100.1:179` across the wire. diff --git a/topo/node/juniper/juniper.go b/topo/node/juniper/juniper.go index a1697a610..dfe19c2f3 100644 --- a/topo/node/juniper/juniper.go +++ b/topo/node/juniper/juniper.go @@ -23,7 +23,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" log "k8s.io/klog/v2" - "k8s.io/utils/pointer" + "k8s.io/utils/ptr" ) // ErrIncompatibleCliConn raised when an invalid scrapligo cli transport type is found. @@ -171,10 +171,10 @@ func (n *Node) SpawnCLIConn() error { } // DefaultNodeConstraints returns default node constraints for Juniper. -// If the model for cptx is specificied correctly it returns defaults for cptx. +// If the model for cptx is specified correctly it returns defaults for cptx. // Otherwise, it returns defaults for ncptx by default. func (n *Node) DefaultNodeConstraints() node.Constraints { - if n.Impl == nil || n.Impl.Proto == nil { + if n.Impl == nil || n.Proto == nil { return defaultNCPTXConstraints } switch n.GetProto().Model { @@ -496,8 +496,8 @@ func (n *Node) Create(ctx context.Context) error { Resources: node.ToResourceRequirements(pb.Constraints), ImagePullPolicy: "IfNotPresent", SecurityContext: &corev1.SecurityContext{ - Privileged: pointer.Bool(true), - RunAsUser: pointer.Int64(0), + Privileged: ptr.To(true), + RunAsUser: ptr.To(int64(0)), Capabilities: &corev1.Capabilities{ Add: []corev1.Capability{"SYS_ADMIN", "NET_ADMIN"}, }, @@ -564,7 +564,7 @@ func (n *Node) Create(ctx context.Context) error { }, }, }, - TerminationGracePeriodSeconds: pointer.Int64(0), + TerminationGracePeriodSeconds: ptr.To(int64(0)), NodeSelector: map[string]string{}, Affinity: &corev1.Affinity{ PodAntiAffinity: &corev1.PodAntiAffinity{ @@ -586,7 +586,7 @@ func (n *Node) Create(ctx context.Context) error { }, } for label, v := range n.GetProto().GetLabels() { - pod.ObjectMeta.Labels[label] = v + pod.Labels[label] = v } if pb.Config.ConfigData != nil { vol, err := n.CreateConfig(ctx) @@ -599,7 +599,7 @@ func (n *Node) Create(ctx context.Context) error { MountPath: pb.Config.ConfigPath + "/" + pb.Config.ConfigFile, ReadOnly: true, } - if vol.VolumeSource.ConfigMap != nil { + if vol.ConfigMap != nil { vm.SubPath = pb.Config.ConfigFile } for i, c := range pod.Spec.Containers { diff --git a/topo/node/node.go b/topo/node/node.go index 3184d9051..a216ee9ac 100644 --- a/topo/node/node.go +++ b/topo/node/node.go @@ -29,7 +29,7 @@ import ( "k8s.io/client-go/rest" "k8s.io/client-go/tools/remotecommand" log "k8s.io/klog/v2" - "k8s.io/utils/pointer" + "k8s.io/utils/ptr" ) type Interface interface { @@ -286,7 +286,7 @@ func validateBoundedInteger(nodeConstraint *tpb.BoundedInteger, hostCons int) er if nodeConstraint.MinValue > nodeConstraint.MaxValue { return fmt.Errorf("invalid bounds. Max value %d is less than min value %d", nodeConstraint.MaxValue, nodeConstraint.MinValue) } - if !(nodeConstraint.MinValue <= int64(hostCons) && int64(hostCons) <= nodeConstraint.MaxValue) { + if int64(hostCons) < nodeConstraint.MinValue || int64(hostCons) > nodeConstraint.MaxValue { return fmt.Errorf("invalid bounded integer constraint. min: %d max %d constraint data %d", nodeConstraint.MinValue, nodeConstraint.MaxValue, hostCons) } @@ -429,10 +429,10 @@ func (n *Impl) CreatePod(ctx context.Context) error { Resources: ToResourceRequirements(pb.Constraints), ImagePullPolicy: "IfNotPresent", SecurityContext: &corev1.SecurityContext{ - Privileged: pointer.Bool(true), + Privileged: ptr.To(true), }, }}, - TerminationGracePeriodSeconds: pointer.Int64(0), + TerminationGracePeriodSeconds: ptr.To(int64(0)), NodeSelector: map[string]string{}, Affinity: &corev1.Affinity{ PodAntiAffinity: &corev1.PodAntiAffinity{ @@ -454,7 +454,7 @@ func (n *Impl) CreatePod(ctx context.Context) error { }, } for label, v := range n.GetProto().GetLabels() { - pod.ObjectMeta.Labels[label] = v + pod.Labels[label] = v } if pb.Config.ConfigData != nil { vol, err := n.CreateConfig(ctx) @@ -467,7 +467,7 @@ func (n *Impl) CreatePod(ctx context.Context) error { MountPath: pb.Config.ConfigPath + "/" + pb.Config.ConfigFile, ReadOnly: true, } - if vol.VolumeSource.ConfigMap != nil { + if vol.ConfigMap != nil { vm.SubPath = pb.Config.ConfigFile } for i, c := range pod.Spec.Containers { @@ -531,7 +531,7 @@ func (n *Impl) CreateService(ctx context.Context) error { // Large topologies may try to allocate more NodePorts than are // supported in default clusters. // https://kubernetes.io/docs/concepts/services-networking/service/#load-balancer-nodeport-allocation - AllocateLoadBalancerNodePorts: pointer.Bool(false), + AllocateLoadBalancerNodePorts: ptr.To(false), }, } sS, err := n.KubeClient.CoreV1().Services(n.Namespace).Create(ctx, s, metav1.CreateOptions{}) @@ -573,7 +573,7 @@ func (n *Impl) DeleteConfig(ctx context.Context) error { } log.V(1).Infof("Deleted config file %s", path) case vs.ConfigMap != nil: - name := vs.ConfigMap.LocalObjectReference.Name + name := vs.ConfigMap.Name if err := n.KubeClient.CoreV1().ConfigMaps(n.Namespace).Delete(ctx, name, metav1.DeleteOptions{}); err != nil { return err } @@ -589,7 +589,7 @@ func (n *Impl) DeleteService(ctx context.Context) error { TypeMeta: metav1.TypeMeta{ APIVersion: "v1", }, - GracePeriodSeconds: pointer.Int64(0), + GracePeriodSeconds: ptr.To(int64(0)), }) } @@ -627,6 +627,7 @@ func (n *Impl) Exec(ctx context.Context, cmd []string, stdin io.Reader, stdout i return err } log.Infof("Execing %s on %s", cmd, n.Name()) + //nolint:staticcheck return exec.Stream(remotecommand.StreamOptions{ Stdin: stdin, Stdout: stdout, @@ -725,9 +726,13 @@ func (n *Impl) PatchCLIConnOpen(bin string, cliCmd []string, opts []scrapliutil. // for a given platform. Retries indefinitely till success and returns a scrapligo network driver instance. func (n *Impl) GetCLIConn(platform string, opts []scrapliutil.Option) (*scraplinetwork.Driver, error) { if log.V(1).Enabled() { - li, _ := scraplilogging.NewInstance(scraplilogging.WithLevel("debug"), + li, err := scraplilogging.NewInstance(scraplilogging.WithLevel("debug"), scraplilogging.WithLogger(log.Info)) - opts = append(opts, scrapliopts.WithLogger(li)) + if err != nil { + log.Warningf("Failed to create scrapli logging instance: %v", err) + } else { + opts = append(opts, scrapliopts.WithLogger(li)) + } } for { @@ -773,10 +778,10 @@ func GetNodeLinks(n *tpb.Node) ([]topologyv1.Link, error) { continue } if ifc.PeerIntName == "" { - return nil, fmt.Errorf("interface %q PeerIntName canot be empty", ifcName) + return nil, fmt.Errorf("interface %q PeerIntName cannot be empty", ifcName) } if ifc.PeerName == "" { - return nil, fmt.Errorf("interface %q PeerName canot be empty", ifcName) + return nil, fmt.Errorf("interface %q PeerName cannot be empty", ifcName) } links = append(links, topologyv1.Link{ UID: int(ifc.Uid), diff --git a/topo/node/node_test.go b/topo/node/node_test.go index 3119861c7..0f08a30f6 100644 --- a/topo/node/node_test.go +++ b/topo/node/node_test.go @@ -15,7 +15,7 @@ import ( "k8s.io/apimachinery/pkg/util/intstr" kfake "k8s.io/client-go/kubernetes/fake" "k8s.io/client-go/rest" - "k8s.io/utils/pointer" + "k8s.io/utils/ptr" ) func NewNR(impl *Impl) (Node, error) { @@ -160,18 +160,18 @@ func TestCreateConfig(t *testing.T) { }, }, }, { - desc: "config file dne", + desc: "config file does not exist", node: &topopb.Node{ Name: "dev1", Vendor: topopb.Vendor(1001), Config: &topopb.Config{ ConfigFile: "test.cfg", ConfigData: &topopb.Config_File{ - File: "testdata/dne.cfg", + File: "testdata/nonexistent.cfg", }, }, }, - wantErr: "open testdata/dne.cfg: no such file", + wantErr: "open testdata/nonexistent.cfg: no such file", }} for _, tt := range tests { t.Run(tt.desc, func(t *testing.T) { @@ -199,7 +199,7 @@ func TestCreateConfig(t *testing.T) { t.Errorf("CreateConfig() did not create the expected file: %v", err) } case vs.ConfigMap != nil: - gotCM, err := n.KubeClient.CoreV1().ConfigMaps(n.Namespace).Get(ctx, vs.ConfigMap.LocalObjectReference.Name, metav1.GetOptions{}) + gotCM, err := n.KubeClient.CoreV1().ConfigMaps(n.Namespace).Get(ctx, vs.ConfigMap.Name, metav1.GetOptions{}) if err != nil { t.Errorf("CreateConfig() did not create the expected configmap: %v", err) } @@ -255,7 +255,7 @@ func TestService(t *testing.T) { }}, Selector: map[string]string{"app": "dev1"}, Type: "LoadBalancer", - AllocateLoadBalancerNodePorts: pointer.Bool(false), + AllocateLoadBalancerNodePorts: ptr.To(false), }, }}, }, { @@ -301,7 +301,7 @@ func TestService(t *testing.T) { }}, Selector: map[string]string{"app": "dev2"}, Type: "LoadBalancer", - AllocateLoadBalancerNodePorts: pointer.Bool(false), + AllocateLoadBalancerNodePorts: ptr.To(false), }, }}, }, { @@ -365,7 +365,7 @@ func TestValidateConstraints(t *testing.T) { constraintValues map[string]int }{ { - desc: "Invalid case - contraint value is greater than upper bound", + desc: "Invalid case - constraint value is greater than upper bound", node: &topopb.Node{ Name: "node1", HostConstraints: []*topopb.HostConstraint{ diff --git a/topo/node/nokia/nokia.go b/topo/node/nokia/nokia.go index 6769f3c21..0c122961f 100644 --- a/topo/node/nokia/nokia.go +++ b/topo/node/nokia/nokia.go @@ -211,7 +211,7 @@ func (n *Node) ConfigPush(ctx context.Context, r io.Reader) error { } if resp.Failed != nil { - log.Infof("%s - failed saving config to file", n.Impl.Proto.Name) + log.Infof("%s - failed saving config to file", n.Proto.Name) return resp.Failed } @@ -228,7 +228,7 @@ func (n *Node) ConfigPush(ctx context.Context, r io.Reader) error { } if mresp.Failed != nil { - log.Infof("%s - failed config push", n.Impl.Proto.Name) + log.Infof("%s - failed config push", n.Proto.Name) return resp.Failed } diff --git a/topo/node/openconfig/openconfig.go b/topo/node/openconfig/openconfig.go index 2f9cf5d84..7c6326453 100644 --- a/topo/node/openconfig/openconfig.go +++ b/topo/node/openconfig/openconfig.go @@ -160,7 +160,7 @@ var clientFn = func(c *rest.Config) (clientset.Interface, error) { } func (n *Node) Create(ctx context.Context) error { - switch n.Impl.Proto.Model { + switch n.Proto.Model { case modelLemming: return n.lemmingCreate(ctx) case modelMagna: @@ -236,19 +236,19 @@ func (n *Node) lemmingCreate(ctx context.Context) error { } func (n *Node) Status(ctx context.Context) (node.Status, error) { - switch n.Impl.Proto.Model { + switch n.Proto.Model { case modelMagna: // magna's status uses the standard underlying node implementation. return n.Impl.Status(ctx) case modelLemming: return n.lemmingStatus(ctx) default: - return node.StatusUnknown, fmt.Errorf("invalid model specified.") + return node.StatusUnknown, fmt.Errorf("invalid model specified") } } func (n *Node) DefaultNodeConstraints() node.Constraints { - switch n.Impl.Proto.Model { + switch n.Proto.Model { case modelLemming: return defaultLemmingConstraints default: @@ -278,7 +278,7 @@ func (n *Node) lemmingStatus(ctx context.Context) (node.Status, error) { } func (n *Node) Delete(ctx context.Context) error { - switch n.Impl.Proto.Model { + switch n.Proto.Model { case modelMagna: // magna's implementation uses the standard underlying node implementation. return n.Impl.Delete(ctx) diff --git a/topo/node/sonic/sonic.go b/topo/node/sonic/sonic.go index 4841c100b..86f0bd5da 100644 --- a/topo/node/sonic/sonic.go +++ b/topo/node/sonic/sonic.go @@ -11,6 +11,8 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. + +// Package sonic implements a SONIC node in the topology. package sonic import ( @@ -20,7 +22,7 @@ import ( "github.com/openconfig/kne/topo/node" "google.golang.org/protobuf/proto" - "k8s.io/utils/pointer" + "k8s.io/utils/ptr" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -52,6 +54,7 @@ var ( } ) +// New returns a new SONIC node. func New(nodeImpl *node.Impl) (node.Node, error) { if nodeImpl == nil { return nil, fmt.Errorf("nodeImpl cannot be nil") @@ -83,10 +86,12 @@ func renameInterfaces(in map[string]*tpb.Interface) map[string]*tpb.Interface { return intf } +// Node is a SONIC node. type Node struct { *node.Impl } +// Create creates the SONIC node. func (n *Node) Create(ctx context.Context) error { if err := n.ValidateConstraints(); err != nil { return fmt.Errorf("node %s failed to validate node with errors: %s", n.Name(), err) @@ -120,7 +125,7 @@ func (n *Node) CreatePod(ctx context.Context) error { Resources: node.ToResourceRequirements(pb.Constraints), ImagePullPolicy: "IfNotPresent", SecurityContext: &corev1.SecurityContext{ - Privileged: pointer.Bool(true), + Privileged: ptr.To(true), }, }} @@ -143,11 +148,11 @@ func (n *Node) CreatePod(ctx context.Context) error { }, ImagePullPolicy: "IfNotPresent", SecurityContext: &corev1.SecurityContext{ - Privileged: pointer.Bool(true), + Privileged: ptr.To(true), }, }}, Containers: sonicContainers, - TerminationGracePeriodSeconds: pointer.Int64(0), + TerminationGracePeriodSeconds: ptr.To(int64(0)), NodeSelector: map[string]string{}, Affinity: &corev1.Affinity{ PodAntiAffinity: &corev1.PodAntiAffinity{ @@ -180,7 +185,7 @@ func (n *Node) CreatePod(ctx context.Context) error { MountPath: pb.Config.ConfigPath + "/" + pb.Config.ConfigFile, ReadOnly: true, } - if vol.VolumeSource.ConfigMap != nil { + if vol.ConfigMap != nil { vm.SubPath = pb.Config.ConfigFile } for i, c := range pod.Spec.Containers { @@ -221,6 +226,7 @@ func defaults(pb *tpb.Node) *tpb.Node { return pb } +// DefaultNodeConstraints returns the default node constraints. func (n *Node) DefaultNodeConstraints() node.Constraints { return defaultConstraints } diff --git a/topo/node/sonic/sonic_test.go b/topo/node/sonic/sonic_test.go index db6dd1e90..3ddfa056d 100644 --- a/topo/node/sonic/sonic_test.go +++ b/topo/node/sonic/sonic_test.go @@ -27,7 +27,7 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kfake "k8s.io/client-go/kubernetes/fake" - "k8s.io/utils/pointer" + "k8s.io/utils/ptr" ) func TestNew(t *testing.T) { @@ -152,11 +152,11 @@ func TestNew(t *testing.T) { func TestCreatePod(t *testing.T) { tests := []struct { - desc string - nImpl *node.Impl - wantInitCtr corev1.Container - wantSonicCtr corev1.Container - wantErr string + desc string + nImpl *node.Impl + wantInitContainer corev1.Container + wantSonicContainer corev1.Container + wantErr string }{{ desc: "simple sonic container", nImpl: &node.Impl{ @@ -170,16 +170,16 @@ func TestCreatePod(t *testing.T) { }, }, }, - wantInitCtr: corev1.Container{ - Name: "init-sonic-node", - Image: node.DefaultInitContainerImage, - Args: []string{"1", "10", "1"}, + wantInitContainer: corev1.Container{ + Name: "init-sonic-node", + Image: node.DefaultInitContainerImage, + Args: []string{"1", "10", "1"}, ImagePullPolicy: "IfNotPresent", SecurityContext: &corev1.SecurityContext{ - Privileged: pointer.Bool(true), + Privileged: ptr.To(true), }, }, - wantSonicCtr: corev1.Container{ + wantSonicContainer: corev1.Container{ Name: "sonic-node", Image: "sonicImage", Command: []string{"sonicCommand"}, @@ -189,7 +189,7 @@ func TestCreatePod(t *testing.T) { }, ImagePullPolicy: "IfNotPresent", SecurityContext: &corev1.SecurityContext{ - Privileged: pointer.Bool(true), + Privileged: ptr.To(true), }, }, }, { @@ -214,16 +214,16 @@ func TestCreatePod(t *testing.T) { }, }, }, - wantInitCtr: corev1.Container{ - Name: "init-sonic-node", - Image: "customInitImage", - Args: []string{"3", "5", "1"}, + wantInitContainer: corev1.Container{ + Name: "init-sonic-node", + Image: "customInitImage", + Args: []string{"3", "5", "1"}, ImagePullPolicy: "IfNotPresent", SecurityContext: &corev1.SecurityContext{ - Privileged: pointer.Bool(true), + Privileged: ptr.To(true), }, }, - wantSonicCtr: corev1.Container{ + wantSonicContainer: corev1.Container{ Name: "sonic-node", Image: "sonicImage", Command: []string{"sonicCommand"}, @@ -233,7 +233,7 @@ func TestCreatePod(t *testing.T) { }, ImagePullPolicy: "IfNotPresent", SecurityContext: &corev1.SecurityContext{ - Privileged: pointer.Bool(true), + Privileged: ptr.To(true), }, }, }, { @@ -252,16 +252,16 @@ func TestCreatePod(t *testing.T) { }, }, }, - wantInitCtr: corev1.Container{ - Name: "init-sonic-node", - Image: node.DefaultInitContainerImage, - Args: []string{"1", "10", "1"}, + wantInitContainer: corev1.Container{ + Name: "init-sonic-node", + Image: node.DefaultInitContainerImage, + Args: []string{"1", "10", "1"}, ImagePullPolicy: "IfNotPresent", SecurityContext: &corev1.SecurityContext{ - Privileged: pointer.Bool(true), + Privileged: ptr.To(true), }, }, - wantSonicCtr: corev1.Container{ + wantSonicContainer: corev1.Container{ Name: "sonic-node", Image: "sonicImage", Command: []string{"sonicCommand"}, @@ -271,7 +271,7 @@ func TestCreatePod(t *testing.T) { }, ImagePullPolicy: "IfNotPresent", SecurityContext: &corev1.SecurityContext{ - Privileged: pointer.Bool(true), + Privileged: ptr.To(true), }, VolumeMounts: []corev1.VolumeMount{{ Name: "startup-config-volume", @@ -305,16 +305,16 @@ func TestCreatePod(t *testing.T) { if len(initContainers) != 1 { t.Fatalf("Num init containers mismatch: want: 1 got: %v", len(initContainers)) } - if s := cmp.Diff(tt.wantInitCtr, initContainers[0]); s != "" { - t.Fatalf("Init Container mismatch: %s,\n got:\n%v \n want:\n%v\n", s, initContainers[0], tt.wantInitCtr) + if s := cmp.Diff(tt.wantInitContainer, initContainers[0]); s != "" { + t.Fatalf("Init Container mismatch: %s,\n got:\n%v \n want:\n%v\n", s, initContainers[0], tt.wantInitContainer) } containers := pod.Spec.Containers if len(containers) != 1 { t.Fatalf("Num containers mismatch: want: 1 got: %v", len(containers)) } - if s := cmp.Diff(tt.wantSonicCtr, containers[0]); s != "" { - t.Fatalf("Sonic Container mismatch: %s,\n got:\n%v \n want:\n%v\n", s, containers[0], tt.wantSonicCtr) + if s := cmp.Diff(tt.wantSonicContainer, containers[0]); s != "" { + t.Fatalf("Sonic Container mismatch: %s,\n got:\n%v \n want:\n%v\n", s, containers[0], tt.wantSonicContainer) } }) } diff --git a/topo/testdata/invalid_topo.yaml b/topo/testdata/invalid_topo.yaml index e55c0b4dd..06c9ca4c6 100644 --- a/topo/testdata/invalid_topo.yaml +++ b/topo/testdata/invalid_topo.yaml @@ -1,3 +1,4 @@ +--- name: "test-data-topology" nodes: - name: "r1" diff --git a/topo/testdata/valid_topo.yaml b/topo/testdata/valid_topo.yaml index 8eb0573c1..6a1b58ba3 100644 --- a/topo/testdata/valid_topo.yaml +++ b/topo/testdata/valid_topo.yaml @@ -1,3 +1,4 @@ +--- name: "test-data-topology" nodes: - name: "r1" diff --git a/topo/topo.go b/topo/topo.go index 2e131194b..2ea4f8c1d 100644 --- a/topo/topo.go +++ b/topo/topo.go @@ -267,7 +267,7 @@ func (m *Manager) Create(ctx context.Context, timeout time.Duration) (rerr error } } ctx, cancel := context.WithCancel(ctx) - // Watch the containter status of the pods so we can fail if a container fails to start running. + // Watch the container status of the pods so we can fail if a container fails to start running. if w, err := pods.NewWatcher(ctx, m.kClient, cancel); err != nil { log.Warningf("Failed to start pod watcher: %v", err) } else { @@ -409,7 +409,10 @@ func (m *Manager) Show(ctx context.Context) (*cpb.ShowTopologyResponse, error) { } stateMap := &stateMap{} for _, n := range m.nodes { - phase, _ := n.Status(ctx) + phase, err := n.Status(ctx) + if err != nil { + return nil, err + } stateMap.setNodeState(n.Name(), phase) } return &cpb.ShowTopologyResponse{ @@ -530,8 +533,8 @@ func setLinkPeer(nodeName string, podName string, link *topologyv1.Link, peerSpe for _, peerSpec := range peerSpecs { for _, peerLink := range peerSpec.Spec.Links { // make sure self ifc and peer ifc belong to same link (and hence UID) but are not the same interfaces - if peerLink.UID == link.UID && !(nodeName == link.PeerPod && peerLink.LocalIntf == link.LocalIntf) { - link.PeerPod = peerSpec.ObjectMeta.Name + if peerLink.UID == link.UID && (nodeName != link.PeerPod || peerLink.LocalIntf != link.LocalIntf) { + link.PeerPod = peerSpec.Name link.PeerIntf = peerLink.LocalIntf return nil } @@ -568,7 +571,7 @@ func (m *Manager) topologySpecs(ctx context.Context) ([]*topologyv1.Topology, er return nil, fmt.Errorf("specs do not exist for node %s", link.PeerPod) } - if err := setLinkPeer(nodeName, spec.ObjectMeta.Name, link, peerSpecs); err != nil { + if err := setLinkPeer(nodeName, spec.Name, link, peerSpecs); err != nil { return nil, err } } @@ -677,10 +680,10 @@ func (m *Manager) createMeshnetTopologies(ctx context.Context) error { } log.V(2).Infof("Got topology specs for namespace %s: %+v", m.topo.Name, topologies) for _, t := range topologies { - log.Infof("Creating topology for meshnet node %s", t.ObjectMeta.Name) + log.Infof("Creating topology for meshnet node %s", t.Name) sT, err := m.tClient.Topology(m.topo.Name).Create(ctx, t, metav1.CreateOptions{}) if err != nil { - return fmt.Errorf("could not create topology for meshnet node %s: %v", t.ObjectMeta.Name, err) + return fmt.Errorf("could not create topology for meshnet node %s: %v", t.Name, err) } log.V(1).Infof("Meshnet Node:\n%+v\n", sT) } @@ -695,8 +698,8 @@ func (m *Manager) deleteMeshnetTopologies(ctx context.Context) error { } var errs errlist.List for _, n := range nodes { - if err := m.tClient.Topology(m.topo.Name).Delete(ctx, n.ObjectMeta.Name, metav1.DeleteOptions{}); err != nil { - errs.Add(fmt.Errorf("failed to delete meshnet node %q: %w", n.ObjectMeta.Name, err)) + if err := m.tClient.Topology(m.topo.Name).Delete(ctx, n.Name, metav1.DeleteOptions{}); err != nil { + errs.Add(fmt.Errorf("failed to delete meshnet node %q: %w", n.Name, err)) } } return errs.Err() @@ -718,7 +721,7 @@ func (m *Manager) checkNodeStatus(ctx context.Context, timeout time.Duration) er phase, err := n.Status(ctx) if err != nil || phase == node.StatusFailed { - return fmt.Errorf("Node %s: Status %s Reason %v", n, phase, err) + return fmt.Errorf("node %s: status %s reason %v", n, phase, err) } if phase == node.StatusRunning { log.Infof("Node %s: Status %s", n, phase) diff --git a/topo/topo_test.go b/topo/topo_test.go index a958a7211..e871ad60a 100644 --- a/topo/topo_test.go +++ b/topo/topo_test.go @@ -555,7 +555,7 @@ func TestCreate(t *testing.T) { }, }, }, - wantErr: `Node "bad" (vendor: "1002", model: ""): Status FAILED`, + wantErr: `node "bad" (vendor: "1002", model: ""): status FAILED`, }, { desc: "failed to report metrics, create still passes", opts: []Option{WithUsageReporting(true, "", "")}, @@ -678,7 +678,7 @@ func TestDelete(t *testing.T) { Type: watch.Deleted, Object: &corev1.Namespace{ ObjectMeta: metav1.ObjectMeta{ - Name: "dne", + Name: "nonexistent", }, }, }, @@ -1796,7 +1796,7 @@ func TestConfigPush(t *testing.T) { wantErr: "does not implement ConfigPusher interface", }, { desc: "node not found", - name: "dne", + name: "nonexistent", wantErr: "not found", }} for _, tt := range tests { @@ -1834,7 +1834,7 @@ func TestResetCfg(t *testing.T) { wantErr: "does not implement Resetter interface", }, { desc: "node not found", - name: "dne", + name: "nonexistent", wantErr: "not found", }} for _, tt := range tests { @@ -1901,7 +1901,7 @@ func TestGenerateSelfSigned(t *testing.T) { name: "no_info", }, { desc: "node not found", - name: "dne", + name: "nonexistent", wantErr: "not found", }} for _, tt := range tests { diff --git a/x/webhook/README.md b/x/webhook/README.md index 2b82d2bd2..39b891828 100644 --- a/x/webhook/README.md +++ b/x/webhook/README.md @@ -1,12 +1,11 @@ # KNE Mutating Webhook This directory contains the code and configurations (in the form of manifests) -for the mutating webhook. The webhook should be deployed onto a KNE -cluster. +for the mutating webhook. The webhook should be deployed onto a KNE cluster. -This webhook can be used to mutate any K8 resources. This directory contains -the generic webhook along with an example mutator that simply adds an alpine -linux container to created pods. +This webhook can be used to mutate any K8 resources. This directory contains the +generic webhook along with an example mutator that simply adds an alpine linux +container to created pods. To develop custom a custom mutation simply change the mutate function in the examples subdirectory. @@ -79,9 +78,9 @@ default kne-assembly-webhook-f5b8cf987-lpxjt We can now create the KNE topology. -*Note* The KNE topology must have the label `webhook:enabled` for each node, as in -[this example](examples/topology.textproto), -otherwise the webhook will ignore the pod upon create. +_Note_ The KNE topology must have the label `webhook:enabled` for each node, as +in [this example](examples/topology.textproto), otherwise the webhook will +ignore the pod upon create. ```bash labels { @@ -96,8 +95,8 @@ Use the normal KNE command to create the topology. kne create examples/topology.textproto ``` -You should now see r1 with 2 containers instead of the one, this is -because the webhook has injected the alpine linux container. +You should now see r1 with 2 containers instead of the one, this is because the +webhook has injected the alpine linux container. ```bash $ kubectl get pods -n webhook-example @@ -175,8 +174,8 @@ I0402 23:24:36.394188 1 mutate.go:45] Mutating &TypeMeta{Kind:Pod,APIVersi I0402 23:24:36.394227 1 addcontainer.go:34] Ignoring pod "r2", mutation not requested ``` -This output shows that it mutated the pod r1 but not r2 since -the label was not added to that KNE node. +This output shows that it mutated the pod r1 but not r2 since the label was not +added to that KNE node. ### TLS @@ -197,7 +196,6 @@ Edit `main.go` to specify any mutation functions as desired. The example uses the mutation function found in `examples/addcontainer/addcontainer.go` but any mutation function is supported. This includes mutating services and other resources besides just pods. However you may also have to change -`manifests/mutating.config.yaml` to select other resources types than just -pods. +`manifests/mutating.config.yaml` to select other resources types than just pods. After customization is done, rebuild the container and reapply the manifests. diff --git a/x/webhook/examples/addcontainer/addcontainer_test.go b/x/webhook/examples/addcontainer/addcontainer_test.go index e119fb1e8..892451ad8 100644 --- a/x/webhook/examples/addcontainer/addcontainer_test.go +++ b/x/webhook/examples/addcontainer/addcontainer_test.go @@ -69,5 +69,4 @@ func TestAddContainer(t *testing.T) { } }) } - } diff --git a/x/webhook/main.go b/x/webhook/main.go index 0df6bf624..9d50dab95 100644 --- a/x/webhook/main.go +++ b/x/webhook/main.go @@ -90,7 +90,9 @@ func parseRequest(r http.Request) (*admissionv1.AdmissionReview, error) { } bodybuf := new(bytes.Buffer) - bodybuf.ReadFrom(r.Body) + if _, err := bodybuf.ReadFrom(r.Body); err != nil { + return nil, fmt.Errorf("failed to read request body: %w", err) + } body := bodybuf.Bytes() if len(body) == 0 { diff --git a/x/webhook/manifests/deploy.yaml b/x/webhook/manifests/deploy.yaml index fddb16a57..3f1214291 100644 --- a/x/webhook/manifests/deploy.yaml +++ b/x/webhook/manifests/deploy.yaml @@ -1,3 +1,4 @@ +--- apiVersion: apps/v1 kind: Deployment metadata: @@ -14,7 +15,7 @@ spec: metadata: labels: app: kne-assembly-webhook - spec: + spec: containers: - image: webhook:latest imagePullPolicy: IfNotPresent diff --git a/x/webhook/manifests/mutating.config.yaml b/x/webhook/manifests/mutating.config.yaml index 8c0bdbd84..cde9f29df 100644 --- a/x/webhook/manifests/mutating.config.yaml +++ b/x/webhook/manifests/mutating.config.yaml @@ -1,3 +1,4 @@ +--- apiVersion: admissionregistration.k8s.io/v1 kind: MutatingWebhookConfiguration metadata: diff --git a/x/webhook/manifests/namespace.yaml b/x/webhook/manifests/namespace.yaml index 2adf86a8a..5724d8e5d 100644 --- a/x/webhook/manifests/namespace.yaml +++ b/x/webhook/manifests/namespace.yaml @@ -1,3 +1,4 @@ +--- apiVersion: v1 kind: Namespace metadata: diff --git a/x/webhook/manifests/tls.secret.yaml b/x/webhook/manifests/tls.secret.yaml index 4e5bd8bbf..4946ca214 100644 --- a/x/webhook/manifests/tls.secret.yaml +++ b/x/webhook/manifests/tls.secret.yaml @@ -1,3 +1,4 @@ +--- apiVersion: v1 data: tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURWVENDQWoyZ0F3SUJBZ0lVVEJRMWJtWFlOZFNCRC9iUllkakpsajJtNVlVd0RRWUpLb1pJaHZjTkFRRUwKQlFBd0xERUxNQWtHQTFVRUJoTUNRVlV4SFRBYkJnTlZCQU1NRkd0dVpTMWhjM05sYldKc2VTMTNaV0pvYjI5cgpNQjRYRFRJME1EUXdNakl4TVRnME1Wb1hEVEkxTURRd01qSXhNVGcwTVZvd0xERUxNQWtHQTFVRUJoTUNRVlV4CkhUQWJCZ05WQkFNTUZHdHVaUzFoYzNObGJXSnNlUzEzWldKb2IyOXJNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUYKQUFPQ0FROEFNSUlCQ2dLQ0FRRUE0M0F2L2lLRzRLNFE0N1luZlc1bGVtTUFLcWRTWjQ3YXhDRDBzM0hoSVI2dgpiTlRldmVmamEvRTN5S08vZ282ZTNVT3d6T01qanVEVHRveVJWZ05kQnBkUklXc2pKSXd2S1ZBR0tUV0ZRVmppCmoyNzIyTG9nNkJ2OVBOVmJSRFRiSUErNnRWbW9IUWFIei9KY3lOR0ZtQmxwZWxhWWY4SXZwQjNkWkY5T3lNSWoKWDVydXlxeTFyUi9uNUliZytZK0M1KzZDWW1OVDVNN2Nqajd3MzNwQ2dWVkRXaGk3NkU3QjJ0TVVTM01aczlMNwpvaHI0T3phK04wczl6ZlgreFY3bnVCTlQ5d1hmNGRET0g3REdUUVhvYjVKYVF0Uk45NlZuRFhtd3Z0VGlSZTZvClExMW1IRkNyQWprbGYyeXZwOXplM2tQekZ1djJkTHg5NzhjSk9vZWlzUUlEQVFBQm8yOHdiVEFyQmdOVkhSRUUKSkRBaWdpQnJibVV0WVhOelpXMWliSGt0ZDJWaWFHOXZheTVrWldaaGRXeDBMbk4yWXpBZEJnTlZIUTRFRmdRVQpkS2lmUkNadHc0MnVieENBVzlOSmd4ZWhubkl3SHdZRFZSMGpCQmd3Rm9BVWpMOUxtZHp0bzNhcEQ5Tm41UFMxCkVLNk04S1l3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUIyOTg1VGUzZzA2c2dMRzdKYTNpZmF1SXFEbDBEVk4KMHlqbXFQQnNNL2syU3JDSE53UW53Rk01MVRxVlhoek8yM2o3bUhhR1FVdlNpTUZzRG1kK1JCS09MVUNFSWwzLwphTlkrNVpaS2thTUZzM1d0bjIzVWtzaEpKR3VJR1N1dXkreTRqdTJ1WXJ4RTVuZWpvRzBvRTk4TXo5ZmZ4bDVFClh4TnRiejZPR1JFNXloQXNBcE1jbnVsY0ZPektFaS9hNHN3MW4vam5KbEwwV0ptRHN1T2FOOWNZMndFS0pCa0cKOEF4d0ZYMUxlOHFhRkl2RGxqWVlnc2tnTjFVZ1hzZkdxdm05eGYzejQ4bDJURGF5T1NxWUhTRHN1T3d1WXRHNwoxV3JWazVjb09FbzljZVBTQlpzYnpKQlpGeFZnbERvdzFVTVUyVWp4TEt4MDQza0hvMEpzSjNzPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== diff --git a/x/wire/file/client/main.go b/x/wire/file/client/main.go index 4f9d56f35..4a5cc0a9b 100644 --- a/x/wire/file/client/main.go +++ b/x/wire/file/client/main.go @@ -48,7 +48,7 @@ func main() { opts := []grpc.DialOption{ grpc.WithTransportCredentials(insecure.NewCredentials()), } - conn, err := grpc.DialContext(ctx, *addr, opts...) + conn, err := grpc.NewClient(*addr, opts...) if err != nil { log.Fatalf("Failed to dial %q: %v", *addr, err) } @@ -64,7 +64,9 @@ func main() { return err } defer func() { - stream.CloseSend() + if err := stream.CloseSend(); err != nil { + log.Warningf("Failed to close send stream: %v", err) + } }() log.Infof("Transmitting endpoint %v over wire...", e) return w.Transmit(ctx, stream) diff --git a/x/wire/forward/main.go b/x/wire/forward/main.go index 15d6eb7e8..5d5bdf8ce 100644 --- a/x/wire/forward/main.go +++ b/x/wire/forward/main.go @@ -122,7 +122,7 @@ func main() { opts := []grpc.DialOption{ grpc.WithTransportCredentials(insecure.NewCredentials()), } - conn, err := grpc.DialContext(ctx, a, opts...) + conn, err := grpc.NewClient(a, opts...) if err != nil { log.Fatalf("Failed to dial %q: %v", a, err) } @@ -138,7 +138,9 @@ func main() { return err } defer func() { - stream.CloseSend() + if err := stream.CloseSend(); err != nil { + log.Warningf("Failed to close send stream: %v", err) + } }() log.Infof("Transmitting endpoint %v over wire...", e) return w.Transmit(ctx, stream) diff --git a/x/wire/intf/client/main.go b/x/wire/intf/client/main.go index 1ce877551..68341c882 100644 --- a/x/wire/intf/client/main.go +++ b/x/wire/intf/client/main.go @@ -48,7 +48,7 @@ func main() { opts := []grpc.DialOption{ grpc.WithTransportCredentials(insecure.NewCredentials()), } - conn, err := grpc.DialContext(ctx, *addr, opts...) + conn, err := grpc.NewClient(*addr, opts...) if err != nil { log.Fatalf("Failed to dial %q: %v", *addr, err) } @@ -64,7 +64,9 @@ func main() { return err } defer func() { - stream.CloseSend() + if err := stream.CloseSend(); err != nil { + log.Warningf("Failed to close send stream: %v", err) + } }() log.Infof("Transmitting endpoint %v over wire...", e) return w.Transmit(ctx, stream) diff --git a/x/wire/wire.go b/x/wire/wire.go index 219e62659..30dacb1e7 100644 --- a/x/wire/wire.go +++ b/x/wire/wire.go @@ -151,7 +151,11 @@ func (w *Wire) Transmit(ctx context.Context, stream Stream) error { }) g.Go(func() error { if cs, ok := stream.(grpc.ClientStream); ok { - defer cs.CloseSend() + defer func() { + if err := cs.CloseSend(); err != nil { + log.Warningf("Failed to close send stream: %v", err) + } + }() } for { data, err := w.src.Read()

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̐_O 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ð1O!{;qz@EOn25ciYSXrZd<6~o^#n+z%r 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 TXt+cH{%qE6vc9}#+rEDRTwqs2 literal 0 HcmV?d00001 diff --git a/third_party/meshnet/docs/pics/detail.png b/third_party/meshnet/docs/pics/detail.png new file mode 100644 index 0000000000000000000000000000000000000000..b181f59d6faeb016a5ad342975870d2d5fa39ecb GIT binary patch literal 774150 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 `zeONSx2Ng*5ct%|gb2 z%VxO|a5@57+l}gy8gtJQm3=vtdbdcEk7U=jHYjfWs$eHFUU5i9bRS6YQg#f^Uh$% zMk?4Co6KVM)Mp3fiKf8|*o_yvd09Q`BzaFg%iv^>UbX9@Hh& zJ{v}xFvn_^@=bBEDl`r=+^OwEgg5PT>*_|D3dhSP14fnYC}#dI)dEflqhht|on2a1 zgJW;L$9`Yq>IDTY8`LZBR+B^D>`UBVY`DWcaB%c#Q^SyO=Ka!w1k;NF31@oliBO9b zr%-zgDAwULGyJ%B9`CT8Q%ZFjvXY|~sAGr*NZAbJ?JLl)m8@-pwbyjAC7K7GGQ~S* zUuruvuv(`9)(~9~B=R>1yQ5yQ+NUHZFQ|A~oxiXuq|yE{nz*y9_66bHpBBd>WqeKw zjyYYFzgd3i(W683D}}}KqIkN2$R!7fTkc$__^7M+`tD6$@Ytxs&k(_$7g=wu z>%iXJ1VdX*w^n9y8~Zs|OfniP8kCYRF*M#p^+n)A*-PNxW>@t~TeeJOyU*l$HpUTD z7q8>N$e2}^L*>`%a_LW|%`+#vNgz(CTQB%jss$z^Cvx>FbqTEZf70w{meGVcb}LNS zD#u2n>YZ9*d)>F9ik5sYzFZtic1f?UM_-`vQ%{zTE)WU<4L*2Owa1vh#|W(sxAlL@ znRxkp`+8?*XBUj))$Z6iMdL*alT258LNYhW0z3t+o?9N&UVeUi2k_qjhk-s7=2WFw zmQC1mP)~LFcue0FInI1B%%UsP0N_9c$n0iOEn`Knq|qPn?TeD|BG z0_#Yq{bKcckH?H7G=Kq|xvDgD|7px@tSJBfc8cS-$hl?)@2fdN=Yxn@7tV7Zo(Mz5 z<4>8|DmW!GZb8fv5aeC??QQM3IrnY%g~Uu(#xv2Sx)a3I)EpXm&e5}xcJMsppoyBg zdJ96b()jKa%&O!*c<=!4+SlAm*bhbY9Q7{rFSYAGOgHqvB;=Ae?A_KeleKxpM;Ia1 z+N;pmt`~y)*d4uS08}V1E0?nEg7 zwdPV_PndjHwgF|@tL*HX`tFmY{iXMGs(*IXY5L#Q;*|aPHKO6==}Ks6X1vkEO_jdBCjzGQ%d~F z@;eKM9LtR7An?@U-SkoToWC68 z$%x|%Z#s8RuYV#CYkDOYb&;95F`awX+UEOD-GU&3rY~;{vN=V4?EC=mo%ni7fH8K^vkVc0P=I*yt;H!LcVM<oNyOe=|~gjA{y?!(W^!#|2tw$U1eUR^8gYXvf3Efx@}+n zb%+t^9@&l;Ldm%$l0AN3s@OrbTCW(qcY6D|vC;Z`S+1h=)plo{b!@GCr=(nKBQ9@D zS?ZaemXj*7&o$lG1E~%}ha*n7m|(9DVTdaPr|Lhv@7LqT9!`{uM@v63s@UBAd^&u} zK;OKg9EbckW)+zbYL$-S{Dn)~YYSKG@=ND$n0BI8yRzLC7MYDO{{t0^62`6HeElVU z_0g%TmR4r|GPjeTtNgs3Q-x`~e*17~s|JPMA6`*d9~f$FG0sRkbcPJQv~$DNIua5R zs!4D6cSrW4VFDFG)l5Pm{BA4r-skEICAW)j98?102FKGKzHj9|=p_8A0j+^zPn1w> zVE9U>kKgoNP9(g{m6&9oM1I@U_jP(#_gHA6_jUNc=-5>=f;Ts-a}TD1L_DGPkbU~} zscM*7^%!JFc2FAgZ~1PFJwZ$~Z9jW@Iw8yqVC`Su+x(@d*Za|M3p-r2tFf~sJ)ETg zwLm0txX-_cX?<;TcWKWrLK^m*vT$1D6ceN6zA7v~8T3>7iE;eqi5Hmi%L$c8HrHk{ z$B;U9+#AzJ)V*t!t9R|5SqXmMTZQsj|6J+rnsSMhehRF=0sff(do2By=9o9Hl^!(x z!Z`cJwAmo4@rPG5Ti&%px-HYr;^@3#(~jx@LFzTzI$d+Hq-Pg~oMyVD06Q`D>g)Jc zORA|wQ(pB@1<4f?@Ik0B-<=!14;!j4=v|>WefTrGk*KY9O7;fkX+oGlF+VNZUjI{f zK#Ab$J?7Cz6A|+QAy@}RL?ZJM;8eQ|SmJs8GcpBbW#y1HATnY^7RqmQ3pw*|{TSI} z0-SzZOY0I4V$pLWwFY~CQubxFwBkv~$UOO7R@>pgc4temx_kDLz0ZC8VTFj+{Z&|c zv<#h!@#GML%i;O@!YJPPs$%V-Wz|{QQwvEc6drjjy0mx0g1K(6#01irw0lv+-LGXd zW|RerRm1Re^{(l+hLVNr9X>?JwAk&A_v=q1H#eDB*}X{Q%b;hK)e@bEC2jTRs{CG14T2@D?+SloMk&^5iY zCt@@O{RWq(O&_h&DM=$1&j-qO_ZzV68yPjyL|$_lRO@*qg`gOAj+N`k;m;2hZ=B_f z0;s2kC2Bt|34@tp{rvp?4D7Gh?jImL&~2)Qm;^|}(vp6?sO;j6N}|9HOnU(#HWV|6 zxc!Knm}V4*iEwfa+z*dkxz9WIV4Yi(+vqu)9?!_Ozs)s?!BHaA#GJc;0b}cpWBvn} z4a@{F{H%CGwYO`AHs|(Vx3;!AdcXbLpW<_Z_@amfPWVxBg3sU38*S?%cArb5L+!fC z=kSQR5N^zy#kP*tB|*^~P4ux^^pcR%fa^p)J`#FK)^+?@Cy`<=B?NW8yj z4#suVM?6khSS$XdEI?~=E-s}ku}jrRNn7?{MdmOdBp_>hud@s9_&ySA1*T4(dH$ws zQ0(fv5LA31<)}T!z0wtlx=1A4YB`u-pGVHSc!~H@bjZZYOp02G1_xaTMAdh@VaA)# zlh=)nis3ZKwW8$Z=V{E(%D4O`h-4l};#eH~Wcb$#ajNC*|5(Rs z+@DuxnM6vf(>n|WC?}QlY@;)*1%BK&V}qjh_gPsb3U(|!$DuYDY|I$NbW1o-M_s+g z-9Rxyh)u4`qAkbH(&vyvJy;cJSZs^!LG`qw(O=@7wP3=V>Wd}p^80d8vbWs8;Qe%8 zW^;i%Xl~$b7}kd)Zr}uFCa--R(+{s8#Y}elkJT3@bCq><6K#gxs{wKPs=U0<*`d;D zhQ4gXr*dVsR|y)wmjOAx{Uezo>V7-fXX|dfsC%Ktn`BQx{pC)I!vN8S1PK09H)Sw) zXc4R(?w&Xsd_j)p-l;(SHMkb2CZEcNr|8nivKK|%O`BJ}_5zGJJ(j+sb;l|AEW^R) zerr`zT9EHI%-|oQp%OM*LB-de0~}3>_kZY>cpGo*)cMGjS5{J9@sdqBevePS=p1{- z{cfg;tpNc6ZBhleAN&~o6k!U(jzxpFV8{t014DXG?%lh0fjykr8)_=J#B=Rlz>B+R zkb1PfcbJ$II>*VJX=0D>G7ySQT#w&V4fSO*Ij3+)k3Y%?#rc3n5PoM6%4O`eu#FtD ztiP)he#=~8W4oE`g_4^AJC&}3+`MZ<4Jd2e=L#ATdV2Zy2lmd;UDS0i{tFWw+$Ezq_6R(^dG7K`-IP%-6Js8HOPqiO=ko zxE8tT+)an8mo-c;%I`3?i5_0TJ_G17?XLI9v0gl7n>XaMo>XSqWZ=;{^G)oBwUK_d zbaOY`UdkDV)*M$iZd^Sg@w%rNAYY52NWPVKqy^~by*-o`cAj6}!GXi;$~DlC0k1Q) zz&o~llY-mh0cot#mw)cN0HJ1uQ-Nr_fO;s+{)dxU_6@`sCwv){OhuVbj0Xsre8}!H zIm}l}ZdvF?94!9yWw`CRiKor|4sN^0;_KX>&!eLm;g&~3Y1}(70WVQUflr|Y#y;~U z$pTGcoPPE&>;B&;XMg}@)@aIE*FUt^fGL_eG)tnt+OrJWM&B(f?SD!K1qLef2WXwA zfQn8$O1yuy+11>LHq;S7lRc&E^ZO^!kzbq>aHxkIPbdXs_yi-em5{Wwn<|xR+3Xe1WAwbz8U&FOQ&U;z-Fxf2f6Rnry?lY717PmH+Md3qrVeu8B}NX zy@8v$$I<24V?~d{evtlocrre{zd4H83=kun{kJm)=l+k2r!oIicLszzR{?*$fAi*z zbwcw*wd_`$*F)?MJ0xaqo{0)N_{pb<%5#3IIZWJ_s&;h!2VE4&hBsFHo^%wn?0Feo zRXvNhN@Y1Ch?K_Z0`rnk8dvgT1{~hENzA4c9otsy4Gch^^X{TOIa+ikGM|4q+EZu$ zuGp07DjN|e@c2q{9CMCVxzH*;_(J@&zPyuDF#;Kii-AXh*I?||-I?;lUoKKlbdvK) zA4Osa=}P{jkMS;gn!nf?*{AMw)NJUwKDxf27ayFGNO$7wLaz~DKz`+6=IPrtEx2}g zCkeSKp;c)0N)U<=VsaChto^b}m()oENjEcTW{kfbw` z9iT$=RR%$!SKfIiD!hC5?zu+AYpaBY9b^T4!vepG9ju^Cq}IU-1{0TOHPTF`qkMZs zsw24!s@w`Nv9P)=XK!^?4F`FDABC1vBrv7DUAE1sQrZMUdj;*Yy1nVwU@7jLr) z$(8xVKNWGXXkQrfH$zr=MCk^oRNdUlk=jOF+)u_|U0q#XQt}bp#ft4}T}}F-h2RxS z%JYArJDl1#bp?yHQP5y*iHx24eTB`$osP?G!;(Vq?hC%%c{BZB2@Pg+^o&xZum;R~ zu+qE$`i&d(=$Mo+k<#@$ENIe0nC^uTRUZ33*8rosjU}bAW@cG-1*w6;gCjC zr^7ymI2nTb-(z;rVsFSIEB*l`)Jq{4d2IlnuzKzQq3*hbkRBpb*89G?2JW7B?pCvi zwySYQygOOu92SnH(EHX(fngsP7`41I3JV66gRgUV46-i)qxNE3`g;jp_=&RhW;ckO z6A`Z@uQ+UkSCe_P|9(+odCAcMZz4u#@&1<=S}YjYJM{UpyE!};1#VwfqIBKeZ;6HG zcK&scHf025zI^#{RXi5;n4m=o;)_<5SGCjJpxQS#rvo|){X22``!0GIIQ;rTGHGP% z6HKH`jj7~gTDX&DVqt<|sNRZuSpJ)Zo%Tm>fZr`h?FG%!!fq7k9JCec3;@Xt{z1JF z+kGqj4MJ%1|3lh)$7A`w{o@f4vPU+BWQL3~D^X@D8Cls8va_{FW@JT_5g}wGWF~tj zBfE@j+1u|pUDu`F@B99IzW3wt`^O(7*ZDeM$9f*m<9S>lkz|7SikL{N8t(NFQZK3;f3_E_hm-_SvZ#p%e4@v2Nxvg(fQW~Jm;+zTBBjpKChDf~{*_rP$>z~1CIFLoBS%>0Z)*N`Yl=ou@ADjMld$;EY9tgoMypxx^|`#izHe)d`u5 zL|vW~Z*8|hdMI*M-~FJ6;$(@BF6tVf+%M>hAe+a9@FhNe50mA8APl0HI3E`)+45n^ z=oUW9m4fnTStNC>-Isa_oP*QV3=CdP-9k`g-R=)}dVaXRnu5)}nZLh(AlU=Ha>sZb zY2(p&(%y@mzhMAnSC0A4;zE{amzy}{_7v&I68R(|Mgcjfz$)>vvT#tX=X9$?bn6(Z z)_icidK7}*71*fTOfM`yW#hFOgLDk->ewS=yZT}P?{iL+ixWZR9KZOXH>tfFe(D(Z z20|KhYJe#|evn7CU-m8RI|yKa(@oc724@f?fT!RjP5=^lhMvhx6nzVoxZ|BBg)lJs z9KI?Ge+Tl~UcIkw6qVej$X~(+tlccKW=J~NKyA?M))}_Cz^eN*B?;1oaGwtU_q-+Rn)ZN?4&1j8=UFAl%`;C5y9!=!(unNHnt_1DX^w zi|cnqq#$*hIhwwAIaB%ON5}D!#(AyOE70(mMP7e_O?*{VRjoX;M-rxr>Kg1n@h+>h z^FLHkEMA$BY(JyULHwe1swflSEKJC_O)(0%)XvLpyxe6!T9&XkQWyEE@jejwd8^~d z_4TTXSm{g=7o?_M`tjq3JNXXq71*Vu1|*$U_0$BVy#iIo46k797$VRovb6>OgA3A+ z35`wK4BxIz659CK84upj&|^RN!?#wSd^WOELv44s_QKHTi}VOH<`Ic#`0IUamkM&O zRG9?7w}>Y&{Ng6c3KThzEhwCL6O*JIBhsFsC3Jh>Q(>%>hc?hfctErH+o(=cl)wcJ zrKnd^KXm|tHL=9Jm0;X}dNnr&PDaxCJtkVs*nfb?U-^_-(99buz@ zMzb;OfLac+eSHZ2ayayx>V>;>jw54IPoEO314m(Wu|+x(TB3j|$7uYF@9lX~QwRZ! z-DWN!TfIQJ!-XYO{_I2TyJF<*)P1MVqq3;-By39M7Y;`FieccJmG6A`m1k=5T0&G@ zS8CItY_!w9$~