Commit 9069c33d authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

Merge branch 'feat/159-automation-component-skeleton' into 'develop'

Automation component skeleton

See merge request !238
parents e977852e 3b47e6ff
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ include:
  - local: '/src/opticalcontroller/.gitlab-ci.yml'
  - local: '/src/ztp/.gitlab-ci.yml'
  - local: '/src/policy/.gitlab-ci.yml'
  - local: '/src/automation/.gitlab-ci.yml'
  - local: '/src/forecaster/.gitlab-ci.yml'
  #- local: '/src/webui/.gitlab-ci.yml'
  #- local: '/src/l3_distributedattackdetector/.gitlab-ci.yml'
+80 −0
Original line number Diff line number Diff line
# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: automationservice
spec:
  selector:
    matchLabels:
      app: automationservice
  replicas: 1
  template:
    metadata:
      annotations:
        # Required for IETF L2VPN SBI when both parent and child run in same K8s cluster with Linkerd
        config.linkerd.io/skip-outbound-ports: "2002"
      labels:
        app: automationservice
    spec:
      terminationGracePeriodSeconds: 5
      containers:
        - name: server
          image: labs.etsi.org:5050/tfs/controller/automation:latest
          imagePullPolicy: Always
          ports:
            - containerPort: 30200
            - containerPort: 9192
          env:
            - name: LOG_LEVEL
              value: "INFO"
          startupProbe:
            exec:
              command: ["/bin/grpc_health_probe", "-addr=:30200"]
            failureThreshold: 30
            periodSeconds: 1
          readinessProbe:
            exec:
              command: ["/bin/grpc_health_probe", "-addr=:30200"]
          livenessProbe:
            exec:
              command: ["/bin/grpc_health_probe", "-addr=:30200"]
          resources:
            requests:
              cpu: 250m
              memory: 128Mi
            limits:
              cpu: 1000m
              memory: 1024Mi
---
apiVersion: v1
kind: Service
metadata:
  name: automationservice
  labels:
    app: automationservice
spec:
  type: ClusterIP
  selector:
    app: automationservice
  ports:
    - name: grpc
      protocol: TCP
      port: 30200
      targetPort: 30200
    - name: metrics
      protocol: TCP
      port: 9192
      targetPort: 9192
+1 −1
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ export TFS_COMPONENTS="context device pathcomp service slice nbi webui load_gene
#export TFS_COMPONENTS="${TFS_COMPONENTS} monitoring"

# Uncomment to activate Monitoring Framework (new)
#export TFS_COMPONENTS="${TFS_COMPONENTS} kpi_manager kpi_value_writer kpi_value_api telemetry analytics"
#export TFS_COMPONENTS="${TFS_COMPONENTS} kpi_manager kpi_value_writer kpi_value_api telemetry analytics automation"

# Uncomment to activate BGP-LS Speaker
#export TFS_COMPONENTS="${TFS_COMPONENTS} bgpls_speaker"

proto/automation.proto

0 → 100644
+69 −0
Original line number Diff line number Diff line
// Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";
package automation;

import "context.proto";
import "policy.proto";

// Automation service RPCs
service AutomationService {
  rpc ZSMCreate       (ZSMCreateRequest ) returns (ZSMService     ) {}
  rpc ZSMUpdate       (ZSMCreateUpdate  ) returns (ZSMService     ) {}
  rpc ZSMDelete       (ZSMServiceID     ) returns (ZSMServiceState) {}
  rpc ZSMGetById      (ZSMServiceID     ) returns (ZSMService     ) {}
  rpc ZSMGetByService (context.ServiceId) returns (ZSMService     ) {}
}

// ZSM service states
enum ZSMServiceStateEnum {
  ZSM_UNDEFINED = 0;     // Undefined ZSM loop state
  ZSM_FAILED = 1;        // ZSM loop failed
  ZSM_ACTIVE = 2;        // ZSM loop is currently active
  ZSM_INACTIVE = 3;      // ZSM loop is currently inactive
  ZSM_UPDATED = 4;       // ZSM loop is updated
  ZSM_REMOVED = 5;       // ZSM loop is removed
}

message ZSMCreateRequest {
  context.ServiceId serviceId = 1;
  policy.PolicyRuleList policyList = 2;
}

message ZSMCreateUpdate {
  context.Uuid ZSMServiceID = 1;
  policy.PolicyRuleList policyList = 2;
}

// A unique identifier per ZSM service
message ZSMServiceID {
  context.Uuid uuid = 1;
}

// The state of a ZSM service
message ZSMServiceState {
  ZSMServiceStateEnum zsmServiceState = 1;
  string zsmServiceStateMessage = 2;
}

// Basic ZSM service attributes
message ZSMService {
  ZSMServiceID zsmServiceId = 1;

  context.ServiceId serviceId = 2;
  policy.PolicyRuleList policyList = 3;

  // TODO: When new Analytics and updated Monitoring are in place, add the necessary binding to them
}
+1 −1
Original line number Diff line number Diff line
@@ -19,6 +19,6 @@ PROJECTDIR=`pwd`
cd $PROJECTDIR/src
RCFILE=$PROJECTDIR/coverage/.coveragerc
CRDB_SQL_ADDRESS=$(kubectl get service cockroachdb-public --namespace crdb -o jsonpath='{.spec.clusterIP}')
export CRDB_URI="cockroachdb://tfs:tfs123@${CRDB_SQL_ADDRESS}:26257/tfs_kpi_mgmt?sslmode=require"
export CRDB_URI="cockroachdb://tfs:tfs123@${CRDB_SQL_ADDRESS}:26257/tfs_analytics?sslmode=require"
python3 -m pytest --log-level=DEBUG --log-cli-level=DEBUG --verbose \
    analytics/tests/test_analytics_db.py
Loading