862 lines
22 KiB
YAML
862 lines
22 KiB
YAML
---
|
|
- module_defaults:
|
|
group/openstack.cloud.openstack:
|
|
cloud: "{{ cloud }}"
|
|
# Listing modules individually is required for
|
|
# backward compatibility with Ansible 2.9 only
|
|
openstack.cloud.resource:
|
|
cloud: "{{ cloud }}"
|
|
openstack.cloud.resources:
|
|
cloud: "{{ cloud }}"
|
|
openstack.cloud.router:
|
|
cloud: "{{ cloud }}"
|
|
block:
|
|
- name: Create external network
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: network
|
|
attributes:
|
|
name: ansible_network_external
|
|
is_router_external: true
|
|
wait: true
|
|
register: network_external
|
|
|
|
- name: Assert return values of resource module
|
|
assert:
|
|
that:
|
|
# allow new fields to be introduced but prevent fields from being removed
|
|
- expected_fields|difference(network_external.keys())|length == 0
|
|
|
|
- name: Assert external network
|
|
assert:
|
|
that:
|
|
- network_external is changed
|
|
|
|
- name: Create external network again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: network
|
|
attributes:
|
|
name: ansible_network_external
|
|
is_router_external: true
|
|
wait: true
|
|
register: network_external
|
|
|
|
- name: Assert external network again
|
|
assert:
|
|
that:
|
|
- network_external is not changed
|
|
|
|
- name: Create external subnet
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: subnet
|
|
attributes:
|
|
cidr: 10.6.6.0/24
|
|
ip_version: 4
|
|
name: ansible_external_subnet
|
|
network_id: "{{ network_external.resource.id }}"
|
|
register: subnet_external
|
|
|
|
- name: Assert external subnet
|
|
assert:
|
|
that:
|
|
- subnet_external is changed
|
|
|
|
- name: Create external subnet again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: subnet
|
|
attributes:
|
|
cidr: 10.6.6.0/24
|
|
ip_version: 4
|
|
name: ansible_external_subnet
|
|
network_id: "{{ network_external.resource.id }}"
|
|
register: subnet_external
|
|
|
|
- name: Assert external subnet again
|
|
assert:
|
|
that:
|
|
- subnet_external is not changed
|
|
|
|
- name: Create external port
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: port
|
|
attributes:
|
|
name: ansible_port_external
|
|
network_id: "{{ network_external.resource.id }}"
|
|
fixed_ips:
|
|
- ip_address: 10.6.6.50
|
|
non_updateable_attributes:
|
|
- fixed_ips
|
|
register: port_external
|
|
|
|
- name: Assert external port
|
|
assert:
|
|
that:
|
|
- port_external is changed
|
|
|
|
- name: Create external port again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: port
|
|
attributes:
|
|
name: ansible_port_external
|
|
network_id: "{{ network_external.resource.id }}"
|
|
fixed_ips:
|
|
- ip_address: 10.6.6.50
|
|
non_updateable_attributes:
|
|
- fixed_ips
|
|
register: port_external
|
|
|
|
- name: Assert external port again
|
|
assert:
|
|
that:
|
|
- port_external is not changed
|
|
|
|
- name: Create internal network
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: network
|
|
attributes:
|
|
name: ansible_network_internal
|
|
is_router_external: false
|
|
wait: true
|
|
register: network_internal
|
|
|
|
- name: Assert internal network
|
|
assert:
|
|
that:
|
|
- network_internal is changed
|
|
|
|
- name: Create internal network again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: network
|
|
attributes:
|
|
name: ansible_network_internal
|
|
is_router_external: false
|
|
wait: true
|
|
register: network_internal
|
|
|
|
- name: Assert internal network again
|
|
assert:
|
|
that:
|
|
- network_internal is not changed
|
|
|
|
- name: Create internal subnet
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: subnet
|
|
attributes:
|
|
cidr: 10.7.7.0/24
|
|
ip_version: 4
|
|
name: ansible_internal_subnet
|
|
network_id: "{{ network_internal.resource.id }}"
|
|
register: subnet_internal
|
|
|
|
- name: Assert internal subnet
|
|
assert:
|
|
that:
|
|
- subnet_internal is changed
|
|
|
|
- name: Create internal subnet again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: subnet
|
|
attributes:
|
|
cidr: 10.7.7.0/24
|
|
ip_version: 4
|
|
name: ansible_internal_subnet
|
|
network_id: "{{ network_internal.resource.id }}"
|
|
register: subnet_internal
|
|
|
|
- name: Assert internal subnet again
|
|
assert:
|
|
that:
|
|
- subnet_internal is not changed
|
|
|
|
- name: Create internal port 1
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: port
|
|
attributes:
|
|
name: ansible_port_internal1
|
|
network_id: "{{ network_internal.resource.id }}"
|
|
fixed_ips:
|
|
- ip_address: 10.7.7.100
|
|
subnet_id: "{{ subnet_internal.resource.id }}"
|
|
register: port_internal1
|
|
|
|
- name: Assert internal port 1
|
|
assert:
|
|
that:
|
|
- port_internal1 is changed
|
|
|
|
- name: Create internal port 1 again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: port
|
|
attributes:
|
|
name: ansible_port_internal1
|
|
network_id: "{{ network_internal.resource.id }}"
|
|
fixed_ips:
|
|
- ip_address: 10.7.7.100
|
|
subnet_id: "{{ subnet_internal.resource.id }}"
|
|
register: port_internal1
|
|
|
|
- name: Assert internal port 1 again
|
|
assert:
|
|
that:
|
|
- port_internal1 is not changed
|
|
|
|
- name: Create internal port 2
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: port
|
|
attributes:
|
|
name: ansible_port_internal2
|
|
network_id: "{{ network_internal.resource.id }}"
|
|
fixed_ips:
|
|
- ip_address: 10.7.7.101
|
|
subnet_id: "{{ subnet_internal.resource.id }}"
|
|
register: port_internal2
|
|
|
|
- name: Assert internal port 2
|
|
assert:
|
|
that:
|
|
- port_internal2 is changed
|
|
|
|
- name: Create internal port 2 again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: port
|
|
attributes:
|
|
name: ansible_port_internal2
|
|
network_id: "{{ network_internal.resource.id }}"
|
|
fixed_ips:
|
|
- ip_address: 10.7.7.101
|
|
subnet_id: "{{ subnet_internal.resource.id }}"
|
|
register: port_internal2
|
|
|
|
- name: Assert internal port 2 again
|
|
assert:
|
|
that:
|
|
- port_internal2 is not changed
|
|
|
|
- name: Create router
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: router
|
|
attributes:
|
|
name: ansible_router
|
|
external_gateway_info:
|
|
enable_snat: true
|
|
external_fixed_ips:
|
|
- ip_address: 10.6.6.10
|
|
subnet_id: "{{ subnet_external.resource.id }}"
|
|
network_id: "{{ network_external.resource.id }}"
|
|
wait: true
|
|
register: router
|
|
|
|
- name: Assert router
|
|
assert:
|
|
that:
|
|
- router is changed
|
|
|
|
- name: Create router again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: router
|
|
attributes:
|
|
name: ansible_router
|
|
external_gateway_info:
|
|
enable_snat: true
|
|
external_fixed_ips:
|
|
- ip_address: 10.6.6.10
|
|
subnet_id: "{{ subnet_external.resource.id }}"
|
|
network_id: "{{ network_external.resource.id }}"
|
|
wait: true
|
|
register: router
|
|
|
|
- name: Assert router again
|
|
assert:
|
|
that:
|
|
- router is not changed
|
|
|
|
- name: Attach router to internal subnet
|
|
openstack.cloud.router:
|
|
name: ansible_router
|
|
network: "{{ network_external.resource.id }}"
|
|
external_fixed_ips:
|
|
- ip: 10.6.6.10
|
|
subnet: "{{ subnet_external.resource.id }}"
|
|
interfaces:
|
|
- net: "{{ network_internal.resource.id }}"
|
|
subnet: "{{ subnet_internal.resource.id }}"
|
|
portip: 10.7.7.1
|
|
|
|
- name: Create floating ip address 1
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: ip
|
|
attributes:
|
|
name: 10.6.6.150
|
|
floating_ip_address: 10.6.6.150
|
|
floating_network_id: "{{ network_external.resource.id }}"
|
|
register: ip1
|
|
|
|
- name: Assert floating ip address 1
|
|
assert:
|
|
that:
|
|
- ip1 is changed
|
|
|
|
- name: Create floating ip address 1 again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: ip
|
|
attributes:
|
|
name: 10.6.6.150
|
|
floating_ip_address: 10.6.6.150
|
|
floating_network_id: "{{ network_external.resource.id }}"
|
|
register: ip1
|
|
|
|
- name: Assert floating ip address 1 again
|
|
assert:
|
|
that:
|
|
- ip1 is not changed
|
|
|
|
- name: Create floating ip address 2
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: ip
|
|
attributes:
|
|
name: 10.6.6.151
|
|
floating_ip_address: 10.6.6.151
|
|
floating_network_id: "{{ network_external.resource.id }}"
|
|
port_id: "{{ port_internal1.resource.id }}"
|
|
register: ip2
|
|
|
|
- name: Assert floating ip address 2
|
|
assert:
|
|
that:
|
|
- ip2 is changed
|
|
|
|
- name: Create floating ip address 2 again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: ip
|
|
attributes:
|
|
name: 10.6.6.151
|
|
floating_ip_address: 10.6.6.151
|
|
floating_network_id: "{{ network_external.resource.id }}"
|
|
port_id: "{{ port_internal1.resource.id }}"
|
|
register: ip2
|
|
|
|
- name: Assert floating ip address 2 again
|
|
assert:
|
|
that:
|
|
- ip2 is not changed
|
|
|
|
- name: Create floating ip address 3
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: ip
|
|
attributes:
|
|
name: 10.6.6.152
|
|
floating_ip_address: 10.6.6.152
|
|
floating_network_id: "{{ network_external.resource.id }}"
|
|
fixed_ip_address: 10.7.7.101
|
|
port_id: "{{ port_internal2.resource.id }}"
|
|
updateable_attributes:
|
|
- fixed_ip_address
|
|
- port_id
|
|
register: ip3
|
|
|
|
- name: Assert floating ip address 3
|
|
assert:
|
|
that:
|
|
- ip3 is changed
|
|
|
|
- name: Create floating ip address 3 again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: ip
|
|
attributes:
|
|
name: 10.6.6.152
|
|
floating_ip_address: 10.6.6.152
|
|
floating_network_id: "{{ network_external.resource.id }}"
|
|
fixed_ip_address: 10.7.7.101
|
|
port_id: "{{ port_internal2.resource.id }}"
|
|
updateable_attributes:
|
|
- fixed_ip_address
|
|
- port_id
|
|
register: ip3
|
|
|
|
- name: Assert floating ip address 3 again
|
|
assert:
|
|
that:
|
|
- ip3 is not changed
|
|
|
|
- name: List images
|
|
openstack.cloud.resources:
|
|
service: image
|
|
type: image
|
|
register: images
|
|
|
|
- name: Identify CirrOS image id
|
|
set_fact:
|
|
image_id: "{{ images.resources|community.general.json_query(query)|first }}"
|
|
vars:
|
|
query: "[?starts_with(name, 'cirros')].id"
|
|
|
|
- name: List compute flavors
|
|
openstack.cloud.resources:
|
|
service: compute
|
|
type: flavor
|
|
register: flavors
|
|
|
|
- name: Identify m1.tiny flavor id
|
|
set_fact:
|
|
flavor_id: "{{ flavors.resources|community.general.json_query(query)|first }}"
|
|
vars:
|
|
query: "[?name == 'm1.tiny'].id"
|
|
|
|
- name: Create server
|
|
openstack.cloud.resource:
|
|
service: compute
|
|
type: server
|
|
attributes:
|
|
name: ansible_server
|
|
image_id: "{{ image_id }}"
|
|
flavor_id: "{{ flavor_id }}"
|
|
networks:
|
|
- uuid: "{{ network_internal.resource.id }}"
|
|
port: "{{ port_internal1.resource.id }}"
|
|
- uuid: "{{ network_internal.resource.id }}"
|
|
port: "{{ port_internal2.resource.id }}"
|
|
non_updateable_attributes:
|
|
- name
|
|
- image_id
|
|
- flavor_id
|
|
- networks
|
|
wait: true
|
|
register: server
|
|
|
|
- name: Assert server
|
|
assert:
|
|
that:
|
|
- server is changed
|
|
|
|
- name: Create server again
|
|
openstack.cloud.resource:
|
|
service: compute
|
|
type: server
|
|
attributes:
|
|
name: ansible_server
|
|
image_id: "{{ image_id }}"
|
|
flavor_id: "{{ flavor_id }}"
|
|
networks:
|
|
- uuid: "{{ network_internal.resource.id }}"
|
|
port: "{{ port_internal1.resource.id }}"
|
|
- uuid: "{{ network_internal.resource.id }}"
|
|
port: "{{ port_internal2.resource.id }}"
|
|
non_updateable_attributes:
|
|
- name
|
|
- image_id
|
|
- flavor_id
|
|
- networks
|
|
wait: true
|
|
register: server
|
|
|
|
- name: Assert server again
|
|
assert:
|
|
that:
|
|
- server is not changed
|
|
|
|
- name: Detach floating ip address 3
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: ip
|
|
attributes:
|
|
floating_ip_address: 10.6.6.152
|
|
port_id: !!null
|
|
register: ip3
|
|
|
|
- name: Assert floating ip address 3
|
|
assert:
|
|
that:
|
|
- ip3 is changed
|
|
|
|
- name: Detach floating ip address 3 again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: ip
|
|
attributes:
|
|
floating_ip_address: 10.6.6.152
|
|
port_id: !!null
|
|
register: ip3
|
|
|
|
- name: Assert floating ip address 3 again
|
|
assert:
|
|
that:
|
|
- ip3 is not changed
|
|
|
|
- name: Delete server
|
|
openstack.cloud.resource:
|
|
service: compute
|
|
type: server
|
|
attributes:
|
|
name: ansible_server
|
|
state: absent
|
|
wait: true
|
|
register: server
|
|
|
|
- name: Assert server
|
|
assert:
|
|
that:
|
|
- server is changed
|
|
|
|
- name: Delete server again
|
|
openstack.cloud.resource:
|
|
service: compute
|
|
type: server
|
|
attributes:
|
|
name: ansible_server
|
|
state: absent
|
|
wait: true
|
|
register: server
|
|
|
|
- name: Assert server
|
|
assert:
|
|
that:
|
|
- server is not changed
|
|
|
|
- name: Delete floating ip address 3
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: ip
|
|
attributes:
|
|
floating_ip_address: 10.6.6.152
|
|
state: absent
|
|
register: ip3
|
|
|
|
- name: Assert floating ip address 3
|
|
assert:
|
|
that:
|
|
- ip3 is changed
|
|
|
|
- name: Delete floating ip address 3 again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: ip
|
|
attributes:
|
|
floating_ip_address: 10.6.6.152
|
|
state: absent
|
|
register: ip3
|
|
|
|
- name: Assert floating ip address 3 again
|
|
assert:
|
|
that:
|
|
- ip3 is not changed
|
|
|
|
- name: Delete floating ip address 2
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: ip
|
|
attributes:
|
|
floating_ip_address: 10.6.6.151
|
|
state: absent
|
|
register: ip2
|
|
|
|
- name: Assert floating ip address 2
|
|
assert:
|
|
that:
|
|
- ip2 is changed
|
|
|
|
- name: Delete floating ip address 2 again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: ip
|
|
attributes:
|
|
floating_ip_address: 10.6.6.151
|
|
state: absent
|
|
register: ip2
|
|
|
|
- name: Assert floating ip address 2 again
|
|
assert:
|
|
that:
|
|
- ip2 is not changed
|
|
|
|
- name: Delete floating ip address 1
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: ip
|
|
attributes:
|
|
floating_ip_address: 10.6.6.150
|
|
state: absent
|
|
register: ip1
|
|
|
|
- name: Assert floating ip address 1
|
|
assert:
|
|
that:
|
|
- ip1 is changed
|
|
|
|
- name: Delete floating ip address 1 again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: ip
|
|
attributes:
|
|
floating_ip_address: 10.6.6.150
|
|
state: absent
|
|
register: ip1
|
|
|
|
- name: Assert floating ip address 1 again
|
|
assert:
|
|
that:
|
|
- ip1 is not changed
|
|
|
|
- name: Detach router from internal subnet
|
|
openstack.cloud.router:
|
|
name: ansible_router
|
|
network: "{{ network_external.resource.id }}"
|
|
external_fixed_ips:
|
|
- ip: 10.6.6.10
|
|
subnet: "{{ subnet_external.resource.id }}"
|
|
interfaces: []
|
|
register: router
|
|
|
|
- name: Delete router
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: router
|
|
attributes:
|
|
name: ansible_router
|
|
state: absent
|
|
wait: true
|
|
register: router
|
|
|
|
- name: Assert router
|
|
assert:
|
|
that:
|
|
- router is changed
|
|
|
|
- name: Delete router again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: router
|
|
attributes:
|
|
name: ansible_router
|
|
state: absent
|
|
wait: true
|
|
register: router
|
|
|
|
- name: Assert router again
|
|
assert:
|
|
that:
|
|
- router is not changed
|
|
|
|
- name: Delete internal port 2
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: port
|
|
attributes:
|
|
name: ansible_port_internal2
|
|
state: absent
|
|
register: port_internal2
|
|
|
|
- name: Assert internal port 2
|
|
assert:
|
|
that:
|
|
- port_internal2 is changed
|
|
|
|
- name: Delete internal port 2 again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: port
|
|
attributes:
|
|
name: ansible_port_internal2
|
|
state: absent
|
|
register: port_internal2
|
|
|
|
- name: Assert internal port 2 again
|
|
assert:
|
|
that:
|
|
- port_internal2 is not changed
|
|
|
|
- name: Delete internal port 1
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: port
|
|
attributes:
|
|
name: ansible_port_internal1
|
|
state: absent
|
|
register: port_internal1
|
|
|
|
- name: Assert internal port 1
|
|
assert:
|
|
that:
|
|
- port_internal1 is changed
|
|
|
|
- name: Delete internal port 1 again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: port
|
|
attributes:
|
|
name: ansible_port_internal1
|
|
state: absent
|
|
register: port_internal1
|
|
|
|
- name: Assert internal port 1 again
|
|
assert:
|
|
that:
|
|
- port_internal1 is not changed
|
|
|
|
- name: Delete internal subnet
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: subnet
|
|
attributes:
|
|
name: ansible_internal_subnet
|
|
state: absent
|
|
register: subnet_internal
|
|
|
|
- name: Assert internal subnet
|
|
assert:
|
|
that:
|
|
- subnet_internal is changed
|
|
|
|
- name: Delete internal subnet again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: subnet
|
|
attributes:
|
|
name: ansible_internal_subnet
|
|
state: absent
|
|
register: subnet_internal
|
|
|
|
- name: Assert internal subnet again
|
|
assert:
|
|
that:
|
|
- subnet_internal is not changed
|
|
|
|
- name: Delete internal network
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: network
|
|
attributes:
|
|
name: ansible_network_internal
|
|
state: absent
|
|
wait: true
|
|
register: network_internal
|
|
|
|
- name: Assert internal network
|
|
assert:
|
|
that:
|
|
- network_internal is changed
|
|
|
|
- name: Delete internal network again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: network
|
|
attributes:
|
|
name: ansible_network_internal
|
|
state: absent
|
|
wait: true
|
|
register: network_internal
|
|
|
|
- name: Assert internal network again
|
|
assert:
|
|
that:
|
|
- network_internal is not changed
|
|
|
|
- name: Delete external port
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: port
|
|
attributes:
|
|
name: ansible_port_external
|
|
state: absent
|
|
register: port_external
|
|
|
|
- name: Assert external port
|
|
assert:
|
|
that:
|
|
- port_external is changed
|
|
|
|
- name: Delete external port again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: port
|
|
attributes:
|
|
name: ansible_port_external
|
|
state: absent
|
|
register: port_external
|
|
|
|
- name: Assert external port again
|
|
assert:
|
|
that:
|
|
- port_external is not changed
|
|
|
|
- name: Delete external subnet
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: subnet
|
|
attributes:
|
|
name: ansible_external_subnet
|
|
state: absent
|
|
register: subnet_external
|
|
|
|
- name: Assert external subnet
|
|
assert:
|
|
that:
|
|
- subnet_external is changed
|
|
|
|
- name: Delete external subnet again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: subnet
|
|
attributes:
|
|
name: ansible_external_subnet
|
|
state: absent
|
|
register: subnet_external
|
|
|
|
- name: Assert external subnet again
|
|
assert:
|
|
that:
|
|
- subnet_external is not changed
|
|
|
|
- name: Delete external network
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: network
|
|
attributes:
|
|
name: ansible_network_external
|
|
state: absent
|
|
wait: true
|
|
register: network_external
|
|
|
|
- name: Assert external network
|
|
assert:
|
|
that:
|
|
- network_external is changed
|
|
|
|
- name: Delete external network again
|
|
openstack.cloud.resource:
|
|
service: network
|
|
type: network
|
|
attributes:
|
|
name: ansible_network_external
|
|
state: absent
|
|
wait: true
|
|
register: network_external
|
|
|
|
- name: Assert external network again
|
|
assert:
|
|
that:
|
|
- network_external is not changed
|
|
|
|
- name: Verify resource's check mode
|
|
import_tasks: check_mode.yml
|