Add k8s yml file for oru application 62/6162/3
authorecaiyanlinux <martin.c.yan@est.tech>
Tue, 11 May 2021 14:54:26 +0000 (22:54 +0800)
committerecaiyanlinux <martin.c.yan@est.tech>
Mon, 31 May 2021 15:07:50 +0000 (23:07 +0800)
kubernetes deployment file for oru application

Change-Id: I6608a544a75dca1f7bad0c827201d5ed95bedbfb
Issue-ID: NONRTRIC-496
Signed-off-by: ecaiyanlinux <martin.c.yan@est.tech>
test/mrstub/app/main.py
test/mrstub/mrstub-build-start.sh
test/usecases/oruclosedlooprecovery/scriptversion/app/Dockerfile
test/usecases/oruclosedlooprecovery/scriptversion/docker-compose/start.sh
test/usecases/oruclosedlooprecovery/scriptversion/k8s/README.md [new file with mode: 0644]
test/usecases/oruclosedlooprecovery/scriptversion/k8s/linkfailure.yml [new file with mode: 0644]
test/usecases/oruclosedlooprecovery/scriptversion/k8s/start.sh [new file with mode: 0755]
test/usecases/oruclosedlooprecovery/scriptversion/simulators/Dockerfile-message-generator
test/usecases/oruclosedlooprecovery/scriptversion/simulators/Dockerfile-sdnr-sim
test/usecases/oruclosedlooprecovery/scriptversion/simulators/message_generator.py

index 40707d6..90924b1 100644 (file)
@@ -54,6 +54,8 @@ cntr_msg_responses_submitted=0
 cntr_msg_responses_fetched=0
 
 # Request and response constants
+ORU_WRITE_URL="/events/unauthenticated.SEC_FAULT_OUTPUT"
+ORU_READ_URL="/events/unauthenticated.SEC_FAULT_OUTPUT/users/test/"
 AGENT_WRITE_URL="/events/A1-POLICY-AGENT-WRITE"
 AGENT_READ_URL="/events/A1-POLICY-AGENT-READ/users/policy-agent"
 APP_WRITE_URL="/send-request"
@@ -344,6 +346,24 @@ def events_write():
 
         return Response('{}', status=200, mimetype=MIME_JSON)
 
+@app.route(ORU_WRITE_URL,
+    methods=['PUT','POST'])
+def oru_write():
+    global msg_requests
+    msg=json.dumps(request.json)
+    msg_requests.append(msg)
+    return Response('{}', status=200, mimetype=MIME_JSON)
+
+@app.route(ORU_READ_URL,
+    methods=['GET'])
+def oru_read():
+    global msg_requests
+    if(len(msg_requests)>0):
+        rsp=msg_requests.pop(0)
+        res=[]
+        res.append(rsp)
+        return Response(json.dumps(res), status=200, mimetype=MIME_JSON)
+    return Response("[]", status=200, mimetype=MIME_JSON)
 
 ### Functions for metrics read out ###
 
index c9f70a1..1874f97 100755 (executable)
@@ -21,4 +21,4 @@
 
 docker build --build-arg NEXUS_PROXY_REPO=nexus3.onap.org:10001/  -t mrstub .
 
-docker run --rm -it -p 3904:3904 -p 3905:3905 -v "$PWD/cert:/usr/src/app/cert" mrstub
+docker run --rm --name=dmaap-mr -it -p 3904:3904 -p 3905:3905 -v "$PWD/cert:/usr/src/app/cert" mrstub
index d5d6c2c..4cb03c7 100644 (file)
@@ -22,6 +22,11 @@ COPY . /usr/src/app/
 
 WORKDIR /usr/src/app
 
+## install curl & ping to help debug
+RUN apt update
+RUN apt install curl -y
+RUN apt-get install iputils-ping -y
+
 RUN pip install -r requirements.txt
 
-CMD [ "python3", "main.py" ]
+CMD [ "python3", "-u", "main.py" ]
index 5dba4fe..419bef1 100755 (executable)
@@ -30,7 +30,7 @@ docker build -f Dockerfile-sdnr-sim -t sdnr-simulator .
 docker build -f Dockerfile-message-generator -t message-generator .
 
 # start up dmaap message router
