bifrost/playbooks/test-bifrost.yaml

189 lines
6.4 KiB
YAML

# Example command line to use:
# Create a VM:
# ansible-playbook -vvvv -i inventory/localhost test-bifrost-create-vm.yaml
# Set BIFROST_INVENTORY_SOURCE
# export BIFROST_INVENTORY_SOURCE=/tmp/baremetal.json
# Execute the installation and VM startup test.
# ansible-playbook -vvvv -i inventory/bifrost_inventory.py test-bifrost.yaml -e use_cirros=true -e testing_user=cirros
---
- hosts: localhost
connection: local
name: "Executes install, enrollment, and testing in one playbook"
become: no
gather_facts: yes
pre_tasks:
- name: "Set ci_testing and other variables if it appears we are running in upstream OpenStack CI"
set_fact:
ci_testing: true
copy_from_local_path: true
git_url_root: "{{ lookup('env', 'WORKSPACE') }}"
when: lookup('env', 'ZUUL_BRANCH') | length > 0
- name: "Override the ipv4_gateway setting"
set_fact:
ipv4_gateway: "192.168.122.1"
roles:
- role: bifrost-prep-for-install
when: not (skip_install | default(false) | bool)
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"
- hosts: localhost
connection: local
name: "Executes install, enrollment, and testing in one playbook"
become: yes
gather_facts: yes
pre_tasks:
- name: "Collect process list if running in a CI System"
command: ps aux
when: ci_testing | default(false)| bool
- name: "Collect list of listening network sockets if running in a CI system"
shell: netstat -apn|grep LISTEN # noqa 306
when: ci_testing | default(false)| bool
- name: "Use a cached cirros image"
set_fact:
cirros_deploy_image_upstream_url: file:///opt/cache/files/cirros-0.5.1-x86_64-disk.img
when: ci_testing | default(false)| bool
roles:
- role: bifrost-keystone-install
- role: bifrost-ironic-install
testing: true
# NOTE(TheJulia): While the next step creates a ramdisk, some elements
# do not support ramdisk-image-create as they invoke steps to cleanup
# the ramdisk which causes ramdisk-image-create to believe it failed.
- role: bifrost-create-dib-image
dib_imagename: "{{ http_boot_folder }}/ipa"
build_ramdisk: false
dib_os_element: "{{ ipa_dib_os_element|default('debian') }}"
dib_os_release: "buster"
dib_elements: "ironic-python-agent-ramdisk {{ ipa_extra_dib_elements | default('') }}"
dib_packages: "bsdmainutils"
when: create_ipa_image | bool
# NOTE(TheJulia): This creates the guest image.
- role: bifrost-create-dib-image
dib_imagetype: "qcow2"
dib_imagename: "{{deploy_image}}"
dib_os_element: "debian"
dib_os_release: "buster"
dib_elements: "vm enable-serial-console simple-init {{ extra_dib_elements|default('') }}"
when: create_image_via_dib | bool and not transform_boot_image | bool
- role: bifrost-keystone-client-config
user: "{{ ansible_env.SUDO_USER | default(ansible_user_id) }}"
clouds:
bifrost:
config_username: "{{ ironic.keystone.default_username }}"
config_password: "{{ ironic.keystone.default_password }}"
config_project_name: "baremetal"
config_region_name: "{{ keystone.bootstrap.region_name }}"
config_auth_url: "{{ keystone.bootstrap.public_url }}"
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"
- hosts: baremetal
name: "Enroll node with Ironic"
become: no
connection: local
roles:
- role: ironic-enroll-dynamic
- role: ironic-inspect-node
when: inspect_nodes | default(false) | bool
- role: bifrost-test-inspection
when: inspect_nodes | default(false) | bool
- hosts: localhost
name: "Tests the use of openstack clients"
connection: local
tasks:
- name: "List bare metal nodes using openstack client"
command: baremetal --debug node list
environment:
OS_CLOUD: bifrost
PATH: /usr/local/bin:{{ ansible_env.PATH }}
- name: "List introspection rules using openstack client"
command: baremetal --debug introspection rule list
environment:
OS_CLOUD: bifrost
PATH: /usr/local/bin:{{ ansible_env.PATH }}
when: enable_inspector is defined and enable_inspector | bool
- hosts: baremetal
name: "Create configuration drive files and deploy machines"
vars:
multinode_testing: "{{ inventory_dhcp | bool }}"
become: no
connection: local
roles:
- role: bifrost-configdrives-dynamic
- role: bifrost-deploy-nodes-dynamic
- hosts: baremetal
name: "Prepare for deployment verification"
become: no
connection: local
serial: 1
roles:
- role: bifrost-prepare-for-test-dynamic
# The testvm Host group is added by bifrost-prepare-for-test based
# on the contents of the JSON file.
- hosts: test
name: "Tests connectivity to the VM"
become: no
gather_facts: no
remote_user: "{{ testing_user }}"
serial: 1
any_errors_fatal: yes
max_fail_percentage: 0
roles:
- role: bifrost-test-vm
- hosts: baremetal
connection: local
name: "Unprovisions the test node"
become: no
gather_facts: no
roles:
- role: bifrost-unprovision-node-dynamic
wait_for_node_undeploy: true
- role: ironic-delete-dynamic
# The following tasks are intended to test DHCP functionality
- hosts: localhost
connection: local
name: "Start VMs that were not enrolled to ironic"
become: yes
vars:
not_enrolled_data_file: /tmp/baremetal.json.rest
tasks:
# NOTE(TheJulia): Moved the power ON of the excess VMs until after
# the other test VMs have been shutdown, in order to explicitly
# validate that the dhcp config is working as expected and not
# serving these requests.
- name: Power on remaining test VMs
virt:
name: "{{item.key}}"
state: running
with_dict: "{{ lookup('file', not_enrolled_data_file) | from_json }}"
ignore_errors: yes
when: inventory_dhcp | bool
- name: Wait 30 seconds
pause:
seconds: 30
when: inventory_dhcp | bool
- hosts: localhost
connection: local
name: "Executes DHCP test script"
become: yes
gather_facts: yes
vars:
inventory_dhcp: "{{ inventory_dhcp | bool == true }}"
inventory_dhcp_static_ip: "{{ inventory_dhcp_static_ip | bool == true }}"
roles:
- { role: bifrost-test-dhcp, when: inventory_dhcp | bool }
environment:
http_proxy: "{{ lookup('env','http_proxy') }}"
https_proxy: "{{ lookup('env','https_proxy') }}"