--- - 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 via text format" 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 }}" args: creates: "{{ wireguard_client_config_dir }}/{{ item.name }}_qr.txt" changed_when: false - name: "Generate QR codes for mobile clients via image format" ansible.builtin.shell: cmd: "qrencode -t png -o {{ wireguard_client_config_dir }}/{{ item.name }}.png < {{ wireguard_client_config_dir }}/{{ item.name }}.conf" loop: "{{ wireguard_clients }}" loop_control: label: "{{ item.name }}" args: creates: "{{ wireguard_client_config_dir }}/{{ item.name }}.png" changed_when: false