# ----------------------------- # 002_sub_create_ct.yaml # ----------------------------- - name: Reset facts set_fact: net_config: "" features_string: "" - name: Normalize storage names set_fact: template_storage_clean: "{{ item['Template Storage'].split(' ')[0] | trim }}" disk_storage_clean: "{{ item['Disk Storage'].split(' ')[0] | trim }}" - name: Build ostemplate path set_fact: ostemplate_path: "{{ template_storage_clean }}:vztmpl/{{ item.Template }}" - name: Build network config set_fact: net_config: "{{ 'name=eth0,bridge=' ~ item.Bridge ~ ',ip=' ~ (item['IPv4/CIDR'] | default('dhcp')) ~ (',gw=' ~ item['Gateway(IPv4)'] if item['Gateway(IPv4)'] else '') }}" - name: Build features string set_fact: features_string: "{{ ['nesting=1' if item.Nesting | default(False) else '', 'keyctl=1' if item.get('Keyctl', False) else ''] | reject('equalto','') | join(',') }}" - name: Show CT variables debug: msg: - "CT ID: {{ item['CT ID'] }}" - "Node: {{ item.Node }}" - "Hostname: {{ item.Hostname }}" - "Net: {{ net_config }}" - "Features: {{ features_string }}" - "Template Path: {{ ostemplate_path }}" - name: Cleanup strings set_fact: net_config: "{{ net_config | trim }}" features_string: "{{ features_string | trim }}" # ----------------------------- # CHECK IF CT EXISTS # ----------------------------- - name: Check if CT exists ansible.builtin.uri: url: "https://{{ hostvars[node_map[item.Node]].ansible_host }}:8006/api2/json/nodes/{{ item.Node }}/lxc/{{ item['CT ID'] }}/status/current" method: GET headers: Authorization: "PVEAPIToken=root@pam!ansible={{ api_token_secret }}" validate_certs: false register: ct_check failed_when: false delegate_to: localhost - name: Set CT exists fact set_fact: ct_exists: "{{ ct_check.status == 200 }}" # ----------------------------- # CREATE CT # ----------------------------- - name: Create LXC Container if not exists community.general.proxmox: api_host: "{{ hostvars[node_map[item.Node]].ansible_host }}" api_user: "root@pam" api_token_id: "ansible" api_token_secret: "{{ api_token_secret }}" validate_certs: false node: "{{ item.Node }}" vmid: "{{ item['CT ID'] }}" hostname: "{{ item.Hostname }}" cores: "{{ item.Cores }}" memory: "{{ item.Memory }}" swap: "{{ item.Swap }}" ostemplate: "{{ ostemplate_path | trim }}" disk: "{{ item.Disk | default('8') }}" storage: "{{ disk_storage_clean | trim }}" netif: net0: "{{ net_config }}" features: "{{ features_string }}" state: present when: not ct_exists # ----------------------------- # DEBUG RESULT # ----------------------------- - name: Show result debug: msg: "CT {{ item['CT ID'] }} created" when: not ct_exists