Menu Close
8.4.19. Creating the control plane machines
Create three control plane machines by using the Ignition config files that you generated.
Prerequisites
-
The infrastructure ID from the installation program’s metadata file is set as an environment variable (
$INFRA_ID
) The
inventory.yaml
andcommon.yaml
Ansible playbooks in a common directory- If you need these files, copy them from Creating network resources
- The three Ignition files created in Creating control plane Ignition config files
Procedure
-
On a command line, change the working directory to the location of the
inventory.yaml
andcommon.yaml
files. - If the control plane Ignition config files aren’t already in your working directory, copy them into it.
Insert the following content into a local file that is called
control-plane.yaml
:例8.14
control-plane.yaml
# Required Python packages: # # ansible # openstackclient # openstacksdk # netaddr - import_playbook: common.yaml - hosts: all gather_facts: no tasks: - name: 'Create the Control Plane ports' os_port: name: "{{ item.1 }}-{{ item.0 }}" network: "{{ os_network }}" security_groups: - "{{ os_sg_master }}" allowed_address_pairs: - ip_address: "{{ os_subnet_range | next_nth_usable(5) }}" - ip_address: "{{ os_subnet_range | next_nth_usable(6) }}" - ip_address: "{{ os_subnet_range | next_nth_usable(7) }}" with_indexed_items: "{{ [os_port_master] * os_cp_nodes_number }}" register: ports - name: 'Set Control Plane ports tag' 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 Control Plane Trunks' command: cmd: "openstack network trunk list" when: os_networking_type == "Kuryr" register: control_plane_trunks - name: 'Create the Control Plane trunks' command: cmd: "openstack network trunk create --parent-port {{ item.1.id }} {{ os_cp_trunk_name }}-{{ item.0 }}" with_indexed_items: "{{ ports.results }}" when: - os_networking_type == "Kuryr" - "os_cp_trunk_name|string not in control_plane_trunks.stdout" - name: 'List the Server groups' command: cmd: "openstack server group list -f json -c ID -c Name" register: server_group_list - name: 'Parse the Server group ID from existing' 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' command: 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' 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' os_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 }}" with_indexed_items: "{{ [os_cp_server_name] * os_cp_nodes_number }}"
On a command line, run the playbook:
$ ansible-playbook -i inventory.yaml control-plane.yaml
Run the following command to monitor the bootstrapping process:
$ openshift-install wait-for bootstrap-complete
You will see messages that confirm that the control plane machines are running and have joined the cluster:
INFO API v1.14.6+f9b5405 up INFO Waiting up to 30m0s for bootstrapping to complete... ... INFO It is now safe to remove the bootstrap resources