Files
sertilab-ansible/roles/homelab/wireguard/tasks/peers.yml

72 lines
2.1 KiB
YAML

---
- name: "Generate private keys"
ansible.builtin.shell:
cmd: wg genkey
register: "peer_keys"
loop: "{{ wireguard_clients }}"
loop_control:
label: "{{ item.name }}"
args:
creates: "{{ wireguard_config_dir }}/peer_{{ item.name }}_private.key"
no_log: true
- name: "Save private keys"
ansible.builtin.copy:
content: "{{ item.stdout }}"
dest: "{{ wireguard_config_dir }}/peer_{{ item.item.name }}_private.key"
owner: root
group: root
mode: "0600"
loop: "{{ peer_keys.results }}"
loop_control:
label: "{{ item.item.name }}"
when: item.change | default(false)
no_log: true
- name: "Read all private keys"
ansible.builtin.slurp:
src: "{{ wireguard_config_dir }}/peer_{{ item.name }}_private.key"
register: peer_privkey_contents
loop: "{{ wireguard_clients }}"
loop_control:
label: "{{ item.name }}"
no_log: true
- name: "Generate public keys"
ansible.builtin.shell:
cmd: "cat {{ wireguard_config_dir }}/peer_{{ item.name }}_private.key | wg pubkey"
register: peer_pubkey
loop: "{{ wireguard_clients }}"
loop_control:
label: "{{ item.name }}"
changed_when: false
- name: "Save public keys"
ansible.builtin.copy:
content: "{{ item.stdout }}"
dest: "{{ wireguard_config_dir }}/peer_{{ item.item.name }}_public.key"
mode: '0644'
loop: "{{ peer_pubkey.results }}"
loop_control:
label: "{{ item.item.name }}"
- name: "Generate client configuration files"
ansible.builtin.template:
src: client.conf.j2
dest: "{{ wireguard_client_config_dir }}/{{ item.0.name }}.conf"
owner: root
group: root
mode: '0600'
loop: "{{ wireguard_clients | zip(peer_privkey_contents.results, peer_pubkey.results) | list }}"
loop_control:
label: "{{ item.0.name }}"
- name: "Generate QR codes for moblie clients"
ansible.builtin.shell:
cmd: "qrencode -t ansiutf8 < {{ wireguard_client_config_dir }}/{{ item.name }}.conf > {{ wireguard_client_config_dir }}/{{ item.name }}_qr.txt"
loop: "{{ wireguard_clients }}"
loop_control:
label: "{{ item.name }}"
changed_when: false