aboutsummaryrefslogtreecommitdiffstats
path: root/tasks/jail_ingress.yml
blob: 2844c12054cc6d873673507e0379cc5718770006 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
- name: Install packages inside jail
  loop:
    - { jail: ingress, package: nginx }
    - { jail: ingress, package: py311-certbot }
    - { jail: ingress, package: py311-certbot-nginx }
    - { jail: ingress, package: goaccess }
  include_tasks: pkg_jail_install.yml

- name: Configure pf.conf
  template:
    src: ingress/etc_pf.conf.j2
    dest: /usr/local/jails/containers/ingress/etc/pf.conf
    owner: root
    group: wheel
    mode: "0644"
  register: ingress_pf_conf

- name: Reload pf.conf
  shell: jexec ingress pfctl -f /etc/pf.conf
  when: ingress_pf_conf.changed

- name: Check if gateway mode is enabled
  shell: jexec ingress sysrc gateway_enable | grep -q "YES"
  register: ingress_gateway_enabled
  failed_when: false
  changed_when: false

- name: Enable gateway mode
  shell: jexec ingress sysrc gateway_enable=YES
  when: ingress_gateway_enabled.rc != 0

- name: Check if IP forwarding is enabled
  shell: jexec ingress sysctl net.inet.ip.forwarding | grep -q "1"
  register: ingress_ip_forwarding_enabled
  failed_when: false
  changed_when: false

- name: Enable IP forwarding
  shell: jexec ingress sysctl net.inet.ip.forwarding=1
  when: ingress_ip_forwarding_enabled.rc != 0

- name: Check if pf enabled
  shell: jexec ingress sysrc pf_enable | grep -q "YES"
  register: ingress_pf_enabled
  failed_when: false
  changed_when: false

- name: Enable pf
  shell: jexec ingress sysrc pf_enable=YES
  when: ingress_pf_enabled.rc != 0

- name: Check if pf is running
  shell: service -j ingress pf status
  register: ingress_pf_status
  changed_when: ingress_pf_status.rc != 0

- name: Start pf
  shell: service -j ingress pf start
  when: ingress_pf_status.rc != 0

- name: Copy acme-dns-auth.py
  copy:
    src: templates/ingress/acme-dns-auth.py
    dest: /usr/local/jails/containers/ingress/usr/local/bin/acme-dns-auth.py
    owner: root
    group: wheel
    mode: "0755"

- name: Check if LetsEncrypt certs are generated
  shell: ls /usr/local/jails/containers/ingress/usr/local/etc/letsencrypt/live/{{ cert_name }}
  register: cert_exists
  failed_when: false
  changed_when: false

- name: Manually get certs with certbot and DNS challenge
  pause:
    prompt: |
      /usr/local/etc/letsencrypt/live/{{ cert_name }} does not exist. This means that this is the first run of this playbook.
      The {{ cert_name }} cert contains all of the @ and * certs for all domains.
      Check the ingress crontab template and run the certbot command manually in the ingress jail. Remove the "-n" flag.
      Add the requested DNS records manually into Hetzner DNS. Continue after this is done.
  when: cert_exists.rc != 0

- name: Configure nginx.conf
  template:
    src: ingress/usr_local_etc_nginx_nginx.conf.j2
    dest: /usr/local/jails/containers/ingress/usr/local/etc/nginx/nginx.conf
    owner: root
    group: wheel
    mode: "0644"
  register: nginx_conf

- name: Create static directories
  loop: "{{ ingress_routes | selectattr('static', 'defined') | map(attribute='static') | unique | list }}"
  file:
    path: "/usr/local/jails/containers/ingress{{ item }}"
    state: directory
    recurse: yes
    owner: 80
    group: 80
    mode: "0755"

- name: Check if nginx is enabled
  shell: service -j ingress nginx status
  changed_when: false
  failed_when: false
  register: ingress_nginx_enabled

- name: Enable and start nginx
  shell: |
    service -j ingress nginx enable
    service -j ingress nginx onestart
  when: ingress_nginx_enabled.rc != 0 or nginx_conf.changed

- name: Install hetzner_ddns.sh
  template:
    src: ingress/usr_local_bin_hetzner_ddns.sh.j2
    dest: /usr/local/jails/containers/ingress/usr/local/bin/hetzner_ddns.sh
    owner: root
    group: wheel
    mode: "0755"

- name: Set up hetzner_auth
  template:
    src: ingress/usr_local_etc_hetzner_auth.j2
    dest: /usr/local/jails/containers/ingress/usr/local/etc/hetzner_auth
    owner: root
    group: wheel
    mode: "0600"

- name: Set up gen_goaccess.sh
  template:
    src: ingress/usr_local_bin_gen_goaccess.sh.j2
    dest: /usr/local/jails/containers/ingress/usr/local/bin/gen_goaccess.sh
    owner: root
    group: wheel
    mode: "0755"

- name: Set up crontab
  template:
    src: ingress/etc_crontab.j2
    dest: /usr/local/jails/containers/ingress/etc/crontab
    owner: root
    group: wheel
    mode: "0644"
  vars:
    tls_hosts: "{{ ingress_routes | map(attribute='host') | unique }}"
  register: jail_ingress_etc_crontab

- name: Restart cron
  service:
    name: cron
    state: restarted
  when: jail_ingress_etc_crontab.changed