blob: 5c07098388d75162c1779e440f1e3323697508bb [file] [log] [blame]
okozachenko1203d8d2aa12022-10-22 00:55:14 +11001# Copyright (c) 2022 VEXXHOST, Inc.
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may
4# not use this file except in compliance with the License. You may obtain
5# a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations
13# under the License.
14
guilhermesteinmuller9b173d22023-01-24 19:15:17 +000015- name: Uninstall the legacy HelmRelease
16 run_once: true
17 block:
18 - name: Suspend the existing HelmRelease
19 kubernetes.core.k8s:
20 state: patched
21 api_version: helm.toolkit.fluxcd.io/v2beta1
22 kind: HelmRelease
Mohammed Naser2145fc32023-01-29 23:23:03 +000023 name: "{{ octavia_helm_release_name }}"
24 namespace: "{{ octavia_helm_release_namespace }}"
guilhermesteinmuller9b173d22023-01-24 19:15:17 +000025 definition:
26 spec:
27 suspend: true
28
29 - name: Remove the existing HelmRelease
30 kubernetes.core.k8s:
31 state: absent
32 api_version: helm.toolkit.fluxcd.io/v2beta1
33 kind: HelmRelease
Mohammed Naser2145fc32023-01-29 23:23:03 +000034 name: "{{ octavia_helm_release_name }}"
35 namespace: "{{ octavia_helm_release_namespace }}"
okozachenko1203d8d2aa12022-10-22 00:55:14 +110036
37- name: Create management network
38 openstack.cloud.network:
39 cloud: atmosphere
40 # Network settings
41 name: lb-mgmt-net
Mohammed Naser2145fc32023-01-29 23:23:03 +000042 register: _octavia_management_network
okozachenko1203d8d2aa12022-10-22 00:55:14 +110043
44- name: Create management subnet
45 openstack.cloud.subnet:
46 cloud: atmosphere
47 # Subnet settings
48 network_name: lb-mgmt-net
49 name: lb-mgmt-subnet
Mohammed Naser2145fc32023-01-29 23:23:03 +000050 cidr: "{{ octavia_management_subnet_cidr }}"
okozachenko1203d8d2aa12022-10-22 00:55:14 +110051
52- name: Create health manager security group
53 openstack.cloud.security_group:
54 cloud: atmosphere
55 name: lb-health-mgr-sec-grp
Mohammed Naser2145fc32023-01-29 23:23:03 +000056 register: _octavia_health_manager_sg
okozachenko1203d8d2aa12022-10-22 00:55:14 +110057
58- name: Create health manager security group rules
59 openstack.cloud.security_group_rule:
60 cloud: atmosphere
Mohammed Naser2145fc32023-01-29 23:23:03 +000061 security_group: "{{ _octavia_health_manager_sg.id }}"
okozachenko1203d8d2aa12022-10-22 00:55:14 +110062 direction: ingress
63 ethertype: IPv4
64 protocol: tcp
65 port_range_min: "{{ item }}"
66 port_range_max: "{{ item }}"
67 loop:
68 - 5555
69 - 10514
70 - 20514
71
72- name: Create health manager networking ports
73 openstack.cloud.port:
74 cloud: atmosphere
75 name: "octavia-health-manager-port-{{ hostvars[item]['inventory_hostname_short'] }}"
76 device_owner: octavia:health-mgr
Mohammed Naser2145fc32023-01-29 23:23:03 +000077 network: "{{ _octavia_management_network.id }}"
okozachenko1203d8d2aa12022-10-22 00:55:14 +110078 security_groups:
Mohammed Naser2145fc32023-01-29 23:23:03 +000079 - "{{ _octavia_health_manager_sg.id }}"
okozachenko1203d8d2aa12022-10-22 00:55:14 +110080 loop: "{{ groups['controllers'] }}"
81
82- name: Set binding for ports
83 changed_when: false
84 ansible.builtin.shell: |
85 openstack port set \
86 --host {{ hostvars[item]['ansible_fqdn'] }} \
87 octavia-health-manager-port-{{ hostvars[item]['inventory_hostname_short'] }}
88 environment:
89 OS_CLOUD: atmosphere
90 loop: "{{ groups['controllers'] }}"
91
92- name: Get health manager networking ports
93 openstack.cloud.port_info:
94 cloud: atmosphere
95 port: "octavia-health-manager-port-{{ hostvars[item]['ansible_fqdn'] | split('.') | first }}"
96 loop: "{{ groups['controllers'] }}"
Mohammed Naser2145fc32023-01-29 23:23:03 +000097 register: _octavia_health_manager_ports
okozachenko1203d8d2aa12022-10-22 00:55:14 +110098
99- name: Set controller_ip_port_list
100 ansible.builtin.set_fact:
Mohammed Naser2145fc32023-01-29 23:23:03 +0000101 _octavia_controller_ip_port_list: "{{ (_octavia_controller_ip_port_list | d([]) + [item.openstack_ports[0].fixed_ips[0].ip_address + ':5555']) | unique }}"
102 loop: "{{ _octavia_health_manager_ports.results }}"
Mohammed Naserc5824202022-11-12 17:17:02 +0000103 loop_control:
104 label: "{{ item.openstack_ports[0].name }}"
okozachenko1203d8d2aa12022-10-22 00:55:14 +1100105
106- name: Create amphora security group
107 openstack.cloud.security_group:
108 cloud: atmosphere
109 name: lb-mgmt-sec-grp
Mohammed Naser2145fc32023-01-29 23:23:03 +0000110 register: _octavia_amphora_sg
okozachenko1203d8d2aa12022-10-22 00:55:14 +1100111
112- name: Create amphora security group rules
113 openstack.cloud.security_group_rule:
114 cloud: atmosphere
Mohammed Naser2145fc32023-01-29 23:23:03 +0000115 security_group: "{{ _octavia_amphora_sg.id }}"
okozachenko1203d8d2aa12022-10-22 00:55:14 +1100116 direction: ingress
117 ethertype: IPv4
118 protocol: tcp
119 port_range_min: "{{ item.0 }}"
120 port_range_max: "{{ item.0 }}"
121 remote_ip_prefix: "{{ item.1.openstack_ports[0].fixed_ips[0].ip_address }}/32"
122 with_nested:
123 - [22, 9443]
Mohammed Naser2145fc32023-01-29 23:23:03 +0000124 - "{{ _octavia_health_manager_ports.results }}"
okozachenko1203d8d2aa12022-10-22 00:55:14 +1100125
126- name: Create amphora flavor
127 openstack.cloud.compute_flavor:
128 cloud: atmosphere
Mohammed Naser9c8115d2023-02-07 22:06:48 +0000129 name: "{{ octavia_amphora_flavor_name }}"
130 vcpus: "{{ octavia_amphora_flavor_vcpus }}"
131 ram: "{{ octavia_amphora_flavor_ram }}"
132 disk: "{{ octavia_amphora_flavor_disk }}"
okozachenko1203d8d2aa12022-10-22 00:55:14 +1100133 is_public: false
Mohammed Naser2145fc32023-01-29 23:23:03 +0000134 register: _octavia_amphora_flavor
okozachenko1203d8d2aa12022-10-22 00:55:14 +1100135
Mohammed Naser4b630042023-02-07 20:47:45 +0000136- name: Upload Amphora image
137 ansible.builtin.include_role:
138 name: glance_image
139 vars:
140 glance_image_name: "{{ octavia_amphora_image_name }}"
141 glance_image_url: "{{ octavia_amphora_image_url }}"
142 glance_image_container_format: "{{ octavia_amphora_image_container_format }}"
143 glance_image_disk_format: "{{ octavia_amphora_image_disk_format }}"
144 glance_image_tags: "{{ octavia_amphora_image_tags }}"
okozachenko1203d8d2aa12022-10-22 00:55:14 +1100145
Mohammed Naser4b630042023-02-07 20:47:45 +0000146- name: Get Amphora image information
147 openstack.cloud.image_info:
okozachenko1203d8d2aa12022-10-22 00:55:14 +1100148 cloud: atmosphere
Mohammed Naser4b630042023-02-07 20:47:45 +0000149 image: "{{ octavia_amphora_image_name }}"
Mohammed Naser2145fc32023-01-29 23:23:03 +0000150 register: _octavia_amphora_image
okozachenko1203d8d2aa12022-10-22 00:55:14 +1100151
Mohammed Naserc5824202022-11-12 17:17:02 +0000152- name: Create CAs & Issuers
153 kubernetes.core.k8s:
154 state: present
155 definition:
156 - apiVersion: cert-manager.io/v1
157 kind: Certificate
158 metadata:
159 name: "{{ item }}-ca"
160 namespace: openstack
161 spec:
162 isCA: true
163 commonName: "{{ item }}"
164 secretName: "{{ item }}-ca"
165 duration: 87600h
166 renewBefore: 720h
167 privateKey:
168 algorithm: ECDSA
169 size: 256
170 issuerRef:
171 name: self-signed
Mohammed Naserbb89a842022-11-14 19:49:36 +0000172 kind: ClusterIssuer
Mohammed Naserc5824202022-11-12 17:17:02 +0000173 group: cert-manager.io
okozachenko1203d8d2aa12022-10-22 00:55:14 +1100174
Mohammed Naserc5824202022-11-12 17:17:02 +0000175 - apiVersion: cert-manager.io/v1
176 kind: Issuer
177 metadata:
178 name: "{{ item }}"
179 namespace: openstack
180 spec:
181 ca:
182 secretName: "{{ item }}-ca"
183 loop:
184 - octavia-client
185 - octavia-server
okozachenko1203d8d2aa12022-10-22 00:55:14 +1100186
Mohammed Naserc5824202022-11-12 17:17:02 +0000187- name: Create certificate for Octavia clients
188 kubernetes.core.k8s:
189 state: present
190 definition:
191 apiVersion: cert-manager.io/v1
192 kind: Certificate
193 metadata:
194 name: octavia-client-certs
195 namespace: openstack
196 spec:
197 commonName: octavia-client
198 secretName: octavia-client-certs
199 additionalOutputFormats:
200 - type: CombinedPEM
201 duration: 87600h
202 renewBefore: 720h
203 issuerRef:
204 name: octavia-client
205 kind: Issuer
206 group: cert-manager.io
okozachenko1203d8d2aa12022-10-22 00:55:14 +1100207
208- name: Create admin compute quotaset
209 openstack.cloud.quota:
210 cloud: atmosphere
211 # NOTE(okozachenko): It uses project name instead of id.
212 name: admin
213 instances: -1
214 cores: -1
215 ram: -1
Mohammed Naser9c8115d2023-02-07 22:06:48 +0000216 volumes: -1
217 gigabytes: -1
okozachenko1203d8d2aa12022-10-22 00:55:14 +1100218
219- name: Deploy Helm chart
guilhermesteinmuller9b173d22023-01-24 19:15:17 +0000220 run_once: true
221 kubernetes.core.helm:
Mohammed Naser2145fc32023-01-29 23:23:03 +0000222 name: "{{ octavia_helm_release_name }}"
223 chart_ref: "{{ octavia_helm_chart_ref }}"
224 release_namespace: "{{ octavia_helm_release_namespace }}"
guilhermesteinmuller9b173d22023-01-24 19:15:17 +0000225 create_namespace: true
226 kubeconfig: /etc/kubernetes/admin.conf
Mohammed Naser2145fc32023-01-29 23:23:03 +0000227 values: "{{ _octavia_helm_values | combine(octavia_helm_values, recursive=True) }}"
okozachenko1203d8d2aa12022-10-22 00:55:14 +1100228
Mohammed Naser24abccb2023-01-29 22:50:42 +0000229- name: Add implied role of load-balancer_member to member
230 run_once: true
231 ansible.builtin.shell: |
232 openstack implied role create \
233 --implied-role load-balancer_member \
234 member
235 environment:
236 OS_CLOUD: atmosphere
Mohammed Naser2145fc32023-01-29 23:23:03 +0000237 register: _octavia_implied_role_create
238 changed_when: _octavia_implied_role_create.rc == 0
239 failed_when: _octavia_implied_role_create.rc != 0 and 'Duplicate entry.' not in _octavia_implied_role_create.stderr
Mohammed Naser24abccb2023-01-29 22:50:42 +0000240
okozachenko1203d8d2aa12022-10-22 00:55:14 +1100241- name: Create Ingress
242 ansible.builtin.include_role:
243 name: openstack_helm_ingress
244 vars:
245 openstack_helm_ingress_endpoint: load_balancer
246 openstack_helm_ingress_service_name: octavia-api
247 openstack_helm_ingress_service_port: 9876
Mohammed Naser2145fc32023-01-29 23:23:03 +0000248 openstack_helm_ingress_annotations: "{{ octavia_ingress_annotations }}"