Feature 8623
[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   os_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   os_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   os_nova_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   os_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   os_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   os_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   os_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   os_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: SSH key check
115   os_keypair:
116     cloud: "{{ cloud_name }}"
117     state: present
118     name: "{{ os_key_name }}"
119   register: keypair
120
121 - debug:
122     var: keypair
123     verbosity: 2
124
125 - name: Creating the new ansible key
126   local_action:
127     module: copy
128     content: "{{ keypair.key.public_key }}"
129     dest: "~/.ssh/{{ keypair.key.name }}.pub"
130     mode: '600'
131   when: keypair.key.public_key is not none
132
133 - name: Creating the new ansible private key
134   local_action:
135     module: copy
136     content: "{{ keypair.key.private_key }}"
137     dest: "~/.ssh/{{ keypair.key.name }}"
138     mode: '600'
139   when: keypair.key.private_key is not none