Ansible installer update
[osm/devops.git] / installers / openstack / roles / setup_openstack / tasks / main.yml
1 ---
2 #   Copyright 2020 British Telecommunications plc
3 #
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
7 #
8 #       http://www.apache.org/licenses/LICENSE-2.0
9 #
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)
16
17 - name: Looking for the OpenStack external network
18   openstack.cloud.networks_info:
19     cloud: "{{ cloud_name }}"
20     filters:
21       name: "{{ external_network_name }}"
22   register: openstack_external_networks
23
24 - name: Show OpenStack networks
25   debug:
26     msg: "{{ openstack_external_networks.openstack_networks }}"
27     verbosity: 2
28
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] }}"
33   register: subnet_info
34
35 - name: Show openstack subnets
36   debug:
37     msg: "{{ subnet_info.openstack_subnets[0] }}"
38     verbosity: 2
39
40 - set_fact:
41     cidr: "{{ subnet_info.openstack_subnets[0].cidr }}"
42
43 - name: Creating a new openstack flavor
44   openstack.cloud.compute_flavor:
45     cloud: "{{ cloud_name }}"
46     state: present
47     name: "{{os_flavor.name}}"
48     ram: "{{os_flavor.ram}}"
49     vcpus: "{{os_flavor.cpu}}"
50     disk: "{{os_flavor.disk}}"
51
52 - name: Gather information about OpenStack images
53   openstack.cloud.image_info:
54     cloud: "{{ cloud_name }}"
55     image: "{{ item.image }}"
56   with_items: "{{ servers }}"
57   register: image_query
58
59 - name: Show OpenStack image information
60   debug:
61     msg: "{{ item.openstack_image }}"
62     verbosity: 2
63   with_items: "{{ image_query.results }}"
64   when: item.openstack_image != none
65
66 # Missing SHA256 check if we want to update an image
67
68 - name: Downloading images
69   get_url:
70     url: "{{item.0.image_url}}"
71     dest: "/tmp/{{ item.0.image }}.img"
72     mode: '644'
73   loop: "{{ servers |product(image_query.results)|list }}"
74   when: item.1.openstack_image == none and item.0.image == item.1.item.image
75
76 - name: Creating images
77   openstack.cloud.image:
78     cloud: "{{ cloud_name }}"
79     name: "{{ item.0.image }}"
80     container_format: bare
81     disk_format: qcow2
82     state: present
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
86
87 - name: Removing tmp image files
88   file:
89     path: "/tmp/{{ item.image }}.img"
90     state: absent
91   with_items: "{{ servers }}"
92
93 - name: Creating a security group
94   openstack.cloud.security_group:
95     cloud: "{{ cloud_name }}"
96     state: present
97     name: "{{external_network_name}}_access"
98     description: Security group for LAN external access
99
100 - name: Creating ICMP rule
101   openstack.cloud.security_group_rule:
102     cloud: "{{ cloud_name }}"
103     security_group: "{{external_network_name}}_access"
104     protocol: icmp
105     remote_ip_prefix: 0.0.0.0/0
106
107 - name: Creating TCP access rule
108   openstack.cloud.security_group_rule:
109     cloud: "{{ cloud_name }}"
110     security_group: "{{external_network_name}}_access"
111     protocol: tcp
112     remote_ip_prefix: "{{ cidr }}"
113
114 - name: Allow HTTP from anywhere
115   openstack.cloud.security_group_rule:
116     cloud: "{{ cloud_name }}"
117     security_group: "{{external_network_name}}_access"
118     protocol: tcp
119     port_range_min: 80
120     port_range_max: 80
121     remote_ip_prefix: 0.0.0.0/0
122
123 - name: Allow SSH from anywhere
124   openstack.cloud.security_group_rule:
125     cloud: "{{ cloud_name }}"
126     security_group: "{{external_network_name}}_access"
127     protocol: tcp
128     port_range_min: 22
129     port_range_max: 22
130     remote_ip_prefix: 0.0.0.0/0
131
132 - name: SSH key check
133   openstack.cloud.keypair:
134     cloud: "{{ cloud_name }}"
135     state: present
136     name: "{{ os_key_name }}"
137     public_key_file: "{{ key_file }}"
138   register: keypair
139
140 - debug:
141     var: keypair
142     verbosity: 2
143
144 - name: Creating the new ansible key
145   local_action:
146     module: copy
147     content: "{{ keypair.key.public_key }}"
148     dest: "~/.ssh/{{ keypair.key.name }}.pub"
149     mode: '600'
150   when: keypair.key.public_key != none and key_file == none
151
152 - name: Creating the new ansible private key
153   local_action:
154     module: copy
155     content: "{{ keypair.key.private_key }}"
156     dest: "~/.ssh/{{ keypair.key.name }}"
157     mode: '600'
158   when: keypair.key.private_key != none and key_file == none