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 [![coverage report](https://code.fbi.h-da.de/cocsn/gosdn/badges/master/coverage.svg)](https://code.fbi.h-da.de/cocsn/gosdn/-/commits/master) [![pipeline status](https://code.fbi.h-da.de/cocsn/gosdn/badges/master/pipeline.svg)](https://code.fbi.h-da.de/cocsn/gosdn/-/commits/master)
+# goSDN [![coverage report](https://code.fbi.h-da.de/danet/gosdn/badges/master/coverage.svg)](https://code.fbi.h-da.de/danet/gosdn/-/commits/master) [![pipeline status](https://code.fbi.h-da.de/danet/gosdn/badges/master/pipeline.svg)](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 |
 | ------ | ------ |
-| [![coverage report](https://code.fbi.h-da.de/cocsn/gosdn/badges/master/coverage.svg)](https://code.fbi.h-da.de/cocsn/gosdn/-/commits/master) | [![coverage report](https://code.fbi.h-da.de/cocsn/gosdn/badges/develop/coverage.svg)](https://code.fbi.h-da.de/cocsn/gosdn/-/commits/develop) |
-| [![pipeline status](https://code.fbi.h-da.de/cocsn/gosdn/badges/master/pipeline.svg)](https://code.fbi.h-da.de/cocsn/gosdn/-/commits/master) | [![pipeline status](https://code.fbi.h-da.de/cocsn/gosdn/badges/develop/pipeline.svg)](https://code.fbi.h-da.de/cocsn/gosdn/-/commits/develop) |
+| [![coverage report](https://code.fbi.h-da.de/danet/gosdn/badges/master/coverage.svg)](https://code.fbi.h-da.de/danet/gosdn/-/commits/master) | [![coverage report](https://code.fbi.h-da.de/danet/gosdn/badges/develop/coverage.svg)](https://code.fbi.h-da.de/danet/gosdn/-/commits/develop) |
+| [![pipeline status](https://code.fbi.h-da.de/danet/gosdn/badges/master/pipeline.svg)](https://code.fbi.h-da.de/danet/gosdn/-/commits/master) | [![pipeline status](https://code.fbi.h-da.de/danet/gosdn/badges/develop/pipeline.svg)](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