--- /dev/null
+---
+- 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
--- /dev/null
+---
+- 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
--- /dev/null
+---
+features:
+ - |
+ Add Openstack devstack templates and provisioner to common-packer.
--- /dev/null
+{
+ "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"
+ ]
+ }
+ ]
+}
--- /dev/null
+{
+ "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"
+ ]
+ }
+ ]
+}