2 # Copyright 2020 British Telecommunications plc
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
8 # http://www.apache.org/licenses/LICENSE-2.0
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15 # Author: Antonio Marsico (antonio.marsico@bt.com)
17 - name: Looking for the OpenStack external network
18 openstack.cloud.networks_info:
19 cloud: "{{ cloud_name }}"
21 name: "{{ external_network_name }}"
22 register: openstack_external_networks
24 - name: Show OpenStack networks
26 msg: "{{ openstack_external_networks.openstack_networks }}"
29 - name: Gather information about previously created subnets
30 openstack.cloud.subnets_info:
31 cloud: "{{ cloud_name }}"
32 name: "{{ openstack_external_networks.openstack_networks[0].subnets[0] }}"
35 - name: Show openstack subnets
37 msg: "{{ subnet_info.openstack_subnets[0] }}"
41 cidr: "{{ subnet_info.openstack_subnets[0].cidr }}"
43 - name: Creating a new openstack flavor
44 openstack.cloud.compute_flavor:
45 cloud: "{{ cloud_name }}"
47 name: "{{os_flavor.name}}"
48 ram: "{{os_flavor.ram}}"
49 vcpus: "{{os_flavor.cpu}}"
50 disk: "{{os_flavor.disk}}"
52 - name: Gather information about OpenStack images
53 openstack.cloud.image_info:
54 cloud: "{{ cloud_name }}"
55 image: "{{ item.image }}"
56 with_items: "{{ servers }}"
59 - name: Show OpenStack image information
61 msg: "{{ item.openstack_image }}"
63 with_items: "{{ image_query.results }}"
64 when: item.openstack_image != none
66 # Missing SHA256 check if we want to update an image
68 - name: Downloading images
70 url: "{{item.0.image_url}}"
71 dest: "/tmp/{{ item.0.image }}.img"
73 loop: "{{ servers |product(image_query.results)|list }}"
74 when: item.1.openstack_image == none and item.0.image == item.1.item.image
76 - name: Creating images
77 openstack.cloud.image:
78 cloud: "{{ cloud_name }}"
79 name: "{{ item.0.image }}"
80 container_format: bare
83 filename: "/tmp/{{ item.0.image }}.img"
84 loop: "{{ servers |product(image_query.results)|list }}"
85 when: item.1.openstack_image == none and item.0.image == item.1.item.image
87 - name: Removing tmp image files
89 path: "/tmp/{{ item.image }}.img"
91 with_items: "{{ servers }}"
93 - name: Creating a security group
94 openstack.cloud.security_group:
95 cloud: "{{ cloud_name }}"
97 name: "{{external_network_name}}_access"
98 description: Security group for LAN external access
100 - name: Creating ICMP rule
101 openstack.cloud.security_group_rule:
102 cloud: "{{ cloud_name }}"
103 security_group: "{{external_network_name}}_access"
105 remote_ip_prefix: 0.0.0.0/0
107 - name: Creating TCP access rule
108 openstack.cloud.security_group_rule:
109 cloud: "{{ cloud_name }}"
110 security_group: "{{external_network_name}}_access"
112 remote_ip_prefix: "{{ cidr }}"
114 - name: Allow HTTP from anywhere
115 openstack.cloud.security_group_rule:
116 cloud: "{{ cloud_name }}"
117 security_group: "{{external_network_name}}_access"
121 remote_ip_prefix: 0.0.0.0/0
123 - name: Allow SSH from anywhere
124 openstack.cloud.security_group_rule:
125 cloud: "{{ cloud_name }}"
126 security_group: "{{external_network_name}}_access"
130 remote_ip_prefix: 0.0.0.0/0
132 - name: SSH key check
133 openstack.cloud.keypair:
134 cloud: "{{ cloud_name }}"
136 name: "{{ os_key_name }}"
137 public_key_file: "{{ key_file }}"
144 - name: Creating the new ansible key
147 content: "{{ keypair.key.public_key }}"
148 dest: "~/.ssh/{{ keypair.key.name }}.pub"
150 when: keypair.key.public_key != none and key_file == none
152 - name: Creating the new ansible private key
155 content: "{{ keypair.key.private_key }}"
156 dest: "~/.ssh/{{ keypair.key.name }}"
158 when: keypair.key.private_key != none and key_file == none