diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..e4066f844076f35e21c7d8950d152783355d03f1 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,144 @@ +# Copyright ETSI OSM and others +# +# 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. + +variables: + TESTS_VERSION: "2.7.1" + ETSI_VIM_PASSWORD: $ETSI_VIM_PASSWORD + SSH_KEY: $SSH_KEY + GITLAB_API: $GITLAB_API + GITLAB_TOKEN: $GITLAB_TOKEN + ENV: "staging" + PIPELINE: "TEST" + +stages: + - deploy + - test + - cleanup + +workflow: + rules: + - if: $CI_MERGE_REQUEST_ID + when: never + - if: $CI_COMMIT_BRANCH + + +deploy: + stage: deploy + tags: + - openstack + environment: + name: $ENV + resource_group: $ENV + + rules: + - if: $PIPELINE == "DEPLOY" || $PIPELINE == "FULL" + + artifacts: + when: always + paths: + - artifacts + + before_script: + + - mkdir artifacts + + - echo -e "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + + - echo "GitLab Runner Installation" + - curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash + - sudo apt-get install gitlab-runner + - sudo apt-get install -y moreutils + + + script: + - set -a + - source hive/openstack-etsi.rc + - envsubst < $(pwd)/hive/openstack-etsi.rc | sponge $(pwd)/hive/openstack-etsi.rc + - python3 deploy.py + + + +testing: + stage: test + environment: + name: $ENV + tags: + - openstack + resource_group: $ENV + rules: + - if: $PIPELINE == "TEST" || $PIPELINE == "FULL" + artifacts: + when: always + paths: + - artifacts + + before_script: + - mkdir artifacts + - echo -e "$SSH_KEY" > ~/.ssh/id_rsa + - chmod 600 ~/.ssh/id_rsa + + script: + - echo "Test..." + + - echo "GitLab Runner Installation" + - curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash + - sudo apt-get install gitlab-runner + + - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg + - | + echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + - sudo apt-get update + - sudo apt-get install docker-ce docker-ce-cli containerd.io -y + - | + cat << EOF | sudo tee /etc/docker/daemon.json + { + "registry-mirrors": ["http://172.21.1.1:5000"] + } + EOF + - sudo chmod 666 /var/run/docker.sock + - sudo systemctl daemon-reload + - sudo systemctl restart docker.service + + - echo "TST10" + + - | + docker run --env OSM_HOSTNAME=$OSM_HOSTNAME \ + --env JUJU_PASSWORD=$JUJU_PASSWORD \ + -v /$(pwd)/hive/kubeconfig.yaml:/root/.kube/config \ + -v $(pwd)/artifacts:/robot-systest/conformance-tests/reports/ \ + opensourcemano/tests:testing-daily -T $TESTS_VERSION -t nothing + + after_script: + - set -a + - source hive/openstack-etsi.rc + - python3 logs.py + + +cleanup: + stage: cleanup + environment: + name: $ENV + resource_group: $ENV + tags: + - openstack + rules: + - if: $PIPELINE == "CLEANUP" + script: + - set -a + - source hive/openstack-etsi.rc + - python3 -c 'from utils import *; cleanVM()' + diff --git a/deploy.py b/deploy.py new file mode 100644 index 0000000000000000000000000000000000000000..c15eda40c4c798ba352c60afc7ba1fea6742a194 --- /dev/null +++ b/deploy.py @@ -0,0 +1,79 @@ +from utils import * + +imageRef = "3a7f7ce7-7a20-4fe5-8f3e-e62151658f84" +flavorRef = "m1.xlarge" +networkId = "21ea5d92-24f1-40ab-8d28-83230e277a49" +vmName = "VM-Test" +keyName = "SSH" + + +#Requesting openstack auth token +getAuth() + +#Deleting previous instance +cleanVM() + + +#Creating new server +payload = '{"server": {"name": "%s", "imageRef": "%s", "flavorRef": "%s", "networks": [{"uuid": "%s"}], "key_name": "%s"}}' % (vmName, imageRef, flavorRef, networkId, keyName) +res = computeRequest("POST", "servers", payload) +print(res.text) +print("\n\n\n") +id = (res.json())['server']['id'] +print(id) + +time.sleep(30) + + +#Storing instance ID in GitLab +if (gitlabRequest('GET', 'variables/INSTANCE_ID', None).status_code == 404): + #POST + payload = '{"variable_type": "env_var","key": "INSTANCE_ID","value": "%s","protected": false,"masked": false,"environment_scope": "%s"}' % (id, os.environ.get('CI_ENVIRONMENT_NAME')) + res = gitlabRequest("POST", "variables", payload) + print(res.text) +else: + #PUT + res = gitlabRequest('PUT', 'variables/INSTANCE_ID', {"value": "{}".format(id)}) + print(res.status_code) + print(res.text) + +print(res.status_code) +print(res.text) + + +#Retrieving instance ip +res = computeRequest("GET", "servers/{}".format(id), None) +ip = ((res.json())['server']['addresses']['osm-ext'][0])['addr'] +print(ip) + +#Storing OSM Hostname in GitLab +hostname = "nbi.{}.nip.io:443".format(ip) +if (gitlabRequest('GET', 'variables/OSM_HOSTNAME', None).status_code == 404): + #POST + payload = '{"variable_type": "env_var","key": "OSM_HOSTNAME","value": "%s","protected": false,"masked": false,"environment_scope": "%s"}' % (id, os.environ.get('CI_ENVIRONMENT_NAME')) + res = gitlabRequest("POST", "variables", payload) + print(res.text) +else: + #PUT + res = gitlabRequest('PUT', 'variables/OSM_HOSTNAME', {"value": "{}".format(hostname)}) + print(res.status_code) + print(res.text) + +print(res.status_code) +print(res.text) + +#Adding ECDSA key to known hosts +subprocess.run(["ssh-keyscan -t ECDSA {} >> ~/.ssh/known_hosts".format(ip)], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + +#Copying scripts to deployment server +subprocess.run(["scp -r scripts/ ubuntu@{}:~/".format(ip)], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + +#Copying config files to deployment server +subprocess.run(["scp -r hive/ ubuntu@{}:~/".format(ip)], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + +#Connecting via SSH & installing OSM +subprocess.run(["ssh ubuntu@{} 'chmod +x scripts/*.sh && scripts/deploy.sh' > artifacts/SSH.log".format(ip)], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + + + diff --git a/hive/kubeconfig.yaml b/hive/kubeconfig.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e28b440aec1c096f774c1331c8bd13a3827d252a --- /dev/null +++ b/hive/kubeconfig.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +clusters: +- cluster: + certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJd01URXhNekF3TXpFMU5Gb1hEVE13TVRFeE1UQXdNekUxTkZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBSjFZClNvcjZOSGdNOVhFY0ZtcEtNOWI2NWVDbUVPNzJIV3JZT2RyU29mcGEybDNQNko2Z0lBa1p2YmkvTUxlZnVoUXQKTlM5dmtab1duZ1dxN3c5LzI2TFk5Zkl5UWdLdGo0OE4vRm1mSUhiaXNUUDh3M1hsL1pMRlJkaEFFSzNXTkcvUwo5R3BTWlREd0dlNHB6a3hOY0l6Q2dPT3YvQkNVOTlta3FtY1VRTFJDK0RnWGZmamppVVFGRWdTVVdWWndRdW9CCjVYRHRjR3J5eS9LczZZQnk2WFVZejBDc2RNME80cUw2aEJtQ3RwaysrQ01Oa29uZlJtdlU4Nko1NGxwajRQVjEKTXVsMXEwS2hCeHFoZzBXUFBTV2hWQkNqaGxybjJkb21YaGhHNmp0NFk0L2N3Wmk2blB0b3RhSDlOZzBxdCtCMgo1WjdvTjlqTm1hdnRudFJrK1JNQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFJbE0xLzBjQkV0ZmlkQWN0eWtaVE1pRFpTWHIKN2F4Ly9PRnk1U3l0YVkyVXQ4cWpaYUswYXZEaGpZczlsTXBRWDVOb3dmdjZtT3R2U3diN05OQlI5bDZzOFEvKwpjRlZLYmNwUG1zRG4xVFVKZTVaR0JvT3Yra3F5a1hOYm5odVVWV3RqZjE1SFVwczRNR2o5aGZhNmNvNVduQ2E2CmR3R2VEMXpYUTM0ZmhySitxbTJ1WGwybE9kVTVNVS8yZGdqd1UxeVQ0T3ZOR2p1dG12dytYbzNyR3BYVUFBM08KZHVBbVk0ZFNkcjFWenlBODcxbkJkT3FEclJPR2ZTVE5WZ0ljdEhkOHFLWmE0WVZlL2FVc2gzTS9Xa0dIZlFPSgpIY1B2Nk0rd3p4dzF0L0lsbDd5RFpScHNNTGFDZXJyOVNyQ1FpNmtIaGhiSXh4YlNNbVhWd1FPUDhDdz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= + server: https://172.21.248.18:6443 + name: kubernetes +contexts: +- context: + cluster: kubernetes + user: kubernetes-admin + name: kubernetes-admin@kubernetes +current-context: kubernetes-admin@kubernetes +kind: Config +preferences: {} +users: +- name: kubernetes-admin + user: + client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM4akNDQWRxZ0F3SUJBZ0lJRHhmTkpFajlJcmN3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TURFeE1UTXdNRE14TlRSYUZ3MHlNakV4TVRZeE5UVXlOVFJhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQStTTjBhVm56d1dJZFc0eVEKUDRndTYvejJDQmIzWWNIU2h4aUpzakxwMjJaMHJ2MURoQXZBdGt1My9YbXA0eEhWeHFwTzdnM0V0R3BLNU41bQo2VkZlN0NvV0gyOXBDYXFMa0JTbmpvVXJ6YjJUSFFUZG9obFpzNlBYZXF0LzJ3cStQRWNROFkwc3diR2VSU1I4CkJUT2ZmUlNhT1FSWDRWY3d4cU93OWt0SmdvbnlkcWswSWNacmlEdGF1VHdIVjlaelU4MTVSc25EeU8rMHhUWlMKQ2lPdEg0THh0ZVhlQWdLNlRUK2NsS3FGMXR0bE5zK2RTWFlEYWhLdWxRS0tSSGhKYjVRRWNZV0I1Q1dGUk5CMQozR0JEcEJiUkZTd0hrWVFEUm50eGRXTEhsTFNpUVdXUVU1L28wcHFDVmVLdGQrSkhwRzJVeTQra1NybWx5eTVzCjdOYThOd0lEQVFBQm95Y3dKVEFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFIeEtxa1pYOUR3QWhubFVsNEhpK1hEdlJVU3g3cjZ2MXpjVgpjckZkMUFMNWx4Rm9TTnhpOGlLTmkzOHU1WE5PcGhZWmE2RTRrU2xpVzlreWhUajQyaUthQzFoMGxMMlQ3N0lCCldoMktOenNpdjRZSjBuVlFXNmpMM1hPM2w2Ukpab2ZLc2JzNkJtSkJHejNIcENQZmNxdTI0R0lrUHF1b2pyaU4KamU3cHB1ZHNzVEY2cTRTTkw0aFFFZ0xFVFczU3dHTmtRN04wcWJvTHhhQmRGWC96dmRsN01aaXJrLzFVb0hNRQozV2pzSERHc3BCQnBwNlBHRlcraXpRNEJpckZLOVJmTno1a0svV3ZSRm12TG8rRFc3TCtTMjF6MkZROERwRTdHCjJnT1d3dmRROFVBUWpTZHEyVHdWZEJ0MEdJWEVmZlFLaDc5enpMY1FIbTBwOEpTZjYvVT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= + client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBK1NOMGFWbnp3V0lkVzR5UVA0Z3U2L3oyQ0JiM1ljSFNoeGlKc2pMcDIyWjBydjFECmhBdkF0a3UzL1htcDR4SFZ4cXBPN2czRXRHcEs1TjVtNlZGZTdDb1dIMjlwQ2FxTGtCU25qb1VyemIyVEhRVGQKb2hsWnM2UFhlcXQvMndxK1BFY1E4WTBzd2JHZVJTUjhCVE9mZlJTYU9RUlg0VmN3eHFPdzlrdEpnb255ZHFrMApJY1pyaUR0YXVUd0hWOVp6VTgxNVJzbkR5TysweFRaU0NpT3RINEx4dGVYZUFnSzZUVCtjbEtxRjF0dGxOcytkClNYWURhaEt1bFFLS1JIaEpiNVFFY1lXQjVDV0ZSTkIxM0dCRHBCYlJGU3dIa1lRRFJudHhkV0xIbExTaVFXV1EKVTUvbzBwcUNWZUt0ZCtKSHBHMlV5NCtrU3JtbHl5NXM3TmE4TndJREFRQUJBb0lCQURjcnk4Njh0Y2NnWkNIdQo2YzYzNkxRbnk1QVZEZWxmRTdFSkZRMGFTMEZqMmZrYWFzWW1HQ0lHZUpNd1N4Zld6a0YxVzQ5S0MwSnN1M01kCmNTcS84MFpYTjVqMGdnMDY4RGNTNjl3YXo0MTdLc1hsV3ZOWHE4NmxQTVdVanZiQjFVamg3L1dkN3NoaC9ndVAKdmNzbEdHK0pqWEdNN2EwZ010UDZVZWpvMlRtSHhRZXJZQzFMbVlmbmlJSC9ZZHNuazBEYlpLRVZwK3hHc0tvawpOcDE5RWYyS1cycDA2STFuUU1QSFRzVG9rbW0rQkUySXcrTk9tWlEvZ01DSVFyUHd0UTIvWnFEUlVkdFJRa21kClFuR3FvbUQzdnBHbHJEdDR2aS9iRHliaFlMTEkvZC8zQzhCcUE0eEI1R3Vuc01VU0pQcHVZQTd5d2RnZGorNmkKYzdtZUZQRUNnWUVBK3EyTGNIdi96R0tqZ0dHVDNBOVRQNVpmTG1pdXV2RWlORWZHaTNSMFhtczgvblVhUExETgpBTk96bmczYWhZRk5Fc0E2Z0lONmZJQ3NUZzgyZm5mbUlsVnAxZzhweFBBVkJpd2JrSnVBVVN4MUpVZDM2NjVvCm05RmNVVDgwMnNkVFo4cVR5WW1lOHZmY3l1VXQ0eUlOUjVNTHEvMFhwYjVmbFozMEQvT0ZEUWtDZ1lFQS9tMkwKRDNlaW4zQVZRdTgzV2E3VXNGR3lKSG5XcFlqYkZkUG9LeXRweUVPTk5zZWtnWUlKL2xzZUlHejIvd3ArTG1xUgpvVWRwV2dXeEpuaU10M1k0RVpMOGdacFVOanI0L1h3WVFjcHhXUG9FL1NZN01YbWtTcVJSOWxyQkMzQmZlRzZWClVGVXFMeWp5UEErWmZxcXBSWHg3ZnRkWU5qenFJLy8xWjVMdER6OENnWUJ6cnNyK3FmcXVNNGNJby84OE9zWk0KUGZURzBnQnd2UDd2NlgreXM1ZFFTMlRtZU53V3pmQ05SU1ZLOTFHMDhxckMwSHN1KzMzM0h0cGxXNWZtWFNhVApDWi9CN1ZWMVVPWWk1eEFCZUFHTGRGekxTMlFJRzRDakI4YjJwNWlZcmd2TGhpMFZnTEVkcDB6NVJUSWI4NGIxClZPSzZDQjUxbXBrNXpwN25EWmFGSVFLQmdGRE0zeVhaVzVjQTFHKytZcmlqa2o0d283OTd4aFFxQTFIS1MyZ3kKVUZUZVJ5R0hnNUh4aDFUMUFQdFJQNXU5YkZjM1Z1cCtNRkg3anNmbDd1SndzOXU0NzJJRmJnc083WFlyQzlVUgpBckE4TG90cXNjL0RqczU1b3VIMjdtbkFsVUU4OVVSZTE1ZkVqREZRenZGd0ozTysxY1Z4aEQwdFdUcDNsaXIvCmVUT25Bb0dCQUxFVzJnRCtDenhXVkxPOGpodWpsNXYvS1BadTZnODVLMk1BdWVaTlM3YTJLdWpTeURINkQ4VlEKcEhqTjFDL2FjTDEvanAyYVhQQzFxSy9Nbm8wZUZqK0ZHZGxudWtSZHhSZEtVSGMzVFBidlZXaTZ2VjlvMC9QTQpEV2RPVStWWWhlS2lXWkpGWWFNcHIvQUxMa0pKV1lmUHRXYndDSitrZytEbXUzamxKRU05Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg== diff --git a/hive/openstack-etsi.rc b/hive/openstack-etsi.rc new file mode 100644 index 0000000000000000000000000000000000000000..1b1b72cb4aeac361b211c537d91e91a1e0bb1426 --- /dev/null +++ b/hive/openstack-etsi.rc @@ -0,0 +1,12 @@ +OS_AUTH_URL=http://172.21.247.1:5000/v3 +OS_PROJECT_ID=34a71bb7d82f4ec691d8cc11045ae83e +OS_PROJECT_NAME=osm_jenkins +OS_USER_DOMAIN_NAME=Default +OS_PROJECT_DOMAIN_ID=default +OS_USERNAME=osm_jenkins +OS_PASSWORD=$ETSI_VIM_PASSWORD +OS_REGION_NAME=RegionOne +OS_INTERFACE=public +OS_IDENTITY_API_VERSION=3 +OS_COMPUTE_API=http://172.21.247.1:8774/v2.1 + diff --git a/logs.py b/logs.py new file mode 100644 index 0000000000000000000000000000000000000000..6c25aeb104feadcaa750656990bae4a626a2970a --- /dev/null +++ b/logs.py @@ -0,0 +1,23 @@ +from utils import * + + +#Requesting openstack auth token +getAuth() + +#Retrieving instance id +id = (gitlabRequest("GET", "variables/INSTANCE_ID", None).json())['value'] +print(id) + +#Retrieving instance ip +res = computeRequest("GET", "servers/{}".format(id), None) +ip = ((res.json())['server']['addresses']['osm-ext'][0])['addr'] +print(ip) + +#Adding ECDSA key to known hosts +subprocess.run(["ssh-keyscan -t ECDSA {} >> ~/.ssh/known_hosts".format(ip)], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + +#Connecting via SSH & testing +subprocess.run(["ssh ubuntu@{} '~/scripts/logs.sh'".format(ip)], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + +#Copying back the logs +subprocess.run(["scp -v -r ubuntu@{}:~/artifacts/ {}/artifacts/logs/".format(ip, os.environ.get('PWD'))], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) diff --git a/scripts/deploy.sh b/scripts/deploy.sh new file mode 100644 index 0000000000000000000000000000000000000000..d9da40b203dc1dd5969705431c90100eb1a1eb9f --- /dev/null +++ b/scripts/deploy.sh @@ -0,0 +1,109 @@ +#!/bin/bash + +echo "Installing" + +sudo apt-get update +sudo apt-get install -y \ + ca-certificates \ + curl \ + gnupg \ + lsb-release +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg +echo \ +"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ +$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +sudo apt-get update + +#Docker setup +sudo apt-get install docker-ce docker-ce-cli containerd.io -y +cat << EOF | sudo tee /etc/docker/daemon.json +{ +"registry-mirrors": ["http://172.21.1.1:5000"] +} +EOF +sudo chmod 666 /var/run/docker.sock +sudo systemctl daemon-reload +sudo systemctl restart docker.service + +echo "OSM Installation" #Charmed OSM +export PATH=/snap/bin:$PATH +wget https://osm-download.etsi.org/ftp/osm-10.0-ten/install_osm.sh +chmod +x ./install_osm.sh +sudo snap install microk8s --classic --channel=1.20/stable +sudo sed -i "s|https://registry-1.docker.io|http://172.21.1.1:5000|" /var/snap/microk8s/current/args/containerd-template.toml +sudo systemctl restart snap.microk8s.daemon-containerd.service +sudo snap alias microk8s.kubectl kubectl +./install_osm.sh -y --charmed -t 10.0.3 2>&1 | tee artifacts/install_osm.log +rm install_osm.sh + +#Configuring ENV variables +set -a +source ~/hive/openstack-etsi.rc +export OSM_HOSTNAME=$(juju config -m osm nbi site_url | sed "s/http.*\?:\/\///"):443 +export PROMETHEUS_HOSTNAME=$(juju config -m osm prometheus site_url | sed "s/http.*\?:\/\///") +export PROMETHEUS_PORT=80 +export JUJU_PASSWORD=$(juju gui 2>&1 | grep password | cut -d: -f2 | xargs) +echo 'export OSM_HOSTNAME='$OSM_HOSTNAME >> ~/.bashrc + + +#Creating envfile +echo "Creating envfile" + +cat << EOF >> robot-systest.cfg +VIM_TARGET=osm +VIM_MGMT_NET=osm-ext +ENVIRONMENTS_FOLDER=environments +PACKAGES_FOLDER=/robot-systest/osm-packages +OS_CLOUD=openstack +LC_ALL=C.UTF-8 +LANG=C.UTF-8 +EOF + +envsubst < ~/hive/openstack-etsi.rc >> robot-systest.cfg +cat robot-systest.cfg +source robot-systest.cfg + +#Creating clouds.yaml file +echo "Creating clouds.yaml file" +source ~/hive/openstack-etsi.rc +cat << EOF > clouds.yaml +clouds: + openstack: + auth: + auth_url: $OS_AUTH_URL + project_name: $OS_PROJECT_NAME + username: $OS_USERNAME + password: $OS_PASSWORD + user_domain_name: $OS_USER_DOMAIN_NAME + project_domain_name: $OS_PROJECT_DOMAIN_ID +EOF +cat clouds.yaml + +#Creating a VIM +attempts=3 +while [ $attempts -ge 0 ] ; do + echo -e "\n$( date '+%F_%H:%M:%S' ) Creating VIM ${VIM_TARGET}" + osm vim-create --name ${VIM_TARGET} --user ${OS_USERNAME} --password ${OS_PASSWORD} --tenant ${OS_PROJECT_NAME} \ + --auth_url ${OS_AUTH_URL} --account_type openstack --description vim \ + --config "{management_network_name: ${VIM_MGMT_NET}, dataplane_physical_net: ${DATAPLANE:-physnet2}}" || true + STATUS="" + i=0 + while [[ ${STATUS} != "ENABLED" ]] + do + ((i++)) + if [[ $i -eq 5 ]]; then + echo "VIM stuck for more than 50 seconds as: ${VIM_LIST}" + osm vim-delete --force ${VIM_TARGET} + sleep 5 + break + fi + sleep 10 + VIM_LIST=`osm vim-list --long | grep ${VIM_TARGET}` + echo VIM status: ${VIM_LIST} + STATUS=`echo ${VIM_LIST} | grep -io ENABLED` + done + if [[ ${STATUS} = "ENABLED" ]] ; then + break + fi + ((attempts--)) +done diff --git a/scripts/logs.sh b/scripts/logs.sh new file mode 100644 index 0000000000000000000000000000000000000000..c0bb7888ade5b5349aacafd849ceb0cc34617d54 --- /dev/null +++ b/scripts/logs.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +#Collecting logs +echo "Collecting Logs" +microk8s.kubectl get pods -n osm + +for pod in `microk8s.kubectl get pods -n osm | grep -v operator | grep -v NAME| awk '{print $1}'`; do + logfile=`echo $pod | cut -d- -f1` + echo "Extracting log for $logfile" + container="" + if [ $pod == "prometheus-0" ] ; then container="prometheus" ; fi + if [ $pod == "mongodb-k8s-0" ] ; then container="mongodb-k8s" ; fi + microk8s.kubectl logs -n osm $pod $container --timestamps=true 2>&1 > ~/artifacts/$logfile.log +done diff --git a/utils.py b/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..c881c4052918beaf7f4e566d86a1aecd94453cd8 --- /dev/null +++ b/utils.py @@ -0,0 +1,55 @@ +import requests +import os +import time +import subprocess +import sys + +def cleanVM(): + if (os.environ.get('OS_TOKEN') is None): + getAuth() + + res = gitlabRequest("GET", "variables/INSTANCE_ID", None) + if res.status_code == 200: + instanceId = res.json()['value'] + res = computeRequest("DELETE", "servers/{}".format(instanceId), None) + print(res.status_code) + print(res.text) + + +def getAuth(): + url = "{}/auth/tokens?nocatalog".format(os.environ.get('OS_AUTH_URL')) + header = {"Content-Type": "application/json"} + payload = '{ "auth": { "identity": { "methods": ["password"],"password": {"user": {"domain": {"name": "%s"},"name": "%s", "password": "%s"} } }, "scope": { "project": { "domain": { "name": "%s"}, "name": "%s"} } }}' % (os.environ.get("OS_USER_DOMAIN_NAME"), os.environ.get("OS_USERNAME"), os.environ.get("OS_PASSWORD"), os.environ.get("OS_PROJECT_DOMAIN_ID"), os.environ.get("OS_PROJECT_NAME")) + res = requests.post(url, headers=header, data=payload) + print(res.status_code) + + if res.status_code == 201: + print("Authentification sucessful") + token = res.headers['X-Subject-Token'] + os.environ["OS_TOKEN"] = token + print(os.environ.get('OS_TOKEN')) + else: + print("Authentification failed") + +def computeRequest(method, endpoint, payload): + url = os.environ.get('OS_COMPUTE_API') + header = {"Content-Type": "application/json", "X-Auth-Token": os.environ.get('OS_TOKEN')} + print("{} : {}/{}".format(method, url, endpoint)) + res = requests.request("{}".format(method), "{}/{}".format(url, endpoint), headers=header, data=payload) + return res + +def gitlabRequest(method, endpoint, payload): + url = os.environ.get('GITLAB_API') + header = {"Content-Type": "application/json", "Authorization": "Bearer {}".format(os.environ.get('GITLAB_TOKEN'))} + if method == 'POST': + header = {"Content-Type": "application/json", "Authorization": "Bearer {}".format(os.environ.get('GITLAB_TOKEN'))} + filter = '' + else: + header = {"Authorization": "Bearer {}".format(os.environ.get('GITLAB_TOKEN'))} + filter = "?filter[environment_scope]={}".format(os.environ.get('CI_ENVIRONMENT_NAME')) + print("{} : {}/{}".format(method, url, endpoint)) + res = requests.request("{}".format(method), "{}/{}{}".format(url, endpoint, filter), headers=header, data=payload) + return res + + +