1
0
mirror of https://github.com/openshift/installer.git synced 2026-02-05 15:47:14 +01:00
Files
installer/upi/openstack/control-plane.yaml
Roman Dobosz aae81ab501 OCPBUGS-33973: Openstack UPI - Reintroduce unique resource names.
We experienced issues caused by network resources created with the same
name, which makes ansible playbooks to behave differently.

Due to fact, that there is not yet OpenShift infraID accessible on the
stage of creating network resources, there is a need to create
deployment unique identifier in some other way. This patch implements
generating such identifier independent from OpenShift deployment id.

Co-authored-by: Maysa De Macedo Souza <maysa.macedo95@gmail.com>
2024-07-09 09:32:52 +02:00

92 lines
3.3 KiB
YAML

# Required Python packages:
#
# ansible
# openstackclient
# openstacksdk
# netaddr
- ansible.builtin.import_playbook: common.yaml
- hosts: all
gather_facts: no
tasks:
- name: 'Create the Control Plane ports'
openstack.cloud.port:
name: "{{ item.1 }}-{{ item.0 }}"
network: "{{ os_network }}"
security_groups:
- "{{ os_sg_master }}"
allowed_address_pairs:
- ip_address: "{{ os_apiVIP }}"
- ip_address: "{{ os_ingressVIP }}"
with_indexed_items: "{{ [os_port_master] * os_cp_nodes_number }}"
register: ports
when: os_subnet6_range is not defined
- name: 'Create the dualstack Control Plane ports'
openstack.cloud.port:
name: "{{ item.1 }}-{{ item.0 }}"
network: "{{ os_network }}"
security_groups:
- "{{ os_sg_master }}"
allowed_address_pairs:
- ip_address: "{{ os_apiVIP }}"
- ip_address: "{{ os_apiVIP6 }}"
- ip_address: "{{ os_ingressVIP }}"
- ip_address: "{{ os_ingressVIP6 }}"
with_indexed_items: "{{ [os_port_master] * os_cp_nodes_number }}"
register: ports
when: os_subnet6_range is defined
- name: 'Set Control Plane ports tag'
ansible.builtin.command:
cmd: "openstack port set --tag {{ cluster_id_tag }} {{ item.1 }}-{{ item.0 }}"
with_indexed_items: "{{ [os_port_master] * os_cp_nodes_number }}"
- name: 'List the Server groups'
ansible.builtin.command:
# os-compute-api-version 2.15 or higher is required for the 'soft-anti-affinity' policy
cmd: "openstack --os-compute-api-version=2.15 server group list -f json -c ID -c Name"
register: server_group_list
- name: 'Parse the Server group ID from existing'
ansible.builtin.set_fact:
server_group_id: "{{ (server_group_list.stdout | from_json | json_query(list_query) | first).ID }}"
vars:
list_query: "[?Name=='{{ os_cp_server_group_name }}']"
when:
- "os_cp_server_group_name|string in server_group_list.stdout"
- name: 'Create the Control Plane server group'
ansible.builtin.command:
# os-compute-api-version 2.15 or higher is required for the 'soft-anti-affinity' policy
cmd: "openstack --os-compute-api-version=2.15 server group create -f json -c id --policy=soft-anti-affinity {{ os_cp_server_group_name }}"
register: server_group_created
when:
- server_group_id is not defined
- name: 'Parse the Server group ID from creation'
ansible.builtin.set_fact:
server_group_id: "{{ (server_group_created.stdout | from_json).id }}"
when:
- server_group_id is not defined
- name: 'Create the Control Plane servers'
openstack.cloud.server:
name: "{{ item.1 }}-{{ item.0 }}"
image: "{{ os_image_rhcos }}"
flavor: "{{ os_flavor_master }}"
auto_ip: no
# The ignition filename will be concatenated with the Control Plane node
# name and its 0-indexed serial number.
# In this case, the first node will look for this filename:
# "{{ infraID }}-master-0-ignition.json"
userdata: "{{ lookup('file', [item.1, item.0, 'ignition.json'] | join('-')) | string }}"
nics:
- port-name: "{{ os_port_master }}-{{ item.0 }}"
scheduler_hints:
group: "{{ server_group_id }}"
meta: "{{ cluster_id_tag }}"
with_indexed_items: "{{ [os_cp_server_name] * os_cp_nodes_number }}"