Files
homelab-infra/infrastructure/proxmox/ansible/roles/pve_sdn/tasks/main.yml
T
panxiao81 88a02ababa
lint / yaml (push) Has been cancelled
lint / ansible (push) Has been cancelled
lint / terraform (push) Has been cancelled
Establish clean homelab infrastructure baseline
Reorganize the brownfield repository, remove retired and generated artifacts, harden ignore rules, and record the GitOps/IaC redesign.
2026-09-09 16:47:20 +00:00

61 lines
1.8 KiB
YAML

---
# SDN config is cluster-wide (/etc/pve/sdn/), so everything runs once.
- name: Read existing zones
ansible.builtin.command:
cmd: "pvesh get /cluster/sdn/zones --output-format json"
register: _zones
changed_when: false
check_mode: false
run_once: true
- name: Create the VLAN zone
ansible.builtin.command:
cmd: >-
pvesh create /cluster/sdn/zones --zone {{ pve_sdn_zone }} --type vlan
--bridge {{ pve_sdn_bridge }} --mtu {{ pve_sdn_mtu }}
--nodes {{ groups['pve'] | join(',') }}
when: pve_sdn_zone not in (_zones.stdout | from_json | map(attribute='zone') | list)
run_once: true
- name: Read existing vnets
ansible.builtin.command:
cmd: "pvesh get /cluster/sdn/vnets --output-format json"
register: _vnets
changed_when: false
check_mode: false
run_once: true
- name: Create the VNets
ansible.builtin.command:
cmd: >-
pvesh create /cluster/sdn/vnets --vnet {{ item.name }}
--zone {{ pve_sdn_zone }} --tag {{ item.tag }}
--alias '{{ item.alias }}'
loop: "{{ pve_sdn_vnets }}"
loop_control:
label: "{{ item.name }} (vlan {{ item.tag }})"
when: item.name not in (_vnets.stdout | from_json | map(attribute='vnet') | list)
run_once: true
- name: Apply the SDN configuration
# SDN changes stay PENDING until applied; without this the VNet bridges are
# never actually created on the nodes.
ansible.builtin.command:
cmd: "pvesh set /cluster/sdn"
register: _apply
changed_when: true
run_once: true
- name: Report
ansible.builtin.shell:
cmd: "pvesh get /cluster/sdn/vnets --output-format json | python3 -c \"import json,sys;[print(' ',v['vnet'],'vlan',v.get('tag'),'zone',v.get('zone')) for v in json.load(sys.stdin)]\""
register: _rep
changed_when: false
run_once: true
- name: Show it
ansible.builtin.debug:
msg: "{{ _rep.stdout_lines }}"
run_once: true