-cd ${SHELL_FOLDER}/../../../../docker-compose/
+cd ${SHELL_FOLDER}/../../../../../docker-compose/
 docker-compose -f docker-compose.yaml -f mr/docker-compose.yml up -d
 
 # wait until mr up & running
diff --git a/test/usecases/oruclosedlooprecovery/scriptversion/k8s/README.md b/test/usecases/oruclosedlooprecovery/scriptversion/k8s/README.md
new file mode 100644 (file)
index 0000000..255e220
--- /dev/null
@@ -0,0 +1,24 @@
+## Run script
+
+`bash start.sh`
+
+This scripts will build images and start up four components:
+- dmaap-mr
+- oru-app
+- sdnr-simulator
+- message-generator
+
+## License
+
+Copyright (C) 2021 Nordix Foundation.
+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.
diff --git a/test/usecases/oruclosedlooprecovery/scriptversion/k8s/linkfailure.yml b/test/usecases/oruclosedlooprecovery/scriptversion/k8s/linkfailure.yml
new file mode 100644 (file)
index 0000000..ede8602
--- /dev/null
@@ -0,0 +1,200 @@
+#  Copyright (C) 2021 Nordix Foundation. All rights reserved.
+#  ========================================================================
+#  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.
+#  ============LICENSE_END=================================================
+#
+apiVersion: v1
+kind: Namespace
+metadata:
+  name: nonrtric
+---
+apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
+kind: Deployment
+metadata:
+  name: dmaap-mr
+  namespace: nonrtric
+  labels:
+    app: dmaap-mr
+spec:
+  selector:
+    matchLabels:
+      app: dmaap-mr
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        app: dmaap-mr
+    spec:
+      containers:
+      - name: dmaap-mr
+        image: mrstub
+        imagePullPolicy: IfNotPresent
+        ports:
+        - name: http
+          containerPort: 3904
+        - name: https
+          containerPort: 3905
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: dmaap-mr
+  namespace: nonrtric
+  labels:
+    app: dmaap-mr
+spec:
+  type: ClusterIP
+  ports:
+    - name: http
+      protocol: TCP
+      port: 3904
+    - name: https
+      protocol: TCP
+      port: 3905
+  selector:
+    app: dmaap-mr
+---
+apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
+kind: Deployment
+metadata:
+  name: message-generator
+  namespace: nonrtric
+  labels:
+    app: message-generator
+spec:
+  selector:
+    matchLabels:
+      app: message-generator
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        app: message-generator
+    spec:
+      containers:
+      - name: message-generator
+        image: message-generator
+        imagePullPolicy: IfNotPresent
+        env:
+        - name: MR-HOST
+          value: http://dmaap-mr
+        - name: MR-PORT
+          value: "3904"
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: message-generator
+  namespace: nonrtric
+  labels:
+    app: message-generator
+spec:
+  # type: ClusterIP
+  ports:
+    - protocol: TCP
+      port: 80
+  selector:
+    app: message-generator
+---
+apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
+kind: Deployment
+metadata:
+  name: sdnr-simulator
+  namespace: nonrtric
+  labels:
+    app: sdnr-simulator
+spec:
+  selector:
+    matchLabels:
+      app: sdnr-simulator
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        app: sdnr-simulator
+    spec:
+      containers:
+      - name: sdnr-simulator
+        image: sdnr-simulator
+        imagePullPolicy: IfNotPresent
+        ports:
+        - name: tcp
+          containerPort: 9990
+        env:
+        - name: MR-HOST
+          value: http://dmaap-mr
+        - name: MR-PORT
+          value: "3904"
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: sdnr-simulator
+  namespace: nonrtric
+  labels:
+    app: sdnr-simulator
+spec:
+  type: ClusterIP
+  ports:
+    - protocol: TCP
+      port: 9990
+  selector:
+    app: sdnr-simulator
+---
+apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
+kind: Deployment
+metadata:
+  name: oru-app
+  namespace: nonrtric
+  labels:
+    app: oru-app
+spec:
+  selector:
+    matchLabels:
+      app: oru-app
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        app: oru-app
+    spec:
+      containers:
+      - name: oru-app
+        image: oru-app
+        imagePullPolicy: IfNotPresent
+        env:
+        - name: MR-HOST
+          value: http://dmaap-mr
+        - name: MR-PORT
+          value: "3904"
+        - name: SDNR-HOST
+          value: http://sdnr-simulator
+        - name: SDNR-PORT
+          value: "9990"
+        - name: VERBOSE
+          value: "on"
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: oru-app
+  namespace: nonrtric
+  labels:
+    app: oru-app
+spec:
+  # type: ClusterIP
+  ports:
+    - protocol: TCP
+      port: 80
+  selector:
+    app: oru-app
\ No newline at end of file
diff --git a/test/usecases/oruclosedlooprecovery/scriptversion/k8s/start.sh b/test/usecases/oruclosedlooprecovery/scriptversion/k8s/start.sh
new file mode 100755 (executable)
index 0000000..0bedbd9
--- /dev/null
@@ -0,0 +1,42 @@
+#  Copyright (C) 2021 Nordix Foundation. All rights reserved.
+#  ========================================================================
+#  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.
+#  ============LICENSE_END=================================================
+#
+
+SHELL_FOLDER=$(cd "$(dirname "$0")";pwd)
+cd ${SHELL_FOLDER}
+kubectl delete -f linkfailure.yml
+
+# be careful if other stopped containers are on the same system
+docker stop $(docker ps -aq)
+docker system prune -f
+
+# build o-ru application image
+cd ${SHELL_FOLDER}/../app/
+docker build -t oru-app .
+
+# build simulator image of sdnr
+cd ${SHELL_FOLDER}/../simulators/
+docker build -f Dockerfile-sdnr-sim -t sdnr-simulator .
+
+# build message generator image
+docker build -f Dockerfile-message-generator -t message-generator .
+
+# build dmaap-mr sim
+cd ${SHELL_FOLDER}/../../../../mrstub/
+docker build -t mrstub .
+
+# apply k8s yaml file
+cd ${SHELL_FOLDER}
+kubectl apply -f linkfailure.yml
\ No newline at end of file
index 139b791..841cf7f 100644 (file)
@@ -22,6 +22,11 @@ COPY . /usr/src/app/
 
 WORKDIR /usr/src/app
 
