Merge "Adopt for usage openstack_resources role"
This commit is contained in:
commit
56d86e29bd
@ -204,7 +204,7 @@ tempest_private_net_name: "private"
|
||||
tempest_private_subnet_name: "private-subnet"
|
||||
tempest_private_subnet_cidr: "192.168.74.0/28"
|
||||
tempest_private_net_provider_type: "vxlan"
|
||||
tempest_private_net_seg_id:
|
||||
# tempest_private_net_seg_id:
|
||||
# If you choose vlan as private network provider type, you must set a physical
|
||||
# name for it
|
||||
# tempest_private_net_physical_name: "private"
|
||||
@ -223,11 +223,10 @@ tempest_public_net_provider_type: "flat"
|
||||
# The use of _type is to provide backwards compatibility for
|
||||
# overrides in S and can be removed in T.
|
||||
tempest_public_net_physical_name: "{{ tempest_public_net_physical_type | default('flat') }}"
|
||||
tempest_public_net_seg_id: ""
|
||||
# tempest_public_net_seg_id:
|
||||
tempest_public_router_external: "True"
|
||||
# Example allocation range:
|
||||
# tempest_public_subnet_allocation_pools: "10.1.13.150-10.1.13.200"
|
||||
tempest_public_subnet_allocation_pools: ""
|
||||
|
||||
tempest_compute_image_ssh_user: cirros
|
||||
tempest_compute_run_ssh: True
|
||||
|
@ -18,11 +18,7 @@
|
||||
# appropriate python libraries in that venv. If the delegation
|
||||
# is to another host, we assume that it is accessible by the
|
||||
# system python instead.
|
||||
- name: Setup the tempest resources
|
||||
delegate_to: "{{ tempest_service_setup_host }}"
|
||||
vars:
|
||||
ansible_python_interpreter: "{{ tempest_service_setup_host_python_interpreter }}"
|
||||
block:
|
||||
|
||||
- name: Ensure that all required variables are set when tempest_public_net_create is enabled
|
||||
assert:
|
||||
that:
|
||||
@ -91,61 +87,165 @@
|
||||
- tempest_service_available_glance | bool
|
||||
- tempest_images_create | bool
|
||||
|
||||
- name: Create deployment-host tempest_image_dir
|
||||
file:
|
||||
path: "{{ tempest_image_dir }}"
|
||||
state: directory
|
||||
mode: "0755"
|
||||
- name: Creating OpenStack Projects
|
||||
ansible.builtin.include_role:
|
||||
name: openstack.osa.openstack_resources
|
||||
vars:
|
||||
openstack_resources_identity:
|
||||
domains:
|
||||
- name: "{{ tempest_domain_name }}"
|
||||
projects: |-
|
||||
{% set projects = [] %}
|
||||
{% for project in tempest_projects %}
|
||||
{% set _ = projects.append({
|
||||
'name': project,
|
||||
'description': project ~ ' project',
|
||||
'domain': tempest_domain_name
|
||||
}) %}
|
||||
{% endfor %}
|
||||
{{ projects }}
|
||||
when:
|
||||
- tempest_service_available_glance | bool
|
||||
- tempest_images_create | bool
|
||||
- tempest_projects_create | bool
|
||||
|
||||
- name: Image(s) download
|
||||
get_url:
|
||||
url: "{{ item.url }}"
|
||||
dest: "{{ tempest_image_dir }}/{{ item.url | basename }}"
|
||||
checksum: "{{ item.checksum | default(omit) }}"
|
||||
url_username: "{{ item.username | default(omit) }}"
|
||||
url_password: "{{ item.password | default(omit) }}"
|
||||
with_items: "{{ tempest_images }}"
|
||||
when:
|
||||
- tempest_service_available_glance | bool
|
||||
- tempest_images_create | bool
|
||||
register: fetch_url
|
||||
until: fetch_url is success
|
||||
retries: 6
|
||||
delay: 5
|
||||
tags:
|
||||
- skip_ansible_lint
|
||||
|
||||
- name: Upload tempest images to glance
|
||||
openstack.cloud.image:
|
||||
- name: Get tempest tenant data
|
||||
delegate_to: "{{ tempest_service_setup_host }}"
|
||||
run_once: true
|
||||
vars:
|
||||
ansible_python_interpreter: "{{ tempest_service_setup_host_python_interpreter }}"
|
||||
block:
|
||||
- name: Get tempest tenant UUID
|
||||
openstack.cloud.project_info:
|
||||
cloud: "{{ tempest_cloud_name }}"
|
||||
interface: "{{ tempest_interface_name }}"
|
||||
validate_certs: "{{ not (tempest_keystone_interface_insecure | bool) }}"
|
||||
name: "{{ item.name | default(item.url | basename) }}"
|
||||
filename: "{{ tempest_image_dir }}/{{ item.url | basename }}"
|
||||
container_format: bare
|
||||
disk_format: "{{ item.format }}"
|
||||
is_public: True
|
||||
properties: "{{ item.properties | default(omit) }}"
|
||||
with_items: "{{ tempest_images }}"
|
||||
register: tempest_image_create
|
||||
until: tempest_image_create is success
|
||||
retries: 5
|
||||
delay: 15
|
||||
domain: "{{ tempest_domain_name }}"
|
||||
name: "{{ project }}"
|
||||
loop: "{{ tempest_projects }}"
|
||||
loop_control:
|
||||
loop_var: project
|
||||
label: "{{ project }}"
|
||||
register: tempest_project_details
|
||||
|
||||
- name: Get demo tenant id
|
||||
set_fact:
|
||||
keystone_demo_tenant_id: >-
|
||||
{{ (tempest_project_details.results | map(attribute='projects') | list | flatten | map(attribute='id') | list)[0] }}
|
||||
|
||||
- name: Creating OpenStack resources
|
||||
ansible.builtin.include_role:
|
||||
name: openstack.osa.openstack_resources
|
||||
vars:
|
||||
_private_network:
|
||||
name: "{{ tempest_private_net_name }}"
|
||||
network_type: "{{ tempest_private_net_provider_type }}"
|
||||
physical_network: "{{ tempest_private_net_physical_name | default(omit) }}"
|
||||
segmentation_id: "{{ tempest_private_net_seg_id | default(omit) }}"
|
||||
mtu: "{{ tempest_private_net_mtu | default(omit) }}"
|
||||
project: "{{ keystone_demo_tenant_id }}"
|
||||
subnets:
|
||||
- name: "{{ tempest_private_subnet_name }}"
|
||||
cidr: "{{ tempest_private_subnet_cidr }}"
|
||||
dhcp: false
|
||||
|
||||
_public_network:
|
||||
name: "{{ tempest_public_net_name }}"
|
||||
network_type: "{{ tempest_public_net_provider_type }}"
|
||||
physical_network: "{{ tempest_public_net_physical_name | default(omit) }}"
|
||||
segmentation_id: "{{ tempest_public_net_seg_id | default(omit) }}"
|
||||
external: "{{ tempest_public_router_external }}"
|
||||
project: "{{ keystone_demo_tenant_id }}"
|
||||
subnets:
|
||||
- name: "{{ tempest_public_subnet_name }}"
|
||||
cidr: "{{ tempest_public_subnet_cidr }}"
|
||||
allocation_start: "{{ tempest_public_subnet_allocation_pools.split('-')[0] | default(omit) }}"
|
||||
allocation_end: "{{ tempest_public_subnet_allocation_pools.split('-')[1] | default(omit) }}"
|
||||
gateway: "{{ tempest_public_subnet_gateway_ip | default(omit) }}"
|
||||
|
||||
_router:
|
||||
name: router
|
||||
network: "{{ tempest_public_net_name }}"
|
||||
interfaces:
|
||||
- "{{ tempest_private_subnet_name }}"
|
||||
project: "{{ keystone_demo_tenant_id }}"
|
||||
_compute_resources:
|
||||
flavors:
|
||||
- specs: "{{ tempest_flavors }}"
|
||||
|
||||
_image_resources:
|
||||
images: "{{ tempest_images | default([]) }}"
|
||||
|
||||
_network_resources: |-
|
||||
{% set resources = {'networks': [], 'routers': [], 'security_groups': []} %}
|
||||
{% if tempest_private_net_create | bool %}
|
||||
{% set _ = resources['networks'].append(_private_network) %}
|
||||
{% endif %}
|
||||
{% if tempest_public_net_create | bool %}
|
||||
{% set _ = resources['networks'].append(_public_network) %}
|
||||
{% endif %}
|
||||
{% if tempest_router_create | bool %}
|
||||
{% set _ = resources['routers'].append(_router) %}
|
||||
{% endif %}
|
||||
{{ resources }}
|
||||
openstack_resources_setup_host: "{{ tempest_service_setup_host }}"
|
||||
openstack_resources_python_interpreter: "{{ tempest_service_setup_host_python_interpreter }}"
|
||||
openstack_resources_cloud_name: "{{ tempest_cloud_name }}"
|
||||
openstack_resources_interface: "{{ tempest_interface_name }}"
|
||||
openstack_resources_network: "{{ tempest_service_available_neutron | ternary(_network_resources, {}) }}"
|
||||
openstack_resources_image: "{{ tempest_images_create | ternary(_image_resources, {}) }}"
|
||||
openstack_resources_compute: "{{ (tempest_service_available_nova and tempest_flavors_create) | ternary(_compute_resources, {}) }}"
|
||||
|
||||
- name: Get tempest resources data
|
||||
delegate_to: "{{ tempest_service_setup_host }}"
|
||||
run_once: true
|
||||
vars:
|
||||
ansible_python_interpreter: "{{ tempest_service_setup_host_python_interpreter }}"
|
||||
block:
|
||||
- name: Get tempest images
|
||||
openstack.cloud.image_info:
|
||||
cloud: "{{ tempest_cloud_name }}"
|
||||
interface: "{{ tempest_interface_name }}"
|
||||
filters:
|
||||
'name': "{{ image['name'] }}"
|
||||
'tags':
|
||||
- 'managed_by_tempest'
|
||||
loop: "{{ tempest_images }}"
|
||||
loop_control:
|
||||
loop_var: image
|
||||
label: "{{ image['name'] }}"
|
||||
register: tempest_image_details
|
||||
when:
|
||||
- tempest_service_available_glance | bool
|
||||
- tempest_images_create | bool
|
||||
|
||||
- name: Get tempest public network UUID
|
||||
openstack.cloud.networks_info:
|
||||
cloud: "{{ tempest_cloud_name }}"
|
||||
interface: "{{ tempest_interface_name }}"
|
||||
name: "{{ tempest_public_net_name }}"
|
||||
filters:
|
||||
project_id: "{{ keystone_demo_tenant_id }}"
|
||||
register: tempest_public_network_details
|
||||
when:
|
||||
- tempest_service_available_neutron | bool
|
||||
- tempest_public_net_create | bool
|
||||
|
||||
- name: Get tempest router details
|
||||
openstack.cloud.routers_info:
|
||||
cloud: "{{ tempest_cloud_name }}"
|
||||
interface: "{{ tempest_interface_name }}"
|
||||
name: router
|
||||
filters:
|
||||
project_id: "{{ keystone_demo_tenant_id }}"
|
||||
when:
|
||||
- tempest_service_available_neutron | bool
|
||||
- tempest_router_create | bool
|
||||
|
||||
# These facts are used in tempest.conf.j2; we set an empty string if it is not
|
||||
# set above to ensure the template will parse correctly.
|
||||
- name: Store first tempest image id
|
||||
vars:
|
||||
res: "{{ tempest_image_create['results'] }}"
|
||||
res: "{{ tempest_image_details['results'] | map(attribute='images') | flatten }}"
|
||||
set_fact:
|
||||
tempest_glance_image_id_1: "{{ res[0]['id'] | default(res[0]['image']['id'] | default('')) }}"
|
||||
tempest_glance_image_id_2: "{{ res[-1]['id'] | default(res[-1]['image']['id'] | default('')) }}"
|
||||
tempest_glance_image_id_1: "{{ res[0]['id'] | default('') }}"
|
||||
tempest_glance_image_id_2: "{{ res[-1]['id'] | default('') }}"
|
||||
when:
|
||||
- tempest_images_create | bool
|
||||
|
||||
@ -156,165 +256,20 @@
|
||||
when:
|
||||
- tempest_flavors_create | bool
|
||||
|
||||
- name: Add tempest projects
|
||||
openstack.cloud.project:
|
||||
cloud: "{{ tempest_cloud_name }}"
|
||||
state: present
|
||||
name: "{{ item }}"
|
||||
description: "{{ item }} project"
|
||||
domain: "{{ tempest_domain_name }}"
|
||||
interface: "{{ tempest_interface_name }}"
|
||||
verify: "{{ not (tempest_keystone_interface_insecure | bool) }}"
|
||||
register: add_project
|
||||
until: add_project is success
|
||||
retries: 5
|
||||
delay: 10
|
||||
with_items: "{{ tempest_projects }}"
|
||||
when:
|
||||
- tempest_projects_create | bool
|
||||
|
||||
- name: Store demo tenant id
|
||||
set_fact:
|
||||
keystone_demo_tenant_id: "{{ (add_project.results | json_query('[*].project.id'))[0] }}" # noqa: jinja[invalid]
|
||||
when:
|
||||
- tempest_projects_create | bool
|
||||
|
||||
- name: Ensure private network exists
|
||||
openstack.cloud.network:
|
||||
cloud: "{{ tempest_cloud_name }}"
|
||||
interface: "{{ tempest_interface_name }}"
|
||||
validate_certs: "{{ tempest_keystone_interface_insecure | ternary(false, true) }}"
|
||||
name: "{{ tempest_private_net_name }}"
|
||||
provider_network_type: "{{ tempest_private_net_provider_type }}"
|
||||
provider_physical_network: "{{ tempest_private_net_physical_name | default(omit) }}"
|
||||
provider_segmentation_id: "{{ tempest_private_net_seg_id | default(omit, true) }}"
|
||||
mtu: "{{ tempest_private_net_mtu | default(omit, true) }}"
|
||||
project: "{{ keystone_demo_tenant_id }}"
|
||||
register: tempest_private_network
|
||||
until: tempest_private_network is success
|
||||
retries: 5
|
||||
delay: 10
|
||||
when:
|
||||
- tempest_service_available_neutron | bool
|
||||
- tempest_private_net_create | bool
|
||||
|
||||
- name: Ensure public network exists
|
||||
openstack.cloud.network:
|
||||
cloud: "{{ tempest_cloud_name }}"
|
||||
interface: "{{ tempest_interface_name }}"
|
||||
validate_certs: "{{ tempest_keystone_interface_insecure | ternary(false, true) }}"
|
||||
name: "{{ tempest_public_net_name }}"
|
||||
provider_network_type: "{{ tempest_public_net_provider_type }}"
|
||||
provider_physical_network: "{{ tempest_public_net_physical_name | default(omit) }}"
|
||||
provider_segmentation_id: "{{ tempest_public_net_seg_id | default(omit, true) }}"
|
||||
external: "{{ tempest_public_router_external }}"
|
||||
project: "{{ keystone_demo_tenant_id }}"
|
||||
register: tempest_public_network
|
||||
until: tempest_public_network is success
|
||||
retries: 5
|
||||
delay: 10
|
||||
when:
|
||||
- tempest_service_available_neutron | bool
|
||||
- tempest_public_net_create | bool
|
||||
|
||||
- name: Store neutron public network id
|
||||
set_fact:
|
||||
tempest_neutron_public_network_id: "{{ tempest_service_available_neutron | ternary(tempest_public_network.id, '') }}"
|
||||
tempest_neutron_public_network_id: "{{ tempest_service_available_neutron | ternary(tempest_public_network_details['networks'][0]['id'], '') }}"
|
||||
when:
|
||||
- tempest_service_available_neutron | bool
|
||||
- tempest_public_net_create | bool
|
||||
|
||||
- name: Ensure private subnet exists
|
||||
openstack.cloud.subnet:
|
||||
cloud: "{{ tempest_cloud_name }}"
|
||||
interface: "{{ tempest_interface_name }}"
|
||||
validate_certs: "{{ tempest_keystone_interface_insecure | ternary(false, true) }}"
|
||||
network_name: "{{ tempest_private_net_name }}"
|
||||
name: "{{ tempest_private_subnet_name }}"
|
||||
cidr: "{{ tempest_private_subnet_cidr }}"
|
||||
project: "{{ keystone_demo_tenant_id }}"
|
||||
enable_dhcp: false
|
||||
register: _add_private_subnet
|
||||
until: _add_private_subnet is success
|
||||
retries: 5
|
||||
delay: 10
|
||||
when:
|
||||
- tempest_service_available_neutron | bool
|
||||
- tempest_private_net_create | bool
|
||||
|
||||
- name: Ensure public subnet exists
|
||||
openstack.cloud.subnet:
|
||||
cloud: "{{ tempest_cloud_name }}"
|
||||
interface: "{{ tempest_interface_name }}"
|
||||
validate_certs: "{{ tempest_keystone_interface_insecure | ternary(false, true) }}"
|
||||
network_name: "{{ tempest_public_net_name }}"
|
||||
name: "{{ tempest_public_subnet_name }}"
|
||||
cidr: "{{ tempest_public_subnet_cidr }}"
|
||||
allocation_pool_start: "{{ tempest_public_subnet_allocation_pools.split('-')[0] | default(omit) }}"
|
||||
allocation_pool_end: "{{ tempest_public_subnet_allocation_pools.split('-')[1] | default(omit) }}"
|
||||
gateway_ip: "{{ tempest_public_subnet_gateway_ip | default(omit) }}"
|
||||
register: _add_public_subnet
|
||||
until: _add_public_subnet is success
|
||||
retries: 5
|
||||
delay: 10
|
||||
when:
|
||||
- tempest_service_available_neutron | bool
|
||||
- tempest_public_net_create | bool
|
||||
|
||||
- name: Create router
|
||||
openstack.cloud.router:
|
||||
cloud: "{{ tempest_cloud_name }}"
|
||||
interface: "{{ tempest_interface_name }}"
|
||||
validate_certs: "{{ tempest_keystone_interface_insecure | ternary(false, true) }}"
|
||||
name: router
|
||||
network: "{{ tempest_neutron_public_network_id }}"
|
||||
interfaces:
|
||||
- "{{ tempest_private_subnet_name }}"
|
||||
project: "{{ keystone_demo_tenant_id }}"
|
||||
register: _add_router
|
||||
until: _add_router is success
|
||||
retries: 5
|
||||
delay: 10
|
||||
when:
|
||||
- tempest_service_available_neutron | bool
|
||||
- tempest_router_create | bool
|
||||
|
||||
- name: Get router admin state and ip address
|
||||
set_fact:
|
||||
router_admin_state: "{{ _add_router['router']['is_admin_state_up'] }}"
|
||||
router_ip: "{{ _add_router['router']['external_gateway_info']['external_fixed_ips'][0]['ip_address'] }}"
|
||||
router_admin_state: "{{ _add_router['routers'][0]['is_admin_state_up'] }}"
|
||||
router_ip: "{{ _add_router['routers'][0]['external_gateway_info']['external_fixed_ips'][0]['ip_address'] }}"
|
||||
when:
|
||||
- tempest_service_available_neutron | bool
|
||||
- tempest_router_create | bool
|
||||
- "'is_admin_state_up' in _add_router.router"
|
||||
|
||||
- name: Get router admin state and ip address for older collection versions
|
||||
set_fact:
|
||||
router_admin_state: "{{ _add_router['router']['admin_state_up'] }}"
|
||||
router_ip: "{{ _add_router['router']['external_gateway_info']['external_fixed_ips'][0]['ip_address'] }}"
|
||||
when:
|
||||
- tempest_service_available_neutron | bool
|
||||
- tempest_router_create | bool
|
||||
- "'admin_state_up' in _add_router.router"
|
||||
|
||||
- name: Create tempest flavors
|
||||
openstack.cloud.compute_flavor:
|
||||
cloud: "{{ tempest_cloud_name }}"
|
||||
interface: "{{ tempest_interface_name }}"
|
||||
validate_certs: "{{ tempest_keystone_interface_insecure | ternary(false, true) }}"
|
||||
name: "{{ item.name }}"
|
||||
flavorid: "{{ item.id }}"
|
||||
ram: "{{ item.ram }}"
|
||||
disk: "{{ item.disk }}"
|
||||
vcpus: "{{ item.vcpus }}"
|
||||
with_items: "{{ tempest_flavors }}"
|
||||
register: _add_flavors
|
||||
until: _add_flavors is success
|
||||
retries: 5
|
||||
delay: 10
|
||||
when:
|
||||
- tempest_service_available_nova | bool
|
||||
- tempest_flavors_create | bool
|
||||
|
||||
- name: Ping router ip address
|
||||
shell: |
|
||||
|
@ -21,23 +21,39 @@
|
||||
# properties: a dict of custom properties to attach to the image in glance
|
||||
tempest_images_map:
|
||||
x86_64:
|
||||
- url: "https://download.cirros-cloud.net/0.6.1/cirros-0.6.1-x86_64-disk.img"
|
||||
checksum: "sha256:cc704ab14342c1c8a8d91b66a7fc611d921c8b8f1aaf4695f9d6463d913fa8d1"
|
||||
- url: "https://download.cirros-cloud.net/0.6.2/cirros-0.6.2-x86_64-disk.img"
|
||||
checksum: "c8fc807773e5354afe61636071771906"
|
||||
format: "qcow2"
|
||||
name: "cirros"
|
||||
- url: "https://download.cirros-cloud.net/0.6.1/cirros-0.6.1-x86_64-disk.img"
|
||||
checksum: "sha256:cc704ab14342c1c8a8d91b66a7fc611d921c8b8f1aaf4695f9d6463d913fa8d1"
|
||||
name: "cirros 0.6"
|
||||
visibility: community
|
||||
tags:
|
||||
- managed_by_tempest
|
||||
- url: "https://download.cirros-cloud.net/0.5.2/cirros-0.5.2-x86_64-disk.img"
|
||||
checksum: "b874c39491a2377b8490f5f1e89761a4"
|
||||
format: "qcow2"
|
||||
name: "cirros"
|
||||
name: "cirros 0.5"
|
||||
visibility: community
|
||||
tags:
|
||||
- managed_by_tempest
|
||||
aarch64:
|
||||
- url: "https://download.cirros-cloud.net/0.6.1/cirros-0.6.1-aarch64-disk.img"
|
||||
checksum: "sha256:db9420c481c11dee17860aa46fb1a3efa05fa4fb152726d6344e24da03cb0ccf"
|
||||
- url: "https://download.cirros-cloud.net/0.6.2/cirros-0.6.2-aarch64-disk.img"
|
||||
checksum: "c1c58e8a058d50e1d1891df8bad171b2"
|
||||
format: "qcow2"
|
||||
name: "cirros"
|
||||
- url: "https://download.cirros-cloud.net/0.6.1/cirros-0.6.1-aarch64-disk.img"
|
||||
checksum: "sha256:db9420c481c11dee17860aa46fb1a3efa05fa4fb152726d6344e24da03cb0ccf"
|
||||
name: "cirros 0.6"
|
||||
visibility: community
|
||||
tags:
|
||||
- managed_by_tempest
|
||||
# properties:
|
||||
# hw_firmware_type: uefi
|
||||
- url: "https://download.cirros-cloud.net/0.5.2/cirros-0.5.2-aarch64-disk.img"
|
||||
checksum: "9067fe7e99229a1a6d908b331c5763df"
|
||||
format: "qcow2"
|
||||
name: "cirros"
|
||||
name: "cirros 0.5"
|
||||
visibility: community
|
||||
tags:
|
||||
- managed_by_tempest
|
||||
# properties:
|
||||
# hw_firmware_type: uefi
|
||||
|
||||
# Each tempest plugin could take the following arguments:
|
||||
# - name:
|
||||
|
Loading…
x
Reference in New Issue
Block a user