install.fairie/home/dot_local/share/ansible/.config/molecule/tasks/create_linux_instance.yml

65 lines
2.8 KiB
YAML
Raw Normal View History

2023-07-15 22:40:26 -07:00
---
# yamllint disable rule:line-length
- name: create ssh keypair
community.crypto.openssh_keypair:
comment: "{{ lookup('env','USER') }} user for Molecule"
path: '{{ ssh_identity_file }}'
register: keypair
- name: create molecule Linux instance(s)
google.cloud.gcp_compute_instance:
state: present
name: '{{ item.name }}'
machine_type: "{{ item.machine_type | default('n1-standard-1') }}"
metadata:
ssh-keys: "{{ lookup('env','USER') }}:{{ keypair.public_key }}"
scheduling:
preemptible: '{{ item.preemptible | default(false) }}'
disks:
- auto_delete: true
boot: true
initialize_params:
disk_size_gb: '{{ item.disk_size_gb | default(omit) }}'
source_image: "{{ item.image | default('projects/debian-cloud/global/images/family/debian-10') }}"
source_image_encryption_key:
raw_key: '{{ item.image_encryption_key | default(omit) }}'
network_interfaces:
- network:
selfLink: "https://www.googleapis.com/compute/v1/projects/{{ molecule_yml.driver.vpc_host_project | default(gcp_project_id) }}/global/networks/{{ molecule_yml.driver.network_name | default('default') }}"
subnetwork:
selfLink: "https://compute.googleapis.com/compute/v1/projects/{{ molecule_yml.driver.vpc_host_project | default(gcp_project_id) }}/regions/{{ molecule_yml.driver.region }}/subnetworks/{{ molecule_yml.driver.subnetwork_name | default('default') }}"
access_configs: "{{ [{'name': 'instance_ip', 'type': 'ONE_TO_ONE_NAT'}] if molecule_yml.driver.external_access else [] }}"
zone: "{{ item.zone | default(molecule_yml.driver.region + '-b') }}"
project: '{{ gcp_project_id }}'
scopes: "{{ molecule_yml.driver.scopes | default(['https://www.googleapis.com/auth/compute'], True) }}"
service_account_email: '{{ molecule_yml.driver.service_account_email | default (omit, true) }}'
service_account_file: '{{ molecule_yml.driver.service_account_file | default (omit, true) }}'
auth_kind: '{{ molecule_yml.driver.auth_kind | default(omit, true) }}'
register: async_results
loop: '{{ molecule_yml.platforms }}'
loop_control:
pause: 3
async: 7200
poll: 0
- name: Wait for instance(s) creation to complete
ansible.builtin.async_status:
jid: '{{ item.ansible_job_id }}'
loop: '{{ async_results.results }}'
register: server
until: server.finished
retries: 300
delay: 10
notify:
- Populate instance config dict Linux
- Convert instance config dict to a list
- Dump instance config
- name: Wait for SSH
ansible.builtin.wait_for:
port: 22
host: '{{ item.networkInterfaces.0.accessConfigs.0.natIP if molecule_yml.driver.external_access else item.networkInterfaces.0.networkIP }}'
search_regex: SSH
delay: 10
loop: '{{ server.results }}'