+## install curl & ping to help debug
+RUN apt update
+RUN apt install curl -y
+RUN apt-get install iputils-ping -y
+
 RUN pip install -r requirements.txt
 
-CMD [ "python3", "message_generator.py" ]
+CMD [ "python3", "-u", "message_generator.py" ]
index 103c97c..4275b17 100644 (file)
@@ -22,6 +22,11 @@ COPY . /usr/src/app/
 
 WORKDIR /usr/src/app
 
+## install curl & ping to help debug
+RUN apt update
+RUN apt install curl -y
+RUN apt-get install iputils-ping -y
+
 RUN pip install -r requirements.txt
 
-CMD [ "python3", "sdnr_simulator.py" ]
+CMD [ "python3", "-u", "sdnr_simulator.py" ]
index 1b0676c..9c2ee08 100644 (file)
@@ -90,6 +90,14 @@ heartBeatMessage = {
    }
  }
 
+def sendPostRequest(url ,msg):
+    try:
+        requests.post(url, json=msg)
+    except Exception as e:
+        print(type(e))
+        print(e.args)
+        print(e)
+
 if __name__ == "__main__":
     if os.getenv("MR-HOST") is not None:
         mr_host = os.getenv("MR-HOST")
@@ -104,13 +112,13 @@ if __name__ == "__main__":
         random_time = int(10 * random.random())
         if (random_time % 3 == 1):
             print("Sent heart beat")
-            requests.post(mr_url, json=heartBeatMessage);
+            sendPostRequest(mr_url, heartBeatMessage)
 
         o_ru_id = "ERICSSON-O-RU-1122" + str(random_time)
         print("Sent link failure for O-RAN-RU: " + o_ru_id)
         msg_as_json = json.loads(json.dumps(linkFailureMessage))
         msg_as_json["event"]["commonEventHeader"]["sourceName"] = o_ru_id
-        requests.post(mr_url, json=msg_as_json);
+        sendPostRequest(mr_url, msg_as_json)
 
         time.sleep(random_time)