120 lines
5.0 KiB
YAML
120 lines
5.0 KiB
YAML
- name: Ensure request validation mode is set
|
|
ansible.builtin.set_fact:
|
|
cloud_vm_request_validation_mode: "{{ cloud_vm_request_validation_mode | default('standard') }}"
|
|
|
|
- name: Capture provider defaults
|
|
ansible.builtin.set_fact:
|
|
cloud_dev_desktop_required_common_keys:
|
|
- provider
|
|
- profile_name
|
|
- os_family
|
|
- admin_username
|
|
- allowed_cidrs
|
|
- ttl_hours
|
|
- owner
|
|
- purpose
|
|
|
|
- name: Assert provider is supported
|
|
ansible.builtin.assert:
|
|
that:
|
|
- provider is defined
|
|
- provider in ['azure', 'gcp']
|
|
fail_msg: "provider must be one of: azure, gcp"
|
|
|
|
- name: Assert os_family is supported
|
|
ansible.builtin.assert:
|
|
that:
|
|
- os_family is defined
|
|
- os_family in ['windows', 'fedora-gnome', 'debian-kde']
|
|
fail_msg: "os_family must be one of: windows, fedora-gnome, debian-kde"
|
|
when: cloud_vm_request_validation_mode != "cleanup"
|
|
|
|
- name: Assert required common fields are present
|
|
ansible.builtin.assert:
|
|
that: "{{ cloud_dev_desktop_required_common_keys | map('extract', vars) | list is not none }}"
|
|
fail_msg: "cloud dev desktop request is missing one or more required keys."
|
|
when: cloud_vm_request_validation_mode != "cleanup"
|
|
|
|
- name: Assert allowed CIDRs were supplied
|
|
ansible.builtin.assert:
|
|
that:
|
|
- allowed_cidrs is sequence
|
|
- allowed_cidrs | length > 0
|
|
fail_msg: "allowed_cidrs must be a non-empty list."
|
|
when: cloud_vm_request_validation_mode != "cleanup"
|
|
|
|
- name: Assert provider-specific location fields exist for standard mode
|
|
ansible.builtin.assert:
|
|
that:
|
|
- "(provider == 'azure' and region is defined) or (provider == 'gcp' and zone is defined)"
|
|
fail_msg: "azure requests need region; gcp requests need zone."
|
|
when: cloud_vm_request_validation_mode != "cleanup"
|
|
|
|
- name: Normalize toolchain defaults
|
|
ansible.builtin.set_fact:
|
|
toolchains: "{{ {'codex': true, 'android_studio': false, 'vscode': true, 'flutter': false, 'dart': false} | combine(toolchains | default({}), recursive=True) }}"
|
|
|
|
- name: Normalize SSH public key default
|
|
ansible.builtin.set_fact:
|
|
ssh_public_key_path: "{{ ssh_public_key_path | default('~/.ssh/id_rsa.pub') }}"
|
|
when:
|
|
- cloud_vm_request_validation_mode != "cleanup"
|
|
- os_family != "windows"
|
|
|
|
- name: Normalize allowed TCP ports
|
|
ansible.builtin.set_fact:
|
|
allowed_tcp_ports: >-
|
|
{{
|
|
allowed_tcp_ports
|
|
| default(
|
|
(os_family == 'windows')
|
|
| ternary([22, 3389, 5985], [22, 3389])
|
|
)
|
|
}}
|
|
when: cloud_vm_request_validation_mode != "cleanup"
|
|
|
|
- name: Normalize desktop access defaults
|
|
ansible.builtin.set_fact:
|
|
desktop_access: "{{ {'protocol': (os_family == 'windows') | ternary('rdp', 'native'), 'port': (os_family == 'windows') | ternary(3389, 22)} | combine(desktop_access | default({}), recursive=True) }}"
|
|
when: cloud_vm_request_validation_mode != "cleanup"
|
|
|
|
- name: Derive cloud desktop timestamps and names
|
|
ansible.builtin.set_fact:
|
|
cloud_vm_profile_slug: "{{ (profile_name | default('cleanup')) | lower | regex_replace('[^a-z0-9]+', '-') | regex_replace('(^-|-$)', '') }}"
|
|
cloud_vm_owner_slug: "{{ (owner | default('cleanup')) | lower | regex_replace('[^a-z0-9]+', '-') | regex_replace('(^-|-$)', '') }}"
|
|
cloud_vm_state_root: "{{ cloud_vm_state_root | default(playbook_dir ~ '/../.cloud-dev-desktop-state') }}"
|
|
cloud_vm_created_at: "{{ ansible_date_time.iso8601 }}"
|
|
cloud_vm_expires_at: "{{ lookup('pipe', 'python3 -c \"from datetime import datetime, timedelta, timezone; print((datetime.now(timezone.utc)+timedelta(hours=' ~ (ttl_hours | int) ~ ')).isoformat())\"') }}"
|
|
when:
|
|
- ttl_hours is defined
|
|
- cloud_vm_request_validation_mode != "cleanup"
|
|
|
|
- name: Derive cloud desktop cleanup names
|
|
ansible.builtin.set_fact:
|
|
cloud_vm_profile_slug: "{{ (profile_name | default('cleanup')) | lower | regex_replace('[^a-z0-9]+', '-') | regex_replace('(^-|-$)', '') }}"
|
|
cloud_vm_owner_slug: "{{ (owner | default('cleanup')) | lower | regex_replace('[^a-z0-9]+', '-') | regex_replace('(^-|-$)', '') }}"
|
|
when: cloud_vm_request_validation_mode == "cleanup"
|
|
|
|
- name: Derive cloud desktop state file path
|
|
ansible.builtin.set_fact:
|
|
cloud_vm_state_file: "{{ cloud_vm_state_file | default(cloud_vm_state_root ~ '/' ~ provider ~ '-' ~ cloud_vm_profile_slug ~ '.json') }}"
|
|
when: cloud_vm_request_validation_mode != "cleanup"
|
|
|
|
- name: Build default tags and labels
|
|
ansible.builtin.set_fact:
|
|
cloud_vm_default_tags:
|
|
managed_by: ansible
|
|
toolkit_scope: cloud-dev-desktop
|
|
provider: "{{ provider }}"
|
|
profile_name: "{{ profile_name }}"
|
|
owner: "{{ owner }}"
|
|
purpose: "{{ purpose }}"
|
|
os_family: "{{ os_family }}"
|
|
expires_at: "{{ cloud_vm_expires_at | default('') }}"
|
|
when: cloud_vm_request_validation_mode != "cleanup"
|
|
|
|
- name: Normalize tags and labels
|
|
ansible.builtin.set_fact:
|
|
tags: "{{ cloud_vm_default_tags | combine(tags | default({}), recursive=True) }}"
|
|
when: cloud_vm_request_validation_mode != "cleanup"
|