Skip to content
Snippets Groups Projects
Commit 3cc29e90 authored by Fabian Seidl's avatar Fabian Seidl
Browse files

govulncheck ./...govulncheck ./...

parents 2f618417 6a8487fa
No related branches found
No related tags found
1 merge request!370Resolve "Error handling in event publishing via entity services could be improved"
Pipeline #116264 passed
Showing
with 386 additions and 122 deletions
...@@ -6,8 +6,9 @@ mocks ...@@ -6,8 +6,9 @@ mocks
test test
clab-gosdn_csbi_arista_base clab-gosdn_csbi_arista_base
.cobra.yaml .cobra.yaml
.dockeringore .dockerignore
.gitlab-ci.yaml .gitlab-ci.yaml
ARCHITECTURE.md ARCHITECTURE.md
CONTRIBUTING.md CONTRIBUTING.md
README.md README.md
scripts
...@@ -51,3 +51,9 @@ stores/*.json ...@@ -51,3 +51,9 @@ stores/*.json
# gosdn # gosdn
configs/gosdn.toml configs/gosdn.toml
applications/venv-manager/*.clab.yaml
#debug
__debug_bin
variables: variables:
GOSDN_IMAGE: "${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA}" GOSDN_IMAGE: "${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA}"
GOSDN_TESTING_IMAGE: "${CI_REGISTRY_IMAGE}:testing_${CI_COMMIT_SHA}" GOSDN_TESTING_IMAGE: "${CI_REGISTRY_IMAGE}:testing_${CI_COMMIT_SHA}"
CEOS_IMAGE: "${CI_PCONTAINERS_REGISTRY_IMAGE}/ceos:4.28.0F" CEOS_IMAGE: "${CI_PCONTAINERS_REGISTRY_IMAGE}/ceos:4.28.2F"
GOLANG_VERSION: "1.19" GOLANG_VERSION: "1.19"
workflow: workflow:
...@@ -17,7 +17,8 @@ stages: ...@@ -17,7 +17,8 @@ stages:
- .post - .post
include: include:
- local: "/.gitlab/ci/.build-container.yml" - local: "/.gitlab/ci/.build-container-images.yml"
- local: "/.gitlab/ci/.build-binaries.yml"
- local: "/.gitlab/ci/.code-quality-ci.yml" - local: "/.gitlab/ci/.code-quality-ci.yml"
- local: "/.gitlab/ci/.security-and-compliance-ci.yml" - local: "/.gitlab/ci/.security-and-compliance-ci.yml"
- local: "/.gitlab/ci/.test.yml" - local: "/.gitlab/ci/.test.yml"
......
.build-binaries: &build-binaries
stage: build
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/golang:$GOLANG_VERSION
variables:
TAG: $CI_COMMIT_SHA
needs: []
build-all-binaries:
script:
- make build
artifacts:
paths:
- artifacts/gosdn
- artifacts/gosdnc
- artifacts/orchestrator
- artifacts/venv-manager
expire_in: 1 week
<<: *build-binaries
...@@ -6,14 +6,14 @@ ...@@ -6,14 +6,14 @@
TAG: $CI_COMMIT_SHA TAG: $CI_COMMIT_SHA
needs: [] needs: []
build-testing-image: build-controller-testing-image:
script: script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker buildx build -t "$GOSDN_TESTING_IMAGE" -f "${CI_PROJECT_DIR}/controller/controller.Dockerfile" --target "builder" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "BUILDARGS=$BUILDARGS" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" . - docker buildx build -t "$GOSDN_TESTING_IMAGE" -f "${CI_PROJECT_DIR}/controller/controller.Dockerfile" --target "builder" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "BUILDARGS=$BUILDARGS" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" .
- docker push "$GOSDN_TESTING_IMAGE" - docker push "$GOSDN_TESTING_IMAGE"
<<: *build <<: *build
build-image: build-controller-image:
script: script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker buildx build -t "$CI_REGISTRY_IMAGE:$TAG" -f "${CI_PROJECT_DIR}/controller/controller.Dockerfile" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "BUILDARGS=$BUILDARGS" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" . - docker buildx build -t "$CI_REGISTRY_IMAGE:$TAG" -f "${CI_PROJECT_DIR}/controller/controller.Dockerfile" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "BUILDARGS=$BUILDARGS" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" .
...@@ -23,3 +23,27 @@ build-image: ...@@ -23,3 +23,27 @@ build-image:
- docker tag "$CI_REGISTRY_IMAGE:$TAG" "$CI_REGISTRY_IMAGE:$NEWTAG" - docker tag "$CI_REGISTRY_IMAGE:$TAG" "$CI_REGISTRY_IMAGE:$NEWTAG"
- docker push "$CI_REGISTRY_IMAGE:$NEWTAG" - docker push "$CI_REGISTRY_IMAGE:$NEWTAG"
<<: *build <<: *build
build-cli-image:
script:
- CLI_IMAGE_NAME="${CI_REGISTRY_IMAGE}/gosdnc"
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker buildx build -t "$CLI_IMAGE_NAME:$TAG" -f "${CI_PROJECT_DIR}/cli/cli.Dockerfile" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "BUILDARGS=$BUILDARGS" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" .
- docker push "$CLI_IMAGE_NAME:$TAG"
# replace all slashes in the tag with hyphen, because slashes are not allowed in tags
- NEWTAG=${CI_COMMIT_BRANCH//\//-}
- docker tag "$CLI_IMAGE_NAME:$TAG" "$CLI_IMAGE_NAME:$NEWTAG"
- docker push "$CLI_IMAGE_NAME:$NEWTAG"
<<: *build
build-venv-manager-image:
script:
- VENV_MANAGER_IMAGE_NAME="${CI_REGISTRY_IMAGE}/venv-manager"
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker buildx build -t "$VENV_MANAGER_IMAGE_NAME:$TAG" -f "${CI_PROJECT_DIR}/applications/venv-manager/venv-manager.Dockerfile" --build-arg "GOLANG_VERSION=$GOLANG_VERSION" --build-arg "GITLAB_PROXY=${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/" .
- docker push "$VENV_MANAGER_IMAGE_NAME:$TAG"
# replace all slashes in the tag with hyphen, because slashes are not allowed in tags
- NEWTAG=${CI_COMMIT_BRANCH//\//-}
- docker tag "$VENV_MANAGER_IMAGE_NAME:$TAG" "$VENV_MANAGER_IMAGE_NAME:$NEWTAG"
- docker push "$VENV_MANAGER_IMAGE_NAME:$NEWTAG"
<<: *build
...@@ -11,3 +11,11 @@ code-quality: ...@@ -11,3 +11,11 @@ code-quality:
paths: paths:
- gl-code-quality-report.json - gl-code-quality-report.json
needs: [] needs: []
code-vulnerability:
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/golang:1.19-bullseye
stage: analyze
script:
- go install golang.org/x/vuln/cmd/govulncheck@latest
- govulncheck ./...
needs: []
...@@ -7,7 +7,7 @@ containerlab-deploy: ...@@ -7,7 +7,7 @@ containerlab-deploy:
stage: integration-test stage: integration-test
tags: tags:
- shell-containerlab - shell-containerlab
needs: ["build-image", "build-testing-image"] needs: ["build-controller-image", "build-controller-testing-image"]
script: script:
- firstOctet=$(python3 ${CI_PROJECT_DIR}/.gitlab/ci/scripts/generate_octet.py $CI_COMMIT_SHA) - firstOctet=$(python3 ${CI_PROJECT_DIR}/.gitlab/ci/scripts/generate_octet.py $CI_COMMIT_SHA)
- secondOctet=$(python3 ${CI_PROJECT_DIR}/.gitlab/ci/scripts/generate_octet.py $CI_PIPELINE_ID) - secondOctet=$(python3 ${CI_PROJECT_DIR}/.gitlab/ci/scripts/generate_octet.py $CI_PIPELINE_ID)
......
...@@ -37,4 +37,4 @@ container_scanning: ...@@ -37,4 +37,4 @@ container_scanning:
DOCKER_USER: "${CI_REGISTRY_USER}" DOCKER_USER: "${CI_REGISTRY_USER}"
DOCKER_PASSWORD: "${CI_REGISTRY_PASSWORD}" DOCKER_PASSWORD: "${CI_REGISTRY_PASSWORD}"
needs: needs:
- build-image - build-controller-image
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
coverage_format: cobertura coverage_format: cobertura
path: ./controller/coverage.xml path: ./controller/coverage.xml
needs: needs:
- build-testing-image - build-controller-testing-image
unit-test: unit-test:
script: script:
......
...@@ -12,6 +12,7 @@ run: ...@@ -12,6 +12,7 @@ run:
- models/generated/openconfig - models/generated/openconfig
- forks/ - forks/
- clab-gosdn_csbi_arista_base/ - clab-gosdn_csbi_arista_base/
- models/generated/arista
skip-dirs-default: true skip-dirs-default: true
skip-files: skip-files:
- http.go - http.go
......
...@@ -52,7 +52,7 @@ generate-csbi-yang-models: install-tools ...@@ -52,7 +52,7 @@ generate-csbi-yang-models: install-tools
../../$(TOOLS_DIR)/go-ygot-generator-generator config.yaml gostructs.go &&\ ../../$(TOOLS_DIR)/go-ygot-generator-generator config.yaml gostructs.go &&\
go generate go generate
build: pre build-gosdn build-gosdnc build-orchestrator build: pre build-gosdn build-gosdnc build-orchestrator build-venv-manager
build-gosdn: pre build-gosdn: pre
$(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/gosdn ./controller/cmd/gosdn $(GOBUILD) -trimpath -o $(BUILD_ARTIFACTS_PATH)/gosdn ./controller/cmd/gosdn
...@@ -63,6 +63,9 @@ build-gosdnc: pre ...@@ -63,6 +63,9 @@ build-gosdnc: pre
build-orchestrator: pre build-orchestrator: pre
CGO_ENABLED=0 $(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/orchestrator ./csbi/cmd/csbi/ CGO_ENABLED=0 $(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/orchestrator ./csbi/cmd/csbi/
build-venv-manager: pre
$(GOBUILD) -o $(BUILD_ARTIFACTS_PATH)/venv-manager ./applications/venv-manager
containerize-all: containerize-gosdn containerize-gosdnc containerize-orchestrator containerize-target containerize-all: containerize-gosdn containerize-gosdnc containerize-orchestrator containerize-target
containerize-gosdn: containerize-gosdn:
...@@ -71,6 +74,9 @@ containerize-gosdn: ...@@ -71,6 +74,9 @@ containerize-gosdn:
containerize-gosdnc: containerize-gosdnc:
docker buildx build --rm -t gosdnc --load -f cli/cli.Dockerfile . 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: containerize-orchestrator:
docker buildx build --rm -t orchestrator --load -f csbi/csbi.Dockerfile . docker buildx build --rm -t orchestrator --load -f csbi/csbi.Dockerfile .
......
This diff is collapsed.
...@@ -1724,6 +1724,9 @@ ...@@ -1724,6 +1724,9 @@
}, },
"model": { "model": {
"type": "string" "type": "string"
},
"transportAddress": {
"type": "string"
} }
} }
}, },
......
...@@ -4,8 +4,8 @@ deps: ...@@ -4,8 +4,8 @@ deps:
- remote: buf.build - remote: buf.build
owner: googleapis owner: googleapis
repository: googleapis repository: googleapis
commit: 49efd42335044044ad451cf2a73aeb35 commit: 8d7204855ec14631a499bd7393ce1970
- remote: buf.build - remote: buf.build
owner: grpc-ecosystem owner: grpc-ecosystem
repository: grpc-gateway repository: grpc-gateway
commit: 00116f302b12478b85deb33b734e026c commit: bc28b723cd774c32b6fbc77621518765
...@@ -58,6 +58,7 @@ message Device { ...@@ -58,6 +58,7 @@ message Device {
string id = 1; string id = 1;
string name = 2; string name = 2;
string model = 3; string model = 3;
string transportAddress = 4;
} }
message AddDeviceConfiguration { message AddDeviceConfiguration {
......
# venv-manager
This application aids in building a digital twin of your real network.
It takes all the information necessary from the goSDN controller to build a topology file for Containerlab, where you can then start a virtual environment and use goSDN to manage it.
## usage
Simply use the command with the following flags:
```bash
./venv-manager --controller "controller-url" --file "output-filename" --registry "registry-url"
```
For help:
```bash
./venv-manager --help
```
package containerlab
// Management represents the management part for containerlab.
type Management struct {
Network string `yaml:"network,omitempty"`
Ipv4Subnet string `yaml:"ipv4_subnet,omitempty"`
Ipv6Subnet string `yaml:"ipv6_subnet,omitempty"`
}
// Link represents a link for containerlab.
type Link struct {
Endpoints [2]string `yaml:"endpoints"`
}
// Node represent a node for containerlab.
type Node struct {
Kind string `yaml:"kind"`
Image string `yaml:"image"`
MgmtIpv4 string `yaml:"mgmt_ipv4"`
}
// Topology represent a topology for containerlab.
type Topology struct {
Nodes map[string]Node `yaml:"nodes"`
Links []Link `yaml:"links"`
}
// YamlStruct represents the format for containerlab yaml.
type YamlStruct struct {
Name string `yaml:"name"`
Mgmt Management `yaml:"mgmt"`
Topology Topology `yaml:"topology"`
}
package link
import (
"code.fbi.h-da.de/danet/gosdn/applications/venv-manager/node"
"code.fbi.h-da.de/danet/gosdn/applications/venv-manager/port"
)
// Link is a representation of a physical or virtual link between two nodes and their ports.
type Link struct {
ID string
Name string
SourceNode *node.Node
TargetNode *node.Node
SourcePort *port.Port
TargetPort *port.Port
}
// GetLinkAsSliceOfStrings returns the link as a slice of strings for yaml representation.
func (l *Link) GetLinkAsSliceOfStrings() [2]string {
return [2]string{l.SourceNode.Name + ":" + l.SourcePort.Name, l.TargetNode.Name + ":" + l.TargetPort.Name}
}
package main
import (
"flag"
"fmt"
"os"
venvmanager "code.fbi.h-da.de/danet/gosdn/applications/venv-manager/venv-manager"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
)
func main() {
var dialConnectionURL string
var yamlFilepath string
var customContainerRegistryURL string
dialOption := grpc.WithTransportCredentials(insecure.NewCredentials())
flag.StringVar(&dialConnectionURL, "controller", "localhost:55055", "")
flag.StringVar(&yamlFilepath, "file", "venv.clab.yaml", "")
flag.StringVar(&customContainerRegistryURL, "registry", "", "")
// Define own output of --help and parsing error, as some library also uses the flags library and adds there flags to ours, which is not intended.
flag.Usage = func() {
fmt.Printf("Usable flags of the venv-manager:\n\n")
fmt.Println("--controller string\n\t Controller URL and Port. (Default: 'localhost:55055')")
fmt.Println("--file string\n\t Filename of the resulting topology file. (Default: 'venv.clab.yaml')")
fmt.Println("--registry string\n\t URL of the container registry to use. Keep in mind that cEOS images are not available on dockerhub. (Default: dockerhub)")
fmt.Println("--help\n\t Shows this help screen.")
}
flag.Parse()
fmt.Println("I will try to connect to goSDN located at", dialConnectionURL)
venvManager := venvmanager.NewVenvManager(dialConnectionURL, dialOption, yamlFilepath, customContainerRegistryURL)
err := venvManager.TestConnection()
if err != nil {
fmt.Println(err)
fmt.Println("Can't reach controller, exiting.")
os.Exit(1)
}
fmt.Println("Connection successful!")
fmt.Println("Generating file...")
err = venvManager.CreateTopologyFile()
if err != nil {
fmt.Println(err)
fmt.Println("An error occurred, exiting.")
os.Exit(1)
}
os.Exit(0)
}
package node
import (
"regexp"
"code.fbi.h-da.de/danet/gosdn/models/generated/openconfig"
)
// Node is a representation of a network element.
type Node struct {
ID string
Name string
Kind string
Image string
MgmtIpv4 string
YangData openconfig.Device
}
// GetID gets the id.
func (n Node) GetID() string {
return n.ID
}
// FillAllFields fills all remaining fields of object with data from YangData.
func (n *Node) FillAllFields(containerRegistryURL string) {
// make switch case here to differentialte between linux, arista, etc
// specific to arista
regex := regexp.MustCompile(`[0-9]+\.[0-9]+\.[0-9][A-Z]`)
dockerTag := string(regex.FindAll([]byte(*n.YangData.Lldp.Config.SystemDescription), 1)[0])
n.Kind = "ceos"
n.Image = containerRegistryURL + n.Kind + ":" + dockerTag
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment