blob: e582be41eb36517404752985b90900a88b3b1424 [file] [log] [blame]
# Copyright (c) 2022 VEXXHOST, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
- name: Create management network
openstack.cloud.network:
cloud: atmosphere
# Network settings
name: "{{ octavia_management_network_name }}"
register: _octavia_management_network
- name: Create management subnet
vexxhost.atmosphere.subnet:
cloud: atmosphere
# Subnet settings
network_name: "{{ octavia_management_network_name }}"
name: "{{ octavia_management_subnet_name }}"
cidr: "{{ octavia_management_subnet_cidr }}"
disable_gateway_ip: true
- name: Create health manager security group
openstack.cloud.security_group:
cloud: atmosphere
name: lb-health-mgr-sec-grp
register: _octavia_health_manager_sg
- name: Create health manager security group rules
openstack.cloud.security_group_rule:
cloud: atmosphere
security_group: "{{ _octavia_health_manager_sg.security_group.id }}"
direction: ingress
ethertype: IPv4
protocol: "{{ item.protocol }}"
port_range_min: "{{ item.port }}"
port_range_max: "{{ item.port }}"
loop:
- { protocol: 'udp', port: 5555 }
- { protocol: 'udp', port: 10514 }
- { protocol: 'udp', port: 20514 }
- { protocol: 'tcp', port: 10514 }
- { protocol: 'tcp', port: 20514 }
- name: Create health manager networking ports
# noqa: args[module]
openstack.cloud.port:
cloud: atmosphere
name: "octavia-health-manager-port-{{ hostvars[item]['inventory_hostname_short'] }}"
device_owner: octavia:health-mgr
network: "{{ _octavia_management_network.id }}"
fixed_ips: >-
{{
[
{
"ip_address": hostvars[item]['octavia_health_manager_ip']
}
]
if hostvars[item]['octavia_health_manager_ip'] is defined else omit
}}
security_groups:
- "{{ _octavia_health_manager_sg.security_group.id }}"
loop: "{{ groups['controllers'] }}"
loop_control:
index_var: _octavia_health_manager_port_index
# NOTE(mnaser): Since we're running the playbook targeted at the first
# controller only, we need to manually discover the facts for the
# other controllers.
- name: Discover facts for other controllers
delegate_to: "{{ item }}"
delegate_facts: true
ansible.builtin.setup:
gather_subset: network
loop: "{{ groups['controllers'] }}"
- name: Set binding for ports
changed_when: false
ansible.builtin.shell: |
set -o posix
source /etc/profile.d/atmosphere.sh
openstack port set \
--host {{ hostvars[item]['ansible_fqdn'] }} \
octavia-health-manager-port-{{ hostvars[item]['inventory_hostname_short'] }}
args:
executable: /bin/bash
environment:
OS_CLOUD: atmosphere
loop: "{{ groups['controllers'] }}"
register: _set_binding_for_ports
retries: 10
delay: 1
until: _set_binding_for_ports.rc == 0
failed_when: _set_binding_for_ports.rc != 0
- name: Get health manager networking ports
openstack.cloud.port_info:
cloud: atmosphere
port: "octavia-health-manager-port-{{ hostvars[item]['ansible_fqdn'] | split('.') | first }}"
loop: "{{ groups['controllers'] }}"
register: _octavia_health_manager_ports
- name: Set controller_ip_port_list
ansible.builtin.set_fact:
_octavia_controller_ip_port_list: "{{ (_octavia_controller_ip_port_list | d([]) + [item.ports[0].fixed_ips[0].ip_address + ':5555']) | unique }}"
loop: "{{ _octavia_health_manager_ports.results }}"
loop_control:
label: "{{ item.ports[0].name }}"
- name: Create amphora security group
openstack.cloud.security_group:
cloud: atmosphere
name: "{{ octavia_amphora_security_group_name }}"
register: _octavia_amphora_sg
- name: Create amphora security group rules
openstack.cloud.security_group_rule:
cloud: atmosphere
security_group: "{{ _octavia_amphora_sg.security_group.id }}"
direction: ingress
ethertype: IPv4
protocol: tcp
port_range_min: "{{ item.0 }}"
port_range_max: "{{ item.0 }}"
remote_ip_prefix: "{{ item.1.ports[0].fixed_ips[0].ip_address }}/32"
with_nested:
- [22, 9443]
- "{{ _octavia_health_manager_ports.results }}"
- name: Create amphora flavor
openstack.cloud.compute_flavor:
cloud: atmosphere
name: "{{ octavia_amphora_flavor_name }}"
vcpus: "{{ octavia_amphora_flavor_vcpus }}"
ram: "{{ octavia_amphora_flavor_ram }}"
disk: "{{ octavia_amphora_flavor_disk }}"
is_public: false
extra_specs: "{{ octavia_amphora_flavor_extra_specs }}"
register: _octavia_amphora_flavor
- name: Upload Amphora image
ansible.builtin.include_role:
name: glance_image
vars:
glance_image_name: "{{ octavia_amphora_image_name }}"
glance_image_url: "{{ octavia_amphora_image_url }}"
glance_image_container_format: "{{ octavia_amphora_image_container_format }}"
glance_image_disk_format: "{{ octavia_amphora_image_disk_format }}"
glance_image_tags: "{{ octavia_amphora_image_tags }}"
- name: Get Amphora image information
openstack.cloud.image_info:
cloud: atmosphere
image: "{{ octavia_amphora_image_name }}"
register: _octavia_amphora_image
- name: Create Amphora SSH key
run_once: true
kubernetes.core.k8s:
state: present
definition:
apiVersion: secretgen.k14s.io/v1alpha1
kind: SSHKey
metadata:
name: "{{ octavia_helm_release_name }}-amphora-ssh-key"
namespace: "{{ octavia_helm_release_namespace }}"
spec:
secretTemplate:
type: Opaque
stringData:
id_rsa: $(privateKey)
id_rsa.pub: $(authorizedKey)
config: |
Host *
User ubuntu
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
wait: true
wait_timeout: 60
wait_condition:
type: ReconcileSucceeded
status: true
- name: Grab generated Amphora public key
run_once: true
kubernetes.core.k8s_info:
api_version: v1
kind: Secret
name: "{{ octavia_helm_release_name }}-amphora-ssh-key"
namespace: "{{ octavia_helm_release_namespace }}"
register: octavia_ssh_key_secret
- name: Import Amphora SSH key-pair in OpenStack
run_once: true
openstack.cloud.keypair:
cloud: atmosphere
state: present
name: "{{ octavia_helm_release_name }}-amphora-ssh-key"
public_key: "{{ octavia_ssh_key_secret.resources[0]['data']['id_rsa.pub'] | b64decode }}"
register: octavia_amphora_ssh_keypair