From 508d527393c7d79e43e770c542397e0ff52da9e3 Mon Sep 17 00:00:00 2001 From: Fabian Seidl <fabian.seidl@h-da.de> Date: Mon, 21 Aug 2023 07:55:38 +0000 Subject: [PATCH] Resolve "Controller/Makefile uses older versions than the one in the top level" See merge request danet/gosdn!513 --- Makefile | 153 +++-------------------------------- controller/Makefile | 14 ++-- makefiles/build/Makefile | 37 +++++++++ makefiles/ci/Makefile | 5 ++ makefiles/clab/Makefile | 31 +++++++ makefiles/container/Makefile | 24 ++++++ makefiles/generate/Makefile | 44 ++++++++++ 7 files changed, 159 insertions(+), 149 deletions(-) create mode 100644 makefiles/build/Makefile create mode 100644 makefiles/ci/Makefile create mode 100644 makefiles/clab/Makefile create mode 100644 makefiles/container/Makefile create mode 100644 makefiles/generate/Makefile diff --git a/Makefile b/Makefile index b8149d287..515245e72 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,7 @@ GOSDN_PRG := $(MAKEFILE_DIR)$(TOOLS_DIR) GOPATH := $(~/go) GOBIN := $(GOSDN_PRG) SCRIPTS_DIR := /scripts +MAKEFILE_SUBDIR := ./makefiles GOCMD=go GOBUILD=$(GOCMD) build @@ -22,6 +23,14 @@ MOCKERY_VERSION=v2.20.0 YGOT_GENERATOR_VERSION=v0.27.0 YGOT_GENERATOR_GENERATOR_VERSION=v0.0.4 +include $(MAKEFILE_SUBDIR)/build/Makefile +include $(MAKEFILE_SUBDIR)/ci/Makefile +include $(MAKEFILE_SUBDIR)/clab/Makefile +include $(MAKEFILE_SUBDIR)/container/Makefile +include $(MAKEFILE_SUBDIR)/generate/Makefile + +.DEFAULT_GOAL := all + all: build pre: @@ -43,162 +52,18 @@ install-tools: go install github.com/andresterba/go-ygot-generator-generator@$(YGOT_GENERATOR_GENERATOR_VERSION) @echo Finished installing development tooling -ci-install-tools: - go install gotest.tools/gotestsum@v1.7.0 - -ci-lint: ci-install-tools - golangci-lint run --config .golangci.yml --out-format code-climate - lint: install-tools ./$(TOOLS_DIR)/golangci-lint run --config .golangci.yml | jq lint-fix: install-tools ./$(TOOLS_DIR)/golangci-lint run --config .golangci.yml --fix | jq -generate-controller-mocks: install-tools - ./$(TOOLS_DIR)/mockery --all --output './controller/mocks' --dir './controller/interfaces/' - -generate-yang-models: install-tools - cd models/generated/openconfig &&\ - ../../../$(TOOLS_DIR)/go-ygot-generator-generator config.yaml openconfig.go &&\ - go generate &&\ - cat additions.patch >> yang.go - cd models/generated/arista &&\ - ../../../$(TOOLS_DIR)/go-ygot-generator-generator config.yaml arista.go &&\ - go generate &&\ - cat additions.patch >> yang.go - -generate-csbi-yang-models: install-tools - cd csbi/resources &&\ - ../../$(TOOLS_DIR)/go-ygot-generator-generator config.yaml gostructs.go &&\ - go generate - build: pre build-gosdn build-gosdnc build-plugin-registry build-venv-manager build-arista-routing-engine-app build-hostname-checker-app build-basic-interface-monitoring-app -build-plugins: - for d in ./plugins/examples/*/ ; do\ - d="$${d%*/}";\ - d="$${d##*/}";\ - rm plugin-registry/plugins/$$d/$(PLUGIN_NAME);\ - $(GOBUILD) -o plugin-registry/plugins/$$d/plugin ./plugins/examples/$$d/cmd;\ - cp plugins/examples/$$d/plugin.yaml plugin-registry/plugins/$$d/;\ - zip -r -j plugin-registry/plugins/$$d/$(PLUGIN_NAME) plugin-registry/plugins/$$d/;\ - rm plugin-registry/plugins/$$d/plugin;\ - done - -build-gosdn: pre - $(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/gosdn ./controller/cmd/gosdn - -build-gosdnc: pre - CGO_ENABLED=0 $(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/gosdnc ./cli/ - -build-orchestrator: pre - CGO_ENABLED=0 $(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/orchestrator ./csbi/cmd/csbi/ - -build-plugin-registry: pre - CGO_ENABLED=0 $(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/plugin-registry ./plugin-registry/ - -build-venv-manager: pre - $(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/venv-manager ./applications/venv-manager - -build-arista-routing-engine-app: pre - $(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/arista-routing-engine ./applications/arista-routing-engine - -build-hostname-checker-app: pre - $(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/hostname-checker ./applications/hostname-checker - -build-basic-interface-monitoring-app: pre - $(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/basic-interface-monitoring ./applications/basic-interface-monitoring - -build-ws-events-app: pre - $(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/ws-events ./applications/ws-events - containerize-all: containerize-gosdn containerize-gosdnc containerize-plugin-registry -containerize-gosdn: - docker buildx build --rm -t gosdn --load -f controller/controller.Dockerfile . - -containerize-gosdnc: - docker buildx build --rm -t gosdnc --load -f cli/cli.Dockerfile . - -containerize-venv-manager: - docker buildx build --rm -t venv-manager --load -f applications/venv-manager/venv-manager.Dockerfile . - -containerize-orchestrator: - docker buildx build --rm -t orchestrator --load -f csbi/csbi.Dockerfile . - -containerize-plugin-registry: - docker buildx build --rm -t plugin-registry --load -f plugin-registry/plugin-registry.Dockerfile . - -containerize-arista-routing-engine-app: - docker buildx build --rm -t arista-routing-engine-app -f applications/arista-routing-engine/arista-routing-engine.Dockerfile . - -containerize-hostname-checker-app: - docker buildx build --rm -t hostname-checker-app -f applications/hostname-checker/hostname-checker.Dockerfile . - -containerize-ws-events-app: - docker buildx build --rm -t ws-events-app -f applications/ws-events/ws-events.Dockerfile . - -containerlab-start: create-clab-dir containerize-all generate-all-certs - cd $(CLAB_DIR) &&\ - sudo containerlab deploy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn.clab.yaml - -containerlab-start-reconfigure: create-clab-dir containerize-all generate-all-certs - cd $(CLAB_DIR) &&\ - sudo containerlab deploy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn.clab.yaml --reconfigure - -containerlab-stop: create-clab-dir - cd $(CLAB_DIR) &&\ - sudo containerlab destroy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn.clab.yaml - -containerlab-slim-start: create-clab-dir containerize-all generate-all-certs - cd $(CLAB_DIR) &&\ - sudo containerlab deploy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn_slim.clab.yaml - -containerlab-slim-start-reconfigure: create-clab-dir containerize-all generate-all-certs - cd $(CLAB_DIR) &&\ - sudo containerlab deploy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn_slim.clab.yaml --reconfigure - -containerlab-slim-start-configured: containerlab-slim-start - .$(SCRIPTS_DIR)/setup-clab-slim.sh -s true - -containerlab-slim-stop: create-clab-dir - cd $(CLAB_DIR) &&\ - sudo containerlab destroy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn_slim.clab.yaml - -containerlab-graph: create-clab-dir - cd $(CLAB_DIR) &&\ - sudo containerlab graph --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn.clab.yaml - generate-all-certs: pre generate-root-ca generate-gosdn-certs generate-gnmi-target-certs -generate-root-ca: pre - if [ ! -d "$(BUILD_ARTIFACTS_PATH)/ssl" ]; then \ - mkdir -p $(BUILD_ARTIFACTS_PATH)/ssl; \ - openssl req -x509 -nodes -days 365 -newkey rsa:4096 -subj '/C=DE/O=H_DA/CN=ROOT_CA' \ - -keyout $(BUILD_ARTIFACTS_PATH)/ssl/ca.key -out $(BUILD_ARTIFACTS_PATH)/ssl/ca.crt; \ - fi - -generate-gosdn-certs: pre - if [ ! -d "$(BUILD_ARTIFACTS_PATH)/ssl/gosdn" ]; then \ - mkdir -p $(BUILD_ARTIFACTS_PATH)/ssl/gosdn/private; \ - mkdir -p $(BUILD_ARTIFACTS_PATH)/ssl/gosdn/certs; \ - openssl req -x509 -nodes -days 365 -newkey rsa:4096 -subj '/C=DE/O=H_DA/CN=GOSDN' \ - -CA $(BUILD_ARTIFACTS_PATH)/ssl/ca.crt -CAkey $(BUILD_ARTIFACTS_PATH)/ssl/ca.key \ - -keyout $(BUILD_ARTIFACTS_PATH)/ssl/gosdn/private/gosdn-selfsigned.key -out $(BUILD_ARTIFACTS_PATH)/ssl/gosdn/certs/gosdn-selfsigned.crt; \ - cp $(BUILD_ARTIFACTS_PATH)/ssl/ca.crt $(BUILD_ARTIFACTS_PATH)/ssl/gosdn/ca.crt; \ - fi - -generate-gnmi-target-certs: pre generate-root-ca - if [ ! -d "$(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target" ]; then \ - mkdir -p $(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target/private; \ - mkdir -p $(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target/certs; \ - openssl req -x509 -nodes -days 365 -newkey rsa:4096 -subj '/C=DE/O=H_DA/CN=TARGET' \ - -CA $(BUILD_ARTIFACTS_PATH)/ssl/ca.crt -CAkey $(BUILD_ARTIFACTS_PATH)/ssl/ca.key \ - -keyout $(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target/private/gnmi-target-selfsigned.key -out $(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target/certs/gnmi-target-selfsigned.crt; \ - cp $(BUILD_ARTIFACTS_PATH)/ssl/ca.crt $(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target/ca.crt; \ - fi - shell-gosdn: docker exec -it clab-gosdn_csbi_arista_base-gosdn bash diff --git a/controller/Makefile b/controller/Makefile index 0c94ce65b..d558d5c61 100644 --- a/controller/Makefile +++ b/controller/Makefile @@ -9,19 +9,23 @@ GOBUILD=$(GOCMD) build GOCLEAN=$(GOCMD) clean BINARY_NAME=gosdn +# Tool Vesions +GOTESTSUM_VERSION=v1.8.1 +MOCKERY_VERSION=v2.20.0 +GOCOVER_COBERTURA=v1.2.0 + all: build install-tools: @echo Install development tooling mkdir -p $(GOSDN_PRG) - go install gotest.tools/gotestsum@v1.7.0 - go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.51.2 - go install github.com/vektra/mockery/v2@v2.14.0 + go install gotest.tools/gotestsum@$(GOTESTSUM_VERSION) + go install github.com/vektra/mockery/v2@$(MOCKERY_VERSION) @echo Finished installing development tooling ci-install-tools: - go install gotest.tools/gotestsum@v1.7.0 - go install github.com/boumenot/gocover-cobertura@v1.2.0 + go install gotest.tools/gotestsum@$(GOTESTSUM_VERSION) + go install github.com/boumenot/gocover-cobertura@$(GOCOVER_COBERTURA) build: $(GOBUILD) -o $(BINARY_NAME) ./cmd/gosdn diff --git a/makefiles/build/Makefile b/makefiles/build/Makefile new file mode 100644 index 000000000..cf633e0c8 --- /dev/null +++ b/makefiles/build/Makefile @@ -0,0 +1,37 @@ +build-plugins: + for d in ./plugins/examples/*/ ; do\ + d="$${d%*/}";\ + d="$${d##*/}";\ + rm plugin-registry/plugins/$$d/$(PLUGIN_NAME);\ + $(GOBUILD) -o plugin-registry/plugins/$$d/plugin ./plugins/examples/$$d/cmd;\ + cp plugins/examples/$$d/plugin.yaml plugin-registry/plugins/$$d/;\ + zip -r -j plugin-registry/plugins/$$d/$(PLUGIN_NAME) plugin-registry/plugins/$$d/;\ + rm plugin-registry/plugins/$$d/plugin;\ + done + +build-gosdn: pre + $(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/gosdn ./controller/cmd/gosdn + +build-gosdnc: pre + CGO_ENABLED=0 $(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/gosdnc ./cli/ + +build-orchestrator: pre + CGO_ENABLED=0 $(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/orchestrator ./csbi/cmd/csbi/ + +build-plugin-registry: pre + CGO_ENABLED=0 $(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/plugin-registry ./plugin-registry/ + +build-venv-manager: pre + $(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/venv-manager ./applications/venv-manager + +build-arista-routing-engine-app: pre + $(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/arista-routing-engine ./applications/arista-routing-engine + +build-hostname-checker-app: pre + $(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/hostname-checker ./applications/hostname-checker + +build-basic-interface-monitoring-app: pre + $(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/basic-interface-monitoring ./applications/basic-interface-monitoring + +build-ws-events-app: pre + $(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/ws-events ./applications/ws-events diff --git a/makefiles/ci/Makefile b/makefiles/ci/Makefile new file mode 100644 index 000000000..dae623fa2 --- /dev/null +++ b/makefiles/ci/Makefile @@ -0,0 +1,5 @@ +ci-install-tools: + go install gotest.tools/gotestsum@$(GOTESTSUM_VERSION) + +ci-lint: ci-install-tools + golangci-lint run --config .golangci.yml --out-format code-climate diff --git a/makefiles/clab/Makefile b/makefiles/clab/Makefile new file mode 100644 index 000000000..b5a7f3957 --- /dev/null +++ b/makefiles/clab/Makefile @@ -0,0 +1,31 @@ + +containerlab-start: create-clab-dir containerize-all generate-all-certs + cd $(CLAB_DIR) &&\ + sudo containerlab deploy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn.clab.yaml + +containerlab-start-reconfigure: create-clab-dir containerize-all generate-all-certs + cd $(CLAB_DIR) &&\ + sudo containerlab deploy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn.clab.yaml --reconfigure + +containerlab-stop: create-clab-dir + cd $(CLAB_DIR) &&\ + sudo containerlab destroy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn.clab.yaml + +containerlab-slim-start: create-clab-dir containerize-all generate-all-certs + cd $(CLAB_DIR) &&\ + sudo containerlab deploy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn_slim.clab.yaml + +containerlab-slim-start-reconfigure: create-clab-dir containerize-all generate-all-certs + cd $(CLAB_DIR) &&\ + sudo containerlab deploy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn_slim.clab.yaml --reconfigure + +containerlab-slim-start-configured: containerlab-slim-start + .$(SCRIPTS_DIR)/setup-clab-slim.sh -s true + +containerlab-slim-stop: create-clab-dir + cd $(CLAB_DIR) &&\ + sudo containerlab destroy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn_slim.clab.yaml + +containerlab-graph: create-clab-dir + cd $(CLAB_DIR) &&\ + sudo containerlab graph --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn.clab.yaml diff --git a/makefiles/container/Makefile b/makefiles/container/Makefile new file mode 100644 index 000000000..34b1e740e --- /dev/null +++ b/makefiles/container/Makefile @@ -0,0 +1,24 @@ + +containerize-gosdn: + docker buildx build --rm -t gosdn --load -f controller/controller.Dockerfile . + +containerize-gosdnc: + docker buildx build --rm -t gosdnc --load -f cli/cli.Dockerfile . + +containerize-venv-manager: + docker buildx build --rm -t venv-manager --load -f applications/venv-manager/venv-manager.Dockerfile . + +containerize-orchestrator: + docker buildx build --rm -t orchestrator --load -f csbi/csbi.Dockerfile . + +containerize-plugin-registry: + docker buildx build --rm -t plugin-registry --load -f plugin-registry/plugin-registry.Dockerfile . + +containerize-arista-routing-engine-app: + docker buildx build --rm -t arista-routing-engine-app -f applications/arista-routing-engine/arista-routing-engine.Dockerfile . + +containerize-hostname-checker-app: + docker buildx build --rm -t hostname-checker-app -f applications/hostname-checker/hostname-checker.Dockerfile . + +containerize-ws-events-app: + docker buildx build --rm -t ws-events-app -f applications/ws-events/ws-events.Dockerfile . diff --git a/makefiles/generate/Makefile b/makefiles/generate/Makefile new file mode 100644 index 000000000..c7b383473 --- /dev/null +++ b/makefiles/generate/Makefile @@ -0,0 +1,44 @@ +generate-controller-mocks: install-tools + ./$(TOOLS_DIR)/mockery --all --output './controller/mocks' --dir './controller/interfaces/' + +generate-yang-models: install-tools + cd models/generated/openconfig &&\ + ../../../$(TOOLS_DIR)/go-ygot-generator-generator config.yaml openconfig.go &&\ + go generate &&\ + cat additions.patch >> yang.go + cd models/generated/arista &&\ + ../../../$(TOOLS_DIR)/go-ygot-generator-generator config.yaml arista.go &&\ + go generate &&\ + cat additions.patch >> yang.go + +generate-csbi-yang-models: install-tools + cd csbi/resources &&\ + ../../$(TOOLS_DIR)/go-ygot-generator-generator config.yaml gostructs.go &&\ + go generate + +generate-root-ca: pre + if [ ! -d "$(BUILD_ARTIFACTS_PATH)/ssl" ]; then \ + mkdir -p $(BUILD_ARTIFACTS_PATH)/ssl; \ + openssl req -x509 -nodes -days 365 -newkey rsa:4096 -subj '/C=DE/O=H_DA/CN=ROOT_CA' \ + -keyout $(BUILD_ARTIFACTS_PATH)/ssl/ca.key -out $(BUILD_ARTIFACTS_PATH)/ssl/ca.crt; \ + fi + +generate-gosdn-certs: pre + if [ ! -d "$(BUILD_ARTIFACTS_PATH)/ssl/gosdn" ]; then \ + mkdir -p $(BUILD_ARTIFACTS_PATH)/ssl/gosdn/private; \ + mkdir -p $(BUILD_ARTIFACTS_PATH)/ssl/gosdn/certs; \ + openssl req -x509 -nodes -days 365 -newkey rsa:4096 -subj '/C=DE/O=H_DA/CN=GOSDN' \ + -CA $(BUILD_ARTIFACTS_PATH)/ssl/ca.crt -CAkey $(BUILD_ARTIFACTS_PATH)/ssl/ca.key \ + -keyout $(BUILD_ARTIFACTS_PATH)/ssl/gosdn/private/gosdn-selfsigned.key -out $(BUILD_ARTIFACTS_PATH)/ssl/gosdn/certs/gosdn-selfsigned.crt; \ + cp $(BUILD_ARTIFACTS_PATH)/ssl/ca.crt $(BUILD_ARTIFACTS_PATH)/ssl/gosdn/ca.crt; \ + fi + +generate-gnmi-target-certs: pre generate-root-ca + if [ ! -d "$(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target" ]; then \ + mkdir -p $(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target/private; \ + mkdir -p $(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target/certs; \ + openssl req -x509 -nodes -days 365 -newkey rsa:4096 -subj '/C=DE/O=H_DA/CN=TARGET' \ + -CA $(BUILD_ARTIFACTS_PATH)/ssl/ca.crt -CAkey $(BUILD_ARTIFACTS_PATH)/ssl/ca.key \ + -keyout $(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target/private/gnmi-target-selfsigned.key -out $(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target/certs/gnmi-target-selfsigned.crt; \ + cp $(BUILD_ARTIFACTS_PATH)/ssl/ca.crt $(BUILD_ARTIFACTS_PATH)/ssl/gnmi-target/ca.crt; \ + fi -- GitLab