mirror of
https://github.com/openshift/installer.git
synced 2026-02-05 15:47:14 +01:00
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>
92 lines
3.3 KiB
YAML
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 }}"
|