--- - name: Create machineset_name set_fact: machineset_name: "{{ item.metadata.name ~ '-rhel'}}" - name: Update machineset definition set_fact: machineset: "{{ item | combine(dict_edit, recursive=True) }}" vars: dict_edit: metadata: name: "{{ machineset_name }}" resourceVersion: "" spec: selector: matchLabels: machine.openshift.io/cluster-api-machineset: "{{ machineset_name }}" template: metadata: labels: machine.openshift.io/cluster-api-machineset: "{{ machineset_name }}" spec: providerSpec: value: ami: id: "{{ openshift_aws_scaleup_ami }}" keyName: "{{ openshift_aws_scaleup_key }}" - name: Import machineset definition command: > oc apply -f - --kubeconfig={{ kubeconfig_path }} register: oc_apply args: stdin: "{{ machineset | to_yaml }}" changed_when: - ('created' in oc_apply.stdout) or ('configured' in oc_apply.stdout) - block: - name: Get machines in the machineset command: > oc get machine --kubeconfig={{ kubeconfig_path }} --namespace=openshift-machine-api --selector='machine.openshift.io/cluster-api-machineset={{ machineset_name }}' --output=json register: oc_get_machine changed_when: false - name: Create list of machines set_fact: worker_machines: "{{ (oc_get_machine.stdout | from_json)['items'] | map(attribute='metadata.name') | list }}" - name: Wait for machines to be provisioned command: > oc get machine {{ item }} --kubeconfig={{ kubeconfig_path }} --namespace=openshift-machine-api --output=json loop: "{{ worker_machines }}" register: new_machine until: - new_machine.stdout != '' - (new_machine.stdout | from_json).status is defined - (new_machine.stdout | from_json).status.phase == 'Provisioned' retries: 36 delay: 5 changed_when: false - name: Get machines in the machineset after provisioning command: > oc get machine --kubeconfig={{ kubeconfig_path }} --namespace=openshift-machine-api --selector='machine.openshift.io/cluster-api-machineset={{ machineset_name }}' --output=json register: oc_get_machine changed_when: false - name: Add hostname to new_workers_list set_fact: new_workers_list: "{{ new_workers_list + [ item.status.addresses | selectattr('type', 'match', '^InternalDNS$') | map(attribute='address') | first ] }}" loop: "{{ (oc_get_machine.stdout | from_json)['items'] }}" rescue: - name: Machine creation failed fail: msg: "Machine creation failed, error: {{ new_machine.resources[0].status.errorMessage }}" - name: Get ssh bastion address command: > oc get service ssh-bastion --kubeconfig={{ kubeconfig_path }} --namespace=test-ssh-bastion --output=jsonpath='{.status.loadBalancer.ingress[0].hostname}' register: oc_get until: - oc_get.stdout != '' changed_when: false - name: Set fact ssh_bastion set_fact: ssh_bastion: "{{ oc_get.stdout }}" - name: Add machine to the inventory add_host: name: "{{ item }}" node_name: "{{ item }}" groups: new_workers ansible_ssh_common_args: "-o ProxyCommand=\"ssh -o IdentityFile='{{ openshift_aws_scaleup_key_path | default('/opt/app-root/src/.ssh/id_rsa') }}' -o ConnectTimeout=30 -o ConnectionAttempts=100 -o StrictHostKeyChecking=no -W %h:%p -q core@{{ ssh_bastion }}\"" loop: "{{ new_workers_list }}"