| --- |
| - hosts: undercloud-client |
| vars_files: |
| - vars.yaml |
| tasks: |
| - name: Create the Kolla Networks |
| ansible.builtin.command: |
| argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "network", "create", "{{ item }}" ] |
| loop: |
| - "{{ kolla_network_interface_network }}" |
| - "{{ kolla_neutron_external_interface_network }}" |
| |
| - name: Create the Kolla Subnets |
| ansible.builtin.command: |
| argv: |
| - "{{ os_venv }}/bin/openstack" |
| - --os-cloud |
| - openstack-testing |
| - subnet |
| - create |
| - --subnet-range |
| - "{{ item.ip_range }}" |
| - --network |
| - "{{ item.network }}" |
| - "{{ item.subnet }}" |
| loop: |
| - { ip_range: "{{ network_ip_kolla_network_interface }}", network: "{{ kolla_network_interface_network }}", subnet: "{{ kolla_network_interface_subnet }}" } |
| - { ip_range: "{{ network_ip_kolla_neutron_external_interface }}", network: "{{ kolla_neutron_external_interface_network }}", subnet: "{{ kolla_neutron_external_interface_subnet }}" } |
| |
| # TODO: Support port security |
| - name: Create the Kolla Ports |
| ansible.builtin.command: |
| argv: |
| - "{{ os_venv }}/bin/openstack" |
| - --os-cloud |
| - openstack-testing |
| - port |
| - create |
| - --network |
| - "{{ item.network }}" |
| - --fixed-ip |
| - "subnet={{ item.subnet }},ip-address={{ item.ip }}" |
| - --disable-port-security |
| - "{{ item.port }}" |
| loop: |
| - { network: "{{ kolla_network_interface_network }}", subnet: "{{ kolla_network_interface_subnet }}", ip: "{{ ip_kolla_network_interface }}", port: "{{ kolla_network_interface_port }}" } |
| - { network: "{{ kolla_neutron_external_interface_network }}", subnet: "{{ kolla_neutron_external_interface_subnet }}", ip: "{{ ip_kolla_neutron_external_interface }}", port: "{{ kolla_neutron_external_interface_port }}" } |
| |
| - name: Attach the Kolla Ports to the OpenStack Node |
| ansible.builtin.command: |
| argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "server", "add", "port", "{{ openstack_node }}", "{{ item }}" ] |
| loop: |
| - "{{ kolla_network_interface_port }}" |
| - "{{ kolla_neutron_external_interface_port }}" |
| |
| - name: Get Information About kolla_network_interface_port |
| ansible.builtin.command: |
| argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "port", "show", "--format", "json", "{{ kolla_network_interface_port }}" ] |
| register: kolla_network_interface_port_info |
| |
| - name: Get MAC Address of kolla_network_interface_port |
| ansible.builtin.set_fact: |
| kolla_network_interface_port_info_mac: "{{ (kolla_network_interface_port_info.stdout | from_json).mac_address }}" |
| |
| - name: Get Information About kolla_neutron_external_interface_port |
| ansible.builtin.command: |
| argv: [ "{{ os_venv }}/bin/openstack", "--os-cloud", "openstack-testing", "port", "show", "--format", "json", "{{ kolla_neutron_external_interface_port }}" ] |
| register: kolla_neutron_external_interface_port_info |
| |
| - name: Get MAC Address of kolla_neutron_external_interface_port |
| ansible.builtin.set_fact: |
| kolla_neutron_external_interface_port_mac: "{{ (kolla_neutron_external_interface_port_info.stdout | from_json).mac_address }}" |
| |
| - name: Setup LVM to be a Cinder Backend |
| hosts: controller |
| tasks: |
| - name: Get a Free Device |
| shell: losetup -f |
| become: true |
| register: free_device |
| |
| - name: fallocate 8G in a File |
| shell: fallocate -l 32G /var/lib/cinder_data.img |
| become: true |
| |
| - name: Setup the loopback file |
| shell: losetup "{{ free_device.stdout }}" /var/lib/cinder_data.img |
| become: true |
| |
| - name: Create a Physical Volume |
| shell: pvcreate "{{ free_device.stdout }}" |
| become: true |
| |
| - name: Create a Volume Group |
| shell: vgcreate cinder-volumes "{{ free_device.stdout }}" |
| become: true |
| |
| - name: Install Kolla |
| hosts: controller |
| vars_files: |
| - vars.yaml |
| tasks: |
| - set_fact: |
| iscsi_mac: "{{ hostvars['undercloud-client']['kolla_network_interface_port_info_mac'] }}" |
| iscsi_ip: "{{ ip_kolla_network_interface }}/24" |
| |
| - set_fact: |
| ip_kolla_network_kolla: "{{ hostvars['localhost'].ISCSI_NODE_SYSTEMD_NETWORKD.v }}" |
| no_log: true |
| |
| - name: Provision the Netplan Template for the Kolla "network_interface" |
| no_log: true |
| become: true |
| ansible.builtin.copy: |
| content: "{{ ip_kolla_network_kolla }}" |
| dest: /etc/systemd/network/70-kolla-network-interface.network |
| |
| - name: Restart systemd-networkd to Apply the Network Configuration |
| become: true |
| ansible.builtin.command: |
| argv: [ "systemctl", "restart", "systemd-networkd" ] |
| |
| - name: Find the Name of Interface for 'network_interface' |
| set_fact: |
| kolla_network_interface: "{{ item }}" |
| loop: "{{ ansible_interfaces }}" |
| when: ansible_facts[item]['macaddress']|default(None) == hostvars['undercloud-client']['kolla_network_interface_port_info_mac'] |
| |
| - name: Find the Name of Interface for 'network_interface' |
| set_fact: |
| kolla_neutron_external_interface: "{{ item }}" |
| loop: "{{ ansible_interfaces }}" |
| when: ansible_facts[item]['macaddress']|default(None) == hostvars['undercloud-client']['kolla_neutron_external_interface_port_mac'] |
| |
| - name: Install Dependencies |
| become: true |
| ansible.builtin.apt: |
| name: |
| - git |
| - python3-dev |
| - python3-pip |
| - libffi-dev |
| - gcc |
| - libssl-dev |
| state: latest |
| update_cache: true |
| |
| - name: Install Dependencies for the Virtual Environment |
| become: true |
| ansible.builtin.apt: |
| name: |
| - python3-venv |
| state: latest |
| update_cache: true |
| |
| - name: Install virtualenv |
| become: true |
| ansible.builtin.pip: |
| name: virtualenv |
| executable: pip3 |
| |
| - name: Create a Kolla Venv |
| ansible.builtin.pip: |
| name: |
| - 'ansible>=6,<8' |
| - git+https://opendev.org/openstack/kolla-ansible@master |
| - python-openstackclient |
| virtualenv: "{{ kolla_venv }}" |
| |
| - name: Create the /etc/kolla Directory |
| become: true |
| ansible.builtin.file: |
| path: /etc/kolla |
| state: directory |
| mode: '0755' |
| owner: "{{ ansible_user }}" |
| group: "{{ ansible_user }}" |
| |
| - name: Copy the Password Template File to /etc/kolla |
| ansible.builtin.copy: |
| src: "{{ kolla_venv }}/share/kolla-ansible/etc_examples/kolla/passwords.yml" |
| dest: /etc/kolla/passwords.yml |
| remote_src: true |
| |
| - name: Provision the globals.yml Template |
| ansible.builtin.template: |
| src: globals.yml.j2 |
| dest: /etc/kolla/globals.yml |
| |
| - name: Install Ansible Galaxy Requirements |
| shell: . {{ kolla_venv }}/bin/activate && LC_ALL=en_US.UTF-8 kolla-ansible install-deps |
| |
| - name: Generate Kolla Password |
| shell: . {{ kolla_venv }}/bin/activate && kolla-genpwd |
| |
| - name: Bootstrap Servers with Kolla Deploy Dependencies |
| shell: . {{ kolla_venv }}/bin/activate && LC_ALL=en_US.UTF-8 kolla-ansible -i {{ kolla_venv}}/share/kolla-ansible/ansible/inventory/all-in-one bootstrap-servers |
| |
| - name: Do Pre-Deployment Checks for Hosts |
| shell: . {{ kolla_venv }}/bin/activate && LC_ALL=en_US.UTF-8 kolla-ansible -i {{ kolla_venv}}/share/kolla-ansible/ansible/inventory/all-in-one prechecks |
| |
| - name: Finally proceed to actual OpenStack deployment |
| shell: . {{ kolla_venv }}/bin/activate && LC_ALL=en_US.UTF-8 kolla-ansible -i {{ kolla_venv}}/share/kolla-ansible/ansible/inventory/all-in-one deploy |
| |
| - name: Generate clouds.yaml |
| shell: . {{ kolla_venv }}/bin/activate && LC_ALL=en_US.UTF-8 kolla-ansible -i {{ kolla_venv}}/share/kolla-ansible/ansible/inventory/all-in-one post-deploy |
| |
| - name: Copy clouds.yaml to /etc/openstack |
| ansible.builtin.copy: |
| src: /etc/kolla/clouds.yaml |
| dest: /etc/openstack/clouds.yaml |
| remote_src: true |
| |
| - name: Wait for Cluster to Come Up |
| shell: sleep 60 |
| |
| - name: init-runonce |
| shell: . {{ kolla_venv }}/bin/activate && ./share/kolla-ansible/init-runonce |
| args: |
| chdir: "{{ kolla_venv }}" |
| |
| - name: Install openvswitch-switch |
| shell: apt-get install -y openvswitch-switch |
| become: true |
| ignore_errors: true |
| |
| - name: Enable Provider Network |
| shell: "{{ item }}" |
| become: true |
| loop: |
| - ip link add veth1 type veth peer name veth2 |
| - ip addr add 10.0.2.149/24 dev veth1 |
| - ip link set veth1 up |
| - ip link set veth2 up |
| - ovs-vsctl add-port br-ex veth2 |
| |
| - name: Setup Tempest |
| hosts: controller |
| vars_files: |
| - vars.yaml |
| tasks: |
| - name: Create Flavors that Tempest Uses for Testing |
| shell: . {{ kolla_venv }}/bin/activate && {{ item }} |
| loop: |
| # 64MB is not enough for recent Cirros images: https://github.com/cirros-dev/cirros/issues/63 |
| #- openstack --os-cloud kolla-admin flavor create --id auto --ram 64 --disk 1 --vcpus 1 m1.nano |
| - openstack --os-cloud kolla-admin flavor create --id auto --ram 128 --disk 1 --vcpus 1 m1.nano |
| - openstack --os-cloud kolla-admin flavor create --id auto --ram 256 --disk 1 --vcpus 1 m1.micro |
| |
| - name: Create a Tempest Venv |
| ansible.builtin.pip: |
| name: |
| - git+https://opendev.org/openstack/tempest@34.2.0 |
| - python-tempestconf |
| virtualenv: "{{ tempest_venv }}" |
| |
| - name: Initialize Tempest Cloud cloud-01 |
| shell: . {{ tempest_venv }}/bin/activate && tempest init cloud-01 |
| args: |
| chdir: "{{ ansible_env.HOME }}" |
| executable: /bin/bash |
| |
| - name: Configure Tempest with the Kolla OpenStack Cloud |
| shell: . {{ tempest_venv }}/bin/activate && discover-tempest-config --debug --os-cloud kolla-admin |
| args: |
| chdir: "{{ ansible_env.HOME }}/cloud-01" |