|
| 1 | +--- |
| 2 | + |
| 3 | +- name: Get network info |
| 4 | + openstack.cloud.networks_info: |
| 5 | + name: "{{ openstack_octavia_load_balancer_network_name }}" |
| 6 | + register: existing_networks |
| 7 | + run_once: true |
| 8 | + |
| 9 | +- name: Create network if not exists |
| 10 | + openstack.cloud.network: |
| 11 | + name: "{{ openstack_octavia_load_balancer_network_name }}" |
| 12 | + provider_network_type: "{{ openstack_octavia_provider_network_type }}" |
| 13 | + state: present |
| 14 | + when: existing_networks | length == 0 |
| 15 | + run_once: true |
| 16 | + |
| 17 | +- name: Get network info again with the ID this time |
| 18 | + openstack.cloud.networks_info: |
| 19 | + name: "{{ openstack_octavia_load_balancer_network_name }}" |
| 20 | + register: existing_networks_again |
| 21 | + run_once: true |
| 22 | + |
| 23 | +- name: Create a new subnet in neutron |
| 24 | + openstack.cloud.subnet: |
| 25 | + network_name: "{{ openstack_octavia_load_balancer_network_name }}" |
| 26 | + name: "{{ openstack_octavia_load_balancer_subnet_name }}" |
| 27 | + cidr: "{{ openstack_octavia_load_balancer_subnet }}" |
| 28 | + allocation_pool_start: "{{ openstack_octavia_load_balancer_subnet_start }}" |
| 29 | + allocation_pool_end: "{{ openstack_octavia_load_balancer_subnet_end }}" |
| 30 | + state: present |
| 31 | + run_once: true |
| 32 | + |
| 33 | +- name: Create a security group |
| 34 | + openstack.cloud.security_group: |
| 35 | + name: lb-mgmt-sec-grp |
| 36 | + state: present |
| 37 | + description: security group for octavia load balancers |
| 38 | + run_once: true |
| 39 | + |
| 40 | +- name: Create a security group rule |
| 41 | + openstack.cloud.security_group_rule: |
| 42 | + security_group: lb-mgmt-sec-grp |
| 43 | + protocol: icmp |
| 44 | + remote_ip_prefix: 0.0.0.0/0 |
| 45 | + run_once: true |
| 46 | + |
| 47 | +- name: Create a security group rule |
| 48 | + openstack.cloud.security_group_rule: |
| 49 | + security_group: lb-mgmt-sec-grp |
| 50 | + protocol: tcp |
| 51 | + port_range_min: 22 |
| 52 | + port_range_max: 22 |
| 53 | + remote_ip_prefix: 0.0.0.0/0 |
| 54 | + run_once: true |
| 55 | + |
| 56 | +- name: Create a security group rule |
| 57 | + openstack.cloud.security_group_rule: |
| 58 | + security_group: lb-mgmt-sec-grp |
| 59 | + protocol: tcp |
| 60 | + port_range_min: 9443 |
| 61 | + port_range_max: 9443 |
| 62 | + remote_ip_prefix: 0.0.0.0/0 |
| 63 | + run_once: true |
| 64 | + |
| 65 | +- name: Create a security group for octavia health manager |
| 66 | + openstack.cloud.security_group: |
| 67 | + name: lb-health-mgr-sec-grp |
| 68 | + state: present |
| 69 | + description: security group for octavia health manager |
| 70 | + run_once: true |
| 71 | + register: security_group |
| 72 | + |
| 73 | +- name: Create health manager group security rules |
| 74 | + openstack.cloud.security_group_rule: |
| 75 | + security_group: lb-health-mgr-sec-grp |
| 76 | + protocol: udp |
| 77 | + port_range_min: 5555 |
| 78 | + port_range_max: 5555 |
| 79 | + remote_ip_prefix: 0.0.0.0/0 |
| 80 | + run_once: true |
| 81 | + |
| 82 | +- name: Create ports debug |
| 83 | + ansible.builtin.debug: |
| 84 | + msg: "item {{ item }}" |
| 85 | + with_items: "{{ groups['all'] |
| 86 | + | map('extract', hostvars) |
| 87 | + | selectattr('ovs_enabled', 'defined') |
| 88 | + | selectattr('ovs_enabled', 'equalto', true) |
| 89 | + | map(attribute='inventory_hostname') |
| 90 | + | list }}" |
| 91 | + |
| 92 | +- name: Build octavia_port_names (override or hostname) |
| 93 | + ansible.builtin.set_fact: |
| 94 | + octavia_port_names: "{{ octavia_port_names | default([]) + [ (hostvars[item].octavia_host_override | default(item)) ] }}" |
| 95 | + loop: "{{ groups['all'] }}" |
| 96 | + when: |
| 97 | + - hostvars[item].ovs_enabled is defined |
| 98 | + - hostvars[item].ovs_enabled | bool |
| 99 | + run_once: true |
| 100 | + delegate_to: localhost |
| 101 | + loop_control: |
| 102 | + label: "{{ item }}" |
| 103 | + |
| 104 | +- name: Create ports debug |
| 105 | + ansible.builtin.debug: |
| 106 | + msg: "item {{ item }}" |
| 107 | + with_items: "{{ octavia_port_names }}" |
| 108 | + run_once: true |
| 109 | + |
| 110 | +# ansible's openstack.cloud.port module doesn't permit you to specify |
| 111 | +# the binding:host_id, so we have to do it the hard way using |
| 112 | +# openstack.cloud.resource. |
| 113 | +- name: Create Octavia health manager port (set binding host_id) |
| 114 | + openstack.cloud.resource: |
| 115 | + state: present |
| 116 | + service: network |
| 117 | + type: port |
| 118 | + attributes: |
| 119 | + name: "octavia-health-manager-port-{{ item }}" |
| 120 | + network_id: "{{ existing_networks_again.networks[0].id }}" |
| 121 | + device_owner: "Octavia:health-mgr" |
| 122 | + binding_host_id: "{{ item }}" |
| 123 | + security_groups: |
| 124 | + - "{{ security_group.security_group.id }}" |
| 125 | + register: create_octavia_port |
| 126 | + with_items: "{{ octavia_port_names }}" |
| 127 | + run_once: true |
0 commit comments