e09bec2c83
This patch makes the bifrost-keystone-client-config role a bit more generic to allow creating more that a single cloud configuration setting. The role is changed to accept a dict with possibly many clouds configurations, and the template for clouds.yaml is changed accordingly. This new functionality is used right away to add the keystone admin user to the created clouds.yaml file to make the installed keystone usable for admin-level operations (listing and editig users, projects, roles and role assignments) - the name of the 'cloud' created is 'bifrost-admin'. Change-Id: Icb274de989966645cd0f3874f8dff9d9f37d871b
177 lines
6.9 KiB
YAML
177 lines
6.9 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.csv
|
|
# 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: "Setting pre-test conditions"
|
|
become: yes
|
|
ignore_errors: yes
|
|
tasks:
|
|
# NOTE(TheJulia): While the test was created to run with five VMs,
|
|
# in the interest of keeping the active memory footprint small,
|
|
# should stop all of the VMs in advance, so we can proceed with
|
|
# install and initial deploy.
|
|
- name: Remove pre-existing leases file
|
|
file: path=/var/lib/misc/dnsmasq.leases state=absent
|
|
|
|
- hosts: localhost
|
|
connection: local
|
|
name: "Executes install, enrollment, and testing in one playbook"
|
|
become: no
|
|
gather_facts: yes
|
|
pre_tasks:
|
|
- name: "Set ci_testing_zuul if it appears we are running in upstream OpenStack CI"
|
|
set_fact:
|
|
ci_testing: true
|
|
ci_testing_zuul: true
|
|
ironic_git_url: "{{ lookup('env', 'WORKSPACE') }}/openstack/ironic"
|
|
ironicclient_git_url: "{{ lookup('env', 'WORKSPACE') }}/openstack/python-ironicclient"
|
|
shade_git_url: "{{ lookup('env', 'WORKSPACE') }}/openstack-infra/shade"
|
|
dib_git_url: "/opt/git/openstack/diskimage-builder"
|
|
ironicinspector_git_url: "{{ lookup('env', 'WORKSPACE') }}/openstack/ironic-inspector"
|
|
ironicinspectorclient_git_url: "{{ lookup('env', 'WORKSPACE') }}/openstack/python-ironic-inspector-client"
|
|
keystone_git_url: "/opt/git/openstack/keystone"
|
|
reqs_git_url: "/opt/git/openstack/requirements"
|
|
staging_drivers_git_url: "/opt/git/openstack/ironic-staging-drivers"
|
|
# TODO(TheJulia) Fix the above paths to be consistent, because the NV job gets the dib
|
|
# folder cloned, while the gate job does not. Likely need to work out a semi-hybrid
|
|
# solution.
|
|
when: lookup('env', 'ZUUL_BRANCH') | length > 0
|
|
- name: "Set ci_testing_zuul_changes if ZUUL_CHANGES is set"
|
|
set_fact:
|
|
ci_testing_zuul_changes: true
|
|
when: lookup('env', 'ZUUL_CHANGES') | length > 0
|
|
- name: "Override the ipv4_gateway setting"
|
|
set_fact:
|
|
ipv4_gateway: "192.168.122.1"
|
|
roles:
|
|
- { role: bifrost-prep-for-install, when: skip_install is not defined }
|
|
- { role: bifrost-openstack-ci-prep, when: ci_testing_zuul is defined }
|
|
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 is defined
|
|
- name: "Collect list of listening network sockets if running in a CI system"
|
|
shell: netstat -apn|grep LISTEN
|
|
when: ci_testing is defined
|
|
roles:
|
|
- role: bifrost-keystone-install
|
|
- role: bifrost-ironic-install
|
|
cleaning: false
|
|
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: "jessie", dib_elements: "ironic-agent {{ ipa_extra_dib_elements | default('') }}", when: create_ipa_image | bool == true }
|
|
- { role: bifrost-create-dib-image, dib_imagetype: "qcow2", dib_imagename: "{{deploy_image}}", dib_os_element: "debian", dib_os_release: "jessie", dib_elements: "vm serial-console simple-init {{ extra_dib_elements|default('') }}", when: create_image_via_dib | bool == true and transform_boot_image | bool == false }
|
|
- role: bifrost-keystone-client-config
|
|
user: "{{ ansible_env.SUDO_USER }}"
|
|
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 }}"
|
|
when: "{{ enable_keystone is defined and enable_keystone | bool == true }}"
|
|
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 == true }
|
|
|
|
- hosts: baremetal
|
|
name: "Create configuration drive files and deploy machines"
|
|
vars:
|
|
multinode_testing: "{{ inventory_dhcp | bool == true }}"
|
|
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 CSV 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
|
|
- role: ironic-delete-dynamic
|
|
|
|
# The following tasks are intended to test DHCP functionality
|
|
- hosts: localhost
|
|
connection: local
|
|
name: "Executes DHCP test script"
|
|
become: yes
|
|
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
|
|
command: virsh start testvm{{item}}
|
|
with_sequence: start=4 end={{ test_vm_num_nodes | default('5') }}
|
|
ignore_errors: yes
|
|
when: inventory_dhcp | bool == true
|
|
- name: Wait 30 seconds
|
|
pause:
|
|
seconds: 30
|
|
when: inventory_dhcp | bool == true
|
|
|
|
- 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 == true }
|
|
environment:
|
|
http_proxy: "{{ lookup('env','http_proxy') }}"
|
|
https_proxy: "{{ lookup('env','https_proxy') }}"
|
|
|