129 lines
4.9 KiB
YAML
129 lines
4.9 KiB
YAML
---
|
|
# Configure user-defined wireguard peer
|
|
- name: Configure user-defined wireguard peer
|
|
when: wgpeer is defined and wgpeer | type_debug == "dict"
|
|
block:
|
|
# Set state status for wireguard peer
|
|
- name: Set state status for wireguard peer {{ wgpeer.id }}
|
|
ansible.builtin.set_fact:
|
|
wireguard_peer_state: "{{ wgpeer.state | default('present') }}"
|
|
|
|
# Delete wireguard peer
|
|
- name: Delete wireguard peer {{ wgpeer.id }}
|
|
when: "'absent' in wireguard_peer_state"
|
|
uci:
|
|
command: "absent"
|
|
config: "network"
|
|
section: "{{ wgpeer.id }}"
|
|
type: "wireguard_{{ wgpeer.wireguard_interface_name }}"
|
|
|
|
# Create and configure wireguard peer
|
|
- name: Create and configure wireguard peer
|
|
when: "'present' in wireguard_peer_state"
|
|
block:
|
|
# Create wireguard peer
|
|
- name: Create wireguard peer {{ wgpeer.id }}
|
|
uci:
|
|
command: "add"
|
|
config: "network"
|
|
section: "{{ wgpeer.id }}"
|
|
type: "wireguard_{{ wgpeer.wireguard_interface_name }}"
|
|
|
|
# Configure wireguard peer
|
|
- name: Configure wireguard peer {{ wgpeer.id }}
|
|
uci:
|
|
command: "set"
|
|
config: "network"
|
|
section: "{{ wgpeer.id }}"
|
|
type: "wireguard_{{ wgpeer.wireguard_interface_name }}"
|
|
value:
|
|
description: "{{ wgpeer.name | default(omit) }}"
|
|
public_key: "{{ wgpeer.public_key | default(omit) }}"
|
|
preshared_key: "{{ wgpeer.preshared_key | default(omit) }}"
|
|
endpoint_host: "{{ wgpeer.endpoint_host | default(omit) }}"
|
|
endpoint_port: "{{ wgpeer.endpoint_port | default(omit) }}"
|
|
route_allowed_ips: "{{ wgpeer.route_allowed_ips | default(omit) }}"
|
|
persistent_keepalive: "{{ wgpeer.persistent_keepalive | default(omit) }}"
|
|
allowed_ips: "{{ wgpeer.allowed_ips | default([]) | join(' ') }}"
|
|
|
|
# Generate wireguard peer
|
|
- name: Generate wireguard peer
|
|
when: wgpeer is defined and wgpeer | type_debug == "str"
|
|
block:
|
|
# Create wireguard peer
|
|
- name: Create wireguard peer {{ wgpeer }}
|
|
uci:
|
|
command: "add"
|
|
config: "network"
|
|
section: "{{ wgpeer }}"
|
|
type: "{{ wireguard_interface_name }}"
|
|
|
|
# Check current wireguard private key
|
|
- name: Check current wireguard private key
|
|
uci:
|
|
command: "get"
|
|
config: "network"
|
|
section: "{{ wgpeer }}.private_key"
|
|
type: "{{ wireguard_interface_name }}"
|
|
register: current_wireguard_private_key
|
|
failed_when: >
|
|
current_wireguard_private_key.result is undefined and
|
|
'Entry not found' not in current_wireguard_private_key.result
|
|
|
|
# Set current generated wireguard private key fact
|
|
- name: Set current wireguard private key fact
|
|
ansible.builtin.set_fact:
|
|
wireguard_private_key: "{{ current_wireguard_private_key.result }}"
|
|
when: >
|
|
(current_wireguard_private_key.result is defined and
|
|
current_wireguard_private_key.result | length > 0) and
|
|
'Entry not found' not in current_wireguard_private_key.result
|
|
|
|
# Generate wireguard key pair
|
|
- name: Generate wireguard key pair
|
|
when: >
|
|
current_wireguard_private_key.result is undefined or
|
|
'Entry not found' in current_wireguard_private_key.result
|
|
block:
|
|
# Generate wireguard private key
|
|
- name: Generate wireguard private key
|
|
ansible.builtin.command:
|
|
cmd: "umask go= && wg genkey"
|
|
uses_shell: true
|
|
register: new_wireguard_private_key
|
|
|
|
# Set newely generated wireguard private key fact
|
|
- name: Set newely generated wireguard private key fact
|
|
ansible.builtin.set_fact:
|
|
wireguard_private_key: "{{ new_wireguard_private_key.stdout }}"
|
|
|
|
# Generate wireguard public key
|
|
- name: Generate wireguard public key
|
|
ansible.builtin.command:
|
|
cmd: 'umask go= && echo "{{ wireguard_private_key }}" | wg pubkey'
|
|
uses_shell: true
|
|
register: wireguard_public_key
|
|
|
|
# Generate wireguard preshared key
|
|
- name: Generate wireguard preshared key
|
|
ansible.builtin.command:
|
|
cmd: "umask go= && wg genpsk"
|
|
uses_shell: true
|
|
register: wireguard_preshared_key
|
|
|
|
# Configure wireguard peer
|
|
- name: Configure wireguard peer {{ wgpeer }}
|
|
uci:
|
|
command: "set"
|
|
config: "network"
|
|
section: "{{ wgpeer }}"
|
|
type: "{{ wireguard_interface_name }}"
|
|
value:
|
|
description: "{{ wgpeer }}"
|
|
private_key: "{{ wireguard_private_key | default(omit) }}"
|
|
public_key: "{{ wireguard_public_key.stdout | default(omit) }}"
|
|
preshared_key: "{{ wireguard_preshared_key.stdout | default(omit) }}"
|
|
route_allowed_ips: "1"
|
|
persistent_keepalive: "25"
|
|
allowed_ips: "{{ wireguard_interface_addresses | ansible.utils.ipmath(ansible_loop.index) }}"
|