Compare commits
50 Commits
6b2f7f716d
...
master
Author | SHA1 | Date | |
---|---|---|---|
c669ac9e36
|
|||
cce620dca0
|
|||
8bc72c25d6
|
|||
4cd0b9b606
|
|||
dd02301ecf
|
|||
e380042c04
|
|||
55fd39b008
|
|||
7ed4837d00
|
|||
a85d4b1c04
|
|||
160fdef1cf
|
|||
ab2040d287
|
|||
8a727e5dbf
|
|||
f6e52e1f65
|
|||
74ae2c4694
|
|||
e67b5702d5
|
|||
cfbdf9cc99
|
|||
ee7630d087
|
|||
2b2d7369ed
|
|||
d5d7e94c44
|
|||
b46b8db671
|
|||
a97fca288f
|
|||
66e627144f
|
|||
b561d64770
|
|||
e2201d03f7
|
|||
ee0305870a
|
|||
d8f13a79d4
|
|||
53334d338a
|
|||
9efcd2ffa1
|
|||
9a390d4637
|
|||
d32fd50715
|
|||
9309c4de87
|
|||
f4646f1a49
|
|||
1fd0d78314
|
|||
5adaf91a44
|
|||
4db7240f5a
|
|||
526bc6c2c0
|
|||
70a50a5c15
|
|||
4c0646972c
|
|||
e221d7fa65
|
|||
bc214c1763
|
|||
21614ffc2e
|
|||
2a83565d59
|
|||
87d7312099
|
|||
7d4b66a777
|
|||
e05607693a
|
|||
c16ab291dd
|
|||
5a980d28ad
|
|||
4bdaff7cca
|
|||
2991123422
|
|||
e9c70618f6
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.venv
|
@@ -1,4 +1,5 @@
|
|||||||
# Common #
|
# Common #
|
||||||
|
k8s_cluster_name: mycluster
|
||||||
namespace: ghp
|
namespace: ghp
|
||||||
docker_registry: gitea.geekhome.org/ghp
|
docker_registry: gitea.geekhome.org/ghp
|
||||||
domain: example.com
|
domain: example.com
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
# MetalLB balancer
|
# MetalLB balancer
|
||||||
metallb_version: 0.14.5
|
metallb_version: 0.14.9
|
||||||
|
|
||||||
# NFS provisioners
|
# NFS provisioners
|
||||||
nfs_client_provisioner_hdd_version: 4.0.18
|
nfs_client_provisioner_hdd_version: 4.0.18
|
||||||
@@ -12,7 +12,7 @@ ceph_csi_rbd_version: 3.8.0
|
|||||||
ceph_csi_cephfs_version: 3.8.0
|
ceph_csi_cephfs_version: 3.8.0
|
||||||
|
|
||||||
# Cert-manager
|
# Cert-manager
|
||||||
cert_manager_version: 1.14.5
|
cert_manager_version: 1.18.2
|
||||||
|
|
||||||
# External-DNS
|
# External-DNS
|
||||||
external_dns_version: 6.31.0
|
external_dns_version: 6.31.0
|
||||||
@@ -21,13 +21,13 @@ internal_dns_version: 6.31.0
|
|||||||
service_dns_version: 6.31.0
|
service_dns_version: 6.31.0
|
||||||
|
|
||||||
# Ingress Nginx
|
# Ingress Nginx
|
||||||
external_ingress_nginx_version: 4.2.3
|
external_ingress_nginx_version: 4.12.1
|
||||||
internal_ingress_nginx_version: 4.2.3
|
internal_ingress_nginx_version: 4.12.1
|
||||||
local_ingress_nginx_version: 4.2.3
|
local_ingress_nginx_version: 4.12.1
|
||||||
|
|
||||||
# PostgreSQL operator
|
# PostgreSQL operator
|
||||||
postgres_operator_version: 1.11.0
|
postgres_operator_version: 1.13.0
|
||||||
postgres_operator_ui_version: 1.11.0
|
postgres_operator_ui_version: 1.13.0
|
||||||
|
|
||||||
# OpenLDAP
|
# OpenLDAP
|
||||||
openldap_version: 1.2.7
|
openldap_version: 1.2.7
|
||||||
@@ -36,42 +36,42 @@ openldap_version: 1.2.7
|
|||||||
minio_version: 5.0.13
|
minio_version: 5.0.13
|
||||||
|
|
||||||
# Adguard Home
|
# Adguard Home
|
||||||
adguard_version: 2.3.26
|
adguard_version: 2.3.33
|
||||||
|
|
||||||
# Bitwarden (aka Vaultwarden)
|
# Bitwarden (aka Vaultwarden)
|
||||||
bitwarden_version: 2.0.25
|
bitwarden_version: 2.0.40
|
||||||
|
|
||||||
# Gitea
|
# Gitea
|
||||||
gitea_ingress_nginx_version: 4.2.3
|
gitea_ingress_nginx_version: 4.12.1
|
||||||
gitea_dns_version: 6.31.0
|
gitea_dns_version: 6.31.0
|
||||||
gitea_version: 10.1.4
|
gitea_version: 12.1.2
|
||||||
|
|
||||||
# Gitea Act Runner
|
# Gitea Act Runner
|
||||||
gitea_act_runner_version: 0.1.10
|
gitea_act_runner_version: 0.1.13
|
||||||
|
|
||||||
# Docker and Helm chart registries
|
# Docker and Helm chart registries
|
||||||
harbor_version: 1.12.4
|
harbor_version: 1.12.4
|
||||||
|
|
||||||
# Mastodon
|
# Mastodon
|
||||||
mastodon_version: 4.0.1
|
mastodon_version: 6.5.1
|
||||||
|
|
||||||
# Nextcloud
|
# Nextcloud
|
||||||
nextcloud_version: 4.6.4
|
nextcloud_version: 5.0.2
|
||||||
|
|
||||||
# Email
|
# Email
|
||||||
dovecot_version: 0.1.6
|
dovecot_version: 0.1.8
|
||||||
postfix_version: 0.1.5
|
postfix_version: 0.1.7
|
||||||
roundcube_version: 0.4.2
|
roundcube_version: 0.4.6
|
||||||
rspamd_version: 0.5.2
|
rspamd_version: 0.5.7
|
||||||
|
|
||||||
# Pypi server
|
# Pypi server
|
||||||
pypiserver_version: 2.5.0
|
pypiserver_version: 2.5.0
|
||||||
|
|
||||||
# WikiJS
|
# WikiJS
|
||||||
wikijs_version: 2.3.15
|
wikijs_version: 2.3.19
|
||||||
|
|
||||||
# PeerTube
|
# PeerTube
|
||||||
peertube_version: 0.3.4
|
peertube_version: 0.4.5
|
||||||
|
|
||||||
# Playmaker android APK repository
|
# Playmaker android APK repository
|
||||||
playmaker_version: 0.1.3
|
playmaker_version: 0.1.3
|
||||||
|
@@ -12,20 +12,14 @@ knot_conf: |
|
|||||||
any: debug
|
any: debug
|
||||||
|
|
||||||
key:
|
key:
|
||||||
- id: k8s
|
- id: k8s-{{ k8s_cluster_name }}-{{ namespace }}
|
||||||
algorithm: hmac-sha512
|
algorithm: hmac-sha512
|
||||||
secret: {{ k8s_tsig }}
|
secret: {{ k8s_tsig }}
|
||||||
|
|
||||||
- id: vps
|
- id: ddclient-{{ k8s_cluster_name }}-{{ namespace }}
|
||||||
algorithm: hmac-sha512
|
algorithm: hmac-sha512
|
||||||
secret: {{ ddclient_tsig }}
|
secret: {{ ddclient_tsig }}
|
||||||
|
|
||||||
remote:
|
|
||||||
# - id: slave
|
|
||||||
# address: 192.168.1.1@53
|
|
||||||
#
|
|
||||||
# - id: master
|
|
||||||
# address: 192.168.2.1@53
|
|
||||||
remote:
|
remote:
|
||||||
- id: dns_server
|
- id: dns_server
|
||||||
address: 127.0.0.1@53
|
address: 127.0.0.1@53
|
||||||
@@ -34,24 +28,15 @@ knot_conf: |
|
|||||||
- id: dns_zone_sbm
|
- id: dns_zone_sbm
|
||||||
parent: [dns_server]
|
parent: [dns_server]
|
||||||
|
|
||||||
|
|
||||||
acl:
|
acl:
|
||||||
- id: deny_all
|
- id: deny_all
|
||||||
deny: on # no action specified and deny on implies denial of all actions
|
deny: on # no action specified and deny on implies denial of all actions
|
||||||
|
|
||||||
- id: key_rule
|
- id: key_rule
|
||||||
key: [vps, k8s] # Access based just on TSIG key
|
key: [k8s-{{ k8s_cluster_name }}-{{ namespace }},ddclient-{{ k8s_cluster_name }}-{{ namespace }}] # Access based just on TSIG key
|
||||||
address: 192.168.0.0/16
|
address: 192.168.0.0/16
|
||||||
action: [transfer, notify, update]
|
action: [transfer, notify, update]
|
||||||
|
|
||||||
# - id: acl_slave
|
|
||||||
# address: 192.168.1.1
|
|
||||||
# action: transfer
|
|
||||||
|
|
||||||
# - id: acl_master
|
|
||||||
# address: 192.168.2.1
|
|
||||||
# action: notify
|
|
||||||
|
|
||||||
template:
|
template:
|
||||||
- id: default
|
- id: default
|
||||||
storage: "/var/lib/knot"
|
storage: "/var/lib/knot"
|
||||||
@@ -73,14 +58,3 @@ knot_conf: |
|
|||||||
dnssec-signing: on
|
dnssec-signing: on
|
||||||
dnssec-policy: rsa
|
dnssec-policy: rsa
|
||||||
zonefile-load: difference
|
zonefile-load: difference
|
||||||
|
|
||||||
# # Master zone
|
|
||||||
# - domain: example.com
|
|
||||||
# notify: slave
|
|
||||||
# acl: acl_slave
|
|
||||||
|
|
||||||
# # Slave zone
|
|
||||||
# - domain: example.net
|
|
||||||
# master: master
|
|
||||||
# acl: acl_master
|
|
||||||
|
|
||||||
|
@@ -1,15 +1,18 @@
|
|||||||
---
|
---
|
||||||
- hosts: web_proxy
|
- hosts: web_proxy
|
||||||
|
become: true
|
||||||
roles:
|
roles:
|
||||||
- nginx
|
- nginx
|
||||||
tags: web-proxy
|
tags: web-proxy
|
||||||
|
|
||||||
- hosts: mail_proxy
|
- hosts: mail_proxy
|
||||||
|
become: true
|
||||||
roles:
|
roles:
|
||||||
- haproxy
|
- haproxy
|
||||||
tags: mail-proxy
|
tags: mail-proxy
|
||||||
|
|
||||||
- hosts: ddclient
|
- hosts: ddclient
|
||||||
|
become: true
|
||||||
roles:
|
roles:
|
||||||
- { role: docker, when: ddclient_container_engine == "docker" }
|
- { role: docker, when: ddclient_container_engine == "docker" }
|
||||||
- { role: podman, when: ddclient_container_engine == "podman" }
|
- { role: podman, when: ddclient_container_engine == "podman" }
|
||||||
|
@@ -3,4 +3,5 @@ cert_manager_namespace: "cert-manager"
|
|||||||
cert_manager_lets_encrypt_mailbox: "admin@{{ domain }}"
|
cert_manager_lets_encrypt_mailbox: "admin@{{ domain }}"
|
||||||
cert_manager_base64_tsig_key: "{{ k8s_tsig | b64encode }}"
|
cert_manager_base64_tsig_key: "{{ k8s_tsig | b64encode }}"
|
||||||
cert_manager_default_values:
|
cert_manager_default_values:
|
||||||
installCRDs: true
|
crds:
|
||||||
|
enabled: true
|
||||||
|
@@ -50,7 +50,7 @@
|
|||||||
rfc2136:
|
rfc2136:
|
||||||
nameserver: "{{ external_dns_ip | default(dns_ip) }}:53"
|
nameserver: "{{ external_dns_ip | default(dns_ip) }}:53"
|
||||||
tsigAlgorithm: HMACSHA512
|
tsigAlgorithm: HMACSHA512
|
||||||
tsigKeyName: k8s
|
tsigKeyName: "k8s-{{ k8s_cluster_name }}-{{ namespace }}"
|
||||||
tsigSecretSecretRef:
|
tsigSecretSecretRef:
|
||||||
key: tsig-secret-key
|
key: tsig-secret-key
|
||||||
name: tsig-secret
|
name: tsig-secret
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
rfc2136:
|
rfc2136:
|
||||||
nameserver: "{{ external_dns_ip | default(dns_ip) }}:53"
|
nameserver: "{{ external_dns_ip | default(dns_ip) }}:53"
|
||||||
tsigAlgorithm: HMACSHA512
|
tsigAlgorithm: HMACSHA512
|
||||||
tsigKeyName: k8s
|
tsigKeyName: "k8s-{{ k8s_cluster_name }}-{{ namespace }}"
|
||||||
tsigSecretSecretRef:
|
tsigSecretSecretRef:
|
||||||
key: tsig-secret-key
|
key: tsig-secret-key
|
||||||
name: tsig-secret
|
name: tsig-secret
|
||||||
|
@@ -1,4 +1,6 @@
|
|||||||
external_dns_chart_ref: "bitnami/external-dns"
|
external_dns_chart_ref: "bitnami/external-dns"
|
||||||
|
external_dns_tsigKeyname: "k8s-{{ k8s_cluster_name }}-{{ namespace }}"
|
||||||
|
external_dns_tsigSecretAlg: "hmac-sha512"
|
||||||
external_dns_default_values:
|
external_dns_default_values:
|
||||||
fullnameOverride: "{{ external_dns_name | default(namespace + '-external-dns') }}"
|
fullnameOverride: "{{ external_dns_name | default(namespace + '-external-dns') }}"
|
||||||
ingressClassFilters: ["{{ external_ingress_class }}"]
|
ingressClassFilters: ["{{ external_ingress_class }}"]
|
||||||
@@ -9,8 +11,8 @@ external_dns_default_values:
|
|||||||
port: 53
|
port: 53
|
||||||
zone: "{{ external_domain | default(domain) }}"
|
zone: "{{ external_domain | default(domain) }}"
|
||||||
tsigSecret: "{{ k8s_tsig }}"
|
tsigSecret: "{{ k8s_tsig }}"
|
||||||
tsigSecretAlg: "{{ external_dns_tsigSecretAlg | default('hmac-sha512') }}"
|
tsigSecretAlg: "{{ external_dns_tsigSecretAlg }}"
|
||||||
tsigKeyname: "{{ external_dns_tsigKeyname | default('k8s') }}"
|
tsigKeyname: "{{ external_dns_tsigKeyname }}"
|
||||||
tsigAxfr: true
|
tsigAxfr: true
|
||||||
## Possible units [ns, us, ms, s, m, h], see more https://golang.org/pkg/time/#ParseDuration
|
## Possible units [ns, us, ms, s, m, h], see more https://golang.org/pkg/time/#ParseDuration
|
||||||
minTTL: "30s"
|
minTTL: "30s"
|
||||||
|
@@ -32,7 +32,7 @@ gitea_default_values:
|
|||||||
hosts:
|
hosts:
|
||||||
- "{{ gitea_short_name }}.{{ domain }}"
|
- "{{ gitea_short_name }}.{{ domain }}"
|
||||||
|
|
||||||
redis-cluster:
|
valkey-cluster:
|
||||||
enabled: false
|
enabled: false
|
||||||
|
|
||||||
postgresql-ha:
|
postgresql-ha:
|
||||||
@@ -153,6 +153,8 @@ gitea_ingress_nginx_default_values:
|
|||||||
|
|
||||||
|
|
||||||
gitea_dns_chart_ref: "bitnami/external-dns"
|
gitea_dns_chart_ref: "bitnami/external-dns"
|
||||||
|
gitea_dns_tsigKeyname: "k8s-{{ k8s_cluster_name }}-{{ namespace }}"
|
||||||
|
gitea_dns_tsigSecretAlg: "hmac-sha512"
|
||||||
gitea_dns_default_values:
|
gitea_dns_default_values:
|
||||||
fullnameOverride: "{{ gitea_dns_name | default(namespace + '-gitea-internal-dns') }}"
|
fullnameOverride: "{{ gitea_dns_name | default(namespace + '-gitea-internal-dns') }}"
|
||||||
ingressClassFilters: ["{{ gitea_ingress_class }}"]
|
ingressClassFilters: ["{{ gitea_ingress_class }}"]
|
||||||
@@ -163,8 +165,8 @@ gitea_dns_default_values:
|
|||||||
port: 53
|
port: 53
|
||||||
zone: "{{ domain }}"
|
zone: "{{ domain }}"
|
||||||
tsigSecret: "{{ k8s_tsig }}"
|
tsigSecret: "{{ k8s_tsig }}"
|
||||||
tsigSecretAlg: "{{ gitea_dns_tsigSecretAlg | default('hmac-sha512') }}"
|
tsigSecretAlg: "{{ gitea_dns_tsigSecretAlg }}"
|
||||||
tsigKeyname: "{{ gitea_dns_tsigKeyname | default('k8s') }}"
|
tsigKeyname: "{{ gitea_dns_tsigKeyname }}"
|
||||||
tsigAxfr: true
|
tsigAxfr: true
|
||||||
## Possible units [ns, us, ms, s, m, h], see more https://golang.org/pkg/time/#ParseDuration
|
## Possible units [ns, us, ms, s, m, h], see more https://golang.org/pkg/time/#ParseDuration
|
||||||
minTTL: "30s"
|
minTTL: "30s"
|
||||||
|
@@ -13,6 +13,13 @@
|
|||||||
- restart haproxy
|
- restart haproxy
|
||||||
when: haproxy_config is defined
|
when: haproxy_config is defined
|
||||||
|
|
||||||
|
- name: set haproxy_connect_any flag on and keep it persistent across reboots
|
||||||
|
ansible.posix.seboolean:
|
||||||
|
name: haproxy_connect_any
|
||||||
|
state: yes
|
||||||
|
persistent: yes
|
||||||
|
when: ansible_selinux is defined and ansible_selinux != False and ansible_selinux.status == 'enabled'
|
||||||
|
|
||||||
- name: start haproxy service
|
- name: start haproxy service
|
||||||
systemd:
|
systemd:
|
||||||
name: haproxy
|
name: haproxy
|
||||||
|
@@ -1,4 +1,6 @@
|
|||||||
internal_dns_chart_ref: "bitnami/external-dns"
|
internal_dns_chart_ref: "bitnami/external-dns"
|
||||||
|
internal_dns_tsigKeyname: "k8s-{{ k8s_cluster_name }}-{{ namespace }}"
|
||||||
|
internal_dns_tsigSecretAlg: "hmac-sha512"
|
||||||
internal_dns_default_values:
|
internal_dns_default_values:
|
||||||
fullnameOverride: "{{ internal_dns_name | default(namespace + '-internal-dns') }}"
|
fullnameOverride: "{{ internal_dns_name | default(namespace + '-internal-dns') }}"
|
||||||
ingressClassFilters: ["{{ internal_ingress_class }}"]
|
ingressClassFilters: ["{{ internal_ingress_class }}"]
|
||||||
@@ -9,8 +11,8 @@ internal_dns_default_values:
|
|||||||
port: 53
|
port: 53
|
||||||
zone: "{{ internal_domain | default(domain) }}"
|
zone: "{{ internal_domain | default(domain) }}"
|
||||||
tsigSecret: "{{ k8s_tsig }}"
|
tsigSecret: "{{ k8s_tsig }}"
|
||||||
tsigSecretAlg: "{{ internal_dns_tsigSecretAlg | default('hmac-sha512') }}"
|
tsigSecretAlg: "{{ internal_dns_tsigSecretAlg }}"
|
||||||
tsigKeyname: "{{ internal_dns_tsigKeyname | default(namespace) }}"
|
tsigKeyname: "{{ internal_dns_tsigKeyname }}"
|
||||||
tsigAxfr: true
|
tsigAxfr: true
|
||||||
## Possible units [ns, us, ms, s, m, h], see more https://golang.org/pkg/time/#ParseDuration
|
## Possible units [ns, us, ms, s, m, h], see more https://golang.org/pkg/time/#ParseDuration
|
||||||
minTTL: "30s"
|
minTTL: "30s"
|
||||||
|
@@ -29,6 +29,7 @@
|
|||||||
owner: "root"
|
owner: "root"
|
||||||
group: "knot"
|
group: "knot"
|
||||||
validate: "knotc -c %s conf-check"
|
validate: "knotc -c %s conf-check"
|
||||||
|
backup: true
|
||||||
notify: Restart knot
|
notify: Restart knot
|
||||||
|
|
||||||
- name: Enable and start knot
|
- name: Enable and start knot
|
||||||
|
@@ -1,4 +1,6 @@
|
|||||||
local_dns_chart_ref: "bitnami/external-dns"
|
local_dns_chart_ref: "bitnami/external-dns"
|
||||||
|
local_dns_tsigKeyname: "k8s-{{ k8s_cluster_name }}-{{ namespace }}"
|
||||||
|
local_dns_tsigSecretAlg: "hmac-sha512"
|
||||||
local_dns_default_values:
|
local_dns_default_values:
|
||||||
fullnameOverride: "{{ local_dns_name | default(namespace + '-local-dns') }}"
|
fullnameOverride: "{{ local_dns_name | default(namespace + '-local-dns') }}"
|
||||||
ingressClassFilters: ["{{ local_ingress_class }}"]
|
ingressClassFilters: ["{{ local_ingress_class }}"]
|
||||||
@@ -9,8 +11,8 @@ local_dns_default_values:
|
|||||||
port: 53
|
port: 53
|
||||||
zone: "{{ local_domain }}"
|
zone: "{{ local_domain }}"
|
||||||
tsigSecret: "{{ k8s_tsig }}"
|
tsigSecret: "{{ k8s_tsig }}"
|
||||||
tsigSecretAlg: "{{ local_dns_tsigSecretAlg | default('hmac-sha512') }}"
|
tsigSecretAlg: "{{ local_dns_tsigSecretAlg }}"
|
||||||
tsigKeyname: "{{ local_dns_tsigKeyname | default(namespace) }}"
|
tsigKeyname: "{{ local_dns_tsigKeyname }}"
|
||||||
tsigAxfr: true
|
tsigAxfr: true
|
||||||
## Possible units [ns, us, ms, s, m, h], see more https://golang.org/pkg/time/#ParseDuration
|
## Possible units [ns, us, ms, s, m, h], see more https://golang.org/pkg/time/#ParseDuration
|
||||||
minTTL: "30s"
|
minTTL: "30s"
|
||||||
|
@@ -26,42 +26,25 @@ mastodon_default_values:
|
|||||||
- "{{ mastodon_short_name }}.{{ domain }}"
|
- "{{ mastodon_short_name }}.{{ domain }}"
|
||||||
|
|
||||||
mastodon:
|
mastodon:
|
||||||
# create an initial administrator user; the password is autogenerated and will
|
|
||||||
# have to be reset
|
|
||||||
createAdmin:
|
createAdmin:
|
||||||
enabled: true
|
enabled: true
|
||||||
username: "{{ mastodon_admin_user | default(mastodon_admin_username) | default('mastodon') }}"
|
username: "{{ mastodon_admin_user | default(mastodon_admin_username) | default('mastodon') }}"
|
||||||
password: "{{ mastodon_admin_pass | default(mastodon_admin_password) }}"
|
password: "{{ mastodon_admin_pass | default(mastodon_admin_password) }}"
|
||||||
email: "{{ mastodon_admin_email }}"
|
email: "{{ mastodon_admin_email }}"
|
||||||
|
|
||||||
# available locales: https://github.com/tootsuite/mastodon/blob/master/config/application.rb#L43
|
|
||||||
locale: en
|
locale: en
|
||||||
local_domain: "{{ mastodon_short_name }}.{{ domain }}"
|
local_domain: "{{ mastodon_short_name }}.{{ domain }}"
|
||||||
|
|
||||||
cron:
|
|
||||||
# run `tootctl media remove` every week
|
|
||||||
removeMedia:
|
|
||||||
enabled: true
|
|
||||||
schedule: "0 0 * * 0"
|
|
||||||
|
|
||||||
web:
|
|
||||||
port: 3000
|
|
||||||
streaming:
|
|
||||||
port: 4000
|
|
||||||
# this should be set manually since os.cpus() returns the number of CPUs on
|
|
||||||
# the node running the pod, which is unrelated to the resources allocated to
|
|
||||||
# the pod by k8s
|
|
||||||
workers: 2
|
|
||||||
sidekiq:
|
|
||||||
concurrency: 25
|
|
||||||
|
|
||||||
# these must be set manually; autogenerated keys are rotated on each upgrade
|
|
||||||
secrets:
|
secrets:
|
||||||
secret_key_base: "{{ mastodon_vapid_public_key_base64 | hash('sha256') }}"
|
secret_key_base: "{{ mastodon_vapid_public_key_base64 | hash('sha256') }}"
|
||||||
otp_secret: "{{ mastodon_vapid_public_key_base64 | hash('sha256') | hash('sha256') }}"
|
otp_secret: "{{ mastodon_vapid_public_key_base64 | hash('sha256') | hash('sha256') }}"
|
||||||
vapid:
|
vapid:
|
||||||
private_key: "{{ mastodon_vapid_private_key_base64 | b64decode }}"
|
private_key: "{{ mastodon_vapid_private_key_base64 | b64decode }}"
|
||||||
public_key: "{{ mastodon_vapid_public_key_base64 | b64decode }}"
|
public_key: "{{ mastodon_vapid_public_key_base64 | b64decode }}"
|
||||||
|
activeRecordEncryption:
|
||||||
|
primaryKey: "{{ mastodon_primary_key_secret }}"
|
||||||
|
deterministicKey: "{{ mastodon_deterministic_key_secret }}"
|
||||||
|
keyDerivationSalt: "{{ mastodon_key_derivation_salt_secret }}"
|
||||||
|
|
||||||
smtp:
|
smtp:
|
||||||
auth_method: login
|
auth_method: login
|
||||||
@@ -95,11 +78,6 @@ mastodon_default_values:
|
|||||||
storage: "{{ mastodon_system_size | default('100Gi') }}"
|
storage: "{{ mastodon_system_size | default('100Gi') }}"
|
||||||
|
|
||||||
elasticsearch:
|
elasticsearch:
|
||||||
# `false` will disable full-text search
|
|
||||||
#
|
|
||||||
# if you enable ES after the initial install, you will need to manually run
|
|
||||||
# RAILS_ENV=production bundle exec rake chewy:sync
|
|
||||||
# (https://docs.joinmastodon.org/admin/optional/elasticsearch/)
|
|
||||||
enabled: "{{ mastodon_enable_elasticsearch }}"
|
enabled: "{{ mastodon_enable_elasticsearch }}"
|
||||||
master:
|
master:
|
||||||
name: master
|
name: master
|
||||||
@@ -116,20 +94,14 @@ mastodon_default_values:
|
|||||||
##
|
##
|
||||||
replicas: 1
|
replicas: 1
|
||||||
|
|
||||||
# https://github.com/bitnami/charts/tree/master/bitnami/postgresql#parameters
|
|
||||||
postgresql:
|
postgresql:
|
||||||
# Disable for external PostgreSQL
|
|
||||||
enabled: false
|
enabled: false
|
||||||
postgresqlHostname: "{{ namespace }}-postgres.{{ postgres_db_namespace | default(namespace) }}.svc.cluster.local"
|
postgresqlHostname: "{{ namespace }}-postgres.{{ postgres_db_namespace | default(namespace) }}.svc.cluster.local"
|
||||||
# you must set a password; the password generated by the postgresql chart will
|
|
||||||
# be rotated on each upgrade:
|
|
||||||
# https://github.com/bitnami/charts/tree/master/bitnami/postgresql#upgrade
|
|
||||||
auth:
|
auth:
|
||||||
database: mastodon
|
database: mastodon
|
||||||
username: "{{ mastodon_db_username }}"
|
username: "{{ mastodon_db_username }}"
|
||||||
password: "{{ mastodon_db_password }}"
|
password: "{{ mastodon_db_password }}"
|
||||||
|
|
||||||
# https://github.com/bitnami/charts/tree/master/bitnami/redis#parameters
|
|
||||||
redis:
|
redis:
|
||||||
architecture: standalone
|
architecture: standalone
|
||||||
enabled: true
|
enabled: true
|
||||||
|
@@ -15,38 +15,3 @@
|
|||||||
chart_ref: "{{ mastodon_chart_ref }}"
|
chart_ref: "{{ mastodon_chart_ref }}"
|
||||||
chart_version: "{{ mastodon_version | default(omit) }}"
|
chart_version: "{{ mastodon_version | default(omit) }}"
|
||||||
release_values: "{{ mastodon_combined_values | from_yaml }}"
|
release_values: "{{ mastodon_combined_values | from_yaml }}"
|
||||||
|
|
||||||
|
|
||||||
- name: Search for mastodon web pod
|
|
||||||
kubernetes.core.k8s_info:
|
|
||||||
kind: Pod
|
|
||||||
namespace: "{{ mastodon_namespace | default(namespace) }}"
|
|
||||||
label_selectors:
|
|
||||||
- app.kubernetes.io/component=web
|
|
||||||
- app.kubernetes.io/instance=mastodon
|
|
||||||
register: mastodon_web_pod_name
|
|
||||||
|
|
||||||
- name: Remove mastodon web pod for restart
|
|
||||||
kubernetes.core.k8s:
|
|
||||||
state: absent
|
|
||||||
api_version: v1
|
|
||||||
kind: Pod
|
|
||||||
namespace: "{{ mastodon_namespace | default(namespace) }}"
|
|
||||||
name: "{{ mastodon_web_pod_name.resources[0].metadata.name }}"
|
|
||||||
|
|
||||||
- name: Search for mastodon streaming pod
|
|
||||||
kubernetes.core.k8s_info:
|
|
||||||
kind: Pod
|
|
||||||
namespace: "{{ mastodon_namespace | default(namespace) }}"
|
|
||||||
label_selectors:
|
|
||||||
- app.kubernetes.io/component=streaming
|
|
||||||
- app.kubernetes.io/instance=mastodon
|
|
||||||
register: mastodon_streaming_pod_name
|
|
||||||
|
|
||||||
- name: Remove mastodon streaming pod for restart
|
|
||||||
kubernetes.core.k8s:
|
|
||||||
state: absent
|
|
||||||
api_version: v1
|
|
||||||
kind: Pod
|
|
||||||
namespace: "{{ mastodon_namespace | default(namespace) }}"
|
|
||||||
name: "{{ mastodon_streaming_pod_name.resources[0].metadata.name }}"
|
|
||||||
|
@@ -10,3 +10,17 @@
|
|||||||
register: install_nginx_result
|
register: install_nginx_result
|
||||||
tags:
|
tags:
|
||||||
- nginx-install
|
- nginx-install
|
||||||
|
|
||||||
|
- name: set httpd_can_network_connect flag on and keep it persistent across reboots
|
||||||
|
ansible.posix.seboolean:
|
||||||
|
name: httpd_can_network_connect
|
||||||
|
state: yes
|
||||||
|
persistent: yes
|
||||||
|
when: ansible_selinux is defined and ansible_selinux != False and ansible_selinux.status == 'enabled'
|
||||||
|
|
||||||
|
- name: set httpd_can_network_relay flag on and keep it persistent across reboots
|
||||||
|
ansible.posix.seboolean:
|
||||||
|
name: httpd_can_network_relay
|
||||||
|
state: yes
|
||||||
|
persistent: yes
|
||||||
|
when: ansible_selinux is defined and ansible_selinux != False and ansible_selinux.status == 'enabled'
|
||||||
|
@@ -20,6 +20,7 @@ postgres_operator_ui_default_values:
|
|||||||
envs:
|
envs:
|
||||||
# IMPORTANT: While operator chart and UI chart are idendependent, this is the interface between
|
# IMPORTANT: While operator chart and UI chart are idendependent, this is the interface between
|
||||||
# UI and operator API. Insert the service name of the operator API here!
|
# UI and operator API. Insert the service name of the operator API here!
|
||||||
|
appUrl: "https://{{ postgres_operator_ui_short_name }}.{{ domain }}"
|
||||||
operatorApiUrl: "http://postgres-operator:8080"
|
operatorApiUrl: "http://postgres-operator:8080"
|
||||||
operatorClusterNameLabel: "cluster-name"
|
operatorClusterNameLabel: "cluster-name"
|
||||||
resourcesVisible: "False"
|
resourcesVisible: "False"
|
||||||
|
@@ -20,6 +20,9 @@ default_accounts:
|
|||||||
secret_keys:
|
secret_keys:
|
||||||
- { name: peertube }
|
- { name: peertube }
|
||||||
- { name: harbor }
|
- { name: harbor }
|
||||||
|
- { name: mastodon_primary_key }
|
||||||
|
- { name: mastodon_deterministic_key }
|
||||||
|
- { name: mastodon_key_derivation_salt }
|
||||||
|
|
||||||
htpasswd_accounts:
|
htpasswd_accounts:
|
||||||
- { name: pypiserver_admin }
|
- { name: pypiserver_admin }
|
||||||
|
@@ -1,11 +1,6 @@
|
|||||||
- name: Test if DKIM private key exists
|
- name: Generate DKIM keys
|
||||||
shell: grep -c "dkim_private_key_base64" "{{ inventory_dir }}/group_vars/all/passwords.yaml" || true
|
when: passwords['dkim_public_key_base64'] is not defined or passwords['dkim_private_key_base64'] is not defined
|
||||||
register: dkim_private_key_test_grep
|
block:
|
||||||
|
|
||||||
- name: Test if DKIM public key exists
|
|
||||||
shell: grep -c "dkim_public_key_base64" "{{ inventory_dir }}/group_vars/all/passwords.yaml" || true
|
|
||||||
register: dkim_public_key_test_grep
|
|
||||||
|
|
||||||
- name: Create DKIM keys
|
- name: Create DKIM keys
|
||||||
docker_container:
|
docker_container:
|
||||||
name: ddclient
|
name: ddclient
|
||||||
@@ -15,33 +10,27 @@
|
|||||||
container_default_behavior: no_defaults
|
container_default_behavior: no_defaults
|
||||||
command: "sh dkim-key.sh {{ mail_domain | default(domain) }}"
|
command: "sh dkim-key.sh {{ mail_domain | default(domain) }}"
|
||||||
register: dkim_container_output
|
register: dkim_container_output
|
||||||
when: dkim_private_key_test_grep.stdout == '0' or dkim_public_key_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Set ddclient_key
|
- name: Set dkim_keys
|
||||||
set_fact:
|
set_fact:
|
||||||
dkim_keys: "{{ dkim_container_output.container.Output | from_yaml }}"
|
dkim_keys: "{{ dkim_container_output.container.Output | from_yaml }}"
|
||||||
when: dkim_private_key_test_grep.stdout == '0' or dkim_public_key_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Show DKIM private key
|
- name: Show DKIM private key
|
||||||
debug:
|
debug:
|
||||||
msg: "ddclient private key: {{ dkim_keys['dkim'][0]['default.private'] | b64decode }}"
|
msg: "ddclient private key: {{ dkim_keys['dkim'][0]['default.private'] | b64decode }}"
|
||||||
verbosity: 2
|
verbosity: 2
|
||||||
when: dkim_private_key_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Show DKIM public key
|
- name: Show DKIM public key
|
||||||
debug:
|
debug:
|
||||||
msg: "ddclient public key: {{ dkim_keys['dkim'][0]['default.txt'] | b64decode }}"
|
msg: "ddclient public key: {{ dkim_keys['dkim'][0]['default.txt'] | b64decode }}"
|
||||||
verbosity: 2
|
verbosity: 2
|
||||||
when: dkim_public_key_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Write DKIM private key
|
- name: Write DKIM private key
|
||||||
lineinfile:
|
lineinfile:
|
||||||
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
||||||
line: "dkim_private_key_base64: \"{{ dkim_keys['dkim'][0]['default.private'] }}\""
|
line: "dkim_private_key_base64: \"{{ dkim_keys['dkim'][0]['default.private'] }}\""
|
||||||
when: dkim_private_key_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Write DKIM public key
|
- name: Write DKIM public key
|
||||||
lineinfile:
|
lineinfile:
|
||||||
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
||||||
line: "dkim_public_key_base64: \"{{ dkim_keys['dkim'][0]['default.txt'] }}\""
|
line: "dkim_public_key_base64: \"{{ dkim_keys['dkim'][0]['default.txt'] }}\""
|
||||||
when: dkim_public_key_test_grep.stdout == '0'
|
|
||||||
|
@@ -1,21 +1,14 @@
|
|||||||
- name: Test if password exists in file for {{ item.name }}
|
- name: Generate htpasswd for {{ item.name }}
|
||||||
shell: grep -c "^{{ item.name }}_password" "{{ inventory_dir }}/group_vars/all/passwords.yaml" || true
|
when: passwords[item.name + '_password'] is not defined or passwords[item.name + '_htpasswd_hash'] is not defined
|
||||||
register: password_test_grep
|
block:
|
||||||
|
|
||||||
- name: Test if password htpasswd hash exists in file for {{ item.name }}
|
|
||||||
shell: grep -c "^{{ item.name }}_htpasswd_hash" "{{ inventory_dir }}/group_vars/all/passwords.yaml" || true
|
|
||||||
register: htpasswd_hash_test_grep
|
|
||||||
|
|
||||||
- name: Create password for {{ item.name }}
|
- name: Create password for {{ item.name }}
|
||||||
shell: "< /dev/urandom tr -dc A-Za-z0-9 | head -c${1:-64};echo;"
|
shell: "< /dev/urandom tr -dc A-Za-z0-9 | head -c${1:-64};echo;"
|
||||||
register: password
|
register: password
|
||||||
when: password_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Show password json for {{ item.name }}
|
- name: Show password json for {{ item.name }}
|
||||||
debug:
|
debug:
|
||||||
msg: "{{ password }}"
|
msg: "{{ password }}"
|
||||||
verbosity: 2
|
verbosity: 2
|
||||||
when: password_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Create bcrypt hash from password for {{ item.name }}
|
- name: Create bcrypt hash from password for {{ item.name }}
|
||||||
docker_container:
|
docker_container:
|
||||||
@@ -26,7 +19,6 @@
|
|||||||
container_default_behavior: no_defaults
|
container_default_behavior: no_defaults
|
||||||
command: "htpasswd -B -n -i -b -C 16 {{ item.name }} {{ password.stdout | default(item.name + '_password') }}"
|
command: "htpasswd -B -n -i -b -C 16 {{ item.name }} {{ password.stdout | default(item.name + '_password') }}"
|
||||||
register: docker_container_output
|
register: docker_container_output
|
||||||
when: htpasswd_hash_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Show docker_container_output for {{ item.name }}
|
- name: Show docker_container_output for {{ item.name }}
|
||||||
debug:
|
debug:
|
||||||
@@ -37,10 +29,8 @@
|
|||||||
lineinfile:
|
lineinfile:
|
||||||
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
||||||
line: "{{ item.name }}_password: \"{{ password.stdout }}\""
|
line: "{{ item.name }}_password: \"{{ password.stdout }}\""
|
||||||
when: password_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Write htpasswd hash for {{ item.name }}
|
- name: Write htpasswd hash for {{ item.name }}
|
||||||
lineinfile:
|
lineinfile:
|
||||||
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
||||||
line: "{{ item.name }}_htpasswd_hash: \"{{ docker_container_output.container.Output.split('\n')[0].split(':')[1] }}\""
|
line: "{{ item.name }}_htpasswd_hash: \"{{ docker_container_output.container.Output.split('\n')[0].split(':')[1] }}\""
|
||||||
when: htpasswd_hash_test_grep.stdout == '0'
|
|
||||||
|
@@ -1,7 +1,22 @@
|
|||||||
- name: Create passwords.yaml file
|
- name: Check that passwords.yaml exists
|
||||||
|
stat:
|
||||||
|
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
||||||
|
register: passwords_file
|
||||||
|
|
||||||
|
- name: Create passwords.yaml file if not exists
|
||||||
file:
|
file:
|
||||||
name: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
name: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
||||||
state: touch
|
state: touch
|
||||||
|
when: not passwords_file.stat.exists
|
||||||
|
|
||||||
|
- name: Read passwords.yaml file
|
||||||
|
slurp:
|
||||||
|
src: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
||||||
|
register: passwords_b64
|
||||||
|
|
||||||
|
- name: Set facts about passwords
|
||||||
|
set_fact:
|
||||||
|
passwords: "{{ passwords_b64['content'] | b64decode | from_yaml }}"
|
||||||
|
|
||||||
- name: Create files directory for ddclient tsig
|
- name: Create files directory for ddclient tsig
|
||||||
file:
|
file:
|
||||||
|
@@ -1,22 +1,23 @@
|
|||||||
- name: Test if password exists in file for {{ item.name }}
|
- name: Generate password for {{ item.name }}
|
||||||
shell: grep -c "^{{ item.name }}_password" "{{ inventory_dir }}/group_vars/all/passwords.yaml" || true
|
when: passwords[item.name + '_password'] is not defined
|
||||||
register: password_test_grep
|
block:
|
||||||
|
|
||||||
- name: Test if password pbkdf2-sha512 hash exists in file for {{ item.name }}
|
|
||||||
shell: grep -c "^{{ item.name }}_pbkdf2_sha512_hash" "{{ inventory_dir }}/group_vars/all/passwords.yaml" || true
|
|
||||||
register: pbkdf2_sha512_hash_test_grep
|
|
||||||
|
|
||||||
- name: Create password for {{ item.name }}
|
- name: Create password for {{ item.name }}
|
||||||
shell: "< /dev/urandom tr -dc A-Za-z0-9 | head -c${1:-64};echo;"
|
shell: "< /dev/urandom tr -dc A-Za-z0-9 | head -c${1:-64};echo;"
|
||||||
register: password
|
register: password
|
||||||
when: password_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Show password json for {{ item.name }}
|
- name: Show password json for {{ item.name }}
|
||||||
debug:
|
debug:
|
||||||
msg: "{{ password }}"
|
msg: "{{ password }}"
|
||||||
verbosity: 2
|
verbosity: 2
|
||||||
when: password_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
|
- name: Write password for {{ item.name }}
|
||||||
|
lineinfile:
|
||||||
|
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
||||||
|
line: "{{ item.name }}_password: \"{{ password.stdout }}\""
|
||||||
|
|
||||||
|
- name: Generate password for {{ item.name }}
|
||||||
|
when: passwords[item.name + '_pbkdf2_sha512_hash'] is not defined
|
||||||
|
block:
|
||||||
- name: Create PBKDF2-SHA512 hash from password for {{ item.name }}
|
- name: Create PBKDF2-SHA512 hash from password for {{ item.name }}
|
||||||
docker_container:
|
docker_container:
|
||||||
name: slappasswd
|
name: slappasswd
|
||||||
@@ -26,24 +27,8 @@
|
|||||||
container_default_behavior: no_defaults
|
container_default_behavior: no_defaults
|
||||||
command: "slappasswd -o module-load=pw-pbkdf2 -h {PBKDF2-SHA512} -s {{ password.stdout | default(item.name + '_password') }}"
|
command: "slappasswd -o module-load=pw-pbkdf2 -h {PBKDF2-SHA512} -s {{ password.stdout | default(item.name + '_password') }}"
|
||||||
register: docker_container_output
|
register: docker_container_output
|
||||||
when: pbkdf2_sha512_hash_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- debug:
|
|
||||||
msg: "{{ docker_container_output }}"
|
|
||||||
|
|
||||||
- name: Show docker_container_output for {{ item.name }}
|
|
||||||
debug:
|
|
||||||
msg: "{{ docker_container_output }}"
|
|
||||||
verbosity: 2
|
|
||||||
|
|
||||||
- name: Write password for {{ item.name }}
|
|
||||||
lineinfile:
|
|
||||||
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
|
||||||
line: "{{ item.name }}_password: \"{{ password.stdout }}\""
|
|
||||||
when: password_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Write PBKDF2-SHA512 hash for {{ item.name }}
|
- name: Write PBKDF2-SHA512 hash for {{ item.name }}
|
||||||
lineinfile:
|
lineinfile:
|
||||||
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
||||||
line: "{{ item.name }}_pbkdf2_sha512_hash: \"{{ docker_container_output.container.Output.split('\n')[0] }}\""
|
line: "{{ item.name }}_pbkdf2_sha512_hash: \"{{ docker_container_output.container.Output.split('\n')[0] }}\""
|
||||||
when: pbkdf2_sha512_hash_test_grep.stdout == '0'
|
|
||||||
|
@@ -1,20 +1,16 @@
|
|||||||
- name: Test if secret exists in file for {{ item.name }}
|
- name: Create secret for {{ item.name }}
|
||||||
shell: grep -c "^{{ item.name }}_secret" "{{ inventory_dir }}/group_vars/all/passwords.yaml" || true
|
when: passwords[item.name + '_secret'] is not defined
|
||||||
register: secret_test_grep
|
block:
|
||||||
|
|
||||||
- name: Create secret for {{ item.name }}
|
- name: Create secret for {{ item.name }}
|
||||||
shell: "openssl rand -hex 32"
|
shell: "openssl rand -hex 32"
|
||||||
register: secret
|
register: secret
|
||||||
when: secret_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Show secret json for {{ item.name }}
|
- name: Show secret json for {{ item.name }}
|
||||||
debug:
|
debug:
|
||||||
msg: "{{ secret }}"
|
msg: "{{ secret }}"
|
||||||
verbosity: 2
|
verbosity: 2
|
||||||
when: secret_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Write secret for {{ item.name }}
|
- name: Write secret for {{ item.name }}
|
||||||
lineinfile:
|
lineinfile:
|
||||||
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
||||||
line: "{{ item.name }}_secret: \"{{ secret.stdout }}\""
|
line: "{{ item.name }}_secret: \"{{ secret.stdout }}\""
|
||||||
when: secret_test_grep.stdout == '0'
|
|
||||||
|
@@ -1,19 +1,6 @@
|
|||||||
- name: Test if k8s TSIG key exists
|
- name: Generate K8s TSIG for Knot DNS
|
||||||
shell: grep -c "k8s_tsig" "{{ inventory_dir }}/group_vars/all/passwords.yaml" || true
|
when: passwords['k8s_tsig'] is not defined
|
||||||
register: k8s_tsig_test_grep
|
block:
|
||||||
|
|
||||||
- name: Test if ddclinet TSIG key exists
|
|
||||||
shell: grep -c "ddclient_tsig" "{{ inventory_dir }}/group_vars/all/passwords.yaml" || true
|
|
||||||
register: ddclient_tsig_test_grep
|
|
||||||
|
|
||||||
- name: Test if ddclinet TSIG key exists
|
|
||||||
shell: grep -c "ddclient_tsig_public_key_base64" "{{ inventory_dir }}/group_vars/all/passwords.yaml" || true
|
|
||||||
register: ddclient_tsig_public_key_test_grep
|
|
||||||
|
|
||||||
- name: Test if ddclinet TSIG key exists
|
|
||||||
shell: grep -c "ddclient_tsig_private_key_base64" "{{ inventory_dir }}/group_vars/all/passwords.yaml" || true
|
|
||||||
register: ddclient_tsig_private_key_test_grep
|
|
||||||
|
|
||||||
- name: Generate k8s TSIG key for Knot DNS
|
- name: Generate k8s TSIG key for Knot DNS
|
||||||
docker_container:
|
docker_container:
|
||||||
name: keymgr
|
name: keymgr
|
||||||
@@ -21,26 +8,26 @@
|
|||||||
cleanup: true
|
cleanup: true
|
||||||
detach: false
|
detach: false
|
||||||
container_default_behavior: no_defaults
|
container_default_behavior: no_defaults
|
||||||
command: "keymgr -t {{ namespace }} hmac-sha512"
|
command: "keymgr -t k8s-{{ k8s_cluster_name }}-{{ namespace }} hmac-sha512"
|
||||||
register: knot_container_output
|
register: knot_container_output
|
||||||
when: k8s_tsig_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Set k8s_key
|
- name: Set k8s_key
|
||||||
set_fact:
|
set_fact:
|
||||||
k8s_key: "{{ knot_container_output.container.Output | from_yaml }}"
|
k8s_key: "{{ knot_container_output.container.Output | from_yaml }}"
|
||||||
when: k8s_tsig_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Show k8s TSIG key
|
- name: Show k8s TSIG key
|
||||||
debug:
|
debug:
|
||||||
msg: "Knot k8s key: {{ k8s_key['key'][0]['secret'] }}"
|
msg: "Knot k8s key for k8s-{{ k8s_cluster_name }}-{{ namespace }}: {{ k8s_key['key'][0]['secret'] }}"
|
||||||
when: k8s_tsig_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Write TSIG for Kubernetes
|
- name: Write TSIG for Kubernetes
|
||||||
lineinfile:
|
lineinfile:
|
||||||
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
||||||
line: "k8s_tsig: \"{{ k8s_key['key'][0]['secret'] }}\""
|
line: "k8s_tsig: \"{{ k8s_key['key'][0]['secret'] }}\""
|
||||||
when: k8s_tsig_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
|
- name: Generate ddclient private and public TSIG keys for Knot DNS
|
||||||
|
when:
|
||||||
|
- passwords['ddclient_tsig_public_key_base64'] is not defined or passwords['ddclient_tsig_private_key_base64'] is not defined
|
||||||
|
block:
|
||||||
- name: Generate TSIG key for ddclient
|
- name: Generate TSIG key for ddclient
|
||||||
docker_container:
|
docker_container:
|
||||||
name: ddclient
|
name: ddclient
|
||||||
@@ -48,52 +35,44 @@
|
|||||||
cleanup: true
|
cleanup: true
|
||||||
detach: false
|
detach: false
|
||||||
container_default_behavior: no_defaults
|
container_default_behavior: no_defaults
|
||||||
command: "bash tsig-key.sh {{ namespace }}"
|
command: "bash tsig-key.sh ddclient-{{ k8s_cluster_name }}-{{ namespace }}"
|
||||||
register: ddclient_container_output
|
register: ddclient_container_output
|
||||||
when: ddclient_tsig_public_key_test_grep.stdout == '0' or ddclient_tsig_private_key_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Set ddclient_key
|
- name: Set ddclient_key
|
||||||
set_fact:
|
set_fact:
|
||||||
ddclient_key: "{{ ddclient_container_output.container.Output | from_yaml }}"
|
ddclient_key: "{{ ddclient_container_output.container.Output | from_yaml }}"
|
||||||
when: ddclient_tsig_public_key_test_grep.stdout == '0' or ddclient_tsig_private_key_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Show ddclient TSIG public key file
|
- name: Show ddclient TSIG public key file
|
||||||
debug:
|
debug:
|
||||||
msg: "ddclient key: {{ ddclient_key['tsig'][0]['key'] | b64decode }}"
|
msg: "ddclient key for ddclient-{{ k8s_cluster_name }}-{{ namespace }}: {{ ddclient_key['tsig'][0]['key'] | b64decode }}"
|
||||||
verbosity: 2
|
verbosity: 2
|
||||||
when: ddclient_tsig_public_key_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Show ddclient TSIG private key file
|
- name: Show ddclient TSIG private key file
|
||||||
debug:
|
debug:
|
||||||
msg: "ddclient key: {{ ddclient_key['tsig'][0]['private'] | b64decode }}"
|
msg: "ddclient key for ddclient-{{ k8s_cluster_name }}-{{ namespace }}: {{ ddclient_key['tsig'][0]['private'] | b64decode }}"
|
||||||
verbosity: 2
|
verbosity: 2
|
||||||
when: ddclient_tsig_private_key_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Write ddclient TSIG public key file in base64
|
- name: Write ddclient TSIG public key file in base64
|
||||||
lineinfile:
|
lineinfile:
|
||||||
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
||||||
line: "ddclient_tsig_public_key_base64: \"{{ ddclient_key['tsig'][0]['key'] }}\""
|
line: "ddclient_tsig_public_key_base64: \"{{ ddclient_key['tsig'][0]['key'] }}\""
|
||||||
when: ddclient_tsig_public_key_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Write ddclient TSIG private key file in base64
|
|
||||||
lineinfile:
|
|
||||||
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
|
||||||
line: "ddclient_tsig_private_key_base64: \"{{ ddclient_key['tsig'][0]['private'] }}\""
|
|
||||||
when: ddclient_tsig_private_key_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Set ddclient TSIG key
|
|
||||||
set_fact:
|
|
||||||
ddclient_tsig_key: "{{ ddclient_key['tsig'][0]['private'] | b64decode | from_yaml }}"
|
|
||||||
when: ddclient_tsig_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Show ddclient TSIG key
|
- name: Show ddclient TSIG key
|
||||||
debug:
|
debug:
|
||||||
msg: "{{ ddclient_tsig_key }}"
|
msg: "{{ ddclient_tsig_key }}"
|
||||||
verbosity: 2
|
verbosity: 2
|
||||||
when: ddclient_tsig_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Write ddclient TSIG key
|
- name: Write ddclient TSIG key
|
||||||
lineinfile:
|
lineinfile:
|
||||||
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
||||||
line: "ddclient_tsig: \"{{ ddclient_tsig_key['Key'] }}\""
|
line: "ddclient_tsig: \"{{ ddclient_tsig_key['Key'] }}\""
|
||||||
when: ddclient_tsig_test_grep.stdout == '0'
|
|
||||||
|
- name: Write ddclient TSIG private key file in base64
|
||||||
|
lineinfile:
|
||||||
|
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
||||||
|
line: "ddclient_tsig_private_key_base64: \"{{ ddclient_key['tsig'][0]['private'] }}\""
|
||||||
|
|
||||||
|
- name: Set ddclient TSIG key
|
||||||
|
set_fact:
|
||||||
|
ddclient_tsig_key: "{{ ddclient_key['tsig'][0]['private'] | b64decode | from_yaml }}"
|
||||||
|
|
||||||
|
@@ -1,11 +1,6 @@
|
|||||||
- name: Test if VAPID private key exists
|
- name: Generate VAPID keys
|
||||||
shell: grep -c "^{{ item.name }}_vapid_private_key_base64" "{{ inventory_dir }}/group_vars/all/passwords.yaml" || true
|
when: passwords[item.name + '_vapid_public_key_base64'] is not defined or passwords[item.name + '_vapid_private_key_base64'] is not defined
|
||||||
register: vapid_private_key_test_grep
|
block:
|
||||||
|
|
||||||
- name: Test if VAPID public key exists
|
|
||||||
shell: grep -c "^{{ item.name }}_vapid_public_key_base64" "{{ inventory_dir }}/group_vars/all/passwords.yaml" || true
|
|
||||||
register: vapid_public_key_test_grep
|
|
||||||
|
|
||||||
- name: Create VAPID keys
|
- name: Create VAPID keys
|
||||||
docker_container:
|
docker_container:
|
||||||
name: vapid
|
name: vapid
|
||||||
@@ -15,33 +10,27 @@
|
|||||||
container_default_behavior: no_defaults
|
container_default_behavior: no_defaults
|
||||||
command: "/vapid"
|
command: "/vapid"
|
||||||
register: vapid_container_output
|
register: vapid_container_output
|
||||||
when: vapid_private_key_test_grep.stdout == '0' or vapid_public_key_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Set VAPID keys fact
|
- name: Set VAPID keys fact
|
||||||
set_fact:
|
set_fact:
|
||||||
vapid_keys: "{{ vapid_container_output.container.Output | from_yaml }}"
|
vapid_keys: "{{ vapid_container_output.container.Output | from_yaml }}"
|
||||||
when: vapid_private_key_test_grep.stdout == '0' or vapid_public_key_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Show VAPID private key
|
- name: Show VAPID private key
|
||||||
debug:
|
debug:
|
||||||
msg: "vapid private key: {{ vapid_keys['vapidPrivateKey'] }}"
|
msg: "vapid private key: {{ vapid_keys['vapidPrivateKey'] }}"
|
||||||
verbosity: 2
|
verbosity: 2
|
||||||
when: vapid_private_key_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Show VAPID public key
|
- name: Show VAPID public key
|
||||||
debug:
|
debug:
|
||||||
msg: "vapid public key: {{ vapid_keys['vapidPublicKey'] }}"
|
msg: "vapid public key: {{ vapid_keys['vapidPublicKey'] }}"
|
||||||
verbosity: 2
|
verbosity: 2
|
||||||
when: vapid_public_key_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Write VAPID private key
|
- name: Write VAPID private key
|
||||||
lineinfile:
|
lineinfile:
|
||||||
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
||||||
line: "{{ item.name }}_vapid_private_key_base64: \"{{ vapid_keys['vapidPrivateKey'] | b64encode }}\""
|
line: "{{ item.name }}_vapid_private_key_base64: \"{{ vapid_keys['vapidPrivateKey'] | b64encode }}\""
|
||||||
when: vapid_private_key_test_grep.stdout == '0'
|
|
||||||
|
|
||||||
- name: Write VAPID public key
|
- name: Write VAPID public key
|
||||||
lineinfile:
|
lineinfile:
|
||||||
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
path: "{{ inventory_dir }}/group_vars/all/passwords.yaml"
|
||||||
line: "{{ item.name }}_vapid_public_key_base64: \"{{ vapid_keys['vapidPublicKey'] | b64encode }}\""
|
line: "{{ item.name }}_vapid_public_key_base64: \"{{ vapid_keys['vapidPublicKey'] | b64encode }}\""
|
||||||
when: vapid_public_key_test_grep.stdout == '0'
|
|
||||||
|
@@ -77,7 +77,7 @@ roundcube_default_values:
|
|||||||
'ssl' => array(
|
'ssl' => array(
|
||||||
'verify_peer' => false,
|
'verify_peer' => false,
|
||||||
'allow_self_signed' => true,
|
'allow_self_signed' => true,
|
||||||
'ciphers' => 'TLSv1.3+HIGH:!aNull:@STRENGTH',
|
'ciphers' => 'TLSv1.2+HIGH:!aNull:@STRENGTH',
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
// For STARTTLS SMTP
|
// For STARTTLS SMTP
|
||||||
@@ -85,7 +85,7 @@ roundcube_default_values:
|
|||||||
'ssl' => array(
|
'ssl' => array(
|
||||||
'verify_peer' => false,
|
'verify_peer' => false,
|
||||||
'allow_self_signed' => true,
|
'allow_self_signed' => true,
|
||||||
'ciphers' => 'TLSv1.3+HIGH:!aNull:@STRENGTH',
|
'ciphers' => 'TLSv1.2+HIGH:!aNull:@STRENGTH',
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
?>
|
?>
|
||||||
|
@@ -1,4 +1,6 @@
|
|||||||
service_dns_chart_ref: "bitnami/external-dns"
|
service_dns_chart_ref: "bitnami/external-dns"
|
||||||
|
service_dns_tsigKeyname: "k8s-{{ k8s_cluster_name }}-{{ namespace }}"
|
||||||
|
service_dns_tsigSecretAlg: "hmac-sha512"
|
||||||
service_dns_default_values:
|
service_dns_default_values:
|
||||||
fullnameOverride: "{{ service_dns_name | default(namespace + '-service-dns') }}"
|
fullnameOverride: "{{ service_dns_name | default(namespace + '-service-dns') }}"
|
||||||
domainFilters: ["{{ service_domain | default(domain) }}"]
|
domainFilters: ["{{ service_domain | default(domain) }}"]
|
||||||
@@ -9,8 +11,8 @@ service_dns_default_values:
|
|||||||
port: 53
|
port: 53
|
||||||
zone: "{{ service_domain | default(domain) }}"
|
zone: "{{ service_domain | default(domain) }}"
|
||||||
tsigSecret: "{{ k8s_tsig }}"
|
tsigSecret: "{{ k8s_tsig }}"
|
||||||
tsigSecretAlg: "{{ service_dns_tsigSecretAlg | default('hmac-sha512') }}"
|
tsigSecretAlg: "{{ service_dns_tsigSecretAlg }}"
|
||||||
tsigKeyname: "{{ service_dns_tsigKeyname | default(namespace) }}"
|
tsigKeyname: "{{ service_dns_tsigKeyname }}"
|
||||||
tsigAxfr: true
|
tsigAxfr: true
|
||||||
## Possible units [ns, us, ms, s, m, h], see more https://golang.org/pkg/time/#ParseDuration
|
## Possible units [ns, us, ms, s, m, h], see more https://golang.org/pkg/time/#ParseDuration
|
||||||
minTTL: "30s"
|
minTTL: "30s"
|
||||||
|
Reference in New Issue
Block a user