Feat: Add Openstack devstack template 28/71828/7 v0.13.0
authorAnil Belur <abelur@linuxfoundation.org>
Tue, 13 Jun 2023 00:35:55 +0000 (10:35 +1000)
committerAnil Belur <abelur@linuxfoundation.org>
Wed, 14 Jun 2023 13:25:38 +0000 (23:25 +1000)
Move the Openstack devstack templates to build VM's with devstack
installed and ready for testing. ORAN community has requested devstack
images to be available on the CI env.

The templates and provision files have been tested to build the latest
version of the devstack yoga on the CI.

ZZCI - CentOS Stream 8 - devstack-yoga - x86_64 - 20230612-132235.763

Issue: RELENG-4760
Change-Id: I60d37d769158f34b22b84111fd5229c616232c27
Signed-off-by: Anil Belur <abelur@linuxfoundation.org>
provision/devstack-centos.yaml [new file with mode: 0644]
provision/devstack-pre-pip-centos.yaml [new file with mode: 0644]
releasenotes/notes/add-devstack-templates-37498c0c24155f77.yaml [new file with mode: 0644]
templates/devstack-pre-pip-yoga.json [new file with mode: 0644]
templates/devstack.json [new file with mode: 0644]

diff --git a/provision/devstack-centos.yaml b/provision/devstack-centos.yaml
new file mode 100644 (file)
index 0000000..4847d2d
--- /dev/null
@@ -0,0 +1,43 @@
+---
+- import_playbook: ../common-packer/provision/baseline.yaml
+
+- hosts: all
+  become_user: root
+  become_method: sudo
+
+  pre_tasks:
+    - include_role: name=lfit.system-update
+
+  tasks:
+    - name: "Install devstack dependencies"
+      block:
+        - name: Install xpath dependencies
+          yum:
+            name:
+              - perl-XML-XPath
+              - crudini
+            state: present
+          become: true
+        - name: Installing non-baseline requirements
+          yum:
+            name:
+              - deltarpm
+              - libxml2-devel
+              - libxslt-devel
+              - libffi-devel
+              - openssl-devel
+              - "@development"
+            state: present
+          become: true
+        - name: check if net link setup exists
+          stat:
+            path: /etc/udev/rules.d/80-net-setup-link.rules
+          register: rules_file_exists
+        - name: Update net link setup
+          file:
+            src: /dev/null
+            dest: /etc/udev/rules.d/80-net-setup-link.rules
+            state: link
+            force: yes
+          become: true
+          when: rules_file_exists.stat.exists == true
diff --git a/provision/devstack-pre-pip-centos.yaml b/provision/devstack-pre-pip-centos.yaml
new file mode 100644 (file)
index 0000000..fefe564
--- /dev/null
@@ -0,0 +1,146 @@
+---
+- import_playbook: ../common-packer/provision/baseline.yaml
+
+- hosts: all
+  become_user: root
+  become_method: sudo
+
+  pre_tasks:
+    - include_role: name=lfit.system-update
+
+  tasks:
+    - name: "Install devstack dependencies"
+      block:
+        - name: Install xpath dependencies
+          yum:
+            name:
+              - perl-XML-XPath
+              - crudini
+            state: present
+          become: true
+        - name: Install non-baseline requirements
+          yum:
+            name:
+              - libxml2-devel
+              - libxslt-devel
+              - libffi-devel
+              - openssl-devel
+              - "@development"
+            state: present
+          become: true
+        - name: check if net link setup exists
+          stat:
+            path: /etc/udev/rules.d/80-net-setup-link.rules
+          register: rules_file_exists
+        - name: Update net link setup
+          file:
+            src: /dev/null
+            dest: /etc/udev/rules.d/80-net-setup-link.rules
+            state: link
+            force: yes
+          become: true
+          when: rules_file_exists.stat.exists == true
+        - name: Install RDMA (InfiniBand/iWARP/RoCE) requirements
+          yum:
+            name:
+              - libibverbs
+              - libmlx5
+            state: present
+          become: true
+    - name: "Pre-Install yum and pip packages"
+      block:
+        - name: Create /tmp/devstack directory
+          file:
+            path: /tmp/devstack
+            state: directory
+            mode: 0755
+        - name: Fetch openstack devstack-dev repo
+          git:
+            repo: https://github.com/openstack-dev/devstack.git
+            dest: /tmp/devstack
+            version: "{{ os_branch }}"
+        - name: "Read openstack devstack dependencies"
+          shell: "sed -e 's/#.*//' /tmp/devstack/files/rpms/general"
+          register: sed_output
+          args:
+            warn: False
+        - name: "Install non-baseline requirements for {{ os_branch }}"
+          yum:
+            name: "{{ sed_output.stdout_lines }}"
+            state: present
+          become: true
+        - name: git clone openstack core projects
+          git: repo='https://github.com/openstack/{{ item }}.git'
+            dest='/tmp/devstack/{{ item }}'
+            version='{{ os_branch }}'
+          with_items:
+            - requirements
+            - keystone
+            - glance
+            - cinder
+            - neutron
+            - nova
+            - horizon
+        - name: Install pip dependencies
+          shell: |
+            cd "{{ item }}"
+            git branch -a
+            cd ..
+            pwd
+            pip install -c requirements/upper-constraints.txt -e "{{ item }}"
+            pip install -c requirements/upper-constraints.txt -r "{{ item }}/test-requirements.txt"
+            # ignore non-zero return code
+            exit 0
+          args:
+            chdir: /tmp/devstack
+            warn: False
+          with_items:
+            - requirements
+            - keystone
+            - glance
+            - cinder
+            - neutron
+            - nova
+            - horizon
+          become: true
+
+    - name: "Install openvswitch from relevant openstack branch"
+      block:
+        - name: "Install CentOS openstack release {{ rdo_branch }}"
+          yum:
+            name: "centos-release-openstack-{{ rdo_branch }}"
+            state: present
+          become: true
+        - name: "Install openvswitch 2.8.2 for stable/queens"
+          yum:
+            name: openvswitch-2.8.2-1.el7
+            state: present
+            disable_gpg_check: yes
+          when: rdo_branch == 'queens'
+          become: true
+        - name: "Install openvswitch latest for stable/rocky"
+          yum:
+            name: openvswitch
+            state: present
+            disable_gpg_check: yes
+          when: rdo_branch == 'rocky'
+          become: true
+
+    # Workaround for git deps conflict on rocky
+    - name: Swap to git
+      block:
+        - name: Gather rpm package facts
+          package_facts:
+            manager: auto
+        - name: Replace git2u with git
+          command: yum replace -y git2u --replace-with git
+          when: ansible_facts.packages['git2u'] is defined
+      become: true
+
+    - name: "Cleanup devstack directory"
+      block:
+        - name: "Removing /tmp/devstack"
+          file:
+            path: /tmp/devstack
+            state: absent
+          become: true
diff --git a/releasenotes/notes/add-devstack-templates-37498c0c24155f77.yaml b/releasenotes/notes/add-devstack-templates-37498c0c24155f77.yaml
new file mode 100644 (file)
index 0000000..bb41350
--- /dev/null
@@ -0,0 +1,4 @@
+---
+features:
+  - |
+    Add Openstack devstack templates and provisioner to common-packer.
diff --git a/templates/devstack-pre-pip-yoga.json b/templates/devstack-pre-pip-yoga.json
new file mode 100644 (file)
index 0000000..9b59681
--- /dev/null
@@ -0,0 +1,75 @@
+{
+  "variables": {
+    "ansible_roles_path": ".galaxy",
+    "arch": "x86_64",
+    "base_image": null,
+    "cloud_network": null,
+    "cloud_user_data": null,
+    "cloud_region": "ca-ymq-1",
+    "vm_use_block_storage": "true",
+    "vm_volume_size": "20",
+    "vm_image_disk_format": "",
+    "distro": null,
+    "docker_source_image": null,
+    "flavor": "v3-standard-2",
+    "ssh_user": null,
+    "ssh_proxy_host": ""
+  },
+  "builders": [
+    {
+      "name": "openstack",
+      "image_name": "ZZCI - {{user `distro`}} - devstack-yoga - {{user `arch`}} - {{isotime \"20060102-150405.000\"}}",
+      "instance_name": "{{user `distro`}}-devstack-yoga-{{uuid}}",
+      "source_image_name": "{{user `base_image`}}",
+      "type": "openstack",
+      "region": "{{user `cloud_region`}}",
+      "networks": ["{{user `cloud_network`}}"],
+      "user_data_file": "{{user `cloud_user_data`}}",
+      "ssh_username": "{{user `ssh_user`}}",
+      "ssh_proxy_host": "{{user `ssh_proxy_host`}}",
+      "flavor": "{{user `flavor`}}",
+      "metadata": {
+        "ci_managed": "yes"
+      },
+      "use_blockstorage_volume": "{{user `vm_use_block_storage`}}",
+      "volume_size": "{{user `vm_volume_size`}}",
+      "image_disk_format": "{{user `vm_image_disk_format`}}"
+    },
+    {
+      "name": "docker",
+      "type": "docker",
+      "image": "{{ user `docker_source_image` }}",
+      "commit": true,
+      "changes": ["ENTRYPOINT [\"\"]", "CMD [\"\"]"]
+    }
+  ],
+  "provisioners": [
+    {
+      "type": "shell",
+      "scripts": ["common-packer/provision/install-python.sh"],
+      "execute_command": "chmod +x {{ .Path }}; if [ \"$UID\" == \"0\" ]; then {{ .Vars }} '{{ .Path }}'; else {{ .Vars }} sudo -E '{{ .Path }}'; fi"
+    },
+    {
+      "type": "shell-local",
+      "command": "./common-packer/ansible-galaxy.sh {{user `ansible_roles_path`}}"
+    },
+    {
+      "type": "ansible",
+      "playbook_file": "provision/devstack-pre-pip-centos.yaml",
+      "command": "./common-packer/ansible-playbook.sh",
+      "skip_version_check": true,
+      "ansible_env_vars": [
+        "ANSIBLE_DEBUG=False",
+        "ANSIBLE_NOCOWS=1",
+        "ANSIBLE_PIPELINING=True",
+        "ANSIBLE_ROLES_PATH={{user `ansible_roles_path`}}",
+        "ANSIBLE_CALLBACK_WHITELIST=profile_tasks",
+        "ANSIBLE_STDOUT_CALLBACK=debug"
+      ],
+      "extra_arguments": [
+        "--extra-vars",
+        "os_branch=stable/yoga rdo_branch=yoga"
+      ]
+    }
+  ]
+}
diff --git a/templates/devstack.json b/templates/devstack.json
new file mode 100644 (file)
index 0000000..ba0668e
--- /dev/null
@@ -0,0 +1,70 @@
+{
+  "variables": {
+    "ansible_roles_path": ".galaxy",
+    "arch": "x86_64",
+    "base_image": null,
+    "cloud_network": null,
+    "cloud_user_data": null,
+    "cloud_region": "ca-ymq-1",
+    "vm_use_block_storage": "true",
+    "vm_volume_size": "20",
+    "vm_image_disk_format": "",
+    "distro": null,
+    "docker_source_image": null,
+    "flavor": "v3-standard-2",
+    "ssh_user": null,
+    "ssh_proxy_host": ""
+  },
+  "builders": [
+    {
+      "name": "openstack",
+      "image_name": "ZZCI - {{user `distro`}} - devstack - {{user `arch`}} - {{isotime \"20060102-150405.000\"}}",
+      "instance_name": "{{user `distro`}}-devstack-{{uuid}}",
+      "source_image_name": "{{user `base_image`}}",
+      "type": "openstack",
+      "region": "{{user `cloud_region`}}",
+      "networks": ["{{user `cloud_network`}}"],
+      "user_data_file": "{{user `cloud_user_data`}}",
+      "ssh_username": "{{user `ssh_user`}}",
+      "ssh_proxy_host": "{{user `ssh_proxy_host`}}",
+      "flavor": "{{user `flavor`}}",
+      "metadata": {
+        "ci_managed": "yes"
+      },
+      "use_blockstorage_volume": "{{user `vm_use_block_storage`}}",
+      "volume_size": "{{user `vm_volume_size`}}",
+      "image_disk_format": "{{user `vm_image_disk_format`}}"
+    },
+    {
+      "name": "docker",
+      "type": "docker",
+      "image": "{{ user `docker_source_image` }}",
+      "commit": true,
+      "changes": ["ENTRYPOINT [\"\"]", "CMD [\"\"]"]
+    }
+  ],
+  "provisioners": [
+    {
+      "type": "shell",
+      "scripts": ["common-packer/provision/install-python.sh"],
+      "execute_command": "chmod +x {{ .Path }}; if [ \"$UID\" == \"0\" ]; then {{ .Vars }} '{{ .Path }}'; else {{ .Vars }} sudo -E '{{ .Path }}'; fi"
+    },
+    {
+      "type": "shell-local",
+      "command": "./common-packer/ansible-galaxy.sh {{user `ansible_roles_path`}}"
+    },
+    {
+      "type": "ansible",
+      "playbook_file": "provision/devstack-centos.yaml",
+      "command": "./common-packer/ansible-playbook.sh",
+      "skip_version_check": true,
+      "ansible_env_vars": [
+        "ANSIBLE_NOCOWS=1",
+        "ANSIBLE_PIPELINING=True",
+        "ANSIBLE_ROLES_PATH={{user `ansible_roles_path`}}",
+        "ANSIBLE_CALLBACK_WHITELIST=profile_tasks",
+        "ANSIBLE_STDOUT_CALLBACK=debug"
+      ]
+    }
+  ]
+}