--- - 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 private key" ansible.builtin.shell: | wg genkey > {{ wireguard_client_config_dir }}/peer_{{ item.name }}_private.key chmod 0600 {{ wireguard_client_config_dir }}/peer_{{ item.name }}_private.key loop: "{{ peer_key_stat.results }}" loop_control: label: "{{ item.item.name }}" when: not item.stat.exists 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