Files
infra/ansible/roles/openvpn_gateway/tasks/main.yml
T
DmitryandClaude Opus 5 c676be81ec Capture current Ansible control plane state
Commit the accumulated infrastructure work that was living only in the
working tree: monitoring stack, emergency access/bot, gyro allocator,
grimmory, adguard, backup audit and the OpenCode agent definitions.

Also ignore Python bytecode, local archives and Nix/direnv artifacts.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GTocXkGUUazHdKKd3r9k71
2026-08-26 21:39:28 +03:00

106 lines
2.7 KiB
YAML

---
- name: Install OpenVPN packages
ansible.builtin.apt:
name:
- openvpn
- iptables
- iproute2
- netcat-openbsd
state: present
update_cache: true
- name: Ensure OpenVPN config directory exists
ansible.builtin.file:
path: "{{ openvpn_config_dir }}"
state: directory
owner: root
group: root
mode: "0700"
- name: Generate static key on server if missing
ansible.builtin.command: "openvpn --genkey secret {{ openvpn_static_key_path }}"
args:
creates: "{{ openvpn_static_key_path }}"
when: openvpn_role == 'server'
no_log: true
- name: Read static key from server
ansible.builtin.slurp:
src: "{{ openvpn_static_key_path }}"
register: openvpn_static_key_raw
when: openvpn_role == 'server'
no_log: true
- name: Copy static key to all peers
ansible.builtin.copy:
dest: "{{ openvpn_static_key_path }}"
content: "{{ hostvars['ru-vps'].openvpn_static_key_raw.content | b64decode }}"
owner: root
group: root
mode: "0600"
no_log: true
notify: restart openvpn
- name: Enable IPv4 forwarding for routed traffic
ansible.posix.sysctl:
name: net.ipv4.ip_forward
value: "1"
state: present
reload: true
when: openvpn_role == 'gateway' or openvpn_forwarded_services | length > 0
- name: Allow OpenVPN TCP in UFW on server
ansible.builtin.command: "ufw allow {{ openvpn_listen_port }}/tcp"
register: ufw_allow_openvpn
changed_when: "'Rule added' in ufw_allow_openvpn.stdout or 'Rules updated' in ufw_allow_openvpn.stdout"
failed_when: false
when: openvpn_role == 'server'
- name: Render OpenVPN config
ansible.builtin.template:
src: homelab.conf.j2
dest: "{{ openvpn_config_path }}"
owner: root
group: root
mode: "0600"
notify: restart openvpn
- name: Render OpenVPN up script
ansible.builtin.template:
src: up.sh.j2
dest: "{{ openvpn_config_dir }}/up.sh"
owner: root
group: root
mode: "0700"
notify: restart openvpn
when: openvpn_role == 'gateway' or openvpn_forwarded_services | length > 0
- name: Render OpenVPN down script
ansible.builtin.template:
src: down.sh.j2
dest: "{{ openvpn_config_dir }}/down.sh"
owner: root
group: root
mode: "0700"
notify: restart openvpn
when: openvpn_role == 'gateway' or openvpn_forwarded_services | length > 0
- name: Render OpenVPN systemd service
ansible.builtin.template:
src: homelab-openvpn.service.j2
dest: "/etc/systemd/system/{{ openvpn_service_name }}.service"
owner: root
group: root
mode: "0644"
notify: restart openvpn
- name: Reload systemd
ansible.builtin.systemd:
daemon_reload: true
- name: Enable and start OpenVPN
ansible.builtin.systemd:
name: "{{ openvpn_service_name }}"
state: started
enabled: true