Newer
Older
MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
MAKEFILE_DIR := $(dir $(MAKEFILE_PATH))
TOOLS_DIR:= build-tools
GOSDN_TMP_DIR := /tmp/gosdn
CLAB_DIR := $(GOSDN_TMP_DIR)/clab
GOBIN := $(GOSDN_PRG)
GOCMD=go
GOBUILD=$(GOCMD) build
GOCLEAN=$(GOCMD) clean
BUILD_ARTIFACTS_PATH=artifacts
PLUGIN_NAME= bundled_plugin.zip
# Tool Versions
GOTESTSUM_VERSION=v1.8.1
GOLANGCI_LINT_VERSION=v1.53.3
MOCKERY_VERSION=v2.20.0
YGOT_GENERATOR_VERSION=v0.27.0
YGOT_GENERATOR_GENERATOR_VERSION=v0.0.4
pre:
mkdir -p $(BUILD_ARTIFACTS_PATH)
create-gosdn-tmp-dir:
mkdir -p $(GOSDN_TMP_DIR)
create-clab-dir: create-gosdn-tmp-dir
mkdir -p $(CLAB_DIR)
install-tools:
@echo Install development tooling
mkdir -p $(GOSDN_PRG)
export GOBIN=$(GOSDN_PRG) && go install gotest.tools/gotestsum@$(GOTESTSUM_VERSION) &&\
go install github.com/golangci/golangci-lint/cmd/golangci-lint@$(GOLANGCI_LINT_VERSION) &&\
go install github.com/vektra/mockery/v2@$(MOCKERY_VERSION) &&\
go install github.com/openconfig/ygot/generator@$(YGOT_GENERATOR_VERSION) &&\
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
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
../../../$(TOOLS_DIR)/go-ygot-generator-generator config.yaml openconfig.go &&\
go generate &&\
cat additions.patch >> yang.go
Andre Sterba
committed
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 &&\
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
Malte Bauch
committed
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/
Malte Bauch
committed
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
Andre Sterba
committed
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

Katharina Renk
committed
Malte Bauch
committed
containerize-gosdn:
docker buildx build --rm -t gosdn --load -f controller/controller.Dockerfile .
Malte Bauch
committed
containerize-gosdnc:
docker buildx build --rm -t gosdnc --load -f cli/cli.Dockerfile .
Fabian Seidl
committed
containerize-venv-manager:
docker buildx build --rm -t venv-manager --load -f applications/venv-manager/venv-manager.Dockerfile .
Malte Bauch
committed
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 .
Andre Sterba
committed
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-gnmi-target-certs
cd $(CLAB_DIR) &&\
sudo containerlab deploy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn.clab.yaml
Malte Bauch
committed
containerlab-slim-start: create-clab-dir containerize-all generate-gnmi-target-certs

Katharina Renk
committed
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-gnmi-target-certs

Katharina Renk
committed
cd $(CLAB_DIR) &&\
sudo containerlab deploy --topo $(MAKEFILE_DIR)dev_env_data/clab/gosdn_slim.clab.yaml --reconfigure
containerlab-start-reconfigure: create-clab-dir containerize-all generate-gnmi-target-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
Malte Bauch
committed

Katharina Renk
committed
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-gnmi-target-certs: pre
if [ ! -d "$(BUILD_ARTIFACTS_PATH)/ssl" ]; then \
mkdir -p $(BUILD_ARTIFACTS_PATH)/ssl/private; \
mkdir -p $(BUILD_ARTIFACTS_PATH)/ssl/certs; \
openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout $(BUILD_ARTIFACTS_PATH)/ssl/private/gnmi-target-selfsigned.key -out $(BUILD_ARTIFACTS_PATH)/ssl/certs/gnmi-target-selfsigned.crt; \
fi
shell-gosdn:
docker exec -it clab-gosdn_csbi_arista_base-gosdn bash
Malte Bauch
committed
shell-orchestrator:
docker exec -it clab-gosdn_csbi_arista_base-orchestrator bash
Malte Bauch
committed
start: build-gosdn
./$(BUILD_ARTIFACTS_PATH)/gosdn -l debug --config ./controller/configs/gosdn.toml
start-virt-manager-example: build containerize-plugin-registry
./scripts/manage_virt_env.sh --mode start --topology dev_env_data/clab/basic_two_aristas.yaml --sdnconfig dev_env_data/sdn/basic_two_aristas.json
./scripts/manage_virt_env.sh --mode stop --topology dev_env_data/clab/basic_two_aristas.yaml
start-dev-env: containerize-gosdn containerize-plugin-registry
./scripts/simple-dev-setup.sh --mode start --topology dev_env_data/clab/basic_two_aristas.yaml
stop-dev-env:
./scripts/simple-dev-setup.sh --mode stop --topology dev_env_data/clab/basic_two_aristas.yaml
clean:
$(GOCLEAN)
rm -rf $(BUILD_ARTIFACTS_PATH)