diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a720721820c41bdd318d49dc93302cf295527f0f..78d4fbdd29dfd13411968c8f050bac9b732ed7d7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,11 +1,19 @@ variables: SECURE_ANALYZERS_PREFIX: registry.gitlab.com/gitlab-org/security-products/analyzers - DOCKER_IMAGE_SHA: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA + DOCKER_IMAGE_SHA: ${CI_REGISTRY_IMAGE}:${CI_COMMIT_SHA} + +workflow: + rules: + - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' + - if: '$CI_PIPELINE_SOURCE == "schedule"' + - if: '$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS && $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH != "develop" && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH' + when: never + - if: '$CI_COMMIT_BRANCH' stages: - .pre - - test - build + - test - apply - integration-test - deploy @@ -20,5 +28,7 @@ include: - local: '/build/ci/.security-and-compliance-ci.yml' - local: '/build/ci/.build-container.yml' - local: '/build/ci/.test.yml' - - local: '/build/ci/.terraform-ci.yml' - - local: '/build/ci/.deploy-k8s.yml' \ No newline at end of file + - local: '/build/ci/.containerlab-ci.yml' + - local: '/build/ci/.uml-autogen-ci.yml' + - local: '/build/ci/.deploy-k8s.yml' + diff --git a/Dockerfile b/Dockerfile index b8a7b9cab2bfcbec7da50a41abda0e0e445167cf..7899ed5adba8c925beae0b040aecdab00009a85f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,18 +1,37 @@ -FROM golang:1.16-buster AS builder +FROM golang:1.16-buster AS installer ARG GITLAB_USER ARG GITLAB_TOKEN ARG BUILDARGS -WORKDIR /src/gosdn -COPY . . + RUN apt-get update && apt-get install -y git RUN git config --global url."https://$GITLAB_USER:$GITLAB_TOKEN@code.fbi.h-da.de".insteadOf "https://code.fbi.h-da.de" +RUN go env -w GOPRIVATE=code.fbi.h-da.de/* + +WORKDIR /src/gosdn +COPY go.* ./ +RUN go mod download + +FROM installer as builder + + +COPY ./api ./api +COPY ./build ./build +COPY ./cmd ./cmd +COPY ./cli ./cli +COPY ./configs ./configs +COPY ./database ./database +COPY ./forks ./forks +COPY ./mocks ./mocks +COPY ./nucleus ./nucleus +COPY ./test ./test + RUN GOOS=linux go build $BUILDARGS ./cmd/gosdn FROM debian:latest EXPOSE 8080 EXPOSE 55055 COPY --from=builder /src/gosdn/gosdn . -COPY --from=builder /src/gosdn/configs ./configs +COPY ./configs ./configs ENTRYPOINT [ "./gosdn" ] CMD [""] diff --git a/README.md b/README.md index 9ae2bb61f864c4628a149bb02628fc3154ea475b..0e3cb09fe334060e1bcdcf95e14ba4492f5f9c95 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# goSDN [](https://code.fbi.h-da.de/cocsn/gosdn/-/commits/master) [](https://code.fbi.h-da.de/cocsn/gosdn/-/commits/master) +# goSDN [](https://code.fbi.h-da.de/danet/gosdn/-/commits/master) [](https://code.fbi.h-da.de/danet/gosdn/-/commits/master) `goSDN` is a prototypical approach to build a model driven multi-vendor SDN controller. @@ -42,7 +42,7 @@ You can install the latest release of `goSDN` locally using the `go get` command ```sh > git config --global url."git@code.fbi.h-da.de:".insteadOf "https://code.fbi.h-da.de" > go env -w GOPRIVATE=code.fbi.h-da.de/cocsn/* -> go get code.fbi.h-da.de/cocsn/gosdn/cmd/gosdn +> go get code.fbi.h-da.de/danet/gosdn/cmd/gosdn ``` To install the development version you need to clone the repo and use `go install` to build and install the binary: @@ -54,7 +54,7 @@ To install the development version you need to clone the repo and use `go instal > git clone git@code.fbi.h-da.de:cocsn/gosdn.git # checkout the develop branch (or any other branch) -> cd $GOPATH/src/code.fbi.h-da.de/cocsn/gosdn +> cd $GOPATH/src/code.fbi.h-da.de/danet/gosdn > git checkout develop > go install ./cmd/gosdn ``` @@ -64,7 +64,7 @@ Now you can start `goSDN` locally using the `gosdn` command or [use the CLI](#us # Getting Started ## k8s -We have an instance of `goSDN` for each the latest master and current develop branch running on the department's k8s cluster. These endpoints can be accessed using the `gosdn cli` command. If anything breaks please file an [issue](https://code.fbi.h-da.de/cocsn/gosdn/-/issues/new). +We have an instance of `goSDN` for each the latest master and current develop branch running on the department's k8s cluster. These endpoints can be accessed using the `gosdn cli` command. If anything breaks please file an [issue](https://code.fbi.h-da.de/danet/gosdn/-/issues/new). ## Using the CLI @@ -78,5 +78,5 @@ The `gosdn cli` command allows you to interact with a running `goSDN` controller | Master | Develop | | ------ | ------ | -| [](https://code.fbi.h-da.de/cocsn/gosdn/-/commits/master) | [](https://code.fbi.h-da.de/cocsn/gosdn/-/commits/develop) | -| [](https://code.fbi.h-da.de/cocsn/gosdn/-/commits/master) | [](https://code.fbi.h-da.de/cocsn/gosdn/-/commits/develop) | +| [](https://code.fbi.h-da.de/danet/gosdn/-/commits/master) | [](https://code.fbi.h-da.de/danet/gosdn/-/commits/develop) | +| [](https://code.fbi.h-da.de/danet/gosdn/-/commits/master) | [](https://code.fbi.h-da.de/danet/gosdn/-/commits/develop) | diff --git a/api/proto/openconfig/enums/enums.proto b/api/proto/openconfig/enums/enums.proto index 9e536252c00769cef506fdd5a9278d66403a00fd..90ae33aefb71a0a8bae15b0d3dbf3d889ec38718 100644 --- a/api/proto/openconfig/enums/enums.proto +++ b/api/proto/openconfig/enums/enums.proto @@ -8,7 +8,7 @@ syntax = "proto3"; package openconfig.enums; -option go_package = "code.fbi.h-da.de/cocsn/gosdn"; +option go_package = "code.fbi.h-da.de/danet/gosdn"; import "github.com/openconfig/ygot/proto/ywrapper/ywrapper.proto"; import "github.com/openconfig/ygot/proto/yext/yext.proto"; diff --git a/api/proto/openconfig/openconfig.pb.go b/api/proto/openconfig/openconfig.pb.go index e52dc21419f2a632f463b6d7af4dbc430d89235c..633d30f09222872df4f1da39689ace99a269d07b 100644 --- a/api/proto/openconfig/openconfig.pb.go +++ b/api/proto/openconfig/openconfig.pb.go @@ -15,7 +15,7 @@ package openconfig import ( - openconfig_interfaces "code.fbi.h-da.de/cocsn/gosdn/api/proto/openconfig/openconfig_interfaces" + openconfig_interfaces "code.fbi.h-da.de/danet/gosdn/api/proto/openconfig/openconfig_interfaces" proto "github.com/golang/protobuf/proto" _ "github.com/openconfig/ygot/proto/yext" _ "github.com/openconfig/ygot/proto/ywrapper" diff --git a/api/proto/openconfig/openconfig.proto b/api/proto/openconfig/openconfig.proto index c2b37bb0386d95ed45beea0ca8ee920049928253..d1df2bc92a1ae6577eb001528ab3723b37c98844 100644 --- a/api/proto/openconfig/openconfig.proto +++ b/api/proto/openconfig/openconfig.proto @@ -8,7 +8,7 @@ syntax = "proto3"; package openconfig; -option go_package = "code.fbi.h-da.de/cocsn/gosdn"; +option go_package = "code.fbi.h-da.de/danet/gosdn"; import "github.com/openconfig/ygot/proto/ywrapper/ywrapper.proto"; diff --git a/api/proto/openconfig/openconfig_interfaces/openconfig_interfaces.pb.go b/api/proto/openconfig/openconfig_interfaces/openconfig_interfaces.pb.go index 26ca33432b263e485c6c7ca994bb76caf72992d6..0d998529954dbcbb1cf4e775ccfa944dcf4e9075 100644 --- a/api/proto/openconfig/openconfig_interfaces/openconfig_interfaces.pb.go +++ b/api/proto/openconfig/openconfig_interfaces/openconfig_interfaces.pb.go @@ -15,7 +15,7 @@ package openconfig_openconfig_interfaces import ( - enums "code.fbi.h-da.de/cocsn/gosdn/api/proto/openconfig/enums" + enums "code.fbi.h-da.de/danet/gosdn/api/proto/openconfig/enums" proto "github.com/golang/protobuf/proto" _ "github.com/openconfig/ygot/proto/yext" ywrapper "github.com/openconfig/ygot/proto/ywrapper" diff --git a/api/proto/openconfig/openconfig_interfaces/openconfig_interfaces.proto b/api/proto/openconfig/openconfig_interfaces/openconfig_interfaces.proto index 82e99cf6a44d260a1b0b115802b4f55a214c9561..b1f3168fc0daeed5af80b526546bae8ebf1ec02a 100644 --- a/api/proto/openconfig/openconfig_interfaces/openconfig_interfaces.proto +++ b/api/proto/openconfig/openconfig_interfaces/openconfig_interfaces.proto @@ -8,7 +8,7 @@ syntax = "proto3"; package openconfig.openconfig_interfaces; -option go_package = "code.fbi.h-da.de/cocsn/gosdn"; +option go_package = "code.fbi.h-da.de/danet/gosdn"; import "github.com/openconfig/ygot/proto/ywrapper/ywrapper.proto"; import "github.com/openconfig/ygot/proto/yext/yext.proto"; diff --git a/build/cd/deploy.go b/build/cd/deploy.go index 7f61e2db03aa957787167eb5112399771b6b33d9..a45eab05e9aa2f515a0f9baff7ec64c3d876e91b 100644 --- a/build/cd/deploy.go +++ b/build/cd/deploy.go @@ -3,12 +3,13 @@ package main import ( "context" "os" + "strconv" - "code.fbi.h-da.de/cocsn/gosdn/nucleus" + "code.fbi.h-da.de/danet/gosdn/nucleus" log "github.com/sirupsen/logrus" + "github.com/spf13/viper" appv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" - netv1 "k8s.io/api/networking/v1beta1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" @@ -16,6 +17,16 @@ import ( "k8s.io/client-go/tools/clientcmd" ) +// GRPC defines the grpc port used by the deployment +const GRPC = 55055 + +// HTTP defines the http port used by the deployment +const HTTP = 8080 + +var service *corev1.Service +var deployment *appv1.Deployment +var config *corev1.ConfigMap + func main() { log.SetFormatter(&log.JSONFormatter{}) kubeconfig, err := clientcmd.BuildConfigFromFlags("https://api.ocp.fbi.h-da.de:6443", "") @@ -37,15 +48,6 @@ func main() { tag = os.Getenv("CI_COMMIT_SHA") } - switch os.Getenv("CI_NIGHTLY") { - case "mainline": - tag = "nightly" - case "develop": - tag = "nightly-develop" - default: - tag = os.Getenv("CI_COMMIT_SHA") - } - switch os.Getenv("K8S_OP") { case "create": if err := create(clientset, tag); err != nil { @@ -55,27 +57,56 @@ func main() { if err := remove(clientset, tag); err != nil { log.Fatal(err) } + case "getenv": + if err := getenv(clientset, tag); err != nil { + log.Fatal(err) + } default: log.Fatal("invalid option") } } +func getenv(clientset *kubernetes.Clientset, tag string) error { + env := "gosdn-" + tag + opts := metav1.GetOptions{} + ctx := context.Background() + service, err := clientset.CoreV1().Services("cocsn").Get(ctx, env, opts) + if err != nil { + return err + } + var ip string + for _, ingress := range service.Status.LoadBalancer.Ingress { + ip = ingress.IP + } + + var port string + for _, p := range service.Spec.Ports { + if p.Name == "grpc" { + port = strconv.Itoa(int(p.NodePort)) + } + } + log.WithFields(log.Fields{ + "ip": ip, + "port": port, + }).Info(env) + viper.Set("GOSDN_TEST_API_ENDPOINT", ip+":"+port) + return viper.SafeWriteConfigAs(".k8s.toml") +} + // nolint func create(clientset *kubernetes.Clientset, tag string) error { env := "gosdn-" + tag - service := createService(env) - ingress := createIngress(env) - config := createConfigMap(env) - deployment := createDeployment(env, tag) + deployment = createDeployment(env, tag) opts := metav1.CreateOptions{} ctx := context.Background() - _, err := clientset.CoreV1().Services("cocsn").Create(ctx, service, opts) + + _, err := clientset.AppsV1().Deployments("cocsn").Create(ctx, deployment, opts) if err != nil { switch err.(type) { case *errors.StatusError: if err.(*errors.StatusError).ErrStatus.Code == 409 { - if err := update(clientset, service, env); err != nil { - return err + if err := update(clientset, deployment, env); err != nil { + log.Error(err) } } else { log.Error(err) @@ -84,25 +115,14 @@ func create(clientset *kubernetes.Clientset, tag string) error { log.Error(err) } } else { - log.Printf("service %v created", service.Name) + log.Printf("deployment %v created", deployment.Name) } - _, err = clientset.NetworkingV1beta1().Ingresses("cocsn").Create(ctx, ingress, opts) + deployment, err = clientset.AppsV1().Deployments("cocsn").Get(ctx, env, metav1.GetOptions{}) if err != nil { - switch err.(type) { - case *errors.StatusError: - if err.(*errors.StatusError).ErrStatus.Code == 409 { - if err := update(clientset, ingress, env); err != nil { - log.Error(err) - } - } else { - log.Error(err) - } - default: - log.Error(err) - } - } else { - log.Printf("ingress %v created", ingress.Name) + log.Error(err) } + + config = createConfigMap(env) _, err = clientset.CoreV1().ConfigMaps("cocsn").Create(ctx, config, opts) if err != nil { switch err.(type) { @@ -120,13 +140,15 @@ func create(clientset *kubernetes.Clientset, tag string) error { } else { log.Printf("configMap %v created", config.Name) } - _, err = clientset.AppsV1().Deployments("cocsn").Create(ctx, deployment, opts) + + service = createService(env) + _, err = clientset.CoreV1().Services("cocsn").Create(ctx, service, opts) if err != nil { switch err.(type) { case *errors.StatusError: if err.(*errors.StatusError).ErrStatus.Code == 409 { - if err := update(clientset, deployment, env); err != nil { - log.Error(err) + if err := update(clientset, service, env); err != nil { + return err } } else { log.Error(err) @@ -135,7 +157,7 @@ func create(clientset *kubernetes.Clientset, tag string) error { log.Error(err) } } else { - log.Printf("deployment %v created", deployment.Name) + log.Printf("service %v created", service.Name) } return nil } @@ -144,9 +166,9 @@ func update(clientset *kubernetes.Clientset, resource metav1.Common, env string) opts := metav1.UpdateOptions{} getOpts := metav1.GetOptions{} ctx := context.Background() - switch resource.(type) { + switch resource := resource.(type) { case *corev1.Service: - service := resource.(*corev1.Service) + service := resource s, err := clientset.CoreV1().Services("cocsn").Get(ctx, env, getOpts) if err != nil { return err @@ -157,20 +179,8 @@ func update(clientset *kubernetes.Clientset, resource metav1.Common, env string) return err } log.Printf("service %v updated", service.Name) - case *netv1.Ingress: - ingress := resource.(*netv1.Ingress) - i, err := clientset.NetworkingV1beta1().Ingresses("cocsn").Get(ctx, env, getOpts) - if err != nil { - return err - } - i.DeepCopyInto(ingress) - _, err = clientset.NetworkingV1beta1().Ingresses("cocsn").Update(ctx, ingress, opts) - if err != nil { - return err - } - log.Printf("ingress %v updated", ingress.Name) case *corev1.ConfigMap: - config := resource.(*corev1.ConfigMap) + config := resource c, err := clientset.CoreV1().ConfigMaps("cocsn").Get(ctx, env+"-config", getOpts) if err != nil { return err @@ -182,7 +192,7 @@ func update(clientset *kubernetes.Clientset, resource metav1.Common, env string) } log.Printf("configMap %v updated", config.Name) case *appv1.Deployment: - deployment := resource.(*appv1.Deployment) + deployment := resource d, err := clientset.AppsV1().Deployments("cocsn").Get(ctx, env, getOpts) if err != nil { return err @@ -221,12 +231,6 @@ func remove(clientset *kubernetes.Clientset, tag string) error { } else { log.Printf("deployment %v deleted", env) } - err = clientset.NetworkingV1beta1().Ingresses("cocsn").Delete(ctx, env, opts) - if err != nil { - log.Error(err) - } else { - log.Printf("ingress %v deleted", env) - } return err } @@ -240,23 +244,30 @@ func createService(environment string) *corev1.Service { Name: environment, Namespace: "cocsn", Labels: map[string]string{"run": environment}, + OwnerReferences: []metav1.OwnerReference{ + { + APIVersion: "v1", + Kind: "Deployment", + Name: environment, + UID: deployment.GetUID(), + }, + }, }, Spec: corev1.ServiceSpec{ Ports: []corev1.ServicePort{ { Name: "http", - Port: 8080, - TargetPort: intstr.IntOrString{IntVal: 8080}, + Port: HTTP, + TargetPort: intstr.IntOrString{IntVal: HTTP}, }, { Name: "grpc", - Port: 55055, - TargetPort: intstr.IntOrString{IntVal: 55055}, + Port: GRPC, + TargetPort: intstr.IntOrString{IntVal: GRPC}, }, }, - Selector: map[string]string{"run": environment}, - Type: "NodePort", - ExternalName: environment + ".apps.ocp.fbi.h-da.de", + Selector: map[string]string{"run": environment}, + Type: "LoadBalancer", }, } } @@ -294,18 +305,18 @@ func createDeployment(environment, hash string) *appv1.Deployment { Containers: []corev1.Container{ { Name: "gosdn", - Image: "registry.code.fbi.h-da.de/cocsn/gosdn:" + hash, + Image: "registry.code.fbi.h-da.de/danet/gosdn:" + hash, Command: nil, Args: nil, WorkingDir: "", Ports: []corev1.ContainerPort{ { Name: "grpc", - ContainerPort: 55055, + ContainerPort: GRPC, }, { Name: "http", - ContainerPort: 8080, + ContainerPort: HTTP, }, }, VolumeMounts: []corev1.VolumeMount{ @@ -318,7 +329,7 @@ func createDeployment(environment, hash string) *appv1.Deployment { Handler: corev1.Handler{ HTTPGet: &corev1.HTTPGetAction{ Path: "/livez", - Port: intstr.IntOrString{IntVal: 8080}, + Port: intstr.IntOrString{IntVal: HTTP}, }, }, InitialDelaySeconds: 5, @@ -328,7 +339,7 @@ func createDeployment(environment, hash string) *appv1.Deployment { Handler: corev1.Handler{ HTTPGet: &corev1.HTTPGetAction{ Path: "/readyz", - Port: intstr.IntOrString{IntVal: 8080}, + Port: intstr.IntOrString{IntVal: HTTP}, }, }, InitialDelaySeconds: 10, @@ -358,41 +369,15 @@ func createConfigMap(env string) *corev1.ConfigMap { }, ObjectMeta: metav1.ObjectMeta{ Name: env + "-config", - }, - Data: map[string]string{"gosdn.toml": "#empty"}, - } -} - -func createIngress(env string) *netv1.Ingress { - return &netv1.Ingress{ - TypeMeta: metav1.TypeMeta{ - Kind: "Ingress", - APIVersion: "v1", - }, - ObjectMeta: metav1.ObjectMeta{ - Name: env, - Namespace: "cocsn", - }, - Spec: netv1.IngressSpec{ - Rules: []netv1.IngressRule{ + OwnerReferences: []metav1.OwnerReference{ { - Host: env + ".apps.ocp.fbi.h-da.de", - IngressRuleValue: netv1.IngressRuleValue{ - HTTP: &netv1.HTTPIngressRuleValue{ - Paths: []netv1.HTTPIngressPath{ - { - Path: "/api", - Backend: netv1.IngressBackend{ - ServiceName: env, - ServicePort: intstr.IntOrString{IntVal: 8080}, - }, - }, - }, - }, - }, + APIVersion: "v1", + Kind: "Deployment", + Name: env, + UID: deployment.GetUID(), }, }, }, - Status: netv1.IngressStatus{}, + Data: map[string]string{"gosdn.toml": "#empty"}, } } diff --git a/build/ci/.build-container.yml b/build/ci/.build-container.yml index 8a092f8a3f88e0b8147052d8032219379d68e294..e1e6107d56fe9a6a1f14491641da3bfd9a72f83a 100644 --- a/build/ci/.build-container.yml +++ b/build/ci/.build-container.yml @@ -1,64 +1,43 @@ - -services: - - docker:19.03.12-dind - variables: DOCKER_TLS_CERTDIR: "/certs" - DOCKER_IMAGE_SHA: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA -.build: &build +build-docker: before_script: - echo "override global before script" - image: docker:19.03.12 stage: build + allow_failure: false + needs: [] tags: - - dind - script: - - > - docker build \ - --build-arg GITLAB_USER=$GO_MODULES_USER \ - --build-arg GITLAB_TOKEN=$GO_MODULES_ACCESS_TOKEN \ - --build-arg BUILDARGS=$BUILDARGS \ - -t $DOCKER_IMAGE_SHA . - - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY - - docker push $DOCKER_IMAGE_SHA - - docker tag $DOCKER_IMAGE_SHA $TAG - - docker push $TAG + - shell-builder -build:develop: - variables: - TAG: $CI_REGISTRY_IMAGE:develop - BUILDARGS: -race rules: - if: $CI_COMMIT_BRANCH == "develop" && $CI_NIGHTLY == null - <<: *build - -build:nightly:develop: - variables: - TAG: $CI_REGISTRY_IMAGE:nightly-develop - BUILDARGS: -race - rules: + variables: + TAG: $CI_REGISTRY_IMAGE:develop + BUILDARGS: -race - if: $CI_NIGHTLY == "develop" - <<: *build - -build:nightly: - variables: - TAG: $CI_REGISTRY_IMAGE:nightly - rules: + variables: + TAG: $CI_REGISTRY_IMAGE:nightly-develop + BUILDARGS: -race - if: $CI_NIGHTLY == "mainline" - <<: *build - -build:merge-request: - variables: - TAG: $CI_REGISTRY_IMAGE:merge-request - BUILDARGS: -race - rules: + variables: + TAG: $CI_REGISTRY_IMAGE:nightly - if: $CI_PIPELINE_SOURCE == "merge_request_event" - <<: *build - -build:latest: - variables: - TAG: $CI_REGISTRY_IMAGE:latest - rules: + variables: + TAG: $CI_REGISTRY_IMAGE:merge-request + BUILDARGS: -race - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_NIGHTLY == null - <<: *build \ No newline at end of file + variables: + TAG: $CI_REGISTRY_IMAGE:latest + - if: '$CI_COMMIT_BRANCH' + variables: + TAG: $CI_REGISTRY_IMAGE:branch + + script: + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + - docker build --build-arg GITLAB_USER=$GO_MODULES_USER --build-arg GITLAB_TOKEN=$GO_MODULES_ACCESS_TOKEN --build-arg BUILDARGS=$BUILDARGS -t $DOCKER_IMAGE_SHA . + - docker push $DOCKER_IMAGE_SHA + - docker tag $DOCKER_IMAGE_SHA $TAG + - docker push $TAG + - docker build --target installer --build-arg GITLAB_USER=$GO_MODULES_USER --build-arg GITLAB_TOKEN=$GO_MODULES_ACCESS_TOKEN --build-arg BUILDARGS=$BUILDARGS -t ${CI_REGISTRY_IMAGE}:testing_${CI_PIPELINE_ID} . + - docker push ${CI_REGISTRY_IMAGE}:testing_${CI_PIPELINE_ID} diff --git a/build/ci/.code-quality-ci.yml b/build/ci/.code-quality-ci.yml index eacbfe4b6495fe32fc80002a5c53b432084b3893..a608dd15e896e417aa25e19ee8657c037aa3e75e 100644 --- a/build/ci/.code-quality-ci.yml +++ b/build/ci/.code-quality-ci.yml @@ -12,4 +12,4 @@ code-quality: reports: codequality: gl-code-quality-report.json paths: - - gl-code-quality-report.json \ No newline at end of file + - gl-code-quality-report.json diff --git a/build/ci/.containerlab-ci.yml b/build/ci/.containerlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..9a06ec3b3aaf9e63b8f9f153126bb46e67b428c4 --- /dev/null +++ b/build/ci/.containerlab-ci.yml @@ -0,0 +1,82 @@ +variables: + CEOS_CONTAINER_IMAGE: "$CI_REGISTRY_IMAGE/ceos:latest" + CLAB_INT1_TEMPLATE: "${CI_PROJECT_DIR}/test/containerlab/int01.clab.yml" + CLAB_NAME: "clab${CI_PIPELINE_IID}" + CLAB_DIR: "/mnt" + + +.containerlab_rules: &containerlab_rules + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'develop') + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + - if: $CI_NIGHTLY + + +containerlab:template: + extends: .containerlab_rules + image: alpine:latest + stage: build + before_script: + - echo "Override global before_script" + script: + - ./build/ci/generate_octet.sh $CI_COMMIT_SHA >> $(pwd)/firstOctet + - ./build/ci/generate_octet.sh $CI_PIPELINE_ID >> $(pwd)/secondOctet + - export firstOctet=$(cat $(pwd)/firstOctet) + - export secondOctet=$(cat $(pwd)/secondOctet) + - export CLAB_MGMT_SUBNET="172.$firstOctet.$secondOctet.0/24" + - | + sed -e "s|@@CEOS_CONTAINER_IMAGE@@|${CEOS_CONTAINER_IMAGE}|g" \ + -e "s|@@GOSDN_CONTAINER_IMAGE@@|${DOCKER_IMAGE_SHA}|g" \ + -e "s|@@CLAB_NAME@@|${CLAB_NAME}|g" \ + -e "s|@@CLAB_MGMT_SUBNET@@|${CLAB_MGMT_SUBNET}|g" \ + ${CLAB_INT1_TEMPLATE} > ${CI_PROJECT_DIR}/${CLAB_NAME}.clab.yml + - cat ${CLAB_NAME}.clab.yml + artifacts: + name: ${CLAB_NAME} + paths: + - ${CI_PROJECT_DIR}/${CLAB_NAME}.clab.yml + +containerlab:deploy: + extends: + - .containerlab_rules + stage: apply + needs: ["containerlab:template", "build-docker"] + tags: + - shell + before_script: + - cd ${CLAB_DIR} + - echo "$CI_REGISTRY_PASSWORD" | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY + - echo $DOCKER_IMAGE_SHA + - docker pull $DOCKER_IMAGE_SHA + - docker pull ${CEOS_CONTAINER_IMAGE} + script: + - sudo containerlab deploy --topo ${CI_PROJECT_DIR}/${CLAB_NAME}.clab.yml --reconfigure + - echo "GOSDN_HTTP_PORT=$(docker inspect -f '{{ (index (index .NetworkSettings.Ports "8080/tcp") 0).HostPort }}' clab-${CLAB_NAME}-gosdn)" >> ${CI_PROJECT_DIR}/build.env + - echo "GOSDN_GRPC_PORT=$(docker inspect -f '{{ (index (index .NetworkSettings.Ports "55055/tcp") 0).HostPort }}' clab-${CLAB_NAME}-gosdn)" >> ${CI_PROJECT_DIR}/build.env + - echo "CEOS1_PORT=$(docker inspect -f '{{ (index (index .NetworkSettings.Ports "6030/tcp") 0).HostPort }}' clab-${CLAB_NAME}-ceos1)" >> ${CI_PROJECT_DIR}/build.env + dependencies: + - containerlab:template + artifacts: + reports: + dotenv: ${CI_PROJECT_DIR}/build.env + +containerlab:destroy: + rules: + - if: $CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'develop') + when: always + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + when: always + - if: $CI_NIGHTLY + when: always + stage: .post + tags: + - shell + before_script: + - cd ${CLAB_DIR} + script: + - sudo containerlab destroy --topo ${CI_PROJECT_DIR}/${CLAB_NAME}.clab.yml + - docker volume rm -f ${CLAB_NAME}-volume + - docker image rm -f ${DOCKER_IMAGE_SHA} + allow_failure: true + dependencies: + - containerlab:template diff --git a/build/ci/.deploy-k8s.yml b/build/ci/.deploy-k8s.yml index 7046b8e9242868e62a8503ad7cc81599603780b4..8f3458606261bff2f0c39a45eacfa20b2062d06f 100644 --- a/build/ci/.deploy-k8s.yml +++ b/build/ci/.deploy-k8s.yml @@ -4,7 +4,6 @@ build:k8s-bot: rules: - if: $CI_COMMIT_BRANCH == "develop" - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - - if: $CI_PIPELINE_SOURCE == "merge_request_event" script: - cd build/cd - go build -o k8s-bot @@ -14,7 +13,9 @@ build:k8s-bot: - build/cd/k8s-bot .deploy: &deploy - image: bitnami/kubectl:latest + image: + name: bitnami/kubectl:latest + entrypoint: [""] before_script: - echo "override global before script" variables: @@ -22,21 +23,11 @@ build:k8s-bot: script: - ./build/cd/k8s-bot -deploy:integration-test: - <<: *deploy - stage: apply - needs: - - job: "build:merge-request" - - job: "build:k8s-bot" - artifacts: true - rules: - - if: $CI_PIPELINE_SOURCE == "merge_request_event" - deploy:develop: <<: *deploy stage: deploy needs: - - job: "build:develop" + - job: "build-docker" - job: "build:k8s-bot" artifacts: true rules: @@ -46,7 +37,7 @@ deploy:latest: <<: *deploy stage: deploy needs: - - job: "build:latest" + - job: "build-docker" - job: "build:k8s-bot" artifacts: true rules: @@ -56,7 +47,7 @@ deploy:nightly:mainline: <<: *deploy stage: deploy needs: - - job: "build:latest" + - job: "build-docker" - job: "build:k8s-bot" artifacts: true rules: @@ -66,23 +57,8 @@ deploy:nightly:develop: <<: *deploy stage: deploy needs: - - job: "build:latest" + - job: "build-docker" - job: "build:k8s-bot" artifacts: true rules: - if: $CI_COMMIT_BRANCH == "develop" && $CI_NIGHTLY == "mainline" - -destroy:k8s: - image: bitnami/kubectl:latest - rules: - - if: $CI_PIPELINE_SOURCE == "merge_request_event" - when: always - before_script: - - echo "override global before script" - stage: .post - variables: - K8S_OP: "delete" - script: - - ./build/cd/k8s-bot - dependencies: - - build:k8s-bot \ No newline at end of file diff --git a/build/ci/.golangci-config/.golangci.yml b/build/ci/.golangci-config/.golangci.yml index 1ca12a130fcef6a4ff882340c5c1f981c0804521..1a2b9183717c0c1a95b8782e15a5189ee2059c10 100644 --- a/build/ci/.golangci-config/.golangci.yml +++ b/build/ci/.golangci-config/.golangci.yml @@ -1,5 +1,5 @@ run: - timeout: 5m + timeout: 10m issues-exit-code: 1 # directories to be ignored by linters skip-dirs: @@ -7,7 +7,7 @@ run: - test skip-dirs-default: true skip-files: - - nucleus/http.go + - http.go # output settings -> code-climate for GitLab output: format: code-climate @@ -26,8 +26,11 @@ linters: disable-all: true enable: - gofmt - - golint + - goimports + - revive - gocyclo - govet issues: exclude-use-default: false + max-issues-per-linter: 0 + max-same-issues: 0 diff --git a/build/ci/.test.yml b/build/ci/.test.yml index 225356ea6656130a0737e4b8b4a7b3ee39bcd5b2..f570e0efa1fb6d0ded192f9808a5bd38dca38f62 100644 --- a/build/ci/.test.yml +++ b/build/ci/.test.yml @@ -1,48 +1,47 @@ -integration-test: - image: golang:1.16 +.integration-test: &integration-test + image: ${CI_REGISTRY_IMAGE}:testing_${CI_PIPELINE_ID} stage: integration-test needs: - - job: "apply" - - job: "deploy:integration-test" + - job: "containerlab:deploy" variables: GOSDN_LOG: "nolog" - GOSDN_TEST_API_ENDPOINT: http://gosdn-$CI_COMMIT_SHA.apps.ocp.fbi.h-da.de/api + GOSDN_TEST_API_ENDPOINT: "141.100.70.178:${GOSDN_GRPC_PORT}" + GOSDN_TEST_ENDPOINT: "141.100.70.178:${CEOS1_PORT}" + GOSDN_TEST_USER: "admin" + GOSDN_TEST_PASSWORD: "admin" rules: - if: $CI_NIGHTLY - when: delayed - start_in: 2 minutes - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH - when: delayed - start_in: 2 minutes - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME != $CI_DEFAULT_BRANCH allow_failure: true - when: delayed - start_in: 2 minutes + +integration-test:nucleus: + <<: *integration-test script: - - go test -race ./test/integration -v -coverprofile=coverage.out + - ${CI_PROJECT_DIR}/build/ci/wait-for-it.sh ${GOSDN_TEST_ENDPOINT} -s -t 180 -- echo "CEOS is up" + - cd ./test/integration + - go test -race -v -run TestGnmi_SetIntegration + - go test -race -v -run TestGnmi_GetIntegration + - go test -race -v -run TestGnmi_SubscribeIntegration + - go test -race -v -run TestGnmi_CapabilitiesIntegration .test: &test - image: golang:1.16 + image: ${CI_REGISTRY_IMAGE}:testing_${CI_PIPELINE_ID} stage: test allow_failure: true variables: GOSDN_LOG: "nolog" + GOSDN_CHANGE_TIMEOUT: "100ms" rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH - if: $CI_NIGHTLY - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH allow_failure: true - after_script: - - go tool cover -func=coverage.out unit-test: script: - - go test -short -race $(go list ./... | grep -v /forks/ | grep -v /api/ | grep -v /mocks ) -v -coverprofile=coverage.out + - go test -short -race $(go list ./... | grep -v /forks/ | grep -v /mocks ) -v -coverprofile=coverage.out + after_script: + - go tool cover -func=coverage.out <<: *test - -http-api-test: - script: - - cd ./nucleus - - go test -race -v -run Test_httpApi -coverprofile=coverage.out - <<: *test \ No newline at end of file diff --git a/build/ci/.uml-autogen-ci.yml b/build/ci/.uml-autogen-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..28ee54f267fe971524185099089dcffde1a07cca --- /dev/null +++ b/build/ci/.uml-autogen-ci.yml @@ -0,0 +1,31 @@ +goplantuml: + image: golang:1.14 + stage: .post + only: + - develop + when: manual + variables: + FILENAME: "home.md" + WIKI_URL: "${CI_SERVER_PROTOCOL}://project_${CI_PROJECT_ID}_bot3:${GOPLANTUML_TOKEN}@${CI_SERVER_HOST}:${CI_SERVER_PORT}/${CI_PROJECT_PATH}.wiki.git" + + script: + # install goplantuml + - go get github.com/jfeliu007/goplantuml/cmd/goplantuml + # remove old wiki folder + - rm -rf "/tmp/${CI_PROJECT_NAME}.wiki" + # clone and move to wiki folder + - cd /tmp + - git clone "${WIKI_URL}" + - cd "${CI_PROJECT_NAME}.wiki" + + - echo '```plantuml' > "$FILENAME" + # run goplantuml + - goplantuml "${CI_PROJECT_DIR}/nucleus/" >> "$FILENAME" + - echo '```' >> "$FILENAME" + + # git commit + - git config user.name "$GITLAB_USER_NAME" + - git config user.email "$GITLAB_USER_EMAIL" + - git add "$FILENAME" + - git commit -m "Auto-updated UML diagram via goplantuml CI job" + - git push origin "HEAD:master" diff --git a/build/ci/generate_octet.bash b/build/ci/generate_octet.bash new file mode 100755 index 0000000000000000000000000000000000000000..8becfc98b0c47025b445f7216ee935d37b2e4c88 --- /dev/null +++ b/build/ci/generate_octet.bash @@ -0,0 +1,13 @@ +#!/bin/bash + +input=$1 +#trailing_backspace=$2 + +hashed_value=$(echo $input | sha256sum | awk '{print $1}' ) + +decimal_value=$((16#$hashed_value)) +decimal_value=${decimal_value/-/} + +octet=$(((decimal_value % 255))) + +echo -n $octet \ No newline at end of file diff --git a/build/ci/generate_octet.sh b/build/ci/generate_octet.sh new file mode 100755 index 0000000000000000000000000000000000000000..6cad5addc30badad963ee2e9d6dfe4f96fdc6aad --- /dev/null +++ b/build/ci/generate_octet.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +input=$1 +#trailing_backspace=$2 + +hashed_value=$(echo $input | sha256sum | awk '{print $1}' ) + +decimal_value=$((16#$hashed_value)) +decimal_value=${decimal_value/-/} + +octet=$(((decimal_value % 255))) + +echo -n $octet \ No newline at end of file diff --git a/build/ci/wait-for-it.sh b/build/ci/wait-for-it.sh new file mode 100755 index 0000000000000000000000000000000000000000..d990e0d364f576ee83cd699707076ca49ad36a4d --- /dev/null +++ b/build/ci/wait-for-it.sh @@ -0,0 +1,182 @@ +#!/usr/bin/env bash +# Use this script to test if a given TCP host/port are available + +WAITFORIT_cmdname=${0##*/} + +echoerr() { if [[ $WAITFORIT_QUIET -ne 1 ]]; then echo "$@" 1>&2; fi } + +usage() +{ + cat << USAGE >&2 +Usage: + $WAITFORIT_cmdname host:port [-s] [-t timeout] [-- command args] + -h HOST | --host=HOST Host or IP under test + -p PORT | --port=PORT TCP port under test + Alternatively, you specify the host and port as host:port + -s | --strict Only execute subcommand if the test succeeds + -q | --quiet Don't output any status messages + -t TIMEOUT | --timeout=TIMEOUT + Timeout in seconds, zero for no timeout + -- COMMAND ARGS Execute command with args after the test finishes +USAGE + exit 1 +} + +wait_for() +{ + if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then + echoerr "$WAITFORIT_cmdname: waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT" + else + echoerr "$WAITFORIT_cmdname: waiting for $WAITFORIT_HOST:$WAITFORIT_PORT without a timeout" + fi + WAITFORIT_start_ts=$(date +%s) + while : + do + if [[ $WAITFORIT_ISBUSY -eq 1 ]]; then + nc -z $WAITFORIT_HOST $WAITFORIT_PORT + WAITFORIT_result=$? + else + (echo -n > /dev/tcp/$WAITFORIT_HOST/$WAITFORIT_PORT) >/dev/null 2>&1 + WAITFORIT_result=$? + fi + if [[ $WAITFORIT_result -eq 0 ]]; then + WAITFORIT_end_ts=$(date +%s) + echoerr "$WAITFORIT_cmdname: $WAITFORIT_HOST:$WAITFORIT_PORT is available after $((WAITFORIT_end_ts - WAITFORIT_start_ts)) seconds" + break + fi + sleep 1 + done + return $WAITFORIT_result +} + +wait_for_wrapper() +{ + # In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692 + if [[ $WAITFORIT_QUIET -eq 1 ]]; then + timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --quiet --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT & + else + timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT & + fi + WAITFORIT_PID=$! + trap "kill -INT -$WAITFORIT_PID" INT + wait $WAITFORIT_PID + WAITFORIT_RESULT=$? + if [[ $WAITFORIT_RESULT -ne 0 ]]; then + echoerr "$WAITFORIT_cmdname: timeout occurred after waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT" + fi + return $WAITFORIT_RESULT +} + +# process arguments +while [[ $# -gt 0 ]] +do + case "$1" in + *:* ) + WAITFORIT_hostport=(${1//:/ }) + WAITFORIT_HOST=${WAITFORIT_hostport[0]} + WAITFORIT_PORT=${WAITFORIT_hostport[1]} + shift 1 + ;; + --child) + WAITFORIT_CHILD=1 + shift 1 + ;; + -q | --quiet) + WAITFORIT_QUIET=1 + shift 1 + ;; + -s | --strict) + WAITFORIT_STRICT=1 + shift 1 + ;; + -h) + WAITFORIT_HOST="$2" + if [[ $WAITFORIT_HOST == "" ]]; then break; fi + shift 2 + ;; + --host=*) + WAITFORIT_HOST="${1#*=}" + shift 1 + ;; + -p) + WAITFORIT_PORT="$2" + if [[ $WAITFORIT_PORT == "" ]]; then break; fi + shift 2 + ;; + --port=*) + WAITFORIT_PORT="${1#*=}" + shift 1 + ;; + -t) + WAITFORIT_TIMEOUT="$2" + if [[ $WAITFORIT_TIMEOUT == "" ]]; then break; fi + shift 2 + ;; + --timeout=*) + WAITFORIT_TIMEOUT="${1#*=}" + shift 1 + ;; + --) + shift + WAITFORIT_CLI=("$@") + break + ;; + --help) + usage + ;; + *) + echoerr "Unknown argument: $1" + usage + ;; + esac +done + +if [[ "$WAITFORIT_HOST" == "" || "$WAITFORIT_PORT" == "" ]]; then + echoerr "Error: you need to provide a host and port to test." + usage +fi + +WAITFORIT_TIMEOUT=${WAITFORIT_TIMEOUT:-15} +WAITFORIT_STRICT=${WAITFORIT_STRICT:-0} +WAITFORIT_CHILD=${WAITFORIT_CHILD:-0} +WAITFORIT_QUIET=${WAITFORIT_QUIET:-0} + +# Check to see if timeout is from busybox? +WAITFORIT_TIMEOUT_PATH=$(type -p timeout) +WAITFORIT_TIMEOUT_PATH=$(realpath $WAITFORIT_TIMEOUT_PATH 2>/dev/null || readlink -f $WAITFORIT_TIMEOUT_PATH) + +WAITFORIT_BUSYTIMEFLAG="" +if [[ $WAITFORIT_TIMEOUT_PATH =~ "busybox" ]]; then + WAITFORIT_ISBUSY=1 + # Check if busybox timeout uses -t flag + # (recent Alpine versions don't support -t anymore) + if timeout &>/dev/stdout | grep -q -e '-t '; then + WAITFORIT_BUSYTIMEFLAG="-t" + fi +else + WAITFORIT_ISBUSY=0 +fi + +if [[ $WAITFORIT_CHILD -gt 0 ]]; then + wait_for + WAITFORIT_RESULT=$? + exit $WAITFORIT_RESULT +else + if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then + wait_for_wrapper + WAITFORIT_RESULT=$? + else + wait_for + WAITFORIT_RESULT=$? + fi +fi + +if [[ $WAITFORIT_CLI != "" ]]; then + if [[ $WAITFORIT_RESULT -ne 0 && $WAITFORIT_STRICT -eq 1 ]]; then + echoerr "$WAITFORIT_cmdname: strict mode, refusing to execute subprocess" + exit $WAITFORIT_RESULT + fi + exec "${WAITFORIT_CLI[@]}" +else + exit $WAITFORIT_RESULT +fi diff --git a/cli/capabilities.go b/cli/capabilities.go index a80540d873fd52dc582ee6ec124649f64e9ad6b5..84d769c14937645b6aa4de961c3d4df72a9e4e3a 100644 --- a/cli/capabilities.go +++ b/cli/capabilities.go @@ -1,12 +1,13 @@ package cli import ( - "code.fbi.h-da.de/cocsn/gosdn/forks/goarista/gnmi" - "code.fbi.h-da.de/cocsn/gosdn/nucleus" "context" "fmt" - gpb "github.com/openconfig/gnmi/proto/gnmi" "strings" + + "code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi" + "code.fbi.h-da.de/danet/gosdn/nucleus" + gpb "github.com/openconfig/gnmi/proto/gnmi" ) // Capabilities sends a gNMI Capabilities request to the specified target diff --git a/cli/get.go b/cli/get.go index ccd8b25a464dab88bb3e9b57ce921524de2f16b7..930b47db66365dcc994c34d126ed0f3379aa5df8 100644 --- a/cli/get.go +++ b/cli/get.go @@ -1,9 +1,10 @@ package cli import ( - "code.fbi.h-da.de/cocsn/gosdn/forks/goarista/gnmi" - "code.fbi.h-da.de/cocsn/gosdn/nucleus" "context" + + "code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi" + "code.fbi.h-da.de/danet/gosdn/nucleus" gpb "github.com/openconfig/gnmi/proto/gnmi" log "github.com/sirupsen/logrus" ) diff --git a/cli/init.go b/cli/init.go index d85e6bd00885a1c4aefea4b6766da349ccd5b8cd..0596a2cfdb1353d852f201a0a5922d3414acbb66 100644 --- a/cli/init.go +++ b/cli/init.go @@ -1,7 +1,7 @@ package cli import ( - model "code.fbi.h-da.de/cocsn/yang-models/generated/arista" + model "code.fbi.h-da.de/danet/yang-models/generated/arista" "github.com/openconfig/ygot/ytypes" log "github.com/sirupsen/logrus" ) diff --git a/cli/set.go b/cli/set.go index 4d01d1477fd281446c3666faaf69e9a9899f7347..140929b6d707563dd2262af3bcb53b8fb0eaf304 100644 --- a/cli/set.go +++ b/cli/set.go @@ -1,12 +1,13 @@ package cli import ( - "code.fbi.h-da.de/cocsn/gosdn/forks/goarista/gnmi" - "code.fbi.h-da.de/cocsn/gosdn/nucleus" - "code.fbi.h-da.de/cocsn/gosdn/nucleus/util/proto" "context" - pb "google.golang.org/protobuf/proto" "os" + + "code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi" + "code.fbi.h-da.de/danet/gosdn/nucleus" + "code.fbi.h-da.de/danet/gosdn/nucleus/util/proto" + pb "google.golang.org/protobuf/proto" ) // Set sends a gNMI Set request to the specified target. Only one diff --git a/cli/subscribe.go b/cli/subscribe.go index 88379e45f8d90f892c347c2aff18861658c18bfc..f1b6bd9eba5a464d66935e71e304758f98a8c5f8 100644 --- a/cli/subscribe.go +++ b/cli/subscribe.go @@ -1,16 +1,17 @@ package cli import ( - "code.fbi.h-da.de/cocsn/gosdn/forks/goarista/gnmi" - "code.fbi.h-da.de/cocsn/gosdn/nucleus" "context" "fmt" - gpb "github.com/openconfig/gnmi/proto/gnmi" - log "github.com/sirupsen/logrus" "os" "os/signal" "syscall" "time" + + "code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi" + "code.fbi.h-da.de/danet/gosdn/nucleus" + gpb "github.com/openconfig/gnmi/proto/gnmi" + log "github.com/sirupsen/logrus" ) // Subscribe starts a gNMI subscriber requersting the specified paths on the target and diff --git a/cli/target.go b/cli/target.go index cd35e87a352590ed8f26bdfc94583113d189cbc0..116e85e7cf8da409e1e6ec12f6d85ab4d12289ce 100644 --- a/cli/target.go +++ b/cli/target.go @@ -1,9 +1,12 @@ package cli import ( - "code.fbi.h-da.de/cocsn/gosdn/forks/google/gnmi" - oc "code.fbi.h-da.de/cocsn/yang-models/generated/openconfig" "context" + "net" + "reflect" + + "code.fbi.h-da.de/danet/gosdn/forks/google/gnmi" + oc "code.fbi.h-da.de/danet/yang-models/generated/openconfig" pb "github.com/openconfig/gnmi/proto/gnmi" "github.com/openconfig/goyang/pkg/yang" "github.com/openconfig/ygot/util" @@ -11,8 +14,6 @@ import ( log "github.com/sirupsen/logrus" "google.golang.org/grpc" "google.golang.org/grpc/reflection" - "net" - "reflect" ) type server struct { @@ -88,8 +89,5 @@ func Target(bindAddr string) error { } log.Info("starting to serve") - if err := g.Serve(listen); err != nil { - return err - } - return nil + return g.Serve(listen) } diff --git a/cmd/addDevice.go b/cmd/addDevice.go index 95180504c5828c06dce7cbb713a204e3acd9275b..ffcac11cbed59ae1a3ddf1c26097aa443bb1acc0 100644 --- a/cmd/addDevice.go +++ b/cmd/addDevice.go @@ -32,7 +32,7 @@ POSSIBILITY OF SUCH DAMAGE. package cmd import ( - "code.fbi.h-da.de/cocsn/gosdn/cli" + "code.fbi.h-da.de/danet/gosdn/cli" "github.com/spf13/cobra" ) diff --git a/cmd/capabilities.go b/cmd/capabilities.go index 437f6f25f83b62616fd72c918bd78ee45ad82fbb..3daa5450911902c06b15a051f54edf67680e6b76 100644 --- a/cmd/capabilities.go +++ b/cmd/capabilities.go @@ -32,7 +32,7 @@ POSSIBILITY OF SUCH DAMAGE. package cmd import ( - "code.fbi.h-da.de/cocsn/gosdn/cli" + "code.fbi.h-da.de/danet/gosdn/cli" "github.com/spf13/cobra" ) diff --git a/cmd/cli.go b/cmd/cli.go index 320c17ca84c17bafde8a2fa350e9d67e98465fb2..930746b16dcecd37827171fda87b4acfa2b18f2a 100644 --- a/cmd/cli.go +++ b/cmd/cli.go @@ -32,7 +32,7 @@ POSSIBILITY OF SUCH DAMAGE. package cmd import ( - "code.fbi.h-da.de/cocsn/gosdn/cli" + "code.fbi.h-da.de/danet/gosdn/cli" "github.com/spf13/cobra" ) diff --git a/cmd/cliSet.go b/cmd/cliSet.go index 9a79c630bed30d80c0d8438224edc42f084ff14d..ab6db3561651309f60ccbc1524d0559c2c83461d 100644 --- a/cmd/cliSet.go +++ b/cmd/cliSet.go @@ -32,7 +32,7 @@ POSSIBILITY OF SUCH DAMAGE. package cmd import ( - "code.fbi.h-da.de/cocsn/gosdn/cli" + "code.fbi.h-da.de/danet/gosdn/cli" "github.com/spf13/cobra" ) diff --git a/cmd/get.go b/cmd/get.go index d200f3a08d4d8116e4168886dbde25427f99fa36..2364162eed06fdf3aade32d866832e3e6935dd20 100644 --- a/cmd/get.go +++ b/cmd/get.go @@ -32,7 +32,7 @@ POSSIBILITY OF SUCH DAMAGE. package cmd import ( - "code.fbi.h-da.de/cocsn/gosdn/cli" + "code.fbi.h-da.de/danet/gosdn/cli" "github.com/spf13/cobra" ) diff --git a/cmd/getDevice.go b/cmd/getDevice.go index 2daf934073e6f69dc0f8b55971aa747c9eccec13..7a48c44b5ee9e1fb94a0cd310a38588378ec8d97 100644 --- a/cmd/getDevice.go +++ b/cmd/getDevice.go @@ -32,7 +32,7 @@ POSSIBILITY OF SUCH DAMAGE. package cmd import ( - "code.fbi.h-da.de/cocsn/gosdn/cli" + "code.fbi.h-da.de/danet/gosdn/cli" "github.com/spf13/cobra" ) diff --git a/cmd/getIds.go b/cmd/getIds.go index ec858fd9cc857369ea9ead8887ec36c2025e0a29..0fa22dce52e4cdd27807ef72fa6e29b218a4320c 100644 --- a/cmd/getIds.go +++ b/cmd/getIds.go @@ -32,7 +32,7 @@ POSSIBILITY OF SUCH DAMAGE. package cmd import ( - "code.fbi.h-da.de/cocsn/gosdn/cli" + "code.fbi.h-da.de/danet/gosdn/cli" "github.com/spf13/cobra" ) diff --git a/cmd/gosdn/main.go b/cmd/gosdn/main.go index a87c9ff0e98464b7a0c8b1ede5808946d954ca4a..3298b8935b44f844c1c2b32b1ebd0232d19e9430 100644 --- a/cmd/gosdn/main.go +++ b/cmd/gosdn/main.go @@ -30,7 +30,7 @@ POSSIBILITY OF SUCH DAMAGE. */ package main -import "code.fbi.h-da.de/cocsn/gosdn/cmd" +import "code.fbi.h-da.de/danet/gosdn/cmd" func main() { cmd.Execute() diff --git a/cmd/init.go b/cmd/init.go index 6a4b3e9bab78477c71efc80a075b3855b1a3265d..1b40b8ecfb1981c6aff3d11f3607513f5a350897 100644 --- a/cmd/init.go +++ b/cmd/init.go @@ -32,7 +32,7 @@ POSSIBILITY OF SUCH DAMAGE. package cmd import ( - "code.fbi.h-da.de/cocsn/gosdn/cli" + "code.fbi.h-da.de/danet/gosdn/cli" "github.com/spf13/cobra" ) diff --git a/cmd/request.go b/cmd/request.go index 54dd12becaad214a2d19f36d9da6a0a2cf7ac174..62cbcb0612d16bd5a88d5a1ea2702a443ebae700 100644 --- a/cmd/request.go +++ b/cmd/request.go @@ -32,7 +32,7 @@ POSSIBILITY OF SUCH DAMAGE. package cmd import ( - "code.fbi.h-da.de/cocsn/gosdn/cli" + "code.fbi.h-da.de/danet/gosdn/cli" "github.com/spf13/cobra" ) diff --git a/cmd/requestAll.go b/cmd/requestAll.go index 11234826ed412ed507e9711b7b4af84b379c856e..5fac9ec727efe8e5d60a0fd8ed74bad8404ee73f 100644 --- a/cmd/requestAll.go +++ b/cmd/requestAll.go @@ -32,7 +32,7 @@ POSSIBILITY OF SUCH DAMAGE. package cmd import ( - "code.fbi.h-da.de/cocsn/gosdn/cli" + "code.fbi.h-da.de/danet/gosdn/cli" "github.com/spf13/cobra" ) diff --git a/cmd/root.go b/cmd/root.go index 61b1e153fba0a4294eb7a18ff2538186739d5143..e66b0ced378972aee205acacfd266669065c8400 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -35,7 +35,7 @@ import ( "context" "os" - "code.fbi.h-da.de/cocsn/gosdn/nucleus" + "code.fbi.h-da.de/danet/gosdn/nucleus" log "github.com/sirupsen/logrus" "github.com/spf13/cobra" diff --git a/cmd/set.go b/cmd/set.go index 486d9f594a7942d25aa690d5e4b970eb96816624..249c5c78253883c3bddb38f72e6cadab7dfa1f0a 100644 --- a/cmd/set.go +++ b/cmd/set.go @@ -32,7 +32,7 @@ POSSIBILITY OF SUCH DAMAGE. package cmd import ( - "code.fbi.h-da.de/cocsn/gosdn/cli" + "code.fbi.h-da.de/danet/gosdn/cli" "github.com/spf13/cobra" ) diff --git a/cmd/subscribe.go b/cmd/subscribe.go index a641b7fb4f4abffebd4e6848ae5cf6343644d276..c2cbe756b7ca82977338ee5a6b9db6418ee1e694 100644 --- a/cmd/subscribe.go +++ b/cmd/subscribe.go @@ -32,7 +32,7 @@ POSSIBILITY OF SUCH DAMAGE. package cmd import ( - "code.fbi.h-da.de/cocsn/gosdn/cli" + "code.fbi.h-da.de/danet/gosdn/cli" "github.com/spf13/cobra" ) diff --git a/cmd/target.go b/cmd/target.go index 97224d87268e43bf3edadfa9368e141efe3148d0..c36654b0a042fffb90fb8dfc722d7a163860fe0f 100644 --- a/cmd/target.go +++ b/cmd/target.go @@ -32,7 +32,7 @@ POSSIBILITY OF SUCH DAMAGE. package cmd import ( - "code.fbi.h-da.de/cocsn/gosdn/cli" + "code.fbi.h-da.de/danet/gosdn/cli" "github.com/spf13/cobra" ) diff --git a/cmd/util.go b/cmd/util.go index cb2eeb19d92a95250edac97b53b84f9e3431c899..3ea5ddd50a2706cee1931690323d4e06b9a3d17c 100644 --- a/cmd/util.go +++ b/cmd/util.go @@ -33,6 +33,7 @@ package cmd import ( "errors" + "github.com/spf13/cobra" ) diff --git a/database/client.go b/database/client.go index 10e5414835fb523e273eecb87bf011535617f955..86dbdb186b2114a590d74cfa26d2e99ff19990e9 100644 --- a/database/client.go +++ b/database/client.go @@ -2,6 +2,7 @@ package database import ( "errors" + "github.com/neo4j/neo4j-go-driver/neo4j" log "github.com/sirupsen/logrus" "github.com/spf13/viper" diff --git a/forks/google/gnmi/model.go b/forks/google/gnmi/model.go index 8d6a4998be62fba77ec2b50ea7decfb8b989fb75..f1e3b80eccd937aa1eb25f7a000a157cd0a24c33 100644 --- a/forks/google/gnmi/model.go +++ b/forks/google/gnmi/model.go @@ -16,7 +16,7 @@ limitations under the License. package gnmi import ( - oc "code.fbi.h-da.de/cocsn/yang-models/generated/arista" + oc "code.fbi.h-da.de/danet/yang-models/generated/arista" "errors" "fmt" log "github.com/sirupsen/logrus" diff --git a/go.mod b/go.mod index 9822234c73e01a5119746554b44198af1da233b9..aef56f14801c07dd765467b914c80cb392e07c28 100644 --- a/go.mod +++ b/go.mod @@ -1,9 +1,9 @@ -module code.fbi.h-da.de/cocsn/gosdn +module code.fbi.h-da.de/danet/gosdn go 1.14 require ( - code.fbi.h-da.de/cocsn/yang-models v0.0.4 + code.fbi.h-da.de/danet/yang-models v0.0.8 github.com/aristanetworks/goarista v0.0.0-20201120222254-94a892eb0c6a github.com/golang/protobuf v1.5.0 github.com/google/gnxi v0.0.0-20201221102247-c26672548161 diff --git a/go.sum b/go.sum index df1bca3a02416ecdb2b8129aa30f24d7ceea3832..5265b4845dc95eb3f0fdf34516e8acaf1f4d361d 100644 --- a/go.sum +++ b/go.sum @@ -21,8 +21,8 @@ cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIA cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -code.fbi.h-da.de/cocsn/yang-models v0.0.4 h1:y/Ph5CaD2NJDPjoOuS59iKrMYf9bvpg2/hefC2RG6E4= -code.fbi.h-da.de/cocsn/yang-models v0.0.4/go.mod h1:7MnNmAQ9o84BpUepcaV6RB1mBGCNyXVJcdbKUl6rK0g= +code.fbi.h-da.de/danet/yang-models v0.0.8 h1:LuKt58Zh2mDkQa9s4hFaIANtZLxES7EFX1rIczD0GDs= +code.fbi.h-da.de/danet/yang-models v0.0.8/go.mod h1:aoz0hgHZoEm2Apu9kA93g9nIBjAApBvx4pMFj2gbx9g= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= diff --git a/nucleus/controller.go b/nucleus/controller.go index 4e96a290b394a596dd2568b73305f1f7a27f7dc8..2dc1161bb4c48981c01613258ba25c2e9dd0ecd6 100644 --- a/nucleus/controller.go +++ b/nucleus/controller.go @@ -1,15 +1,16 @@ package nucleus import ( - "code.fbi.h-da.de/cocsn/gosdn/database" "context" - "github.com/google/uuid" - log "github.com/sirupsen/logrus" "net/http" "os" "os/signal" "sync" "time" + + "code.fbi.h-da.de/danet/gosdn/database" + "github.com/google/uuid" + log "github.com/sirupsen/logrus" ) var coreLock sync.RWMutex diff --git a/nucleus/device_test.go b/nucleus/device_test.go index 0c6f118ccf4cbdff858f96003e6cf1dff86bc375..6d42082532a36f52120896f8e1f71be2c924b046 100644 --- a/nucleus/device_test.go +++ b/nucleus/device_test.go @@ -1,12 +1,13 @@ package nucleus import ( - "code.fbi.h-da.de/cocsn/gosdn/forks/goarista/gnmi" - "code.fbi.h-da.de/cocsn/yang-models/generated/openconfig" - "github.com/google/uuid" - "github.com/openconfig/ygot/ygot" "reflect" "testing" + + "code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi" + "code.fbi.h-da.de/danet/yang-models/generated/openconfig" + "github.com/google/uuid" + "github.com/openconfig/ygot/ygot" ) func TestDevice_Id(t *testing.T) { diff --git a/nucleus/gnmi_transport.go b/nucleus/gnmi_transport.go index 3bbcc03c6146804d862af1932f5cac2a4a0fca86..73e3c25b1555f9a76fc960a75f6d1b7b4095bded 100644 --- a/nucleus/gnmi_transport.go +++ b/nucleus/gnmi_transport.go @@ -1,15 +1,16 @@ package nucleus import ( - "code.fbi.h-da.de/cocsn/gosdn/forks/goarista/gnmi" "context" + "reflect" + "strings" + + "code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi" gpb "github.com/openconfig/gnmi/proto/gnmi" "github.com/openconfig/gnmi/proto/gnmi_ext" "github.com/openconfig/goyang/pkg/yang" "github.com/openconfig/ygot/ytypes" log "github.com/sirupsen/logrus" - "reflect" - "strings" ) // CtxKeyType is a custom type to be used as key in a context.WithValue() or @@ -141,10 +142,7 @@ func (g *Gnmi) ProcessResponse(resp interface{}, root interface{}, s *ytypes.Sch val, ok := update.Val.Value.(*gpb.TypedValue_JsonIetfVal) if ok { opts := []ytypes.UnmarshalOpt{&ytypes.IgnoreExtraFields{}} - if err := g.Unmarshal(val.JsonIetfVal, extraxtPathElements(fullPath), root, opts...); err != nil { - return err - } - return nil + return g.Unmarshal(val.JsonIetfVal, extraxtPathElements(fullPath), root, opts...) } // TODO(mk): Evaluate hardcoded model key schema := models["Device"] diff --git a/nucleus/gnmi_transport_test.go b/nucleus/gnmi_transport_test.go index 38270c8da5fe3f31f030c5010de2b980a8d8d127..a4b1ae60782dc1f5350f7b9161800f734db56612 100644 --- a/nucleus/gnmi_transport_test.go +++ b/nucleus/gnmi_transport_test.go @@ -1,18 +1,19 @@ package nucleus import ( - "code.fbi.h-da.de/cocsn/gosdn/forks/goarista/gnmi" - "code.fbi.h-da.de/cocsn/gosdn/mocks" - "code.fbi.h-da.de/cocsn/yang-models/generated/openconfig" "context" "errors" + "reflect" + "testing" + + "code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi" + "code.fbi.h-da.de/danet/gosdn/mocks" + "code.fbi.h-da.de/danet/yang-models/generated/openconfig" gpb "github.com/openconfig/gnmi/proto/gnmi" "github.com/openconfig/gnmi/proto/gnmi_ext" "github.com/openconfig/goyang/pkg/yang" "github.com/openconfig/ygot/ytypes" "github.com/stretchr/testify/mock" - "reflect" - "testing" ) // testSetupGnmi bootstraps tests for gnmi transport diff --git a/nucleus/http.go b/nucleus/http.go index 56ad4cb0af707662e72656e1a7b6a4fa0a88f046..13b8c7711c68f87aa8c9348cff10b8b2aa3ebd2f 100644 --- a/nucleus/http.go +++ b/nucleus/http.go @@ -1,7 +1,7 @@ package nucleus import ( - "code.fbi.h-da.de/cocsn/gosdn/forks/goarista/gnmi" + "code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi" "context" "fmt" "github.com/google/uuid" @@ -61,7 +61,6 @@ func httpHandler(writer http.ResponseWriter, request *http.Request) { return } - id, err := uuid.Parse(query.Get("uuid")) if err != nil { if err.Error() != "invalid UUID length: 0" { @@ -176,7 +175,7 @@ func httpHandler(writer http.ResponseWriter, request *http.Request) { pnds := c.pndc.UUIDs() writeIDs("PNDs", pnds) writeIDs("SBIs", c.sbic.UUIDs()) - for _,id := range pnds{ + for _, id := range pnds { p, err := c.pndc.get(id) if err != nil { writer.WriteHeader(http.StatusInternalServerError) diff --git a/nucleus/http_test.go b/nucleus/http_test.go index 9efa72110a1fe89cf1507424d147e7faac6fd71b..24022b423a507bd25c9ca58c9d18b7da7dd2e7fa 100644 --- a/nucleus/http_test.go +++ b/nucleus/http_test.go @@ -1,13 +1,14 @@ package nucleus import ( - "code.fbi.h-da.de/cocsn/gosdn/mocks" "errors" + "net/http" + "testing" + + "code.fbi.h-da.de/danet/gosdn/mocks" "github.com/google/uuid" log "github.com/sirupsen/logrus" "github.com/stretchr/testify/mock" - "net/http" - "testing" ) func testSetupHTTP() { diff --git a/nucleus/initialise_test.go b/nucleus/initialise_test.go index 6c90b054e44d009e03542821ced09f46cd65bb49..c317427fe2590602e0a0596b53495c65079bf0ad 100644 --- a/nucleus/initialise_test.go +++ b/nucleus/initialise_test.go @@ -1,18 +1,19 @@ package nucleus import ( - "code.fbi.h-da.de/cocsn/gosdn/forks/goarista/gnmi" - "code.fbi.h-da.de/cocsn/gosdn/mocks" - "code.fbi.h-da.de/cocsn/gosdn/nucleus/util/proto" - "code.fbi.h-da.de/cocsn/gosdn/test" "context" + "os" + "testing" + + "code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi" + "code.fbi.h-da.de/danet/gosdn/mocks" + "code.fbi.h-da.de/danet/gosdn/nucleus/util/proto" + "code.fbi.h-da.de/danet/gosdn/test" "github.com/google/uuid" gpb "github.com/openconfig/gnmi/proto/gnmi" log "github.com/sirupsen/logrus" "github.com/stretchr/testify/mock" pb "google.golang.org/protobuf/proto" - "os" - "testing" ) const apiEndpoint = "http://localhost:8080" diff --git a/nucleus/principalNetworkDomain.go b/nucleus/principalNetworkDomain.go index ebb372081a3636a2e0629200c9b56822d11981ae..9cd0203babe7a4ad8a44477d1bbd12a633ac87fd 100644 --- a/nucleus/principalNetworkDomain.go +++ b/nucleus/principalNetworkDomain.go @@ -1,11 +1,13 @@ package nucleus import ( - "code.fbi.h-da.de/cocsn/gosdn/forks/goarista/gnmi" "context" + + "code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi" log "github.com/sirupsen/logrus" "encoding/json" + "github.com/google/uuid" ) diff --git a/nucleus/principalNetworkDomain_test.go b/nucleus/principalNetworkDomain_test.go index f02f840bc948d4887983a4beb532808d9e8dc2c7..76f35915df0faf787a465206efbbe3db3bf11892 100644 --- a/nucleus/principalNetworkDomain_test.go +++ b/nucleus/principalNetworkDomain_test.go @@ -1,13 +1,14 @@ package nucleus import ( - "code.fbi.h-da.de/cocsn/gosdn/mocks" - "code.fbi.h-da.de/cocsn/yang-models/generated/openconfig" "errors" - "github.com/google/uuid" - "github.com/stretchr/testify/mock" "reflect" "testing" + + "code.fbi.h-da.de/danet/gosdn/mocks" + "code.fbi.h-da.de/danet/yang-models/generated/openconfig" + "github.com/google/uuid" + "github.com/stretchr/testify/mock" ) func TestNewPND(t *testing.T) { diff --git a/nucleus/restconf_transport.go b/nucleus/restconf_transport.go index 0dd477196745a83fda3b8460e1c5755b377748a1..ae6584a88b680952a4882aa3bd374bc93bcbf92e 100644 --- a/nucleus/restconf_transport.go +++ b/nucleus/restconf_transport.go @@ -2,6 +2,7 @@ package nucleus import ( "context" + "github.com/openconfig/ygot/ytypes" ) diff --git a/nucleus/restconf_transport_test.go b/nucleus/restconf_transport_test.go index 5f1eb1e352f2cb8214686c5215eea419c465dcd4..4f174f5fbfb19f00be9ef0af0d4df72921b32f98 100644 --- a/nucleus/restconf_transport_test.go +++ b/nucleus/restconf_transport_test.go @@ -2,9 +2,10 @@ package nucleus import ( "context" - "github.com/openconfig/ygot/ytypes" "reflect" "testing" + + "github.com/openconfig/ygot/ytypes" ) func TestRestconf_Get(t *testing.T) { diff --git a/nucleus/southbound.go b/nucleus/southbound.go index 831e5a92b3a1501ace46fcd3bbdf0fb2eb5ece70..aa5f67c42313c1b131629151bebe019720a66e61 100644 --- a/nucleus/southbound.go +++ b/nucleus/southbound.go @@ -1,7 +1,9 @@ package nucleus import ( - "code.fbi.h-da.de/cocsn/yang-models/generated/openconfig" + "reflect" + + "code.fbi.h-da.de/danet/yang-models/generated/openconfig" "github.com/google/uuid" gpb "github.com/openconfig/gnmi/proto/gnmi" "github.com/openconfig/goyang/pkg/yang" @@ -9,7 +11,6 @@ import ( "github.com/openconfig/ygot/ygot" "github.com/openconfig/ygot/ytypes" log "github.com/sirupsen/logrus" - "reflect" ) // SouthboundInterface provides an @@ -60,10 +61,7 @@ func (oc *OpenConfig) Schema() *ytypes.Schema { // Needed for type assertion. func (oc *OpenConfig) SetNode() func(schema *yang.Entry, root interface{}, path *gpb.Path, val interface{}, opts ...ytypes.SetNodeOpt) error { return func(schema *yang.Entry, root interface{}, path *gpb.Path, val interface{}, opts ...ytypes.SetNodeOpt) error { - if err := ytypes.SetNode(schema, root.(*openconfig.Device), path, val, opts...); err != nil { - return err - } - return nil + return ytypes.SetNode(schema, root.(*openconfig.Device), path, val, opts...) } } diff --git a/nucleus/southbound_test.go b/nucleus/southbound_test.go index ab46901446e0cac93464c4aa111436953a51436a..d11d21d218e46317da60ddd6577ba9976ca2f91f 100644 --- a/nucleus/southbound_test.go +++ b/nucleus/southbound_test.go @@ -1,13 +1,14 @@ package nucleus import ( - "code.fbi.h-da.de/cocsn/gosdn/nucleus/util/proto" - "code.fbi.h-da.de/cocsn/yang-models/generated/openconfig" + "reflect" + "testing" + + "code.fbi.h-da.de/danet/gosdn/nucleus/util/proto" + "code.fbi.h-da.de/danet/yang-models/generated/openconfig" "github.com/google/uuid" gpb "github.com/openconfig/gnmi/proto/gnmi" "github.com/openconfig/ygot/ytypes" - "reflect" - "testing" ) func TestOpenConfig_Id(t *testing.T) { diff --git a/nucleus/store.go b/nucleus/store.go index 0563a5a30533467809380ac25d949bfc4b578e68..ff8d21319cbef85d4d0b9c8c5c5a02567c425631 100644 --- a/nucleus/store.go +++ b/nucleus/store.go @@ -1,10 +1,11 @@ package nucleus import ( - "github.com/google/uuid" - log "github.com/sirupsen/logrus" "reflect" "sync" + + "github.com/google/uuid" + log "github.com/sirupsen/logrus" ) var storeLock sync.RWMutex diff --git a/nucleus/store_test.go b/nucleus/store_test.go index bc9e2ab00f0e1ac4e31ccc5f616b954da6dc2528..08affc9c5ef4839e4ecbbacaf7f0b00f1f712c84 100644 --- a/nucleus/store_test.go +++ b/nucleus/store_test.go @@ -1,11 +1,12 @@ package nucleus import ( - "code.fbi.h-da.de/cocsn/gosdn/mocks" - "github.com/google/uuid" "reflect" "sort" "testing" + + "code.fbi.h-da.de/danet/gosdn/mocks" + "github.com/google/uuid" ) func Test_store_add(t *testing.T) { diff --git a/nucleus/transport.go b/nucleus/transport.go index 36dda96300e226ac74de3682d86885e20332191a..21f5ca56e30ba41d03349ed76651147b5f8a4ce5 100644 --- a/nucleus/transport.go +++ b/nucleus/transport.go @@ -3,8 +3,9 @@ package nucleus import ( "bytes" "context" - "github.com/openconfig/ygot/ytypes" "io" + + "github.com/openconfig/ygot/ytypes" ) // Transport provides an interface for diff --git a/nucleus/util/path/path_traversal.go b/nucleus/util/path/path_traversal.go index ada6dbcb1a3439efbcb5b834ec952789e72825e8..c246ebddff0d5fe9396faa22ff9cb6ca5b923e09 100644 --- a/nucleus/util/path/path_traversal.go +++ b/nucleus/util/path/path_traversal.go @@ -2,10 +2,11 @@ package path import ( "fmt" + "strings" + "github.com/openconfig/goyang/pkg/yang" "github.com/openconfig/ygot/ytypes" log "github.com/sirupsen/logrus" - "strings" ) const delim = "/" diff --git a/nucleus/util/path/path_traversal_test.go b/nucleus/util/path/path_traversal_test.go index a12455361462f3ceaf606883820580a5d6e39ab9..07ef89d4d31f9b0a1ff487cb9cd934033c609635 100644 --- a/nucleus/util/path/path_traversal_test.go +++ b/nucleus/util/path/path_traversal_test.go @@ -1,14 +1,15 @@ package path import ( - model "code.fbi.h-da.de/cocsn/gosdn/test/yang" - "github.com/openconfig/goyang/pkg/yang" - "github.com/openconfig/ygot/ytypes" - log "github.com/sirupsen/logrus" "os" "reflect" "sort" "testing" + + model "code.fbi.h-da.de/danet/gosdn/test/yang" + "github.com/openconfig/goyang/pkg/yang" + "github.com/openconfig/ygot/ytypes" + log "github.com/sirupsen/logrus" ) var schema *ytypes.Schema diff --git a/nucleus/util/proto/message.go b/nucleus/util/proto/message.go index 816c728e1948967130fe82aa9397ea798fb2da44..066c0434e96fab416ffd4511e7101fdd31208165 100644 --- a/nucleus/util/proto/message.go +++ b/nucleus/util/proto/message.go @@ -2,8 +2,9 @@ package proto import ( "fmt" - "google.golang.org/protobuf/proto" "io/ioutil" + + "google.golang.org/protobuf/proto" ) /* diff --git a/nucleus/util/proto/message_test.go b/nucleus/util/proto/message_test.go index 3f756d3aef8ad5c467a2572d793e374bb2802c30..dfa6e5587bb42a912c64f316578feeaf84daaf8e 100644 --- a/nucleus/util/proto/message_test.go +++ b/nucleus/util/proto/message_test.go @@ -1,12 +1,13 @@ package proto import ( - gpb "github.com/openconfig/gnmi/proto/gnmi" - pb "google.golang.org/protobuf/proto" "os" "reflect" "strings" "testing" + + gpb "github.com/openconfig/gnmi/proto/gnmi" + pb "google.golang.org/protobuf/proto" ) func TestMain(m *testing.M) { diff --git a/test/containerlab/int01.clab.yml b/test/containerlab/int01.clab.yml new file mode 100644 index 0000000000000000000000000000000000000000..10512cce11f3c85331c695cfe5c7aed1dfff67f3 --- /dev/null +++ b/test/containerlab/int01.clab.yml @@ -0,0 +1,23 @@ +# topology documentation: http://containerlab.srlinux.dev/lab-examples/srl-ceos/ +name: @@CLAB_NAME@@ + +mgmt: + network: @@CLAB_NAME@@ + ipv4_subnet: @@CLAB_MGMT_SUBNET@@ + +topology: + kinds: + ceos: + image: @@CEOS_CONTAINER_IMAGE@@ + nodes: + ceos1: + kind: ceos + ports: + - 0:6030 + + gosdn: + kind: linux + image: @@GOSDN_CONTAINER_IMAGE@@ + ports: + - 0:8080 + - 0:55055 diff --git a/test/integration/cliIntegration_test.go b/test/integration/cliIntegration_test.go index d2800b0e0c434d2cf8c9bf2fd6972a03ab1d0a71..50decc0629d948b4d4f0591e6eb8fd603149d34b 100644 --- a/test/integration/cliIntegration_test.go +++ b/test/integration/cliIntegration_test.go @@ -1,7 +1,7 @@ package integration import ( - "code.fbi.h-da.de/cocsn/gosdn/cli" + "code.fbi.h-da.de/danet/gosdn/cli" "testing" ) diff --git a/test/integration/cmdIntegration_test.go b/test/integration/cmdIntegration_test.go index 0aefff4db74566a9dc411cc76de8c4965766570a..ef8cd28cd047decb0f9684382097673c6f86b239 100644 --- a/test/integration/cmdIntegration_test.go +++ b/test/integration/cmdIntegration_test.go @@ -1,17 +1,18 @@ package integration import ( - "code.fbi.h-da.de/cocsn/gosdn/cli" - "code.fbi.h-da.de/cocsn/gosdn/forks/goarista/gnmi" - "code.fbi.h-da.de/cocsn/gosdn/nucleus" - "code.fbi.h-da.de/cocsn/gosdn/nucleus/util/proto" + "os" + "testing" + + "code.fbi.h-da.de/danet/gosdn/cli" + "code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi" + "code.fbi.h-da.de/danet/gosdn/nucleus" + "code.fbi.h-da.de/danet/gosdn/nucleus/util/proto" guuid "github.com/google/uuid" gpb "github.com/openconfig/gnmi/proto/gnmi" log "github.com/sirupsen/logrus" "github.com/spf13/viper" pb "google.golang.org/protobuf/proto" - "os" - "testing" ) const unreachable = "203.0.113.10:6030" @@ -28,7 +29,6 @@ func TestMain(m *testing.M) { os.Exit(m.Run()) } - func testSetupIntegration() { if os.Getenv("GOSDN_LOG") == "nolog" { log.SetLevel(log.PanicLevel) diff --git a/test/integration/nucleusIntegration_test.go b/test/integration/nucleusIntegration_test.go index 816888d6f77f857225f34d22b794017efe641629..4e30352ad815395c6fb417855e0952a3bc669372 100644 --- a/test/integration/nucleusIntegration_test.go +++ b/test/integration/nucleusIntegration_test.go @@ -1,8 +1,8 @@ package integration import ( - "code.fbi.h-da.de/cocsn/gosdn/forks/goarista/gnmi" - "code.fbi.h-da.de/cocsn/gosdn/nucleus" + "code.fbi.h-da.de/danet/gosdn/forks/goarista/gnmi" + "code.fbi.h-da.de/danet/gosdn/nucleus" "context" gpb "github.com/openconfig/gnmi/proto/gnmi" pb "google.golang.org/protobuf/proto" diff --git a/test/targets.go b/test/targets.go index 309b818471b71581a3efe2ffa2bf65baf0b639b0..d72882b4b9ca7719f36c5ae6caa69b67be3c7fab 100644 --- a/test/targets.go +++ b/test/targets.go @@ -1,8 +1,11 @@ package test import ( - "code.fbi.h-da.de/cocsn/gosdn/forks/google/gnmi" - oc "code.fbi.h-da.de/cocsn/yang-models/generated/arista" + "net" + "reflect" + + "code.fbi.h-da.de/danet/gosdn/forks/google/gnmi" + oc "code.fbi.h-da.de/danet/yang-models/generated/arista" pb "github.com/openconfig/gnmi/proto/gnmi" "github.com/openconfig/goyang/pkg/yang" "github.com/openconfig/ygot/util" @@ -10,8 +13,6 @@ import ( log "github.com/sirupsen/logrus" "google.golang.org/grpc" "google.golang.org/grpc/reflection" - "net" - "reflect" ) type server struct { diff --git a/test/terraform/containers.tf b/test/terraform/containers.tf index 4149322318193d0644f0e8f3eefafff44681a2ec..c735846a7bd7fe17467620e1887c5d6e2ae56283 100644 --- a/test/terraform/containers.tf +++ b/test/terraform/containers.tf @@ -6,12 +6,8 @@ resource "docker_container" "gosdn" { restart = "always" networks_advanced { - name = "bridge" - } - - ports { - internal = 8080 - external = 8080 + name = "ci" + ipv4_address = var.gosdn_address } } @@ -22,13 +18,9 @@ resource "docker_container" "ceos" { image = docker_image.ceos.name restart = "always" - ports { - internal = 6030 - external = 6030 - } - networks_advanced { - name = "bridge" + name = "ci" + ipv4_address = var.ceos_address } command = ["/sbin/init", diff --git a/test/terraform/images.tf b/test/terraform/images.tf index 39d234b387f5b14a704a028b6b7f31f39a217218..990cf0efdebee846ae4b7fb688c9abd27eb1c0b6 100644 --- a/test/terraform/images.tf +++ b/test/terraform/images.tf @@ -3,5 +3,5 @@ resource "docker_image" "gosdn" { } resource "docker_image" "ceos" { - name = "registry.code.fbi.h-da.de/cocsn/gosdn/ceos:latest" + name = var.ceos_tag } \ No newline at end of file diff --git a/test/terraform/main.tf b/test/terraform/main.tf index 1f228766349903fbad196dbd3b1df05324f8c70b..a08c19bb698658ed2430433851e02cbca39a8782 100644 --- a/test/terraform/main.tf +++ b/test/terraform/main.tf @@ -1,6 +1,7 @@ terraform { backend "http" { } + required_providers { docker = { source = "kreuzwerker/docker" diff --git a/test/terraform/resources.tf b/test/terraform/resources.tf index 9659f2d949aaa978b04167a7a62d1a0dcc6752eb..d5f2938f3e0d7e215d339c21dd486d36de57a3bc 100644 --- a/test/terraform/resources.tf +++ b/test/terraform/resources.tf @@ -1,3 +1,3 @@ resource "random_id" "server" { byte_length = 8 -} +} \ No newline at end of file diff --git a/test/terraform/variables.tf b/test/terraform/variables.tf index beacac0158789901783dad04be71645d0cb2a697..88bd132cfd46fe5009e504bbdbbbe5455260ecaf 100644 --- a/test/terraform/variables.tf +++ b/test/terraform/variables.tf @@ -9,6 +9,7 @@ variable "integration_username" { variable "integration_access_token" { type = string } + variable "tls_key" { type = string } @@ -23,10 +24,23 @@ variable "tls_ca_cert" { variable "container_tag" { type = string - default = "registry.code.fbi.h-da.de/cocsn/gosdn:latest" + default = "registry.code.fbi.h-da.de/danet/gosdn:latest" +} + +variable "ceos_tag" { + type = string + default = "registry.code.fbi.h-da.de/danet/gosdn/ceos:latest" } variable "network_name" { type = string default = "" +} + +variable "ceos_address" { + type = string +} + +variable "gosdn_address" { + type = string } \ No newline at end of file