|
- {% from "wireguard/map.jinja" import wireguard with context %}
-
- wireguard_software:
- pkg.installed:
- - pkgs:
- {%- for pkg in wireguard.packages %}
- - {{ pkg }}
- {%- endfor %}
- {%- if wireguard.get('repository', False) %}
- - require:
- - pkgrepo: wireguard_repo
-
- wireguard_repo:
- pkgrepo.managed:
- {%- for k,v in wireguard.repository.items() %}
- - {{ k }}: {{ v }}
- {%- endfor %}
- {%- endif %}
-
- {%- for interface_name, interface_dict in salt['pillar.get']('wireguard:interfaces', {}).items() %}
-
- {% if interface_dict.get('delete', False) %}
- stop and disable wg-quick@{{interface_name}}:
- service.dead:
- - name: wg-quick@{{interface_name}}
- - enable: False
- remove wireguard_interface_{{interface_name}}:
- file.absent:
- - name: /etc/wireguard/{{interface_name}}.conf
- {% else %}
- {% if not interface_dict.get('enable', True) %}
- stop and disable wg-quick@{{interface_name}}:
- service.dead:
- - name: wg-quick@{{interface_name}}
- - enable: False
- {% else %}
- restart wg-quick@{{interface_name}}:
- service.running:
- - name: wg-quick@{{interface_name}}
- - enable: True
- - watch:
- - file: wireguard_interface_{{interface_name}}_config
- - require:
- - pkg: wireguard_software
- {% endif %}
-
- {% if interface_dict.get('raw_config') %}
- wireguard_interface_{{interface_name}}_config:
- file.managed:
- - name: /etc/wireguard/{{interface_name}}.conf
- - makedirs: True
- - contents_pillar: wireguard:interfaces:{{interface_name}}:raw_config
- - mode: 600
- {% else %}
- {% if (interface_dict.get('enable', True) and not interface_dict.get('delete', False)) and (not interface_dict.get('config', {}).get('PrivateKey') and not interface_dict.get('raw_config')) %}
- wireguard_{{interface_name}}_privatekey_missing:
- test.fail_without_changes:
- - name: "no wireguard private key for interface {{interface_name}} in pillars"
- - failhard: True
- {% endif %}
- wireguard_interface_{{interface_name}}_config:
- file.managed:
- - name: /etc/wireguard/{{interface_name}}.conf
- - makedirs: True
- - source: salt://wireguard/files/wg.conf
- - template: jinja
- - context:
- interface: {{interface_dict.get('config', {})}}
- peers: {{interface_dict.get('peers', [])}}
- - mode: 600
- {% endif %}
-
- {% endif %}
-
- {%- endfor %}
|