feat(pb,role,task): makes VM deployment playbook use new validation pre_tasks, become_method and os_template tasks are shared now
This commit is contained in:
@@ -10,98 +10,33 @@
|
||||
ansible_user_passwd_hash: "{{ ansible_password | password_hash('sha512', 's3edscrj45e6r') }}"
|
||||
user_passwd_hash: "{{ user_password | password_hash('sha512', 's3ed6123jhgcr') }}"
|
||||
|
||||
vars_prompt:
|
||||
- name: vm_hostname
|
||||
prompt: "Hostname for the VM (may only contain letters (a-z, A-Z), numbers (0-9), and hyphens)"
|
||||
default: "new-vm-test"
|
||||
private: false
|
||||
|
||||
- name: vm_os_template
|
||||
prompt: "Select OS template. Available: debian-13 | alpine"
|
||||
default: "debian-13"
|
||||
private: false
|
||||
|
||||
- name: vm_become_method
|
||||
prompt: "Select become method. Available: sudo | su | pbrun | pfexec | doas | dzdo | ksu | runas | machinectl"
|
||||
default: "sudo"
|
||||
private: false
|
||||
|
||||
- name: vm_create_human_admin_user
|
||||
prompt: "Create human admin user? (true/false)?"
|
||||
default: true
|
||||
private: false
|
||||
|
||||
- name: vm_ip_address
|
||||
prompt: "IP address for the VM (in x.x.x.x/x formant)"
|
||||
default: "192.168.0.89/24"
|
||||
private: false
|
||||
|
||||
pre_tasks:
|
||||
- name: Validate hostname
|
||||
ansible.builtin.fail:
|
||||
msg: |
|
||||
Invalid hostname: "{{ lxc_hostname }}"
|
||||
Hostname must:
|
||||
- contain only letters (a-z, A-Z), digits (0-9), hyphens (-), and dots (.)
|
||||
- not start or end with a hyphen or dot
|
||||
- have each label between 1 and 63 characters
|
||||
- not exceed 253 characters in total
|
||||
when: >
|
||||
lxc_hostname | length > 253 or
|
||||
lxc_hostname is not regex('^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$')
|
||||
run_once: true
|
||||
|
||||
- name: Validate IP address
|
||||
ansible.builtin.fail:
|
||||
msg: |
|
||||
Invalid IP address: "{{ vm_ip_address }}"
|
||||
IP address must be in x.x.x.x/x format (e.g., 192.168.0.89/24).
|
||||
when: not vm_ip_address is regex('^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)(\\/(3[0-2]|[12]?\\d))?$')
|
||||
run_once: true
|
||||
|
||||
- name: Validate OS template
|
||||
ansible.builtin.fail:
|
||||
msg: |
|
||||
Invalid OS template: "{{ vm_os_template }}"
|
||||
Select from available options: debian-13, alpine
|
||||
when: vm_os_template not in ['debian-13', 'alpine']
|
||||
run_once: true
|
||||
- name: Include input and validation for hostname
|
||||
ansible.builtin.include_tasks: ../tasks/hostname_validation.yaml
|
||||
|
||||
- name: Validate become method
|
||||
ansible.builtin.fail:
|
||||
msg: |
|
||||
Invalid become method: "{{ vm_become_method }}"
|
||||
Select from available options: sudo | su | pbrun | pfexec | doas | dzdo | ksu | runas | machinectl
|
||||
when: vm_become_method not in ['sudo', 'su', 'pbrun', 'pfexec', 'doas', 'dzdo', 'ksu', 'runas', 'machinectl']
|
||||
run_once: true
|
||||
- name: Include input and validation for IP
|
||||
ansible.builtin.include_tasks: ../tasks/ip_validation.yaml
|
||||
|
||||
- name: Include input and validation for human admin user creation
|
||||
ansible.builtin.include_tasks: ../tasks/human_admin_user_validation.yaml
|
||||
|
||||
- name: Include input and validation for OS template
|
||||
ansible.builtin.include_tasks: ../tasks/os_template_validation.yaml
|
||||
|
||||
- name: Include input and validation for become method
|
||||
ansible.builtin.include_tasks: ../tasks/become_method_validation.yaml
|
||||
|
||||
roles:
|
||||
- ../roles/deploy_vm_on_proxmox
|
||||
|
||||
tasks:
|
||||
- name: Make the hostname available to the whole playbook
|
||||
ansible.builtin.set_fact:
|
||||
fact_vm_hostname: "{{ vm_hostname }}"
|
||||
|
||||
- name: Make the OS template available to the whole playbook
|
||||
ansible.builtin.set_fact:
|
||||
fact_vm_os_template: "{{ vm_os_template }}"
|
||||
|
||||
- name: Make the IP available to the whole playbook
|
||||
ansible.builtin.set_fact:
|
||||
fact_vm_ip_address: "{{ vm_ip_address.split('/') | first }}"
|
||||
|
||||
- name: Make the "human admin user" selection available to the whole playbook
|
||||
ansible.builtin.set_fact:
|
||||
fact_vm_create_human_admin_user: "{{ vm_create_human_admin_user }}"
|
||||
|
||||
- name: Add the target host to the inventory
|
||||
ansible.builtin.add_host:
|
||||
name: "{{ fact_vm_ip_address }}"
|
||||
name: "{{ guest_ip_address }}"
|
||||
groups: new_host
|
||||
ansible_user: ansible
|
||||
ansible_become_password: "{{ ansible_become_passwd }}"
|
||||
ansible_become_method: "{{ vm_become_method }}"
|
||||
ansible_become_method: "{{ guest_become_method }}"
|
||||
|
||||
|
||||
- name: Configure VM
|
||||
@@ -123,10 +58,10 @@
|
||||
- name: Include human admin user role
|
||||
ansible.builtin.include_role:
|
||||
name: ../roles/human_admin_user
|
||||
when: "hostvars['localhost']['fact_vm_create_human_admin_user'] | bool"
|
||||
when: "hostvars['localhost']['create_human_admin_user'] | bool"
|
||||
|
||||
- name: Include update configs role
|
||||
ansible.builtin.include_role:
|
||||
name: ../roles/update_configs
|
||||
when: "hostvars['localhost']['fact_vm_create_human_admin_user'] | bool"
|
||||
when: "hostvars['localhost']['create_human_admin_user'] | bool"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user