diff --git a/ansible/ci/group_vars/all.yml b/ansible/ci/group_vars/all.yml index 02bb350a7c..f19a6530c9 100644 --- a/ansible/ci/group_vars/all.yml +++ b/ansible/ci/group_vars/all.yml @@ -7,7 +7,7 @@ gcp_instance_prefix: ci gcp_available_zones: - us-central1-a - us-central1-b - - us-central1-c + - us-central1-d - us-central1-f ansible_user: runner gcp_network_name: collector-ci diff --git a/ansible/dev/group_vars/all.yml b/ansible/dev/group_vars/all.yml index 51d7910f71..057085fe47 100644 --- a/ansible/dev/group_vars/all.yml +++ b/ansible/dev/group_vars/all.yml @@ -8,7 +8,6 @@ gcp_instance_prefix: "{{ lookup('env', 'USER') }}-dev" gcp_available_zones: - us-central1-a - us-central1-b - - us-central1-c - us-central1-f ansible_user: "{{ lookup('env', 'USER') }}" gcp_network_name: default diff --git a/ansible/roles/create-vm/tasks/create-gcp-instance.yml b/ansible/roles/create-vm/tasks/create-gcp-instance.yml new file mode 100644 index 0000000000..b6e1ff2195 --- /dev/null +++ b/ansible/roles/create-vm/tasks/create-gcp-instance.yml @@ -0,0 +1,39 @@ +--- +- name: Safely create GCP compute instance + block: + - name: Create compute instance + google.cloud.gcp_compute_instance: + name: "{{ vm_name }}" + project: "{{ gcp_project }}" + auth_kind: "{{ gcp_auth_kind }}" + service_account_file: "{{ gcp_service_account_file }}" + zone: "{{ gcp_zone }}" + machine_type: "{{ vm_machine_type | default('e2-standard-2') }}" + disks: + - auto_delete: true + boot: true + initialize_params: + disk_size_gb: "{{ vm_disk_size | default(20) }}" + source_image: "{{ gcp_source_image }}" + network_interfaces: + - network: "{{ network }}" + access_configs: + - name: External NAT + type: ONE_TO_ONE_NAT + labels: "{{ gcp_default_labels | combine(gcp_extra_labels) }}" + metadata: "{{ gcp_meta_data | default({}) }}" + register: instance_result + + - set_fact: + instance_created: true + when: instance_result is defined and instance_result.changed + rescue: + - name: Remove failed GCP compute instance + google.cloud.gcp_compute_instance: + name: "{{ vm_name }}" + project: "{{ gcp_project }}" + auth_kind: "{{ gcp_auth_kind }}" + service_account_file: "{{ gcp_service_account_file }}" + zone: "{{ gcp_zone }}" + state: absent + when: not instance_created diff --git a/ansible/roles/create-vm/tasks/create-gcp-vm.yml b/ansible/roles/create-vm/tasks/create-gcp-vm.yml index 90d4582a5e..a25b93c1e5 100644 --- a/ansible/roles/create-vm/tasks/create-gcp-vm.yml +++ b/ansible/roles/create-vm/tasks/create-gcp-vm.yml @@ -50,27 +50,13 @@ state: present register: network + +- set_fact: + instance_created: false + - name: Create GCP VM - google.cloud.gcp_compute_instance: - name: "{{ vm_name }}" - project: "{{ gcp_project }}" - auth_kind: "{{ gcp_auth_kind }}" - service_account_file: "{{ gcp_service_account_file }}" - zone: "{{ gcp_zone }}" - machine_type: "{{ vm_machine_type | default('e2-standard-2') }}" - disks: - - auto_delete: true - boot: true - initialize_params: - disk_size_gb: "{{ vm_disk_size | default(20) }}" - source_image: "{{ gcp_source_image }}" - network_interfaces: - - network: "{{ network }}" - access_configs: - - name: External NAT - type: ONE_TO_ONE_NAT - labels: "{{ gcp_default_labels | combine(gcp_extra_labels) }}" - metadata: "{{ gcp_meta_data | default({}) }}" + ansible.builtin.include_tasks: + file: create-gcp-instance.yml # This looks like a lot, and its mostly because ansible support # for "breaking" from a loop is not all that great at the moment. @@ -80,9 +66,5 @@ loop: "{{ vm_available_zones }}" loop_control: loop_var: gcp_zone - register: instance_result when: > - (vm_arch == "amd64" or vm_arch == "arm64") and not condition and excluded == false - vars: - condition: "{{ (instance_result | default({'changed': false})).changed }}" - + (vm_arch == "amd64" or vm_arch == "arm64") and excluded == false