66 lines
2.0 KiB
YAML
66 lines
2.0 KiB
YAML
---
|
|
|
|
- name: "Check if peer private key exist"
|
|
ansible.builtin.stat:
|
|
path: "{{ wireguard_config_dir }}/peer_{{ item.name }}_private.key"
|
|
register: peer_key_stat
|
|
loop: "{{ wireguard_clients }}"
|
|
loop_control:
|
|
label: "{{ item.name }}"
|
|
|
|
- name: "Generate and save peer private keys"
|
|
ansible.builtin.shell: |
|
|
wg genkey > {{ wireguard_config_dir }}/peer_{{ item.item.name }}_private.key
|
|
chmod 0600 {{ wireguard_config_dir }}/peer_{{ item.item.name }}_private.key
|
|
loop: "{{ peer_key_stat.results }}"
|
|
loop_control:
|
|
label: "{{ item.item.name }}"
|
|
when: not item.stat.exists
|
|
no_log: false
|
|
|
|
- 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 mobile 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
|