68 lines
2.0 KiB
YAML
68 lines
2.0 KiB
YAML
---
|
|
- name: Init generated Keys dict
|
|
set_fact:
|
|
generated_keys: []
|
|
|
|
- name : Gather needed key generation
|
|
set_fact:
|
|
generated_keys: "{{ generated_keys + [{'name': item.name}] }}"
|
|
when : item.publicKey is not defined or (item.forceRegeneration is defined and item.forceRegeneration)
|
|
loop: "{{ wg_peers }}"
|
|
|
|
- name : Generate private keys
|
|
command : wg genkey
|
|
register: privateKeyObjects
|
|
loop : "{{ generated_keys }}"
|
|
|
|
|
|
- name : Generate public keys
|
|
shell : echo "{{privateKeyObjects.results[ansible_loop.index0].stdout}}" | wg pubkey
|
|
register: publicKeyObjects
|
|
loop : "{{ generated_keys }}"
|
|
loop_control:
|
|
extended: true
|
|
|
|
- name: Registering generated keys
|
|
set_fact:
|
|
generated_keys: "{{ generated_keys | community.general.lists_mergeby ([{'privateKey' : privateKeyObjects.results[ansible_loop.index0].stdout, 'publicKey' : publicKeyObjects.results[ansible_loop.index0].stdout, 'name':item.name }],'name') }}"
|
|
loop: "{{ generated_keys }}"
|
|
loop_control:
|
|
extended: true
|
|
|
|
- name: Updating client configs info
|
|
set_fact:
|
|
wg_peers: "{{ wg_peers | community.general.lists_mergeby(generated_keys,'name')}}"
|
|
|
|
|
|
- name: Delete local configs directory
|
|
become: false
|
|
local_action : ansible.builtin.file
|
|
args:
|
|
path: "{{ playbook_dir }}/wg_clients/{{ inventory_hostname }}"
|
|
state: absent
|
|
|
|
|
|
- name: Re-create local configs directory
|
|
become: false
|
|
local_action : ansible.builtin.file
|
|
args:
|
|
path: "{{ playbook_dir }}/wg_clients/{{ inventory_hostname }}"
|
|
state: directory
|
|
mode: '0700'
|
|
|
|
|
|
|
|
- name : Generate client config file
|
|
become: false
|
|
local_action : ansible.builtin.template
|
|
args:
|
|
src: templates/wireguard_client.jinja
|
|
dest: "{{ playbook_dir }}/wg_clients/{{ inventory_hostname }}/{{ item.name }}.conf"
|
|
vars:
|
|
wg_client_public_key: "{{ item.publicKey }}"
|
|
wg_client_private_key: "{{ item.privateKey | default('')}}"
|
|
wg_client_address: "{{ item.ip }}"
|
|
allowed_ips : "{{ item.allowedIPs }}"
|
|
wg_server : "{{ inventory_hostname }}"
|
|
loop: "{{ wg_peers }}"
|