|
79 | 79 | ansible.builtin.include_tasks: |
80 | 80 | file: tasks/get_instance_ids.yml |
81 | 81 |
|
82 | | - - name: Get IP of a login node - Exact name provided |
83 | | - changed_when: false |
84 | | - register: get_login_ip |
85 | | - ansible.builtin.command: >- |
86 | | - gcloud compute instances describe --zone={{ zone }} {{ login_node }} |
87 | | - --format='get(networkInterfaces[0].accessConfigs[0].natIP)' |
88 | | - when: '"*" not in login_node' |
89 | | - |
90 | | - - name: Set login_ip variable - Exact name provided |
| 82 | + - name: Set login node name fact - Exact name provided |
91 | 83 | ansible.builtin.set_fact: |
92 | | - login_ip: "{{ get_login_ip.stdout }}" |
| 84 | + login_node_name: "{{ login_node }}" |
93 | 85 | when: '"*" not in login_node' |
94 | 86 |
|
95 | | - - name: Get IP of a login node - Name pattern provided |
| 87 | + - name: Get login node name - Name pattern provided |
96 | 88 | changed_when: false |
97 | | - register: get_login_ip |
| 89 | + register: get_login_name |
98 | 90 | ansible.builtin.command: >- |
99 | | - gcloud compute instances list \ |
100 | | - --format='get(networkInterfaces[0].accessConfigs[0].natIP)' --limit=1 \ |
101 | | - --filter=NAME:{{ login_node }} |
| 91 | + gcloud compute instances list |
| 92 | + --format='value(name)' --limit=1 |
| 93 | + --filter=NAME:{{ login_node }} |
102 | 94 | when: '"*" in login_node' |
103 | 95 |
|
104 | | - - name: Set login_ip variable - Name pattern provided |
| 96 | + - name: Set login node name fact - Name pattern provided |
105 | 97 | ansible.builtin.set_fact: |
106 | | - login_ip: "{{ get_login_ip.stdout }}" |
| 98 | + login_node_name: "{{ get_login_name.stdout }}" |
107 | 99 | when: '"*" in login_node' |
108 | 100 |
|
| 101 | + - name: Check that login node name is resolved |
| 102 | + ansible.builtin.assert: |
| 103 | + that: |
| 104 | + - login_node_name is defined |
| 105 | + - login_node_name != "" |
| 106 | + |
| 107 | + - name: Get Login Nat IP |
| 108 | + changed_when: false |
| 109 | + register: get_login_nat_ip |
| 110 | + ansible.builtin.command: >- |
| 111 | + gcloud compute instances describe --zone={{ zone }} {{ login_node_name }} |
| 112 | + --format='value(networkInterfaces[0].accessConfigs[0].natIP)' |
| 113 | + failed_when: false |
| 114 | + |
| 115 | + - name: Get Login Network IP |
| 116 | + changed_when: false |
| 117 | + register: get_login_network_ip |
| 118 | + ansible.builtin.command: >- |
| 119 | + gcloud compute instances describe --zone={{ zone }} {{ login_node_name }} |
| 120 | + --format='value(networkInterfaces[0].networkIP)' |
| 121 | +
|
| 122 | + - name: Set Login IP facts |
| 123 | + ansible.builtin.set_fact: |
| 124 | + login_ip: "{{ get_login_nat_ip.stdout | default(get_login_network_ip.stdout, true) }}" |
| 125 | + login_is_private: "{{ get_login_nat_ip.stdout == '' }}" |
| 126 | + |
109 | 127 | - name: Check that login IP is set |
110 | 128 | ansible.builtin.assert: |
111 | 129 | that: |
112 | 130 | - login_ip is defined |
113 | 131 | - login_ip != "" |
114 | 132 |
|
115 | | - - name: Print login public IP |
| 133 | + - name: Print login IP info |
116 | 134 | ansible.builtin.debug: |
117 | | - var: login_ip |
| 135 | + msg: "Login IP: {{ login_ip }}, Private: {{ login_is_private }}" |
| 136 | + |
| 137 | + - name: Set controller node name fact - Exact name provided |
| 138 | + ansible.builtin.set_fact: |
| 139 | + controller_node_name: "{{ controller_node }}" |
| 140 | + when: '"*" not in controller_node' |
118 | 141 |
|
119 | | - - name: Get Controller IP |
| 142 | + - name: Get controller node name - Name pattern provided |
120 | 143 | changed_when: false |
121 | | - register: controller_ip |
| 144 | + register: get_controller_name |
122 | 145 | ansible.builtin.command: >- |
123 | | - gcloud compute instances describe --zone={{ zone }} {{ controller_node }} |
124 | | - --format='get(networkInterfaces[0].accessConfigs[0].natIP)' |
| 146 | + gcloud compute instances list |
| 147 | + --format='value(name)' --limit=1 |
| 148 | + --filter=NAME:{{ controller_node }} |
| 149 | + when: '"*" in controller_node' |
125 | 150 |
|
126 | | - - name: Print controller public IP |
| 151 | + - name: Set controller node name fact - Name pattern provided |
| 152 | + ansible.builtin.set_fact: |
| 153 | + controller_node_name: "{{ get_controller_name.stdout }}" |
| 154 | + when: '"*" in controller_node' |
| 155 | + |
| 156 | + - name: Check that controller node name is resolved |
| 157 | + ansible.builtin.assert: |
| 158 | + that: |
| 159 | + - controller_node_name is defined |
| 160 | + - controller_node_name != "" |
| 161 | + |
| 162 | + - name: Get Controller Nat IP |
| 163 | + changed_when: false |
| 164 | + register: get_controller_nat_ip |
| 165 | + ansible.builtin.command: >- |
| 166 | + gcloud compute instances describe --zone={{ zone }} {{ controller_node_name }} |
| 167 | + --format='value(networkInterfaces[0].accessConfigs[0].natIP)' |
| 168 | + failed_when: false |
| 169 | + |
| 170 | + - name: Get Controller Network IP |
| 171 | + changed_when: false |
| 172 | + register: get_controller_network_ip |
| 173 | + ansible.builtin.command: >- |
| 174 | + gcloud compute instances describe --zone={{ zone }} {{ controller_node_name }} |
| 175 | + --format='value(networkInterfaces[0].networkIP)' |
| 176 | +
|
| 177 | + - name: Set Controller IP facts |
| 178 | + ansible.builtin.set_fact: |
| 179 | + controller_ip: "{{ get_controller_nat_ip.stdout | default(get_controller_network_ip.stdout, true) }}" |
| 180 | + controller_is_private: "{{ get_controller_nat_ip.stdout == '' }}" |
| 181 | + |
| 182 | + - name: Print controller IP info |
127 | 183 | ansible.builtin.debug: |
128 | | - var: controller_ip.stdout_lines |
| 184 | + msg: "Controller IP: {{ controller_ip }}, Private: {{ controller_is_private }}" |
129 | 185 |
|
130 | 186 | ## Setup firewall for cloud build |
131 | 187 | - name: Create firewall rule |
|
171 | 227 |
|
172 | 228 | - name: Add Login node as host |
173 | 229 | ansible.builtin.add_host: |
174 | | - hostname: "{{ login_ip }}" |
| 230 | + name: login_node_host |
| 231 | + ansible_host: "{{ login_node_name if login_is_private else login_ip }}" |
| 232 | + ansible_ssh_common_args: >- |
| 233 | + {% if login_is_private %} |
| 234 | + -o ProxyCommand="gcloud compute start-iap-tunnel %h %p --listen-on-stdin --project={{ project }} --zone={{ zone }} --verbosity=warning" |
| 235 | + {% endif %} |
175 | 236 | groups: [remote_host] |
176 | | - when: (login_ip | default('')) | ansible.utils.ipaddr != false |
| 237 | + |
| 238 | + - name: Add Controller node as host |
| 239 | + ansible.builtin.add_host: |
| 240 | + name: controller_node_host |
| 241 | + ansible_host: "{{ controller_ip if not controller_is_private else controller_node_name }}" |
| 242 | + ansible_ssh_common_args: >- |
| 243 | + {% if controller_is_private %} |
| 244 | + -o ProxyCommand="gcloud compute start-iap-tunnel %h %p --listen-on-stdin --project={{ project }} --zone={{ zone }} --verbosity=warning" |
| 245 | + {% endif %} |
| 246 | +
|
177 | 247 |
|
178 | 248 | - name: Wait for host tasks |
179 | 249 | ansible.builtin.include_tasks: tasks/wait-for-host.yml |
180 | 250 | vars: |
181 | | - host_ip: "{{ login_ip }}" |
| 251 | + host_to_wait: login_node_host |
| 252 | + is_private: "{{ login_is_private }}" |
182 | 253 | ansible_ssh_private_key_file: "/builder/home/.ssh/id_rsa" |
183 | 254 |
|
184 | 255 | ## Cleanup and fail gracefully |
|
297 | 368 | become: true |
298 | 369 | changed_when: false |
299 | 370 | failed_when: false |
300 | | - delegate_to: "{{ hostvars['localhost']['controller_ip']['stdout'] }}" |
| 371 | + delegate_to: controller_node_host |
301 | 372 | ansible.builtin.command: cat /slurm/scripts/setup.log |
302 | 373 | register: setup_output |
303 | 374 |
|
|
309 | 380 | become: true |
310 | 381 | changed_when: false |
311 | 382 | failed_when: false |
312 | | - delegate_to: "{{ hostvars['localhost']['controller_ip']['stdout'] }}" |
| 383 | + delegate_to: controller_node_host |
313 | 384 | ansible.builtin.command: cat /var/log/slurm/resume.log |
314 | 385 | register: resume_output |
315 | 386 |
|
|
321 | 392 | become: true |
322 | 393 | changed_when: false |
323 | 394 | failed_when: false |
324 | | - delegate_to: "{{ hostvars['localhost']['controller_ip']['stdout'] }}" |
| 395 | + delegate_to: controller_node_host |
325 | 396 | ansible.builtin.command: cat /var/log/slurm/suspend.log |
326 | 397 | register: suspend_output |
327 | 398 |
|
|
333 | 404 | become: true |
334 | 405 | changed_when: false |
335 | 406 | failed_when: false |
336 | | - delegate_to: "{{ hostvars['localhost']['controller_ip']['stdout'] }}" |
| 407 | + delegate_to: controller_node_host |
337 | 408 | ansible.builtin.command: cat /var/log/slurm/slurmctld.log |
338 | 409 | register: slurmctld_output |
339 | 410 |
|
|
345 | 416 | become: true |
346 | 417 | changed_when: false |
347 | 418 | failed_when: false |
348 | | - delegate_to: "{{ hostvars['localhost']['controller_ip']['stdout'] }}" |
| 419 | + delegate_to: controller_node_host |
349 | 420 | ansible.builtin.command: cat /var/log/slurm/slurmsync.log |
350 | 421 | register: slurmsync_output |
351 | 422 |
|
|
0 commit comments