GHP publish
This commit is contained in:
		
							
								
								
									
										10
									
								
								ansible.cfg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								ansible.cfg
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					[defaults]
 | 
				
			||||||
 | 
					host_key_checking = False
 | 
				
			||||||
 | 
					pipelining = True
 | 
				
			||||||
 | 
					callback_whitelist = timer, profile_tasks
 | 
				
			||||||
 | 
					forks = 50
 | 
				
			||||||
 | 
					roles_path = roles
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ssh_connection]
 | 
				
			||||||
 | 
					pipelining = True
 | 
				
			||||||
 | 
					ssh_args = -o ControlMaster=auto -o ControlPersist=60s -o UserKnownHostsFile=/dev/null            
 | 
				
			||||||
							
								
								
									
										128
									
								
								inventory/ghp/sample/group_vars/all/all.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								inventory/ghp/sample/group_vars/all/all.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,128 @@
 | 
				
			|||||||
 | 
					# Common #
 | 
				
			||||||
 | 
					namespace: ghp
 | 
				
			||||||
 | 
					docker_registry: registry.ghp.0xace.cc
 | 
				
			||||||
 | 
					domain: example.com
 | 
				
			||||||
 | 
					mail_domain: "{{ domain }}"
 | 
				
			||||||
 | 
					local_domain: lan
 | 
				
			||||||
 | 
					dns_ip: YOUR_RFC2136_DNS_IP
 | 
				
			||||||
 | 
					mail_proxy_public_ip: PUBLIC_VPS_IP
 | 
				
			||||||
 | 
					mail_proxy_private_ip: "{{ dns_ip }}"
 | 
				
			||||||
 | 
					web_proxy_internal_ip: INTERNAL_VPS_IP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Core infrastructure #
 | 
				
			||||||
 | 
					## Nginx Ingress ##
 | 
				
			||||||
 | 
					### Internal ###
 | 
				
			||||||
 | 
					internal_ingress_class: "ghp-internal-nginx"
 | 
				
			||||||
 | 
					internal_loadbalancer_ip: "192.168.250.0"
 | 
				
			||||||
 | 
					### External ###
 | 
				
			||||||
 | 
					internal_ingress_class: "ghp-external-nginx"
 | 
				
			||||||
 | 
					external_loadbalancer_ip: "192.168.250.10"
 | 
				
			||||||
 | 
					### Local ###
 | 
				
			||||||
 | 
					internal_ingress_class: "ghp-local-nginx"
 | 
				
			||||||
 | 
					local_loadbalancer_ip: "192.168.250.20"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## External-dns ##
 | 
				
			||||||
 | 
					dns_namespace: dns
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Shared infrastructure #
 | 
				
			||||||
 | 
					## PostgreSQL ##
 | 
				
			||||||
 | 
					postgres_enable: true
 | 
				
			||||||
 | 
					postgres_db_namespace: "{{ namespace }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## OpenLDAP ##
 | 
				
			||||||
 | 
					openldap_enabled: true
 | 
				
			||||||
 | 
					#openldap_size: "10Gi"
 | 
				
			||||||
 | 
					#openldap_storage: "nfs-ssd"
 | 
				
			||||||
 | 
					openldap_loadbalancer_ip: "192.168.250.2"
 | 
				
			||||||
 | 
					openldap_domain: "dc=example,dc=com"
 | 
				
			||||||
 | 
					openldap_custom_users:
 | 
				
			||||||
 | 
					  - { name: myuser1 }
 | 
				
			||||||
 | 
					  - { name: myuser2 }
 | 
				
			||||||
 | 
					openldap_simple_users:
 | 
				
			||||||
 | 
					  - { name: testuser1, sn: 6001, uid: 6001, gid: 6001 }
 | 
				
			||||||
 | 
					  - { name: testuser2, sn: 6002, uid: 6002, gid: 6002 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Docker-registry ##
 | 
				
			||||||
 | 
					registry_enabled: true
 | 
				
			||||||
 | 
					#registry_size: "100Gi"
 | 
				
			||||||
 | 
					#registry_storage: "nfs-hdd"
 | 
				
			||||||
 | 
					registry_publish: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## ChartMuseum ##
 | 
				
			||||||
 | 
					chartmuseum_enabled: true
 | 
				
			||||||
 | 
					#chartmuseum_size: "10Gi"
 | 
				
			||||||
 | 
					#chartmuseum_storage: "nfs-hdd"
 | 
				
			||||||
 | 
					#chartmuseum_publish: false
 | 
				
			||||||
 | 
					#chartmuseum_login: admin
 | 
				
			||||||
 | 
					#chartmuseum_pass:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# End User Applications #
 | 
				
			||||||
 | 
					## Email ##
 | 
				
			||||||
 | 
					mail_enabled: true
 | 
				
			||||||
 | 
					#mailbox_size: "50Gi"
 | 
				
			||||||
 | 
					#mailbox_storage: "nfs-hdd"
 | 
				
			||||||
 | 
					roundcube_enabled: true
 | 
				
			||||||
 | 
					roundcube_publish: false
 | 
				
			||||||
 | 
					postfix_loadbalancer_ip: "192.168.250.3"
 | 
				
			||||||
 | 
					dovecot_loadbalancer_ip: "192.168.250.4"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Nextcloud ##
 | 
				
			||||||
 | 
					nextcloud_enabled: true
 | 
				
			||||||
 | 
					#nextcloud_size: "20Gi"
 | 
				
			||||||
 | 
					#nextcloud_storage: "nfs-ssd"
 | 
				
			||||||
 | 
					#nextcloud_pass:
 | 
				
			||||||
 | 
					#nextcloud_mail_pass:
 | 
				
			||||||
 | 
					nextcloud_publish: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Bitwarden Password Manager ##
 | 
				
			||||||
 | 
					bitwarden_enabled: true
 | 
				
			||||||
 | 
					#bitwarden_size: "8Gi"
 | 
				
			||||||
 | 
					#bitwarden_storage: "nfs-ssd"
 | 
				
			||||||
 | 
					#bitwarden_smtp_pass: 
 | 
				
			||||||
 | 
					bitwarden_publish: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Gitea ##
 | 
				
			||||||
 | 
					gitea_enabled: true
 | 
				
			||||||
 | 
					#gitea_size: "20Gi"
 | 
				
			||||||
 | 
					#gitea_storage: "nfs-ssd"
 | 
				
			||||||
 | 
					#gitea_lfs: true
 | 
				
			||||||
 | 
					#gitea_lfs_size: "50Gi"
 | 
				
			||||||
 | 
					#gitea_lfs_storage: "nfs-hdd"
 | 
				
			||||||
 | 
					gitea_publish_web: false
 | 
				
			||||||
 | 
					gitea_publish_ssh: false
 | 
				
			||||||
 | 
					gitea_loadbalancer_ip: "192.168.250.5"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Drone ##
 | 
				
			||||||
 | 
					drone_enabled: true
 | 
				
			||||||
 | 
					#drone_size: "10Gi"
 | 
				
			||||||
 | 
					#drone_storage: "nfs-ssd"
 | 
				
			||||||
 | 
					#drone_gitea_client_id:
 | 
				
			||||||
 | 
					#drone_gitea_client_secret:
 | 
				
			||||||
 | 
					drone_publish: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### WikiJS ###
 | 
				
			||||||
 | 
					wikijs_enabled: true 
 | 
				
			||||||
 | 
					wikijs_publish: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Playmaker ###
 | 
				
			||||||
 | 
					playmaker_enabled: false
 | 
				
			||||||
 | 
					playmaker_publish: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Pypiserver ###
 | 
				
			||||||
 | 
					pypiserver_enabled: false
 | 
				
			||||||
 | 
					pypiserver_publish: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### PeerTube ###
 | 
				
			||||||
 | 
					peertube_enabled: false
 | 
				
			||||||
 | 
					peertube_publish: false
 | 
				
			||||||
 | 
					#peertube_size: "100Gi"
 | 
				
			||||||
 | 
					#peertube_storage: "nfs-hdd"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Adguard Home ###
 | 
				
			||||||
 | 
					adguard_enabled: false
 | 
				
			||||||
 | 
					adguard_publish: false
 | 
				
			||||||
 | 
					adguard_loadbalancer_ip: "192.168.250.6"
 | 
				
			||||||
 | 
					#adguard_config_size: "20Mi"
 | 
				
			||||||
 | 
					#adguard_config_storage: "nfs-ssd"
 | 
				
			||||||
 | 
					#adguard_work_size: "10Gi"
 | 
				
			||||||
 | 
					#adguard_work_storage: "nfs-ssd"
 | 
				
			||||||
							
								
								
									
										0
									
								
								inventory/ghp/sample/group_vars/all/passwords.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								inventory/ghp/sample/group_vars/all/passwords.yaml
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										36
									
								
								inventory/ghp/sample/group_vars/ddclient.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								inventory/ghp/sample/group_vars/ddclient.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					ddclient_conf: |
 | 
				
			||||||
 | 
					  daemon=300
 | 
				
			||||||
 | 
					  syslog=yes
 | 
				
			||||||
 | 
					  mail-failure=root
 | 
				
			||||||
 | 
					  pid=/var/run/ddclient/ddclient.pid
 | 
				
			||||||
 | 
					  ssl=yes
 | 
				
			||||||
 | 
					  debug=yes
 | 
				
			||||||
 | 
					  verbose=yes
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  {% for host in ddclient_hosts %}
 | 
				
			||||||
 | 
					  {% if host != 'omitme' %}
 | 
				
			||||||
 | 
					  use=web
 | 
				
			||||||
 | 
					  web=checkip.dyndns.org
 | 
				
			||||||
 | 
					  protocol=nsupdate
 | 
				
			||||||
 | 
					  server={{ external_dns_ip | default(dns_ip) }}
 | 
				
			||||||
 | 
					  login=/usr/bin/nsupdate
 | 
				
			||||||
 | 
					  password=/config/Kvps.key
 | 
				
			||||||
 | 
					  zone={{ domain }}
 | 
				
			||||||
 | 
					  ttl=60
 | 
				
			||||||
 | 
					  {{ host }}
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  {% endif %}
 | 
				
			||||||
 | 
					  {% endfor %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ddclient_hosts:
 | 
				
			||||||
 | 
					  - "{% if nextcloud_publish | default(false) %}nextcloud.{{ domain }}{% else %}omitme{% endif %}"
 | 
				
			||||||
 | 
					  - "{% if drone_publish | default(false) %}drone.{{ domain }}{% else %}omitme{% endif %}"
 | 
				
			||||||
 | 
					  - "{% if gitea_publish | default(false) %}gitea.{{ domain }}{% else %}omitme{% endif %}"
 | 
				
			||||||
 | 
					  - "{% if bitwarden_publish | default(false) %}bitwarden.{{ domain }}{% else %}omitme{% endif %}"
 | 
				
			||||||
 | 
					  - "{% if wikijs_publish | default(false) %}wikijs.{{ domain }}{% else %}omitme{% endif %}"
 | 
				
			||||||
 | 
					  - "{% if chartmuseum_publish | default(false) %}charts.{{ domain }}{% else %}omitme{% endif %}"
 | 
				
			||||||
 | 
					  - "{% if registry_publish | default(false) %}registry.{{ domain }}{% else %}omitme{% endif %}"
 | 
				
			||||||
 | 
					  - "{% if peertube_publish | default(false) %}peertube.{{ domain }}{% else %}omitme{% endif %}"
 | 
				
			||||||
 | 
					  - "{{ registry_readonly_ingress | default('omitme') }}"
 | 
				
			||||||
 | 
					  - "{{ chartmuseum_readonly_ingress | default('omitme') }}"
 | 
				
			||||||
 | 
					  - "{{ wikijs_readonly_ingress | default('omitme') }}"
 | 
				
			||||||
							
								
								
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/adguard.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/adguard.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					adguard_values: {}
 | 
				
			||||||
							
								
								
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/bitwarden.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/bitwarden.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					bitwarden_values: {}
 | 
				
			||||||
							
								
								
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/cert-manager.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/cert-manager.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					cert_manager_values: {}
 | 
				
			||||||
							
								
								
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/chartmuseum.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/chartmuseum.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					chartmuseum_values: {}
 | 
				
			||||||
							
								
								
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/dovecot.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/dovecot.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					dovecot_values: {}
 | 
				
			||||||
							
								
								
									
										2
									
								
								inventory/ghp/sample/group_vars/k8s/drone.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								inventory/ghp/sample/group_vars/k8s/drone.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					drone_values: {}
 | 
				
			||||||
 | 
					drone_runner_kube_values: {}
 | 
				
			||||||
							
								
								
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/external-dns.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/external-dns.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					external_dns_values: {}
 | 
				
			||||||
@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					external_ingress_nginx_values: {}
 | 
				
			||||||
							
								
								
									
										3
									
								
								inventory/ghp/sample/group_vars/k8s/gitea.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								inventory/ghp/sample/group_vars/k8s/gitea.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					gitea_values: {}
 | 
				
			||||||
 | 
					gitea_ingress_nginx_values: {}
 | 
				
			||||||
 | 
					gitea_dns_values: {}
 | 
				
			||||||
							
								
								
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/internal-dns.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/internal-dns.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					internal_dns_values: {}
 | 
				
			||||||
@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					internal_ingress_nginx_values: {}
 | 
				
			||||||
							
								
								
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/local-dns.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/local-dns.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					local_dns_values: {}
 | 
				
			||||||
@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					local_ingress_nginx_values: {}
 | 
				
			||||||
							
								
								
									
										13
									
								
								inventory/ghp/sample/group_vars/k8s/metallb.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								inventory/ghp/sample/group_vars/k8s/metallb.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					metallb_values:
 | 
				
			||||||
 | 
					  configInline:
 | 
				
			||||||
 | 
					    peers:
 | 
				
			||||||
 | 
					    - peer-address: 192.168.5.1
 | 
				
			||||||
 | 
					      peer-asn: 64601
 | 
				
			||||||
 | 
					      my-asn: 65500
 | 
				
			||||||
 | 
					    address-pools:
 | 
				
			||||||
 | 
					    - name: default
 | 
				
			||||||
 | 
					      protocol: bgp
 | 
				
			||||||
 | 
					      bgp-advertisements:
 | 
				
			||||||
 | 
					      - aggregation-length: 24
 | 
				
			||||||
 | 
					      addresses:
 | 
				
			||||||
 | 
					      - 192.168.250.0/24
 | 
				
			||||||
							
								
								
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/metrics-server.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/metrics-server.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					metrics_server_values: {}
 | 
				
			||||||
							
								
								
									
										43
									
								
								inventory/ghp/sample/group_vars/k8s/nextcloud.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								inventory/ghp/sample/group_vars/k8s/nextcloud.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
				
			|||||||
 | 
					nextcloud_values:
 | 
				
			||||||
 | 
					  nextcloud:
 | 
				
			||||||
 | 
					    configs:
 | 
				
			||||||
 | 
					      mail.fix.config.php: |-
 | 
				
			||||||
 | 
					        <?php
 | 
				
			||||||
 | 
					        $CONFIG = array (
 | 
				
			||||||
 | 
					          "mail_smtptimeout"  => 60,
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					      fix.config.php: |-
 | 
				
			||||||
 | 
					        <?php
 | 
				
			||||||
 | 
					        $CONFIG = array (
 | 
				
			||||||
 | 
					          'trusted_proxies' => ['{{ web_proxy_internal_ip }}'],
 | 
				
			||||||
 | 
					          'overwriteprotocol' => 'https',
 | 
				
			||||||
 | 
					          'overwrite.cli.url' => 'https://nextcloud.{{ domain }}',
 | 
				
			||||||
 | 
					          'mail_smtpstreamoptions' =>
 | 
				
			||||||
 | 
					          array (
 | 
				
			||||||
 | 
					            'ssl' =>
 | 
				
			||||||
 | 
					            array (
 | 
				
			||||||
 | 
					              'allow_self_signed' => true,
 | 
				
			||||||
 | 
					              'verify_peer' => false,
 | 
				
			||||||
 | 
					              'verify_peer_name' => false,
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					      rgw.config.php: |-
 | 
				
			||||||
 | 
					        <?php
 | 
				
			||||||
 | 
					        $CONFIG = array (
 | 
				
			||||||
 | 
					          'objectstore_multibucket' => array(
 | 
				
			||||||
 | 
					            'class' => '\\OC\\Files\\ObjectStore\\S3',
 | 
				
			||||||
 | 
					            'arguments' => array(
 | 
				
			||||||
 | 
					                    'bucket' => 'nextcloud',
 | 
				
			||||||
 | 
					                    'autocreate' => true,
 | 
				
			||||||
 | 
					                    'key'    => 'K4PNZLSTLIDQJMZUV27P',
 | 
				
			||||||
 | 
					                    'secret' => 'iPScsni8RS2aT9MFymfQYLPD7W8dVrRqFpafBKDc',
 | 
				
			||||||
 | 
					                    'hostname' => 'sds1-osd1.lan',
 | 
				
			||||||
 | 
					                    'port' => 8080,
 | 
				
			||||||
 | 
					                    'use_ssl' => false,
 | 
				
			||||||
 | 
					                    'num_buckets' => 16,
 | 
				
			||||||
 | 
					                    'region' => 'us-east-1',
 | 
				
			||||||
 | 
					                    'use_path_style' => true
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
@@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					nfs_client_provisioner_hdd_values:
 | 
				
			||||||
 | 
					  replicaCount: 1
 | 
				
			||||||
 | 
					  strategyType: Recreate
 | 
				
			||||||
 | 
					  nfs:
 | 
				
			||||||
 | 
					    server: <nfs server dns or ip>
 | 
				
			||||||
 | 
					    path: <full path from exportfs>
 | 
				
			||||||
 | 
					    defaultClass: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					nfs_client_provisioner_ssd_values:
 | 
				
			||||||
 | 
					  replicaCount: 1
 | 
				
			||||||
 | 
					  strategyType: Recreate
 | 
				
			||||||
 | 
					  nfs:
 | 
				
			||||||
 | 
					    server: <nfs server dns or ip>
 | 
				
			||||||
 | 
					    path: <full path from exportfs>
 | 
				
			||||||
 | 
					    defaultClass: true
 | 
				
			||||||
							
								
								
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/opendkim.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/opendkim.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					opendkim_values: {}
 | 
				
			||||||
							
								
								
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/opendmarc.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/opendmarc.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					opendmarc_values: {}
 | 
				
			||||||
							
								
								
									
										58
									
								
								inventory/ghp/sample/group_vars/k8s/openldap.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								inventory/ghp/sample/group_vars/k8s/openldap.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
				
			|||||||
 | 
					openldap_values:
 | 
				
			||||||
 | 
					  customLdifFiles:
 | 
				
			||||||
 | 
					    04-custom-users.ldif: |-
 | 
				
			||||||
 | 
					      dn: uid=myuser1,ou=users,{{ openldap_domain }}
 | 
				
			||||||
 | 
					      changetype: add
 | 
				
			||||||
 | 
					      uid: myuser1
 | 
				
			||||||
 | 
					      cn: myuser1
 | 
				
			||||||
 | 
					      sn: 5001
 | 
				
			||||||
 | 
					      objectClass: top
 | 
				
			||||||
 | 
					      objectClass: posixAccount
 | 
				
			||||||
 | 
					      objectClass: inetOrgPerson
 | 
				
			||||||
 | 
					      loginShell: /bin/bash
 | 
				
			||||||
 | 
					      homeDirectory: /home/myuser1
 | 
				
			||||||
 | 
					      uidNumber: 5001
 | 
				
			||||||
 | 
					      gidNumber: 5001
 | 
				
			||||||
 | 
					      userPassword: {{ myuser1_pbkdf2_sha512_hash }}
 | 
				
			||||||
 | 
					      mail: myuser1@{{ domain }}
 | 
				
			||||||
 | 
					      mail: myuser1_second_mail@{{ domain }}
 | 
				
			||||||
 | 
					      gecos: myuser1 description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      dn: uid=myuser2,ou=users,{{ openldap_domain }}
 | 
				
			||||||
 | 
					      changetype: add
 | 
				
			||||||
 | 
					      uid: myuser2
 | 
				
			||||||
 | 
					      cn: myuser2
 | 
				
			||||||
 | 
					      sn: 5002
 | 
				
			||||||
 | 
					      objectClass: top
 | 
				
			||||||
 | 
					      objectClass: posixAccount
 | 
				
			||||||
 | 
					      objectClass: inetOrgPerson
 | 
				
			||||||
 | 
					      loginShell: /bin/bash
 | 
				
			||||||
 | 
					      homeDirectory: /home/myuser2
 | 
				
			||||||
 | 
					      uidNumber: 5002
 | 
				
			||||||
 | 
					      gidNumber: 5002
 | 
				
			||||||
 | 
					      userPassword: {{ myuser2_pbkdf2_sha512_hash }}
 | 
				
			||||||
 | 
					      mail: myuser2@{{ domain }}
 | 
				
			||||||
 | 
					      mail: myuser2_second_mail@{{ domain }}
 | 
				
			||||||
 | 
					      gecos: myuser2 description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    05-autogen-simple-users.ldif: |-
 | 
				
			||||||
 | 
					      {% for user in openldap_simple_users %}
 | 
				
			||||||
 | 
					      dn: uid={{ user.name }},ou=users,{{ openldap_domain }}
 | 
				
			||||||
 | 
					      changetype: add
 | 
				
			||||||
 | 
					      uid: {{ user.name }}
 | 
				
			||||||
 | 
					      cn: {{ user.name }}
 | 
				
			||||||
 | 
					      sn: {{ user.sn }}
 | 
				
			||||||
 | 
					      objectClass: top
 | 
				
			||||||
 | 
					      objectClass: posixAccount
 | 
				
			||||||
 | 
					      objectClass: inetOrgPerson
 | 
				
			||||||
 | 
					      loginShell: /bin/bash
 | 
				
			||||||
 | 
					      homeDirectory: /home/{{ user.name }}
 | 
				
			||||||
 | 
					      uidNumber: {{ user.uid }}
 | 
				
			||||||
 | 
					      gidNumber: {{ user.gid }}
 | 
				
			||||||
 | 
					      userPassword: {{ hostvars[inventory_hostname][user.name + '_pbkdf2_sha512_hash'] | default('nopass') }}
 | 
				
			||||||
 | 
					      mail: {{ user.name }}@{{ domain }}
 | 
				
			||||||
 | 
					      gecos: {{ user.name }} user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      {% endfor %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/peertube.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/peertube.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					peertube_values: {}
 | 
				
			||||||
							
								
								
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/postfix.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/postfix.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					postfix_values: {}
 | 
				
			||||||
							
								
								
									
										2
									
								
								inventory/ghp/sample/group_vars/k8s/postgres.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								inventory/ghp/sample/group_vars/k8s/postgres.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					postgres_operator_values: {}
 | 
				
			||||||
 | 
					postgres_operator_ui_values: {}
 | 
				
			||||||
							
								
								
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/registry.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/registry.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					registry_values: {}
 | 
				
			||||||
							
								
								
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/roundcube.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/roundcube.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					roundcube_values: {}
 | 
				
			||||||
							
								
								
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/rspamd.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/rspamd.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					rspamd_values: {}
 | 
				
			||||||
							
								
								
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/service-dns.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/service-dns.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					service_dns_values: {}
 | 
				
			||||||
							
								
								
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/wikijs.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								inventory/ghp/sample/group_vars/k8s/wikijs.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					wikijs_values: {}
 | 
				
			||||||
							
								
								
									
										87
									
								
								inventory/ghp/sample/group_vars/knot_dns.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								inventory/ghp/sample/group_vars/knot_dns.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,87 @@
 | 
				
			|||||||
 | 
					knot_conf: |
 | 
				
			||||||
 | 
					  # This is a sample of a minimal configuration file for Knot DNS.
 | 
				
			||||||
 | 
					  # See knot.conf(5) or refer to the server documentation.
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  server:
 | 
				
			||||||
 | 
					      rundir: "/run/knot"
 | 
				
			||||||
 | 
					      user: knot:knot
 | 
				
			||||||
 | 
					      listen: [ 0.0.0.0@53, ::@53 ]
 | 
				
			||||||
 | 
					      udp-max-payload: 1232
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  log:
 | 
				
			||||||
 | 
					    - target: syslog
 | 
				
			||||||
 | 
					      any: debug
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  key:
 | 
				
			||||||
 | 
					    - id: k8s
 | 
				
			||||||
 | 
					      algorithm: hmac-sha512
 | 
				
			||||||
 | 
					      secret: {{ k8s_tsig }}
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					    - id: vps
 | 
				
			||||||
 | 
					      algorithm: hmac-sha512
 | 
				
			||||||
 | 
					      secret: {{ ddclient_tsig }}
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  remote:
 | 
				
			||||||
 | 
					  #  - id: slave
 | 
				
			||||||
 | 
					  #    address: 192.168.1.1@53
 | 
				
			||||||
 | 
					  #
 | 
				
			||||||
 | 
					  #  - id: master
 | 
				
			||||||
 | 
					  #    address: 192.168.2.1@53
 | 
				
			||||||
 | 
					  remote:
 | 
				
			||||||
 | 
					    - id: dns_server
 | 
				
			||||||
 | 
					      address: 127.0.0.1@53
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  submission:
 | 
				
			||||||
 | 
					    - id: dns_zone_sbm
 | 
				
			||||||
 | 
					      parent: [dns_server]
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  acl:
 | 
				
			||||||
 | 
					    - id: deny_all
 | 
				
			||||||
 | 
					      deny: on # no action specified and deny on implies denial of all actions
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					    - id: key_rule
 | 
				
			||||||
 | 
					      key: [vps, k8s]                # Access based just on TSIG key
 | 
				
			||||||
 | 
					      address: 192.168.0.0/16
 | 
				
			||||||
 | 
					      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:
 | 
				
			||||||
 | 
					    - id: default
 | 
				
			||||||
 | 
					      storage: "/var/lib/knot"
 | 
				
			||||||
 | 
					      file: "%s.zone"
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  policy:
 | 
				
			||||||
 | 
					    - id: rsa
 | 
				
			||||||
 | 
					      algorithm: RSASHA512
 | 
				
			||||||
 | 
					      ksk-size: 4096
 | 
				
			||||||
 | 
					      zsk-size: 2048
 | 
				
			||||||
 | 
					      nsec3: on
 | 
				
			||||||
 | 
					      ksk-submission: dns_zone_sbm
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  zone:
 | 
				
			||||||
 | 
					    - domain: "{{ domain }}"
 | 
				
			||||||
 | 
					      storage: "/var/lib/knot/zones/"
 | 
				
			||||||
 | 
					      file: "{{ domain }}.zone"
 | 
				
			||||||
 | 
					      acl: [deny_all, key_rule]
 | 
				
			||||||
 | 
					      dnssec-signing: on
 | 
				
			||||||
 | 
					      dnssec-policy: rsa
 | 
				
			||||||
 | 
					      zonefile-load: difference
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  #    # Master zone
 | 
				
			||||||
 | 
					  #  - domain: example.com
 | 
				
			||||||
 | 
					  #    notify: slave
 | 
				
			||||||
 | 
					  #    acl: acl_slave
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  #    # Slave zone
 | 
				
			||||||
 | 
					  #  - domain: example.net
 | 
				
			||||||
 | 
					  #    master: master
 | 
				
			||||||
 | 
					  #    acl: acl_master
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										102
									
								
								inventory/ghp/sample/group_vars/mail_proxy.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								inventory/ghp/sample/group_vars/mail_proxy.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,102 @@
 | 
				
			|||||||
 | 
					haproxy_config: |
 | 
				
			||||||
 | 
					  global
 | 
				
			||||||
 | 
					    chroot /var/lib/haproxy
 | 
				
			||||||
 | 
					    daemon
 | 
				
			||||||
 | 
					    group haproxy
 | 
				
			||||||
 | 
					    maxconn 200000
 | 
				
			||||||
 | 
					    nbproc {{ ansible_processor_count }}
 | 
				
			||||||
 | 
					    pidfile /var/run/haproxy.pid
 | 
				
			||||||
 | 
					    user haproxy
 | 
				
			||||||
 | 
					    stats socket /var/run/haproxy.stat
 | 
				
			||||||
 | 
					    stats bind-process 1
 | 
				
			||||||
 | 
					    log 127.0.0.1 local0
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  defaults
 | 
				
			||||||
 | 
					    log  global
 | 
				
			||||||
 | 
					    maxconn 200000
 | 
				
			||||||
 | 
					    option redispatch
 | 
				
			||||||
 | 
					    retries 3
 | 
				
			||||||
 | 
					    timeout http-request 10s
 | 
				
			||||||
 | 
					    timeout queue 1m
 | 
				
			||||||
 | 
					    timeout connect 10s
 | 
				
			||||||
 | 
					    timeout client 10m
 | 
				
			||||||
 | 
					    timeout server 10m
 | 
				
			||||||
 | 
					    timeout check 10s
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  frontend ft_smtp
 | 
				
			||||||
 | 
					    bind {{ mail_proxy_public_ip }}:25
 | 
				
			||||||
 | 
					    bind {{ mail_proxy_private_ip }}:25
 | 
				
			||||||
 | 
					    mode tcp
 | 
				
			||||||
 | 
					    timeout client 1m
 | 
				
			||||||
 | 
					    log global
 | 
				
			||||||
 | 
					    option tcplog
 | 
				
			||||||
 | 
					    default_backend bk_smtp
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  backend bk_smtp
 | 
				
			||||||
 | 
					    mode tcp
 | 
				
			||||||
 | 
					    log global
 | 
				
			||||||
 | 
					    option tcplog
 | 
				
			||||||
 | 
					    timeout server 1m
 | 
				
			||||||
 | 
					    timeout connect 7s
 | 
				
			||||||
 | 
					    server postfix {{ postfix_loadbalancer_ip }}:2525 send-proxy
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  frontend ft_submission
 | 
				
			||||||
 | 
					    bind {{ mail_proxy_public_ip }}:587
 | 
				
			||||||
 | 
					    bind {{ mail_proxy_private_ip }}:587
 | 
				
			||||||
 | 
					    mode tcp
 | 
				
			||||||
 | 
					    timeout client 1m
 | 
				
			||||||
 | 
					    log global
 | 
				
			||||||
 | 
					    option tcplog
 | 
				
			||||||
 | 
					    default_backend bk_submission
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  backend bk_submission
 | 
				
			||||||
 | 
					    mode tcp
 | 
				
			||||||
 | 
					    log global
 | 
				
			||||||
 | 
					    option tcplog
 | 
				
			||||||
 | 
					    timeout server 1m
 | 
				
			||||||
 | 
					    timeout connect 7s
 | 
				
			||||||
 | 
					    server postfix {{ postfix_loadbalancer_ip }}:10587 send-proxy
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  frontend ft_submissions
 | 
				
			||||||
 | 
					    bind {{ mail_proxy_public_ip }}:465
 | 
				
			||||||
 | 
					    bind {{ mail_proxy_private_ip }}:465
 | 
				
			||||||
 | 
					    mode tcp
 | 
				
			||||||
 | 
					    timeout client 1m
 | 
				
			||||||
 | 
					    log global
 | 
				
			||||||
 | 
					    option tcplog
 | 
				
			||||||
 | 
					    default_backend bk_submissions
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  backend bk_submissions
 | 
				
			||||||
 | 
					    mode tcp
 | 
				
			||||||
 | 
					    log global
 | 
				
			||||||
 | 
					    option tcplog
 | 
				
			||||||
 | 
					    timeout server 1m
 | 
				
			||||||
 | 
					    timeout connect 7s
 | 
				
			||||||
 | 
					    server postfix {{ postfix_loadbalancer_ip }}:10465 send-proxy
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  frontend ft_imap
 | 
				
			||||||
 | 
					    bind {{ mail_proxy_public_ip }}:143
 | 
				
			||||||
 | 
					    bind {{ mail_proxy_private_ip }}:143
 | 
				
			||||||
 | 
					    mode tcp
 | 
				
			||||||
 | 
					    default_backend bk_imap
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  backend bk_imap
 | 
				
			||||||
 | 
					    mode tcp
 | 
				
			||||||
 | 
					    balance leastconn
 | 
				
			||||||
 | 
					    stick store-request src
 | 
				
			||||||
 | 
					    stick-table type ip size 200k expire 30m
 | 
				
			||||||
 | 
					    server imap1 {{ dovecot_loadbalancer_ip }}:1109 send-proxy-v2
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  frontend ft_imaps
 | 
				
			||||||
 | 
					    bind {{ mail_proxy_public_ip }}:993
 | 
				
			||||||
 | 
					    bind {{ mail_proxy_private_ip }}:993
 | 
				
			||||||
 | 
					    mode tcp
 | 
				
			||||||
 | 
					    default_backend bk_imaps
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  backend bk_imaps
 | 
				
			||||||
 | 
					    mode tcp
 | 
				
			||||||
 | 
					    balance leastconn
 | 
				
			||||||
 | 
					    stick store-request src
 | 
				
			||||||
 | 
					    stick-table type ip size 200k expire 30m
 | 
				
			||||||
 | 
					    server imaps1 {{ dovecot_loadbalancer_ip }}:10993 send-proxy-v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										97
									
								
								inventory/ghp/sample/group_vars/web_proxy.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								inventory/ghp/sample/group_vars/web_proxy.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,97 @@
 | 
				
			|||||||
 | 
					nginx:
 | 
				
			||||||
 | 
					  nginx.conf: |
 | 
				
			||||||
 | 
					    user  nginx;
 | 
				
			||||||
 | 
					    worker_processes  {{ ansible_processor_count }};
 | 
				
			||||||
 | 
					    error_log  /var/log/nginx/error.log debug;
 | 
				
			||||||
 | 
					    pid        /var/run/nginx.pid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    events {
 | 
				
			||||||
 | 
					        worker_connections  4096;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    http {
 | 
				
			||||||
 | 
					        include       /etc/nginx/mime.types;
 | 
				
			||||||
 | 
					        default_type  application/octet-stream;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
 | 
				
			||||||
 | 
					                          '$status $body_bytes_sent "$http_referer" '
 | 
				
			||||||
 | 
					                          '"$http_user_agent" "$http_x_forwarded_for"';
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					        access_log  /var/log/nginx/access.log  main;
 | 
				
			||||||
 | 
					        sendfile        on;
 | 
				
			||||||
 | 
					        #tcp_nopush     on;
 | 
				
			||||||
 | 
					        keepalive_timeout  65;
 | 
				
			||||||
 | 
					        #gzip  on;
 | 
				
			||||||
 | 
					        include /etc/nginx/conf.d/*.conf;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    stream {
 | 
				
			||||||
 | 
					        server {
 | 
				
			||||||
 | 
					            listen 443;
 | 
				
			||||||
 | 
					            proxy_pass $upstream;
 | 
				
			||||||
 | 
					            ssl_preread on;
 | 
				
			||||||
 | 
					            proxy_protocol on;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        map $ssl_preread_server_name $upstream {
 | 
				
			||||||
 | 
					            include /etc/nginx/stream.d/*.map;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        include /etc/nginx/stream.d/*.conf;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					  stream.d:
 | 
				
			||||||
 | 
					    - name: "k8s-ghp-{{ namespace }}.map"
 | 
				
			||||||
 | 
					      data: |
 | 
				
			||||||
 | 
					        {% if gitea_publish_ssh %}
 | 
				
			||||||
 | 
					        default gitea_ssh_{{ namespace }};
 | 
				
			||||||
 | 
					        {% endif %}
 | 
				
			||||||
 | 
					        {% if gitea_publish_web %}
 | 
				
			||||||
 | 
					        gitea.{{ domain }} gitea_web_{{ namespace }};
 | 
				
			||||||
 | 
					        {% endif %}
 | 
				
			||||||
 | 
					        {% if bitwarden_publish %}
 | 
				
			||||||
 | 
					        bitwarden.{{ domain }} https_{{ namespace }};
 | 
				
			||||||
 | 
					        {% endif %}
 | 
				
			||||||
 | 
					        {% if wikijs_publish %}
 | 
				
			||||||
 | 
					        wikijs.{{ domain }} https_{{ namespace }};
 | 
				
			||||||
 | 
					        {% endif %}
 | 
				
			||||||
 | 
					        {% if drone_publish %}
 | 
				
			||||||
 | 
					        drone.{{ domain }} https_{{ namespace }};
 | 
				
			||||||
 | 
					        {% endif %}
 | 
				
			||||||
 | 
					        {% if nextcloud_publish %}
 | 
				
			||||||
 | 
					        nextcloud.{{ domain }} https_{{ namespace }};
 | 
				
			||||||
 | 
					        {% endif %}
 | 
				
			||||||
 | 
					        {% if registry_publish %}
 | 
				
			||||||
 | 
					        registry.{{ domain }} https_{{ namespace }};
 | 
				
			||||||
 | 
					        {% endif %}
 | 
				
			||||||
 | 
					        {% if registry_readonly_ingress %}
 | 
				
			||||||
 | 
					        {{ registry_readonly_ingress }} https_{{ namespace }};
 | 
				
			||||||
 | 
					        {% endif %}
 | 
				
			||||||
 | 
					        {% if chartmuseum_publish %}
 | 
				
			||||||
 | 
					        charts.{{ domain }} https_{{ namespace }};
 | 
				
			||||||
 | 
					        {% endif %}
 | 
				
			||||||
 | 
					        {% if chartmuseum_readonly_ingress %}
 | 
				
			||||||
 | 
					        {{ chartmuseum_readonly_ingress }} https_{{ namespace }};
 | 
				
			||||||
 | 
					        {% endif %}
 | 
				
			||||||
 | 
					        {% if wikijs_readonly_ingress %}
 | 
				
			||||||
 | 
					        {{ wikijs_readonly_ingress }} https_{{ namespace }};
 | 
				
			||||||
 | 
					        {% endif %}
 | 
				
			||||||
 | 
					        {% if peertube_publish %}
 | 
				
			||||||
 | 
					        peertube.{{ domain }} https_{{ namespace }};
 | 
				
			||||||
 | 
					        {% endif %}
 | 
				
			||||||
 | 
					    - name: "k8s-ghp-{{ namespace }}.conf"
 | 
				
			||||||
 | 
					      data: |-
 | 
				
			||||||
 | 
					        {% if gitea_publish_ssh %}
 | 
				
			||||||
 | 
					        upstream gitea_ssh_{{ namespace }} {
 | 
				
			||||||
 | 
					            server {{ gitea_loadbalancer_ip }}:22;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        {% endif %}
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					        {% if gitea_publish_web %}
 | 
				
			||||||
 | 
					        upstream gitea_web_{{ namespace }} {
 | 
				
			||||||
 | 
					            server {{ gitea_loadbalancer_ip }}:443;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        {% endif %}
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					        upstream https_{{ namespace }} {
 | 
				
			||||||
 | 
					            server {{ external_loadbalancer_ip }}:443;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
							
								
								
									
										16
									
								
								inventory/ghp/sample/hosts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								inventory/ghp/sample/hosts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					[vps:children]
 | 
				
			||||||
 | 
					knot_dns
 | 
				
			||||||
 | 
					web_proxy
 | 
				
			||||||
 | 
					mail_proxy
 | 
				
			||||||
 | 
					ddclient
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ddclient]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[web_proxy]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[mail_proxy]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[knot_dns]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[k8s]
 | 
				
			||||||
 | 
					localhost ansible_python_interpreter="python"
 | 
				
			||||||
							
								
								
									
										27
									
								
								playbooks/ghp/bootstrap.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								playbooks/ghp/bootstrap.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					- hosts: localhost
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  pre_tasks:
 | 
				
			||||||
 | 
					    - name: Check docker is working
 | 
				
			||||||
 | 
					      shell: docker info
 | 
				
			||||||
 | 
					      register: docker_info
 | 
				
			||||||
 | 
					      changed_when: "docker_info.rc != 0"
 | 
				
			||||||
 | 
					      failed_when: "docker_info.rc != 0"
 | 
				
			||||||
 | 
					    - name: Check Helm installed
 | 
				
			||||||
 | 
					      shell: helm version
 | 
				
			||||||
 | 
					      register: helm_version
 | 
				
			||||||
 | 
					      changed_when: "helm_version.rc != 0"
 | 
				
			||||||
 | 
					      failed_when: "helm_version.rc != 0"
 | 
				
			||||||
 | 
					    - name: Helm version
 | 
				
			||||||
 | 
					      debug:
 | 
				
			||||||
 | 
					        msg: "{{ helm_version.stdout }}"
 | 
				
			||||||
 | 
					    - name: Check kubectl installed and have access to cluster
 | 
				
			||||||
 | 
					      shell: kubectl get nodes
 | 
				
			||||||
 | 
					      register: kubectl_cluster_nodes
 | 
				
			||||||
 | 
					      changed_when: "kubectl_cluster_nodes.rc != 0"
 | 
				
			||||||
 | 
					      failed_when: "kubectl_cluster_nodes.rc != 0"
 | 
				
			||||||
 | 
					    - name: Kubectl nodes output
 | 
				
			||||||
 | 
					      debug:
 | 
				
			||||||
 | 
					        msg: "{{ kubectl_cluster_nodes.stdout.split('\n') }}"
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - helm-repos
 | 
				
			||||||
 | 
					    - pwgen
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/cert-manager.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/cert-manager.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - cert-manager
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/chartmuseum.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/chartmuseum.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - chartmuseum
 | 
				
			||||||
							
								
								
									
										75
									
								
								playbooks/ghp/core-infra.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								playbooks/ghp/core-infra.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,75 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  tasks:
 | 
				
			||||||
 | 
					  - name: Deploy MetalLB
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: metallb
 | 
				
			||||||
 | 
					    when: metallb_enabled | default(true)
 | 
				
			||||||
 | 
					    tags: metallb
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  - name: Deploy External Ingress Nginx
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: external-ingress-nginx
 | 
				
			||||||
 | 
					    when: external_ingress_nginx_enabled | default(true)
 | 
				
			||||||
 | 
					    tags: 
 | 
				
			||||||
 | 
					      - external-ingress-nginx
 | 
				
			||||||
 | 
					      - ingress-nginx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Deploy Internal Ingress Nginx
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: internal-ingress-nginx
 | 
				
			||||||
 | 
					    when: internal_ingress_nginx_enabled | default(true)
 | 
				
			||||||
 | 
					    tags: 
 | 
				
			||||||
 | 
					      - internal-ingress-nginx
 | 
				
			||||||
 | 
					      - ingress-nginx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Deploy Local Ingress Nginx
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: internal-ingress-nginx
 | 
				
			||||||
 | 
					    when: local_ingress_nginx_enabled | default(true)
 | 
				
			||||||
 | 
					    tags: 
 | 
				
			||||||
 | 
					      - local-ingress-nginx
 | 
				
			||||||
 | 
					      - ingress-nginx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Deploy Internal DNS
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: internal-dns
 | 
				
			||||||
 | 
					    when: internal_dns_enabled | default(true)
 | 
				
			||||||
 | 
					    tags: 
 | 
				
			||||||
 | 
					      - internal-dns
 | 
				
			||||||
 | 
					      - dns
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  - name: Deploy Local DNS
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: local-dns
 | 
				
			||||||
 | 
					    when: local_dns_enabled | default(true)
 | 
				
			||||||
 | 
					    tags: 
 | 
				
			||||||
 | 
					      - local-dns
 | 
				
			||||||
 | 
					      - dns
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Deploy Service DNS
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: service-dns
 | 
				
			||||||
 | 
					    when: service_dns_enabled | default(true)
 | 
				
			||||||
 | 
					    tags: 
 | 
				
			||||||
 | 
					      - service-dns
 | 
				
			||||||
 | 
					      - dns
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  - name: Deploy Cert-manager
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: cert-manager
 | 
				
			||||||
 | 
					    when: cert_manager_enabled | default(true)
 | 
				
			||||||
 | 
					    tags: cert-manager
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  - name: Deploy NFS-client-provisioner
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: nfs-client-provisioner
 | 
				
			||||||
 | 
					    when: nfs_client_provisioner_enabled | default(true)
 | 
				
			||||||
 | 
					    tags: nfs-client-provisioner
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  - name: Deploy Metrics-server
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: metrics-server
 | 
				
			||||||
 | 
					    when: metrics_server_enabled | default(true)
 | 
				
			||||||
 | 
					    tags: metrics-server
 | 
				
			||||||
							
								
								
									
										4
									
								
								playbooks/ghp/dns.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								playbooks/ghp/dns.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: knot_dns
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - knot
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/dovecot.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/dovecot.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - dovecot
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/drone.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/drone.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - drone
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/external-ingress-nginx.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/external-ingress-nginx.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - external-ingress-nginx
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/gitea.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/gitea.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - gitea
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/internal-dns.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/internal-dns.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - internal-dns
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/internal-ingress-nginx.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/internal-ingress-nginx.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - internal-ingress-nginx
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/local-dns.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/local-dns.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - local-dns
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/local-ingress-nginx.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/local-ingress-nginx.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - local-ingress-nginx
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/mail.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/mail.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - mail
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/metallb.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/metallb.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - metallb
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/metrics-server.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/metrics-server.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - metrics-server
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/nextcloud.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/nextcloud.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - nextcloud
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/nfs-client-provisioner.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/nfs-client-provisioner.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - nfs-client-provisioner
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/opendkim.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/opendkim.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - opendkim
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/opendmarc.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/opendmarc.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - opendmarc
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/openldap.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/openldap.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - openldap
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/playmaker.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/playmaker.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - playmaker
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/postfix.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/postfix.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - postfix
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/postgres.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/postgres.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - postgres
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/pypiserver.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/pypiserver.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - pypiserver
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/registry.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/registry.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - registry
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/roundcube.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/roundcube.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - roundcube
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/rspamd.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/rspamd.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - rspamd
 | 
				
			||||||
							
								
								
									
										27
									
								
								playbooks/ghp/shared-infra.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								playbooks/ghp/shared-infra.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  tasks:
 | 
				
			||||||
 | 
					  - name: Deploy PostgreSQL
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: postgres
 | 
				
			||||||
 | 
					    when: postgres_enabled | default(true)
 | 
				
			||||||
 | 
					    tags: postgres
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Deploy OpenLDAP
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: openldap
 | 
				
			||||||
 | 
					    when: openldap_enabled | default(true)
 | 
				
			||||||
 | 
					    tags: openldap
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Deploy Docker registry
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: registry
 | 
				
			||||||
 | 
					    when: registry_enabled | default(true)
 | 
				
			||||||
 | 
					    tags: registry
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Deploy ChartMuseum
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: chartmuseum
 | 
				
			||||||
 | 
					    when: chartmuseum_enabled | default(true)
 | 
				
			||||||
 | 
					    tags: chartmuseum
 | 
				
			||||||
							
								
								
									
										12
									
								
								playbooks/ghp/site.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								playbooks/ghp/site.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- name: Deploy Core Infrastructure
 | 
				
			||||||
 | 
					  import_playbook: core-infra.yaml
 | 
				
			||||||
 | 
					  tags: core-infra
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Deploy Shared Infrastructure
 | 
				
			||||||
 | 
					  import_playbook: shared-infra.yaml
 | 
				
			||||||
 | 
					  tags: shared-infra
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Deploy End User Applications
 | 
				
			||||||
 | 
					  import_playbook: user-apps.yaml
 | 
				
			||||||
 | 
					  tags: user-apps
 | 
				
			||||||
							
								
								
									
										63
									
								
								playbooks/ghp/user-apps.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								playbooks/ghp/user-apps.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  tasks:
 | 
				
			||||||
 | 
					  - name: Deploy Mail
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: mail
 | 
				
			||||||
 | 
					    when: mail_enabled | default(true)
 | 
				
			||||||
 | 
					    tags: mail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Deploy Nextcloud
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: nextcloud
 | 
				
			||||||
 | 
					    when: nextcloud_enabled | default(true)
 | 
				
			||||||
 | 
					    tags: nextcloud
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Deploy Bitwarden
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: bitwarden
 | 
				
			||||||
 | 
					    when: bitwarden_enabled | default(true)
 | 
				
			||||||
 | 
					    tags: bitwarden
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Deploy Gitea
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: gitea
 | 
				
			||||||
 | 
					    when: gitea_enabled | default(true)
 | 
				
			||||||
 | 
					    tags: gitea
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Deploy Drone
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: drone
 | 
				
			||||||
 | 
					    when: drone_enabled | default(true)
 | 
				
			||||||
 | 
					    tags: drone
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Deploy WikiJS
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: wikijs
 | 
				
			||||||
 | 
					    when: wikijs_enabled | default(true)
 | 
				
			||||||
 | 
					    tags: wikijs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Deploy Playmaker
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: playmaker
 | 
				
			||||||
 | 
					    when: playmaker_enabled | default(false)
 | 
				
			||||||
 | 
					    tags: playmaker
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Deploy Pypiserver
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: pypiserver
 | 
				
			||||||
 | 
					    when: pypiserver_enabled | default(false)
 | 
				
			||||||
 | 
					    tags: pypiserver
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Deploy PeerTube
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: peertube
 | 
				
			||||||
 | 
					    when: peertube_enabled | default(false)
 | 
				
			||||||
 | 
					    tags: peertube
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Deploy Adguard Home
 | 
				
			||||||
 | 
					    import_role: 
 | 
				
			||||||
 | 
					      name: adguard-home
 | 
				
			||||||
 | 
					    when: adguard_enabled | default(false)
 | 
				
			||||||
 | 
					    tags: adguard
 | 
				
			||||||
							
								
								
									
										17
									
								
								playbooks/ghp/vps.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								playbooks/ghp/vps.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: web_proxy
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - nginx
 | 
				
			||||||
 | 
					  tags: web-proxy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- hosts: mail_proxy
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - haproxy
 | 
				
			||||||
 | 
					  tags: mail-proxy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- hosts: ddclient
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - docker
 | 
				
			||||||
 | 
					    - role: ddclient
 | 
				
			||||||
 | 
					      dockerize: true
 | 
				
			||||||
 | 
					  tags: ddclient
 | 
				
			||||||
							
								
								
									
										5
									
								
								playbooks/ghp/wikijs.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								playbooks/ghp/wikijs.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: k8s
 | 
				
			||||||
 | 
					  connection: local
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - wikijs
 | 
				
			||||||
							
								
								
									
										37
									
								
								requirements.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								requirements.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					ansible==2.10.3
 | 
				
			||||||
 | 
					ansible-base==2.10.3
 | 
				
			||||||
 | 
					attrs==20.3.0
 | 
				
			||||||
 | 
					cachetools==4.1.1
 | 
				
			||||||
 | 
					certifi==2020.6.20
 | 
				
			||||||
 | 
					cffi==1.14.3
 | 
				
			||||||
 | 
					chardet==3.0.4
 | 
				
			||||||
 | 
					cryptography==3.2.1
 | 
				
			||||||
 | 
					docker==4.3.1
 | 
				
			||||||
 | 
					google-auth==1.23.0
 | 
				
			||||||
 | 
					idna==2.10
 | 
				
			||||||
 | 
					importlib-metadata==2.0.0
 | 
				
			||||||
 | 
					Jinja2==2.11.2
 | 
				
			||||||
 | 
					jsonschema==3.2.0
 | 
				
			||||||
 | 
					kubernetes==11.0.0
 | 
				
			||||||
 | 
					kubernetes-validate==1.18.0
 | 
				
			||||||
 | 
					MarkupSafe==1.1.1
 | 
				
			||||||
 | 
					oauthlib==3.1.0
 | 
				
			||||||
 | 
					openshift==0.11.2
 | 
				
			||||||
 | 
					packaging==20.4
 | 
				
			||||||
 | 
					pyasn1==0.4.8
 | 
				
			||||||
 | 
					pyasn1-modules==0.2.8
 | 
				
			||||||
 | 
					pycparser==2.20
 | 
				
			||||||
 | 
					pyparsing==2.4.7
 | 
				
			||||||
 | 
					pyrsistent==0.17.3
 | 
				
			||||||
 | 
					python-dateutil==2.8.1
 | 
				
			||||||
 | 
					python-string-utils==1.0.0
 | 
				
			||||||
 | 
					PyYAML==5.3.1
 | 
				
			||||||
 | 
					requests==2.24.0
 | 
				
			||||||
 | 
					requests-oauthlib==1.3.0
 | 
				
			||||||
 | 
					rsa==4.6
 | 
				
			||||||
 | 
					ruamel.yaml==0.16.12
 | 
				
			||||||
 | 
					ruamel.yaml.clib==0.2.2
 | 
				
			||||||
 | 
					six==1.15.0
 | 
				
			||||||
 | 
					urllib3==1.25.11
 | 
				
			||||||
 | 
					websocket-client==0.57.0
 | 
				
			||||||
 | 
					zipp==3.4.0
 | 
				
			||||||
							
								
								
									
										276
									
								
								roles/adguard-home/defaults/main.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										276
									
								
								roles/adguard-home/defaults/main.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,276 @@
 | 
				
			|||||||
 | 
					adguard_enabled: false
 | 
				
			||||||
 | 
					adguard_publish: false
 | 
				
			||||||
 | 
					adguard_default_values:
 | 
				
			||||||
 | 
					  # upgrade strategy type (e.g. Recreate or RollingUpdate)
 | 
				
			||||||
 | 
					  strategyType: RollingUpdate
 | 
				
			||||||
 | 
					  configAsCode:
 | 
				
			||||||
 | 
					    enabled: true
 | 
				
			||||||
 | 
					    resources: {}
 | 
				
			||||||
 | 
					    # requests:
 | 
				
			||||||
 | 
					    #   memory: 128Mi
 | 
				
			||||||
 | 
					    #   cpu: 100m
 | 
				
			||||||
 | 
					    image:
 | 
				
			||||||
 | 
					      repository: busybox
 | 
				
			||||||
 | 
					      tag: latest
 | 
				
			||||||
 | 
					      pullPolicy: Always
 | 
				
			||||||
 | 
					    config:
 | 
				
			||||||
 | 
					      bind_host: 0.0.0.0
 | 
				
			||||||
 | 
					      bind_port: 3000
 | 
				
			||||||
 | 
					      users:
 | 
				
			||||||
 | 
					      - name: admin
 | 
				
			||||||
 | 
					        password: "{{ adguard_admin_htpasswd_hash }}"
 | 
				
			||||||
 | 
					      http_proxy: ""
 | 
				
			||||||
 | 
					      language: "en"
 | 
				
			||||||
 | 
					      rlimit_nofile: 0
 | 
				
			||||||
 | 
					      debug_pprof: false
 | 
				
			||||||
 | 
					      web_session_ttl: 720
 | 
				
			||||||
 | 
					      dns:
 | 
				
			||||||
 | 
					        bind_host: 0.0.0.0
 | 
				
			||||||
 | 
					        port: 53
 | 
				
			||||||
 | 
					        statistics_interval: 1
 | 
				
			||||||
 | 
					        querylog_enabled: true
 | 
				
			||||||
 | 
					        querylog_interval: 90
 | 
				
			||||||
 | 
					        querylog_size_memory: 1000
 | 
				
			||||||
 | 
					        anonymize_client_ip: false
 | 
				
			||||||
 | 
					        protection_enabled: true
 | 
				
			||||||
 | 
					        blocking_mode: default
 | 
				
			||||||
 | 
					        blocking_ipv4: ""
 | 
				
			||||||
 | 
					        blocking_ipv6: ""
 | 
				
			||||||
 | 
					        blocked_response_ttl: 10
 | 
				
			||||||
 | 
					        parental_block_host: family-block.dns.adguard.com
 | 
				
			||||||
 | 
					        safebrowsing_block_host: standard-block.dns.adguard.com
 | 
				
			||||||
 | 
					        ratelimit: 0
 | 
				
			||||||
 | 
					        ratelimit_whitelist: []
 | 
				
			||||||
 | 
					        refuse_any: true
 | 
				
			||||||
 | 
					        upstream_dns:
 | 
				
			||||||
 | 
					        - https://dns10.quad9.net/dns-query
 | 
				
			||||||
 | 
					        bootstrap_dns:
 | 
				
			||||||
 | 
					        - 9.9.9.10
 | 
				
			||||||
 | 
					        - 149.112.112.10
 | 
				
			||||||
 | 
					        - 2620:fe::10
 | 
				
			||||||
 | 
					        - 2620:fe::fe:10
 | 
				
			||||||
 | 
					        all_servers: false
 | 
				
			||||||
 | 
					        fastest_addr: false
 | 
				
			||||||
 | 
					        allowed_clients: []
 | 
				
			||||||
 | 
					        # - 10.0.0.1
 | 
				
			||||||
 | 
					        # - 10.0.1.1/24
 | 
				
			||||||
 | 
					        disallowed_clients: []
 | 
				
			||||||
 | 
					        # - 10.0.1.1
 | 
				
			||||||
 | 
					        # - 10.0.11.1/24
 | 
				
			||||||
 | 
					        blocked_hosts: []
 | 
				
			||||||
 | 
					        # - example.org
 | 
				
			||||||
 | 
					        # - '*.example.org'
 | 
				
			||||||
 | 
					        # - '||example.org^'
 | 
				
			||||||
 | 
					        cache_size: 4194304
 | 
				
			||||||
 | 
					        cache_ttl_min: 0
 | 
				
			||||||
 | 
					        cache_ttl_max: 0
 | 
				
			||||||
 | 
					        bogus_nxdomain: []
 | 
				
			||||||
 | 
					        aaaa_disabled: false
 | 
				
			||||||
 | 
					        enable_dnssec: false
 | 
				
			||||||
 | 
					        edns_client_subnet: false
 | 
				
			||||||
 | 
					        filtering_enabled: true
 | 
				
			||||||
 | 
					        filters_update_interval: 8
 | 
				
			||||||
 | 
					        parental_enabled: false
 | 
				
			||||||
 | 
					        safesearch_enabled: false
 | 
				
			||||||
 | 
					        safebrowsing_enabled: false
 | 
				
			||||||
 | 
					        safebrowsing_cache_size: 1048576
 | 
				
			||||||
 | 
					        safesearch_cache_size: 1048576
 | 
				
			||||||
 | 
					        parental_cache_size: 1048576
 | 
				
			||||||
 | 
					        cache_time: 30
 | 
				
			||||||
 | 
					        rewrites: []
 | 
				
			||||||
 | 
					        # - domain: example.org
 | 
				
			||||||
 | 
					        #   answer: 127.0.0.1
 | 
				
			||||||
 | 
					        # - domain: '*.example.org'
 | 
				
			||||||
 | 
					        #   answer: 127.0.0.1
 | 
				
			||||||
 | 
					        blocked_services: 
 | 
				
			||||||
 | 
					        - facebook
 | 
				
			||||||
 | 
					        - origin
 | 
				
			||||||
 | 
					        - twitter
 | 
				
			||||||
 | 
					        - snapchat
 | 
				
			||||||
 | 
					        - skype
 | 
				
			||||||
 | 
					        - whatsapp
 | 
				
			||||||
 | 
					        - instagram
 | 
				
			||||||
 | 
					        - youtube
 | 
				
			||||||
 | 
					        - netflix
 | 
				
			||||||
 | 
					        - twitch
 | 
				
			||||||
 | 
					        - discord
 | 
				
			||||||
 | 
					        - amazon
 | 
				
			||||||
 | 
					        - ebay
 | 
				
			||||||
 | 
					        - cloudflare
 | 
				
			||||||
 | 
					        - steam
 | 
				
			||||||
 | 
					        - epic_games
 | 
				
			||||||
 | 
					        - reddit
 | 
				
			||||||
 | 
					        - ok
 | 
				
			||||||
 | 
					        - vk
 | 
				
			||||||
 | 
					        - mail_ru
 | 
				
			||||||
 | 
					        - tiktok
 | 
				
			||||||
 | 
					      tls:
 | 
				
			||||||
 | 
					        enabled: true
 | 
				
			||||||
 | 
					        server_name: "{{ adguard_dns_name | default('dns.' + domain) }}"
 | 
				
			||||||
 | 
					        force_https: false
 | 
				
			||||||
 | 
					        port_https: 443
 | 
				
			||||||
 | 
					        port_dns_over_tls: 853
 | 
				
			||||||
 | 
					        allow_unencrypted_doh: false
 | 
				
			||||||
 | 
					        strict_sni_check: false
 | 
				
			||||||
 | 
					        certificate_chain: ""
 | 
				
			||||||
 | 
					        private_key: ""
 | 
				
			||||||
 | 
					        certificate_path: "/certs/tls.crt"
 | 
				
			||||||
 | 
					        private_key_path: "/certs/tls.key"
 | 
				
			||||||
 | 
					      filters:
 | 
				
			||||||
 | 
					      - enabled: true
 | 
				
			||||||
 | 
					        url: https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt
 | 
				
			||||||
 | 
					        name: AdGuard DNS filter
 | 
				
			||||||
 | 
					        id: 1
 | 
				
			||||||
 | 
					      - enabled: false
 | 
				
			||||||
 | 
					        url: https://adaway.org/hosts.txt
 | 
				
			||||||
 | 
					        name: AdAway
 | 
				
			||||||
 | 
					        id: 2
 | 
				
			||||||
 | 
					      - enabled: false
 | 
				
			||||||
 | 
					        url: https://www.malwaredomainlist.com/hostslist/hosts.txt
 | 
				
			||||||
 | 
					        name: MalwareDomainList.com Hosts List
 | 
				
			||||||
 | 
					        id: 4
 | 
				
			||||||
 | 
					      whitelist_filters: []
 | 
				
			||||||
 | 
					      # - enabled: true
 | 
				
			||||||
 | 
					      #   url: https://easylist-downloads.adblockplus.org/exceptionrules.txt
 | 
				
			||||||
 | 
					      #   name: Allow nonintrusive advertising
 | 
				
			||||||
 | 
					      #   id: 1595760241
 | 
				
			||||||
 | 
					      user_rules: []
 | 
				
			||||||
 | 
					      # - '||example.org^'
 | 
				
			||||||
 | 
					      # - '@@||example.org^'
 | 
				
			||||||
 | 
					      # - 127.0.0.1 example.org
 | 
				
			||||||
 | 
					      # - '! Here goes a comment'
 | 
				
			||||||
 | 
					      # - '# Also a comment'
 | 
				
			||||||
 | 
					      dhcp:
 | 
				
			||||||
 | 
					        enabled: false
 | 
				
			||||||
 | 
					        interface_name: ""
 | 
				
			||||||
 | 
					        gateway_ip: ""
 | 
				
			||||||
 | 
					        subnet_mask: ""
 | 
				
			||||||
 | 
					        range_start: ""
 | 
				
			||||||
 | 
					        range_end: ""
 | 
				
			||||||
 | 
					        lease_duration: 86400
 | 
				
			||||||
 | 
					        icmp_timeout_msec: 1000
 | 
				
			||||||
 | 
					      clients: []
 | 
				
			||||||
 | 
					      # - name: myuser
 | 
				
			||||||
 | 
					      #   tags:
 | 
				
			||||||
 | 
					      #   - user_admin
 | 
				
			||||||
 | 
					      #   ids:
 | 
				
			||||||
 | 
					      #   - 192.168.91.1
 | 
				
			||||||
 | 
					      #   use_global_settings: true
 | 
				
			||||||
 | 
					      #   filtering_enabled: false
 | 
				
			||||||
 | 
					      #   parental_enabled: false
 | 
				
			||||||
 | 
					      #   safesearch_enabled: false
 | 
				
			||||||
 | 
					      #   safebrowsing_enabled: false
 | 
				
			||||||
 | 
					      #   use_global_blocked_services: true
 | 
				
			||||||
 | 
					      #   blocked_services: []
 | 
				
			||||||
 | 
					      #   upstreams: []
 | 
				
			||||||
 | 
					      log_file: ""
 | 
				
			||||||
 | 
					      verbose: false
 | 
				
			||||||
 | 
					      schema_version: 6
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  tlsSecretName: "{{ adguard_dns_name | default('dns.' + domain) }}-secret"
 | 
				
			||||||
 | 
					  timezone: "UTC"
 | 
				
			||||||
 | 
					  ingress:
 | 
				
			||||||
 | 
					    enabled: true
 | 
				
			||||||
 | 
					    annotations:
 | 
				
			||||||
 | 
					      cert-manager.io/acme-challenge-type: dns01
 | 
				
			||||||
 | 
					      cert-manager.io/acme-dns01-provider: rfc2136
 | 
				
			||||||
 | 
					      cert-manager.io/cluster-issuer: letsencrypt-prod
 | 
				
			||||||
 | 
					      kubernetes.io/ingress.class:  "{{ external_ingress_class if adguard_publish else internal_ingress_class }}"
 | 
				
			||||||
 | 
					      kubernetes.io/tls-acme: "true"
 | 
				
			||||||
 | 
					    path: /
 | 
				
			||||||
 | 
					    hosts:
 | 
				
			||||||
 | 
					      - adguard.{{ domain }}
 | 
				
			||||||
 | 
					    tls:
 | 
				
			||||||
 | 
					      - secretName: adguard.{{ domain }}-tls
 | 
				
			||||||
 | 
					        hosts:
 | 
				
			||||||
 | 
					          - adguard.{{ domain }}
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  service:
 | 
				
			||||||
 | 
					    type: ClusterIP
 | 
				
			||||||
 | 
					    # externalTrafficPolicy: Local
 | 
				
			||||||
 | 
					    # externalIPs: []
 | 
				
			||||||
 | 
					    # loadBalancerIP: ""
 | 
				
			||||||
 | 
					      # a fixed LoadBalancer IP
 | 
				
			||||||
 | 
					    # loadBalancerSourceRanges: []
 | 
				
			||||||
 | 
					    annotations:
 | 
				
			||||||
 | 
					      # metallb.universe.tf/address-pool: network-services
 | 
				
			||||||
 | 
					      # metallb.universe.tf/allow-shared-ip: adguard-home-svc
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  serviceTCP:
 | 
				
			||||||
 | 
					    enabled: true
 | 
				
			||||||
 | 
					    type: LoadBalancer
 | 
				
			||||||
 | 
					    # externalTrafficPolicy: Local
 | 
				
			||||||
 | 
					    # externalIPs: []
 | 
				
			||||||
 | 
					    loadBalancerIP: "{{ adguard_loadbalancer_ip }}"
 | 
				
			||||||
 | 
					      # a fixed LoadBalancer IP
 | 
				
			||||||
 | 
					    # loadBalancerSourceRanges: []
 | 
				
			||||||
 | 
					    annotations:
 | 
				
			||||||
 | 
					      # metallb.universe.tf/address-pool: network-services
 | 
				
			||||||
 | 
					      metallb.universe.tf/allow-shared-ip: adguard-home-svc
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  serviceUDP:
 | 
				
			||||||
 | 
					    enabled: true
 | 
				
			||||||
 | 
					    type: LoadBalancer
 | 
				
			||||||
 | 
					    # externalTrafficPolicy: Local
 | 
				
			||||||
 | 
					    # externalIPs: []
 | 
				
			||||||
 | 
					    loadBalancerIP: "{{ adguard_loadbalancer_ip }}"
 | 
				
			||||||
 | 
					      # a fixed LoadBalancer IP
 | 
				
			||||||
 | 
					    # loadBalancerSourceRanges: []
 | 
				
			||||||
 | 
					    annotations:
 | 
				
			||||||
 | 
					      # metallb.universe.tf/address-pool: network-services
 | 
				
			||||||
 | 
					      metallb.universe.tf/allow-shared-ip: adguard-home-svc
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  serviceDNSOverTLS:
 | 
				
			||||||
 | 
					    enabled: true
 | 
				
			||||||
 | 
					    ## Enable if you use AdGuard as a DNS over TLS/HTTPS server
 | 
				
			||||||
 | 
					    type: LoadBalancer
 | 
				
			||||||
 | 
					    # externalTrafficPolicy: Local
 | 
				
			||||||
 | 
					    # externalIPs: []
 | 
				
			||||||
 | 
					    loadBalancerIP: "{{ adguard_loadbalancer_ip }}"
 | 
				
			||||||
 | 
					      # a fixed LoadBalancer IP
 | 
				
			||||||
 | 
					    # loadBalancerSourceRanges: []
 | 
				
			||||||
 | 
					    annotations:
 | 
				
			||||||
 | 
					      # metallb.universe.tf/address-pool: network-services
 | 
				
			||||||
 | 
					      metallb.universe.tf/allow-shared-ip: adguard-home-svc
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  serviceDNSOverHTTPS:
 | 
				
			||||||
 | 
					    enabled: true
 | 
				
			||||||
 | 
					    ## Enable if you use AdGuard as a DNS over TLS/HTTPS server
 | 
				
			||||||
 | 
					    type: LoadBalancer
 | 
				
			||||||
 | 
					    # externalTrafficPolicy: Local
 | 
				
			||||||
 | 
					    # externalIPs: []
 | 
				
			||||||
 | 
					    loadBalancerIP: "{{ adguard_loadbalancer_ip }}"
 | 
				
			||||||
 | 
					      # a fixed LoadBalancer IP
 | 
				
			||||||
 | 
					    # loadBalancerSourceRanges: []
 | 
				
			||||||
 | 
					    annotations:
 | 
				
			||||||
 | 
					      # metallb.universe.tf/address-pool: network-services
 | 
				
			||||||
 | 
					      metallb.universe.tf/allow-shared-ip: adguard-home-svc
 | 
				
			||||||
 | 
					      external-dns.alpha.kubernetes.io/hostname: "{{ adguard_dns_name | default('dns.' + domain) }}"
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  serviceDHCP:
 | 
				
			||||||
 | 
					    enabled: false
 | 
				
			||||||
 | 
					    ## Enable if you use AdGuard as a DHCP Server
 | 
				
			||||||
 | 
					    type: NodePort
 | 
				
			||||||
 | 
					    # externalTrafficPolicy: Local
 | 
				
			||||||
 | 
					    # externalIPs: []
 | 
				
			||||||
 | 
					    loadBalancerIP: ""
 | 
				
			||||||
 | 
					      # a fixed LoadBalancer IP
 | 
				
			||||||
 | 
					    annotations: {}
 | 
				
			||||||
 | 
					      # metallb.universe.tf/address-pool: network-services
 | 
				
			||||||
 | 
					      # metallb.universe.tf/allow-shared-ip: adguard-home-svc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  persistence:
 | 
				
			||||||
 | 
					    config:
 | 
				
			||||||
 | 
					      enabled: true
 | 
				
			||||||
 | 
					      accessMode: "{{ adguard_config_storage_mode | default('ReadWriteMany') }}"
 | 
				
			||||||
 | 
					      size: "{{ adguard_config_size | default('20Mi') }}"
 | 
				
			||||||
 | 
					      storageClass: "{{ adguard_config_storage | default('nfs-ssd') }}"
 | 
				
			||||||
 | 
					      ## Do not delete the pvc upon helm uninstall
 | 
				
			||||||
 | 
					      skipuninstall: false
 | 
				
			||||||
 | 
					    work:
 | 
				
			||||||
 | 
					      enabled: true
 | 
				
			||||||
 | 
					      accessMode: "{{ adguard_work_storage_mode | default('ReadWriteMany') }}"
 | 
				
			||||||
 | 
					      size: "{{ adguard_work_size | default('10Gi') }}"
 | 
				
			||||||
 | 
					      storageClass: "{{ adguard_work_storage | default('nfs-ssd') }}"
 | 
				
			||||||
 | 
					      ## Do not delete the pvc upon helm uninstall
 | 
				
			||||||
 | 
					      skipuninstall: false
 | 
				
			||||||
							
								
								
									
										32
									
								
								roles/adguard-home/tasks/main.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								roles/adguard-home/tasks/main.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					- name: Request cert for Adguard Home
 | 
				
			||||||
 | 
					  k8s:
 | 
				
			||||||
 | 
					    state: present
 | 
				
			||||||
 | 
					    definition:
 | 
				
			||||||
 | 
					      apiVersion: cert-manager.io/v1
 | 
				
			||||||
 | 
					      kind: Certificate
 | 
				
			||||||
 | 
					      metadata:
 | 
				
			||||||
 | 
					        name: "{{ adguard_dns_name | default('dns.' + domain) }}-crt"
 | 
				
			||||||
 | 
					        namespace: "{{ adguard_namespace | default(namespace) }}"
 | 
				
			||||||
 | 
					      spec:
 | 
				
			||||||
 | 
					        secretName: "{{ adguard_dns_name | default('dns.' + domain) }}-secret"
 | 
				
			||||||
 | 
					        dnsNames:
 | 
				
			||||||
 | 
					        - "{{ adguard_dns_name | default('dns.' + domain) }}"
 | 
				
			||||||
 | 
					        issuerRef:
 | 
				
			||||||
 | 
					          name: letsencrypt-prod
 | 
				
			||||||
 | 
					          # We can reference ClusterIssuers by changing the kind here.
 | 
				
			||||||
 | 
					          # The default value is Issuer (i.e. a locally namespaced Issuer)
 | 
				
			||||||
 | 
					          kind: ClusterIssuer
 | 
				
			||||||
 | 
					          group: cert-manager.io
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- set_fact:
 | 
				
			||||||
 | 
					    adguard_combined_values: "{{ adguard_default_values | combine(adguard_values, recursive=true) }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Deploy Adguard Home
 | 
				
			||||||
 | 
					  community.kubernetes.helm:
 | 
				
			||||||
 | 
					    create_namespace: true
 | 
				
			||||||
 | 
					    release_namespace: "{{ adguard_namespace | default(namespace) }}"
 | 
				
			||||||
 | 
					    release_name: "{{ adguard_name | default('adguard') }}"
 | 
				
			||||||
 | 
					    chart_ref: "{{ adguard_chart | default('ghp/adguard-home') }}"
 | 
				
			||||||
 | 
					    chart_version: "{{ adguard_version | default(omit) }}"
 | 
				
			||||||
 | 
					    release_values: "{{ adguard_combined_values | from_yaml }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										40
									
								
								roles/bitwarden/defaults/main.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								roles/bitwarden/defaults/main.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
				
			|||||||
 | 
					bitwarden_enabled: true
 | 
				
			||||||
 | 
					bitwarden_publish: false
 | 
				
			||||||
 | 
					bitwarden_use_external_db: true
 | 
				
			||||||
 | 
					bitwarden_default_values:
 | 
				
			||||||
 | 
					  env:
 | 
				
			||||||
 | 
					    SIGNUPS_ALLOWED: true
 | 
				
			||||||
 | 
					    INVITATIONS_ALLOWED: true
 | 
				
			||||||
 | 
					    DATABASE_URL: "postgresql://{{ bitwarden_db_username }}:{{ bitwarden_db_password }}@{{ postgres_db_team | default(namespace) }}-postgres.{{ postgres_db_namespace | default(namespace) }}.svc.cluster.local:5432/bitwarden?sslmode=require"
 | 
				
			||||||
 | 
					    DOMAIN: "https://bitwarden.{{ domain }}"
 | 
				
			||||||
 | 
					    SMTP_FROM: "bitwarden@{{ domain }}"
 | 
				
			||||||
 | 
					    SMTP_HOST: "mail.{{ domain }}"
 | 
				
			||||||
 | 
					    SMTP_PASSWORD: "{{ bitwarden_ldap_pass | default(bitwarden_ldap_password) }}"
 | 
				
			||||||
 | 
					    SMTP_SSL: "true"
 | 
				
			||||||
 | 
					    SMTP_EXPLICIT_TLS: "true"
 | 
				
			||||||
 | 
					    SMTP_PORT: "465"
 | 
				
			||||||
 | 
					    SMTP_USERNAME: "bitwarden@{{ domain }}"
 | 
				
			||||||
 | 
					    SMTP_TIMEOUT: "120"
 | 
				
			||||||
 | 
					    LOG_LEVEL: "debug"
 | 
				
			||||||
 | 
					    EXTENDED_LOGGING: "true"
 | 
				
			||||||
 | 
					  ingress:
 | 
				
			||||||
 | 
					    enabled: true
 | 
				
			||||||
 | 
					    annotations:
 | 
				
			||||||
 | 
					      kubernetes.io/ingress.class: "{{ external_ingress_class if bitwarden_publish else internal_ingress_class }}"
 | 
				
			||||||
 | 
					      cert-manager.io/cluster-issuer: "letsencrypt-prod"
 | 
				
			||||||
 | 
					      cert-manager.io/acme-dns01-provider: "rfc2136"
 | 
				
			||||||
 | 
					      cert-manager.io/acme-challenge-type: "dns01"
 | 
				
			||||||
 | 
					      kubernetes.io/tls-acme: "true"
 | 
				
			||||||
 | 
					    path: /
 | 
				
			||||||
 | 
					    hosts:
 | 
				
			||||||
 | 
					      - "bitwarden.{{ domain }}"
 | 
				
			||||||
 | 
					    tls:
 | 
				
			||||||
 | 
					      - secretName: "bitwarden.{{ domain }}-tls"
 | 
				
			||||||
 | 
					        hosts:
 | 
				
			||||||
 | 
					          - "bitwarden.{{ domain }}"
 | 
				
			||||||
 | 
					  persistence:
 | 
				
			||||||
 | 
					    enabled: true
 | 
				
			||||||
 | 
					    accessMode: "{{ bitwarden_storage_mode | default('ReadWriteMany') }}"
 | 
				
			||||||
 | 
					    size: "{{ bitwarden_size | default('8Gi') }}"
 | 
				
			||||||
 | 
					    storageClass: "{{ bitwarden_storage | default('nfs-ssd') }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										19
									
								
								roles/bitwarden/tasks/main.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								roles/bitwarden/tasks/main.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					- name: Import secret.yaml to obtain secrets
 | 
				
			||||||
 | 
					  include_tasks: secrets.yaml
 | 
				
			||||||
 | 
					  when: 
 | 
				
			||||||
 | 
					    - bitwarden_use_external_db
 | 
				
			||||||
 | 
					    - postgres_enable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- set_fact:
 | 
				
			||||||
 | 
					    bitwarden_combined_values: "{{ bitwarden_default_values | combine(bitwarden_values, recursive=true) }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Deploy Bitwarden
 | 
				
			||||||
 | 
					  community.kubernetes.helm:
 | 
				
			||||||
 | 
					    create_namespace: true
 | 
				
			||||||
 | 
					    release_namespace: "{{ bitwarden_namespace | default(namespace) }}"
 | 
				
			||||||
 | 
					    release_name: "{{ bitwarden_name | default('bitwarden') }}"
 | 
				
			||||||
 | 
					    chart_ref: "{{ bitwarden_chart | default('ghp/bitwarden') }}"
 | 
				
			||||||
 | 
					    chart_version: "{{ bitwarden_version | default(omit) }}"
 | 
				
			||||||
 | 
					    release_values: "{{ bitwarden_combined_values | from_yaml }}"
 | 
				
			||||||
 | 
					    wait: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										25
									
								
								roles/bitwarden/tasks/secrets.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								roles/bitwarden/tasks/secrets.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					- block:
 | 
				
			||||||
 | 
					  - name: Set DB namespace for secret lookup
 | 
				
			||||||
 | 
					    set_fact:
 | 
				
			||||||
 | 
					      db_namespace: "{{ bitwarden_db_namespace | default(postgres_db_namespace) | default(postgres_namespace) | default(postgres_operator_namespace) | default(namespace) }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Set DB secret name for lookup
 | 
				
			||||||
 | 
					    set_fact:
 | 
				
			||||||
 | 
					      db_secret_name: "bitwarden.{{ postgres_db_team | default(namespace) }}-postgres.credentials.postgresql.acid.zalan.do"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Lookup Bitwarden DB secret
 | 
				
			||||||
 | 
					    set_fact:
 | 
				
			||||||
 | 
					      bitwarden_db_secret: "{{ lookup('k8s', kind='Secret', namespace=db_namespace, resource_name=db_secret_name) }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - debug:
 | 
				
			||||||
 | 
					      msg: "{{ bitwarden_db_secret }}"
 | 
				
			||||||
 | 
					      verbosity: 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Set Bitwarden DB username
 | 
				
			||||||
 | 
					    set_fact:
 | 
				
			||||||
 | 
					      bitwarden_db_username: "{{ bitwarden_db_secret.data.username | b64decode }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Set Bitwarden DB password
 | 
				
			||||||
 | 
					    set_fact:
 | 
				
			||||||
 | 
					      bitwarden_db_password: "{{ bitwarden_db_secret.data.password | b64decode }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										6
									
								
								roles/cert-manager/defaults/main.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								roles/cert-manager/defaults/main.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					cert_manager_version: v1.1.0
 | 
				
			||||||
 | 
					cert_manager_namespace: cert-manager
 | 
				
			||||||
 | 
					lets_encrypt_mailbox: "admin@{{ domain }}"
 | 
				
			||||||
 | 
					cert_manager_base64_tsig_key: "{{ k8s_tsig | b64encode }}"
 | 
				
			||||||
 | 
					cert_manager_default_values:
 | 
				
			||||||
 | 
					  installCRDs: true
 | 
				
			||||||
							
								
								
									
										88
									
								
								roles/cert-manager/tasks/main.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								roles/cert-manager/tasks/main.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,88 @@
 | 
				
			|||||||
 | 
					- set_fact:
 | 
				
			||||||
 | 
					    cert_manager_combined_values: "{{ cert_manager_default_values | combine(cert_manager_values, recursive=true) }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Deploy Cert-manager {{ cert_manager_version }}
 | 
				
			||||||
 | 
					  community.kubernetes.helm:
 | 
				
			||||||
 | 
					    create_namespace: true
 | 
				
			||||||
 | 
					    release_namespace: "{{ cert_manager_namespace | default('cert-manager') }}"
 | 
				
			||||||
 | 
					    release_name: "{{ cert_manager_name | default('cert-manager') }}"
 | 
				
			||||||
 | 
					    chart_ref: "{{ cert_manager_chart | default('jetstack/cert-manager') }}"
 | 
				
			||||||
 | 
					    chart_version: "{{ cert_manager_version }}"
 | 
				
			||||||
 | 
					    release_values: "{{ cert_manager_combined_values | from_yaml | default(omit) }}"
 | 
				
			||||||
 | 
					    wait: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Create secret for DNS RFC2136 (NSUPDATE)
 | 
				
			||||||
 | 
					  k8s:
 | 
				
			||||||
 | 
					    state: present
 | 
				
			||||||
 | 
					    definition:
 | 
				
			||||||
 | 
					      apiVersion: v1
 | 
				
			||||||
 | 
					      data:
 | 
				
			||||||
 | 
					        tsig-secret-key: "{{ cert_manager_base64_tsig_key }}"
 | 
				
			||||||
 | 
					      kind: Secret
 | 
				
			||||||
 | 
					      metadata:
 | 
				
			||||||
 | 
					        name: tsig-secret
 | 
				
			||||||
 | 
					        namespace: cert-manager
 | 
				
			||||||
 | 
					      type: Opaque
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Create Production ClusterIssuer for Let's Encrypt
 | 
				
			||||||
 | 
					  k8s:
 | 
				
			||||||
 | 
					    state: present
 | 
				
			||||||
 | 
					    definition:
 | 
				
			||||||
 | 
					      apiVersion: cert-manager.io/v1alpha2
 | 
				
			||||||
 | 
					      kind: ClusterIssuer
 | 
				
			||||||
 | 
					      metadata:
 | 
				
			||||||
 | 
					        name: letsencrypt-prod
 | 
				
			||||||
 | 
					      spec:
 | 
				
			||||||
 | 
					        acme:
 | 
				
			||||||
 | 
					          # The ACME server URL
 | 
				
			||||||
 | 
					          server: https://acme-v02.api.letsencrypt.org/directory
 | 
				
			||||||
 | 
					          # Email address used for ACME registration
 | 
				
			||||||
 | 
					          email: "{{ lets_encrypt_mailbox }}"
 | 
				
			||||||
 | 
					          # Name of a secret used to store the ACME account private key
 | 
				
			||||||
 | 
					          privateKeySecretRef:
 | 
				
			||||||
 | 
					            name: letsencrypt-prod
 | 
				
			||||||
 | 
					          # Enable the HTTP-01 challenge provider
 | 
				
			||||||
 | 
					          solvers:
 | 
				
			||||||
 | 
					          #- http01:
 | 
				
			||||||
 | 
					          #    ingress:
 | 
				
			||||||
 | 
					          #      class: nginx
 | 
				
			||||||
 | 
					          - dns01:
 | 
				
			||||||
 | 
					              rfc2136:
 | 
				
			||||||
 | 
					                nameserver: "{{ external_dns_ip | default(dns_ip) }}:53"
 | 
				
			||||||
 | 
					                tsigAlgorithm: HMACSHA512
 | 
				
			||||||
 | 
					                tsigKeyName: k8s
 | 
				
			||||||
 | 
					                tsigSecretSecretRef:
 | 
				
			||||||
 | 
					                  key: tsig-secret-key
 | 
				
			||||||
 | 
					                  name: tsig-secret
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Create Staging ClusterIssuer for Let's Encrypt
 | 
				
			||||||
 | 
					  k8s:
 | 
				
			||||||
 | 
					    state: present
 | 
				
			||||||
 | 
					    definition:
 | 
				
			||||||
 | 
					      apiVersion: cert-manager.io/v1alpha2
 | 
				
			||||||
 | 
					      kind: ClusterIssuer
 | 
				
			||||||
 | 
					      metadata:
 | 
				
			||||||
 | 
					        name: letsencrypt-staging
 | 
				
			||||||
 | 
					      spec:
 | 
				
			||||||
 | 
					        acme:
 | 
				
			||||||
 | 
					          # The ACME server URL
 | 
				
			||||||
 | 
					          server: https://acme-staging-v02.api.letsencrypt.org/directory
 | 
				
			||||||
 | 
					          # Email address used for ACME registration
 | 
				
			||||||
 | 
					          email: "{{ lets_encrypt_mailbox }}"
 | 
				
			||||||
 | 
					          # Name of a secret used to store the ACME account private key
 | 
				
			||||||
 | 
					          privateKeySecretRef:
 | 
				
			||||||
 | 
					            name: letsencrypt-staging
 | 
				
			||||||
 | 
					          # Enable the HTTP-01 challenge provider
 | 
				
			||||||
 | 
					          solvers:
 | 
				
			||||||
 | 
					          #- http01:
 | 
				
			||||||
 | 
					          #    ingress:
 | 
				
			||||||
 | 
					          #      class: nginx
 | 
				
			||||||
 | 
					          - dns01:
 | 
				
			||||||
 | 
					              rfc2136:
 | 
				
			||||||
 | 
					                nameserver: "{{ external_dns_ip | default(dns_ip) }}:53"
 | 
				
			||||||
 | 
					                tsigAlgorithm: HMACSHA512
 | 
				
			||||||
 | 
					                tsigKeyName: k8s
 | 
				
			||||||
 | 
					                tsigSecretSecretRef:
 | 
				
			||||||
 | 
					                  key: tsig-secret-key
 | 
				
			||||||
 | 
					                  name: tsig-secret
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
							
								
								
									
										86
									
								
								roles/chartmuseum/defaults/main.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								roles/chartmuseum/defaults/main.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,86 @@
 | 
				
			|||||||
 | 
					chartmuseum_enabled: true
 | 
				
			||||||
 | 
					chartmuseum_publish: false
 | 
				
			||||||
 | 
					chartmuseum_default_values:
 | 
				
			||||||
 | 
					  env:
 | 
				
			||||||
 | 
					    open:
 | 
				
			||||||
 | 
					      # storage backend, can be one of: local, alibaba, amazon, google, microsoft, oracle
 | 
				
			||||||
 | 
					      STORAGE: local
 | 
				
			||||||
 | 
					      # levels of nested repos for multitenancy. The default depth is 0 (singletenant server)
 | 
				
			||||||
 | 
					      DEPTH: 0
 | 
				
			||||||
 | 
					      # sets the base context path
 | 
				
			||||||
 | 
					      CONTEXT_PATH: /
 | 
				
			||||||
 | 
					      # show debug messages
 | 
				
			||||||
 | 
					      DEBUG: false
 | 
				
			||||||
 | 
					      # output structured logs as json
 | 
				
			||||||
 | 
					      LOG_JSON: true
 | 
				
			||||||
 | 
					      # disable use of index-cache.yaml
 | 
				
			||||||
 | 
					      DISABLE_STATEFILES: false
 | 
				
			||||||
 | 
					      # disable Prometheus metrics
 | 
				
			||||||
 | 
					      DISABLE_METRICS: true
 | 
				
			||||||
 | 
					      # disable all routes prefixed with /api
 | 
				
			||||||
 | 
					      DISABLE_API: false
 | 
				
			||||||
 | 
					      # allow chart versions to be re-uploaded
 | 
				
			||||||
 | 
					      ALLOW_OVERWRITE: true
 | 
				
			||||||
 | 
					      # allow anonymous GET operations when auth is used
 | 
				
			||||||
 | 
					      AUTH_ANONYMOUS_GET: true
 | 
				
			||||||
 | 
					    secret:
 | 
				
			||||||
 | 
					      # username for basic http authentication
 | 
				
			||||||
 | 
					      BASIC_AUTH_USER: "{{ chartmuseum_admin_login | default('admin') }}" 
 | 
				
			||||||
 | 
					      # password for basic http authentication
 | 
				
			||||||
 | 
					      BASIC_AUTH_PASS: "{{ chartmuseum_admin_pass | default(chartmuseum_admin_password) }}"
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  persistence:
 | 
				
			||||||
 | 
					    enabled: true
 | 
				
			||||||
 | 
					    accessMode: "{{ chartmuseum_storage_mode | default('ReadWriteMany') }}"
 | 
				
			||||||
 | 
					    size: "{{ chartmuseum_size | default('10Gi') }}"
 | 
				
			||||||
 | 
					    labels: {}
 | 
				
			||||||
 | 
					    path: /storage
 | 
				
			||||||
 | 
					    storageClass: "{{ chartmuseum_storage | default('nfs-hdd') }}"
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  ## Ingress for load balancer
 | 
				
			||||||
 | 
					  ingress:
 | 
				
			||||||
 | 
					    enabled: true
 | 
				
			||||||
 | 
					    annotations:
 | 
				
			||||||
 | 
					      cert-manager.io/cluster-issuer: "letsencrypt-prod"
 | 
				
			||||||
 | 
					      cert-manager.io/acme-dns01-provider: "rfc2136"
 | 
				
			||||||
 | 
					      cert-manager.io/acme-challenge-type: "dns01"
 | 
				
			||||||
 | 
					      kubernetes.io/ingress.class: "{{ external_ingress_class if chartmuseum_publish else internal_ingress_class }}"
 | 
				
			||||||
 | 
					      kubernetes.io/tls-acme: "true"
 | 
				
			||||||
 | 
					    hosts:
 | 
				
			||||||
 | 
					      - name: charts.{{ domain }}
 | 
				
			||||||
 | 
					        path: /
 | 
				
			||||||
 | 
					        tls: true
 | 
				
			||||||
 | 
					        tlsSecret: charts.{{ domain }}-tls
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					chartmuseum_readonly_ingress_definition: |
 | 
				
			||||||
 | 
					  apiVersion: extensions/v1beta1
 | 
				
			||||||
 | 
					  kind: Ingress
 | 
				
			||||||
 | 
					  metadata:
 | 
				
			||||||
 | 
					    annotations:
 | 
				
			||||||
 | 
					      cert-manager.io/acme-challenge-type: dns01
 | 
				
			||||||
 | 
					      cert-manager.io/acme-dns01-provider: rfc2136
 | 
				
			||||||
 | 
					      cert-manager.io/cluster-issuer: letsencrypt-prod
 | 
				
			||||||
 | 
					      kubernetes.io/ingress.class: "{{ external_ingress_class }}"
 | 
				
			||||||
 | 
					      nginx.ingress.kubernetes.io/proxy-body-size: "0"
 | 
				
			||||||
 | 
					      nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
 | 
				
			||||||
 | 
					      nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
 | 
				
			||||||
 | 
					      nginx.ingress.kubernetes.io/configuration-snippet: |-
 | 
				
			||||||
 | 
					        limit_except GET {
 | 
				
			||||||
 | 
					            deny all;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    name: chartmuseum-public
 | 
				
			||||||
 | 
					    namespace: "{{ chartmuseum_namespace | default(namespace) }}"
 | 
				
			||||||
 | 
					  spec:
 | 
				
			||||||
 | 
					    rules:
 | 
				
			||||||
 | 
					    - host: "{{ chartmuseum_readonly_ingress }}"
 | 
				
			||||||
 | 
					      http:
 | 
				
			||||||
 | 
					        paths:
 | 
				
			||||||
 | 
					        - backend:
 | 
				
			||||||
 | 
					            serviceName: chartmuseum-chartmuseum
 | 
				
			||||||
 | 
					            servicePort: 8080
 | 
				
			||||||
 | 
					          path: /
 | 
				
			||||||
 | 
					    tls:
 | 
				
			||||||
 | 
					    - hosts:
 | 
				
			||||||
 | 
					      - "{{ chartmuseum_readonly_ingress }}"
 | 
				
			||||||
 | 
					      secretName: "{{ chartmuseum_readonly_ingress }}-tls"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										20
									
								
								roles/chartmuseum/tasks/main.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								roles/chartmuseum/tasks/main.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					- set_fact:
 | 
				
			||||||
 | 
					    chartmuseum_combined_values: "{{ chartmuseum_default_values | combine(chartmuseum_values, recursive=true) }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Deploy ChartMuseum
 | 
				
			||||||
 | 
					  community.kubernetes.helm:
 | 
				
			||||||
 | 
					    create_namespace: true
 | 
				
			||||||
 | 
					    release_namespace: "{{ chartmuseum_namespace | default(namespace) }}"
 | 
				
			||||||
 | 
					    release_name: "{{ chartmuseum_name | default('chartmuseum') }}"
 | 
				
			||||||
 | 
					    chart_ref: "{{ chartmuseum_chart | default('ghp/chartmuseum') }}"
 | 
				
			||||||
 | 
					    chart_version: "{{ chartmuseum_version | default(omit) }}"
 | 
				
			||||||
 | 
					    release_values: "{{ chartmuseum_combined_values | from_yaml }}"
 | 
				
			||||||
 | 
					    wait: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Deploy readonly public ingress for ChartMuseum
 | 
				
			||||||
 | 
					  when: chartmuseum_readonly_ingress is defined
 | 
				
			||||||
 | 
					  k8s:
 | 
				
			||||||
 | 
					    state: present
 | 
				
			||||||
 | 
					    definition: 
 | 
				
			||||||
 | 
					      "{{ chartmuseum_readonly_ingress_definition }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										3
									
								
								roles/ddclient/defaults/main.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								roles/ddclient/defaults/main.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					dockerize: false
 | 
				
			||||||
 | 
					namespace: ddclient
 | 
				
			||||||
 | 
					ddclient_image_tag: v3.9.1-ls45
 | 
				
			||||||
							
								
								
									
										27
									
								
								roles/ddclient/handlers/main.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								roles/ddclient/handlers/main.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- name: start ddclient
 | 
				
			||||||
 | 
					  systemd:
 | 
				
			||||||
 | 
					    name: ddclient
 | 
				
			||||||
 | 
					    state: started
 | 
				
			||||||
 | 
					    enabled: yes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: restart ddclient
 | 
				
			||||||
 | 
					  systemd:
 | 
				
			||||||
 | 
					    name: ddclient
 | 
				
			||||||
 | 
					    state: restarted
 | 
				
			||||||
 | 
					    enabled: yes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: restart docker ddclient
 | 
				
			||||||
 | 
					  community.general.docker_container:
 | 
				
			||||||
 | 
					    name: "{{ namespace }}-ddclient"
 | 
				
			||||||
 | 
					    image: "{{ docker_registry }}/ddclient:{{ ddclient_image_tag | default('v3.9.1-ls45') }}"
 | 
				
			||||||
 | 
					    state: started
 | 
				
			||||||
 | 
					    restart: yes
 | 
				
			||||||
 | 
					    container_default_behavior: no_defaults
 | 
				
			||||||
 | 
					    detach: true
 | 
				
			||||||
 | 
					    restart_policy: unless-stopped
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - "/opt/{{ namespace }}/ddclient.conf:/config/ddclient.conf"
 | 
				
			||||||
 | 
					      - "/opt/{{ namespace }}/Kvps.key:/config/Kvps.key"
 | 
				
			||||||
 | 
					      - "/opt/{{ namespace }}/Kvps.private:/config/Kvps.private"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										18
									
								
								roles/ddclient/tasks/configure.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								roles/ddclient/tasks/configure.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- block:
 | 
				
			||||||
 | 
					  - name: copy public key for ddclient
 | 
				
			||||||
 | 
					    copy:
 | 
				
			||||||
 | 
					      dest: /etc/Kvps.key
 | 
				
			||||||
 | 
					      src: files/Kvps.key
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: copy private key for ddclient
 | 
				
			||||||
 | 
					    copy:
 | 
				
			||||||
 | 
					      dest: /etc/Kvps.private
 | 
				
			||||||
 | 
					      src: files/Kvps.private
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: configure ddlient.conf
 | 
				
			||||||
 | 
					    copy:
 | 
				
			||||||
 | 
					      content: "{{ ddclient_conf }}"
 | 
				
			||||||
 | 
					      dest: "/etc/ddclient.conf"
 | 
				
			||||||
 | 
					    notify: restart ddclient
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										35
									
								
								roles/ddclient/tasks/docker.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								roles/ddclient/tasks/docker.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- name: Create configuration dir for {{ namespace }}
 | 
				
			||||||
 | 
					  file:
 | 
				
			||||||
 | 
					    name: "/opt/{{ namespace }}"
 | 
				
			||||||
 | 
					    state: directory
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Copy ddclient configuration for {{ namespace }}
 | 
				
			||||||
 | 
					  copy:
 | 
				
			||||||
 | 
					    dest: "/opt/{{ namespace }}/ddclient.conf"
 | 
				
			||||||
 | 
					    content: "{{ ddclient_conf }}"
 | 
				
			||||||
 | 
					  notify: restart docker ddclient
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Copy Kvps.key for {{ namespace }}
 | 
				
			||||||
 | 
					  copy:
 | 
				
			||||||
 | 
					    dest: "/opt/{{ namespace }}/Kvps.key"
 | 
				
			||||||
 | 
					    content: "{{ ddclient_tsig_public_key_base64 | b64decode }}"
 | 
				
			||||||
 | 
					  notify: restart docker ddclient
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Copy Kvps.private for {{ namespace }}
 | 
				
			||||||
 | 
					  copy:
 | 
				
			||||||
 | 
					    dest: "/opt/{{ namespace }}/Kvps.private"
 | 
				
			||||||
 | 
					    content: "{{ ddclient_tsig_private_key_base64 | b64decode }}"
 | 
				
			||||||
 | 
					  notify: restart docker ddclient
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Start ddclient in docker for {{ namespace }}
 | 
				
			||||||
 | 
					  docker_container:
 | 
				
			||||||
 | 
					    name: "{{ namespace }}-ddclient"
 | 
				
			||||||
 | 
					    image: "{{ docker_registry }}/ddclient:{{ ddclient_image_tag }}"
 | 
				
			||||||
 | 
					    state: started
 | 
				
			||||||
 | 
					    container_default_behavior: no_defaults
 | 
				
			||||||
 | 
					    restart_policy: unless-stopped
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - "/opt/{{ namespace }}/ddclient.conf:/config/ddclient.conf"
 | 
				
			||||||
 | 
					      - "/opt/{{ namespace }}/Kvps.key:/config/Kvps.key"
 | 
				
			||||||
 | 
					      - "/opt/{{ namespace }}/Kvps.private:/config/Kvps.private"
 | 
				
			||||||
							
								
								
									
										11
									
								
								roles/ddclient/tasks/install.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								roles/ddclient/tasks/install.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- block:
 | 
				
			||||||
 | 
					  - name: installing ddclient
 | 
				
			||||||
 | 
					    package: 
 | 
				
			||||||
 | 
					      name:
 | 
				
			||||||
 | 
					        - ddclient
 | 
				
			||||||
 | 
					      state: present
 | 
				
			||||||
 | 
					    notify: start ddclient
 | 
				
			||||||
 | 
					    register: install_ddlient_result
 | 
				
			||||||
 | 
					    tags:
 | 
				
			||||||
 | 
					      - ddclient-install
 | 
				
			||||||
							
								
								
									
										12
									
								
								roles/ddclient/tasks/main.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								roles/ddclient/tasks/main.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- block:
 | 
				
			||||||
 | 
					  - import_tasks: install.yml
 | 
				
			||||||
 | 
					    when: not dockerize
 | 
				
			||||||
 | 
					  - import_tasks: configure.yml
 | 
				
			||||||
 | 
					    when: not dockerize
 | 
				
			||||||
 | 
					  become: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- block: 
 | 
				
			||||||
 | 
					  - import_tasks: docker.yml
 | 
				
			||||||
 | 
					    when: dockerize
 | 
				
			||||||
 | 
					  become: true
 | 
				
			||||||
							
								
								
									
										1
									
								
								roles/docker/defaults/main.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								roles/docker/defaults/main.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					install_docker_ce_repo: 'yes'
 | 
				
			||||||
							
								
								
									
										54
									
								
								roles/docker/tasks/docker.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								roles/docker/tasks/docker.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- block:
 | 
				
			||||||
 | 
					  - name: Install packages for Docker
 | 
				
			||||||
 | 
					    yum:
 | 
				
			||||||
 | 
					      name: 
 | 
				
			||||||
 | 
					        - device-mapper-persistent-data
 | 
				
			||||||
 | 
					        - lvm2
 | 
				
			||||||
 | 
					        - libselinux-python
 | 
				
			||||||
 | 
					      state: present
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: add docker-ce repo
 | 
				
			||||||
 | 
					    yum_repository:
 | 
				
			||||||
 | 
					      name: docker-ce-stable
 | 
				
			||||||
 | 
					      file: docker-ce
 | 
				
			||||||
 | 
					      description: Docker CE Stable - $basearch
 | 
				
			||||||
 | 
					      enabled: yes
 | 
				
			||||||
 | 
					      baseurl: https://download.docker.com/linux/centos/7/$basearch/stable
 | 
				
			||||||
 | 
					      gpgkey: https://download.docker.com/linux/centos/gpg
 | 
				
			||||||
 | 
					      gpgcheck: yes
 | 
				
			||||||
 | 
					    when: install_docker_ce_repo == 'yes'
 | 
				
			||||||
 | 
					    become: yes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Install Docker
 | 
				
			||||||
 | 
					    package:
 | 
				
			||||||
 | 
					      name: docker-ce
 | 
				
			||||||
 | 
					      state: present
 | 
				
			||||||
 | 
					    become: yes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Create /etc/docker directory
 | 
				
			||||||
 | 
					    file:
 | 
				
			||||||
 | 
					      path: /etc/docker
 | 
				
			||||||
 | 
					      state: directory
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Deploy Docker daemon.json
 | 
				
			||||||
 | 
					    template:
 | 
				
			||||||
 | 
					      src: daemon.json.j2
 | 
				
			||||||
 | 
					      dest: /etc/docker/daemon.json
 | 
				
			||||||
 | 
					    register: daemon_config_result
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Start Docker service
 | 
				
			||||||
 | 
					    service:
 | 
				
			||||||
 | 
					      name: docker
 | 
				
			||||||
 | 
					      state: started
 | 
				
			||||||
 | 
					      enabled: yes
 | 
				
			||||||
 | 
					    become: yes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Restart Docker
 | 
				
			||||||
 | 
					    systemd:
 | 
				
			||||||
 | 
					      state: restarted
 | 
				
			||||||
 | 
					      name: docker
 | 
				
			||||||
 | 
					    when: daemon_config_result.changed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  tags:
 | 
				
			||||||
 | 
					    - docker
 | 
				
			||||||
							
								
								
									
										5
									
								
								roles/docker/tasks/main.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								roles/docker/tasks/main.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- block:
 | 
				
			||||||
 | 
					  - import_tasks: docker.yml
 | 
				
			||||||
 | 
					    tags:
 | 
				
			||||||
 | 
					      - docker
 | 
				
			||||||
							
								
								
									
										18
									
								
								roles/docker/templates/daemon.json.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								roles/docker/templates/daemon.json.j2
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					{% if docker is defined %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% if docker.insecure_registries is defined %}
 | 
				
			||||||
 | 
					{% set insecure_registries = docker.insecure_registries %}
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  "exec-opts": ["native.cgroupdriver=systemd"],
 | 
				
			||||||
 | 
					  "log-driver": "json-file",
 | 
				
			||||||
 | 
					  {% if insecure_registries is defined %} 
 | 
				
			||||||
 | 
					  "insecure-registries" : ["{{ insecure_registries }}"],
 | 
				
			||||||
 | 
					  {% endif %}
 | 
				
			||||||
 | 
					  "log-opts": {
 | 
				
			||||||
 | 
					    "max-size": "100m"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										201
									
								
								roles/dovecot/defaults/main.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										201
									
								
								roles/dovecot/defaults/main.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,201 @@
 | 
				
			|||||||
 | 
					dovecot_default_values:
 | 
				
			||||||
 | 
					  replicaCount: 1
 | 
				
			||||||
 | 
					  persistence:
 | 
				
			||||||
 | 
					    enabled: true
 | 
				
			||||||
 | 
					    existingClaim: mailboxes
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  tls:
 | 
				
			||||||
 | 
					    enabled: true
 | 
				
			||||||
 | 
					    existingSecret: mail.{{ domain }}-secret
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  dovecot:
 | 
				
			||||||
 | 
					    image:
 | 
				
			||||||
 | 
					      repository: "{{ docker_registry }}/dovecot"
 | 
				
			||||||
 | 
					      tag: latest
 | 
				
			||||||
 | 
					      pullPolicy: Always
 | 
				
			||||||
 | 
					    configmaps:
 | 
				
			||||||
 | 
					      dovecot: 
 | 
				
			||||||
 | 
					        dovecot: |
 | 
				
			||||||
 | 
					          protocols = imap lmtp sieve
 | 
				
			||||||
 | 
					          mail_max_userip_connections = 1000
 | 
				
			||||||
 | 
					          mail_plugins = virtual
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					          haproxy_trusted_networks = 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
 | 
				
			||||||
 | 
					          haproxy_timeout = 30s
 | 
				
			||||||
 | 
					          dict {
 | 
				
			||||||
 | 
					            #quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
 | 
				
			||||||
 | 
					            #expire = sqlite:/etc/dovecot/dovecot-dict-sql.conf.ext
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					          # Most of the actual configuration gets included below. The filenames are
 | 
				
			||||||
 | 
					          # first sorted by their ASCII value and parsed in that order. The 00-prefixes
 | 
				
			||||||
 | 
					          # in filenames are intended to make it easier to understand the ordering.
 | 
				
			||||||
 | 
					          !include conf.d/*.conf
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					          # A config file can also tried to be included without giving an error if
 | 
				
			||||||
 | 
					          # it's not found:
 | 
				
			||||||
 | 
					          !include_try local.conf
 | 
				
			||||||
 | 
					        ldap: |
 | 
				
			||||||
 | 
					          uris = ldaps://openldap.{{ domain }}
 | 
				
			||||||
 | 
					          dn = uid=ldapbind,ou=services,{{ openldap_domain }}
 | 
				
			||||||
 | 
					          dnpass = {{ ldapbind_pass | default(ldapbind_password) }}
 | 
				
			||||||
 | 
					          auth_bind = yes
 | 
				
			||||||
 | 
					          auth_bind_userdn = uid=%n,ou=users,{{ openldap_domain }}
 | 
				
			||||||
 | 
					          tls = no
 | 
				
			||||||
 | 
					          ldap_version = 3
 | 
				
			||||||
 | 
					          base = ou=users,{{ openldap_domain }}
 | 
				
			||||||
 | 
					          deref = never
 | 
				
			||||||
 | 
					          scope = subtree
 | 
				
			||||||
 | 
					          user_filter = (&(objectClass=posixAccount)(mail=%u))
 | 
				
			||||||
 | 
					          user_attrs = cn=home=/home/vmail/%$
 | 
				
			||||||
 | 
					          pass_filter = (&(objectClass=posixAccount)(mail=%u))
 | 
				
			||||||
 | 
					          pass_attrs = uid=user,userPassword=password
 | 
				
			||||||
 | 
					          #default_pass_scheme = CRYPT
 | 
				
			||||||
 | 
					      confd:
 | 
				
			||||||
 | 
					        auth-ldap: |
 | 
				
			||||||
 | 
					          passdb {
 | 
				
			||||||
 | 
					            driver = ldap
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					            # Path for LDAP configuration file, see example-config/dovecot-ldap.conf.ext
 | 
				
			||||||
 | 
					            args = /etc/dovecot/ldap.conf
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          userdb {
 | 
				
			||||||
 | 
					            driver = ldap
 | 
				
			||||||
 | 
					            args = /etc/dovecot/ldap.conf
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        10-auth: |
 | 
				
			||||||
 | 
					          auth_default_realm = {{ domain }}
 | 
				
			||||||
 | 
					          auth_username_format = %Lu
 | 
				
			||||||
 | 
					          auth_mechanisms = plain login
 | 
				
			||||||
 | 
					        10-mail: |
 | 
				
			||||||
 | 
					          mail_location = maildir:%h
 | 
				
			||||||
 | 
					          namespace inbox {
 | 
				
			||||||
 | 
					            inbox = yes
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          mail_uid = vmail
 | 
				
			||||||
 | 
					          mail_gid = vmail
 | 
				
			||||||
 | 
					          first_valid_uid = 1000
 | 
				
			||||||
 | 
					          last_valid_uid = 1000
 | 
				
			||||||
 | 
					          first_valid_gid = 1000
 | 
				
			||||||
 | 
					          last_valid_gid = 1000
 | 
				
			||||||
 | 
					          protocol !indexer-worker {
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          mbox_write_locks = fcntl
 | 
				
			||||||
 | 
					        10-master: |
 | 
				
			||||||
 | 
					          protocol imap {
 | 
				
			||||||
 | 
					            mail_plugins = virtual 
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          service imap-login {
 | 
				
			||||||
 | 
					            inet_listener imap {
 | 
				
			||||||
 | 
					              #port = 143
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            inet_listener imaps {
 | 
				
			||||||
 | 
					              #port = 993
 | 
				
			||||||
 | 
					              #ssl = yes
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            inet_listener imap_haproxy {
 | 
				
			||||||
 | 
					              port = 1109
 | 
				
			||||||
 | 
					              haproxy = yes
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            inet_listener imaps_haproxy {
 | 
				
			||||||
 | 
					              port = 10993
 | 
				
			||||||
 | 
					              ssl = yes
 | 
				
			||||||
 | 
					              haproxy = yes
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					          service pop3-login {
 | 
				
			||||||
 | 
					            inet_listener pop3 {
 | 
				
			||||||
 | 
					              #port = 110
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            inet_listener pop3s {
 | 
				
			||||||
 | 
					              #port = 995
 | 
				
			||||||
 | 
					              #ssl = yes
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					          service lmtp {
 | 
				
			||||||
 | 
					            inet_listener lmtp {
 | 
				
			||||||
 | 
					               port = 24
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            unix_listener /var/spool/postfix/private/dovecot-lmtp {
 | 
				
			||||||
 | 
					              mode = 0600
 | 
				
			||||||
 | 
					              group = postfix
 | 
				
			||||||
 | 
					              user = postfix
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            user = vmail
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					          service imap {
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					          service pop3 {
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					          service auth {
 | 
				
			||||||
 | 
					             inet_listener {
 | 
				
			||||||
 | 
					               port = 12345
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            unix_listener auth-userdb {
 | 
				
			||||||
 | 
					              mode = 0660
 | 
				
			||||||
 | 
					              user = vmail
 | 
				
			||||||
 | 
					              #group = 
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					            # Postfix smtp-auth
 | 
				
			||||||
 | 
					            unix_listener /var/spool/postfix/private/auth {
 | 
				
			||||||
 | 
					              mode = 0660
 | 
				
			||||||
 | 
					              user = postfix
 | 
				
			||||||
 | 
					              group = postfix
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					          service auth-worker {
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					          service dict {
 | 
				
			||||||
 | 
					            unix_listener dict {
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        10-ssl: |
 | 
				
			||||||
 | 
					          ssl = required
 | 
				
			||||||
 | 
					          #verbose_ssl = yes
 | 
				
			||||||
 | 
					          ssl_prefer_server_ciphers = yes
 | 
				
			||||||
 | 
					          ssl_min_protocol = TLSv1.2
 | 
				
			||||||
 | 
					          ssl_cert = </tls/tls.crt
 | 
				
			||||||
 | 
					          ssl_key = </tls/tls.key
 | 
				
			||||||
 | 
					        10-logging: |
 | 
				
			||||||
 | 
					          log_path = /dev/stderr
 | 
				
			||||||
 | 
					          info_log_path = /dev/stdout
 | 
				
			||||||
 | 
					          debug_log_path = /dev/stdout
 | 
				
			||||||
 | 
					        15-lda: |
 | 
				
			||||||
 | 
					          postmaster_address = postmaster@{{ domain }}
 | 
				
			||||||
 | 
					          hostname = {{ domain }}
 | 
				
			||||||
 | 
					          rejection_reason = Your message to  was automatically rejected:%n%r
 | 
				
			||||||
 | 
					          protocol lda {
 | 
				
			||||||
 | 
					            mail_plugins = virtual sieve 
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        20-lmtp: |
 | 
				
			||||||
 | 
					          protocol lmtp {
 | 
				
			||||||
 | 
					            mail_plugins = virtual sieve
 | 
				
			||||||
 | 
					            postmaster_address = postmaster@{{ domain }}
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        20-managesieve: |
 | 
				
			||||||
 | 
					          service managesieve-login {
 | 
				
			||||||
 | 
					            inet_listener sieve {
 | 
				
			||||||
 | 
					              port = 4190
 | 
				
			||||||
 | 
					              ssl = yes
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            service_count = 1
 | 
				
			||||||
 | 
					            vsz_limit = 64M
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					          service managesieve {
 | 
				
			||||||
 | 
					            process_limit = 1024
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  service:
 | 
				
			||||||
 | 
					    type: LoadBalancer
 | 
				
			||||||
 | 
					    loadBalancerIP: "{{ dovecot_loadbalancer_ip | default(omit) }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										13
									
								
								roles/dovecot/tasks/main.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								roles/dovecot/tasks/main.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					- set_fact:
 | 
				
			||||||
 | 
					    dovecot_combined_values: "{{ dovecot_default_values | combine(dovecot_values, recursive=true) }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Deploy Dovecot
 | 
				
			||||||
 | 
					  community.kubernetes.helm:
 | 
				
			||||||
 | 
					    create_namespace: true
 | 
				
			||||||
 | 
					    release_namespace: "{{ dovecot_namespace | default(mail_namespace) | default(namespace) }}"
 | 
				
			||||||
 | 
					    release_name: "{{ dovecot_name | default('dovecot') }}"
 | 
				
			||||||
 | 
					    chart_ref: "{{ dovecot_chart | default('ghp/dovecot') }}"
 | 
				
			||||||
 | 
					    chart_version: "{{ dovecot_version | default(omit) }}"
 | 
				
			||||||
 | 
					    release_values: "{{ dovecot_combined_values | from_yaml }}"
 | 
				
			||||||
 | 
					    wait: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										50
									
								
								roles/drone/defaults/main.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								roles/drone/defaults/main.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
				
			|||||||
 | 
					drone_enabled: true
 | 
				
			||||||
 | 
					drone_publish: false
 | 
				
			||||||
 | 
					drone_use_external_db: true
 | 
				
			||||||
 | 
					drone_default_values:
 | 
				
			||||||
 | 
					  service:
 | 
				
			||||||
 | 
					    type: ClusterIP
 | 
				
			||||||
 | 
					    port: 80
 | 
				
			||||||
 | 
					  ingress:
 | 
				
			||||||
 | 
					    enabled: true
 | 
				
			||||||
 | 
					    annotations:
 | 
				
			||||||
 | 
					      kubernetes.io/ingress.class: "{{ external_ingress_class if drone_publish else internal_ingress_class }}"
 | 
				
			||||||
 | 
					      cert-manager.io/cluster-issuer: "letsencrypt-prod"
 | 
				
			||||||
 | 
					      cert-manager.io/acme-dns01-provider: "rfc2136"
 | 
				
			||||||
 | 
					      cert-manager.io/acme-challenge-type: "dns01"
 | 
				
			||||||
 | 
					    hosts:
 | 
				
			||||||
 | 
					      - host: "drone.{{ domain }}"
 | 
				
			||||||
 | 
					        paths:
 | 
				
			||||||
 | 
					          - "/"
 | 
				
			||||||
 | 
					    tls:
 | 
				
			||||||
 | 
					     - secretName: "drone.{{ domain }}-tls"
 | 
				
			||||||
 | 
					       hosts:
 | 
				
			||||||
 | 
					         - "drone.{{ domain }}"
 | 
				
			||||||
 | 
					  persistentVolume:
 | 
				
			||||||
 | 
					    enabled: true
 | 
				
			||||||
 | 
					    accessModes:
 | 
				
			||||||
 | 
					      - "{{ drone_storage_mode | default('ReadWriteMany') }}"
 | 
				
			||||||
 | 
					    mountPath: /data
 | 
				
			||||||
 | 
					    size: "{{ drone_size | default('8Gi') }}"
 | 
				
			||||||
 | 
					    storageClass: "{{ drone_storage | default('nfs-ssd') }}"
 | 
				
			||||||
 | 
					  env:
 | 
				
			||||||
 | 
					    DRONE_SERVER_HOST: "drone.{{ domain }}"
 | 
				
			||||||
 | 
					    DRONE_SERVER_PROTO: https
 | 
				
			||||||
 | 
					    DRONE_RPC_SECRET: "{{ drone_rpc_secret | default(omit) }}"
 | 
				
			||||||
 | 
					    DRONE_DATABASE_DRIVER: "postgres"
 | 
				
			||||||
 | 
					    DRONE_DATABASE_DATASOURCE: "postgres://{{ drone_db_username }}:{{ drone_db_password }}@{{ postgres_db_team | default(namespace) }}-postgres.{{ postgres_db_namespace | default(namespace) }}.svc.cluster.local:5432/drone?sslmode=disable"
 | 
				
			||||||
 | 
					    DRONE_DATABASE_SECRET: "{{ drone_database_secret | default(omit) }}"
 | 
				
			||||||
 | 
					    DRONE_GITEA_CLIENT_ID: "{{ drone_gitea_client_id | default(omit) }}"
 | 
				
			||||||
 | 
					    DRONE_GITEA_CLIENT_SECRET: "{{ drone_gitea_client_secret | default(omit) }}"
 | 
				
			||||||
 | 
					    DRONE_GITEA_SERVER: "https://gitea.{{ domain }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					drone_runner_kube_default_values:
 | 
				
			||||||
 | 
					  rbac:
 | 
				
			||||||
 | 
					    buildNamespaces:
 | 
				
			||||||
 | 
					      - "{{ drone_namespace | default(namespace) }}"
 | 
				
			||||||
 | 
					  env:
 | 
				
			||||||
 | 
					    DRONE_RPC_SECRET: "{{ drone_rpc_secret }}"
 | 
				
			||||||
 | 
					    DRONE_RPC_HOST: "drone.{{ domain }}"
 | 
				
			||||||
 | 
					    DRONE_RPC_PROTO: https
 | 
				
			||||||
 | 
					    DRONE_NAMESPACE_DEFAULT: "{{ drone_namespace | default(namespace) }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										31
									
								
								roles/drone/tasks/main.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								roles/drone/tasks/main.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					- name: Import secret.yaml to obtain secrets
 | 
				
			||||||
 | 
					  include_tasks: secrets.yaml
 | 
				
			||||||
 | 
					  when:
 | 
				
			||||||
 | 
					    - drone_use_external_db
 | 
				
			||||||
 | 
					    - postgres_enable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- set_fact:
 | 
				
			||||||
 | 
					    drone_combined_values: "{{ drone_default_values | combine(drone_values, recursive=true) }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- set_fact:
 | 
				
			||||||
 | 
					    drone_runner_kube_combined_values: "{{ drone_runner_kube_default_values | combine(drone_runner_kube_values, recursive=true) }}"
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					- name: Deploy Drone Server
 | 
				
			||||||
 | 
					  community.kubernetes.helm:
 | 
				
			||||||
 | 
					    create_namespace: true
 | 
				
			||||||
 | 
					    release_namespace: "{{ drone_namespace | default(namespace) }}"
 | 
				
			||||||
 | 
					    release_name: "{{ drone_name | default('drone') }}"
 | 
				
			||||||
 | 
					    chart_ref: "{{ drone_chart | default('drone/drone') }}"
 | 
				
			||||||
 | 
					    chart_version: "{{ drone_version | default(omit) }}"
 | 
				
			||||||
 | 
					    release_values: "{{ drone_combined_values | from_yaml }}"
 | 
				
			||||||
 | 
					    wait: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Deploy Drone Runner Kube
 | 
				
			||||||
 | 
					  community.kubernetes.helm:
 | 
				
			||||||
 | 
					    create_namespace: true
 | 
				
			||||||
 | 
					    release_namespace: "{{ drone_runner_kube_namespace | default(namespace) }}"
 | 
				
			||||||
 | 
					    release_name: "{{ drone_runner_kube_name | default('drone-runner-kube') }}"
 | 
				
			||||||
 | 
					    chart_ref: "{{ drone_runner_kube_chart | default('drone/drone-runner-kube') }}"
 | 
				
			||||||
 | 
					    chart_version: "{{ drone_runner_kube_version | default(omit) }}"
 | 
				
			||||||
 | 
					    release_values: "{{ drone_runner_kube_combined_values | from_yaml }}"
 | 
				
			||||||
 | 
					    wait: true
 | 
				
			||||||
							
								
								
									
										25
									
								
								roles/drone/tasks/secrets.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								roles/drone/tasks/secrets.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					- block:
 | 
				
			||||||
 | 
					  - name: Set DB namespace for secret lookup
 | 
				
			||||||
 | 
					    set_fact:
 | 
				
			||||||
 | 
					      db_namespace: "{{ drone_db_namespace | default(postgres_db_namespace) | default(postgres_namespace) | default(postgres_operator_namespace) | default(namespace) }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Set DB secret name for lookup
 | 
				
			||||||
 | 
					    set_fact:
 | 
				
			||||||
 | 
					      db_secret_name: "drone.{{ postgres_db_team | default(namespace) }}-postgres.credentials.postgresql.acid.zalan.do"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Lookup Drone DB secret
 | 
				
			||||||
 | 
					    set_fact:
 | 
				
			||||||
 | 
					      drone_db_secret: "{{ lookup('k8s', kind='Secret', namespace=db_namespace, resource_name=db_secret_name) }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - debug:
 | 
				
			||||||
 | 
					      msg: "{{ drone_db_secret }}"
 | 
				
			||||||
 | 
					      verbosity: 2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Set Drone DB username
 | 
				
			||||||
 | 
					    set_fact:
 | 
				
			||||||
 | 
					      drone_db_username: "{{ drone_db_secret.data.username | b64decode }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  - name: Set Drone DB password
 | 
				
			||||||
 | 
					    set_fact:
 | 
				
			||||||
 | 
					      drone_db_password: "{{ drone_db_secret.data.password | b64decode }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										15
									
								
								roles/external-dns/defaults/main.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								roles/external-dns/defaults/main.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					external_dns_default_values:
 | 
				
			||||||
 | 
					  fullnameOverride: "{{ external_dns_name | default(namespace + '-external-dns') }}"
 | 
				
			||||||
 | 
					  annotationFilter: "kubernetes.io/ingress.class={{ external_ingress_class }}"
 | 
				
			||||||
 | 
					  domainFilters: ["{{ external_domain | default(domain) }}"]
 | 
				
			||||||
 | 
					  provider: rfc2136
 | 
				
			||||||
 | 
					  rfc2136:
 | 
				
			||||||
 | 
					    host: "{{ external_dns_ip | default(dns_ip) }}"
 | 
				
			||||||
 | 
					    port: 53
 | 
				
			||||||
 | 
					    zone: "{{ external_domain | default(domain) }}"
 | 
				
			||||||
 | 
					    tsigSecret: "{{ k8s_tsig }}"
 | 
				
			||||||
 | 
					    tsigSecretAlg: "{{ external_dns_tsigSecretAlg | default('hmac-sha512') }}"
 | 
				
			||||||
 | 
					    tsigKeyname: "{{ external_dns_tsigKeyname | default('k8s') }}"
 | 
				
			||||||
 | 
					    tsigAxfr: true
 | 
				
			||||||
 | 
					    ## Possible units [ns, us, ms, s, m, h], see more https://golang.org/pkg/time/#ParseDuration
 | 
				
			||||||
 | 
					    minTTL: "30s"
 | 
				
			||||||
							
								
								
									
										12
									
								
								roles/external-dns/tasks/main.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								roles/external-dns/tasks/main.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					- set_fact:
 | 
				
			||||||
 | 
					    external_dns_combined_values: "{{ external_dns_default_values | combine(external_dns_values, recursive=true) }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Deploy external DNS
 | 
				
			||||||
 | 
					  community.kubernetes.helm:
 | 
				
			||||||
 | 
					    create_namespace: true
 | 
				
			||||||
 | 
					    release_namespace: "{{ external_dns_namespace | default(dns_namespace) | default(namespace) }}"
 | 
				
			||||||
 | 
					    release_name: "{{ external_dns_name | default(namespace + '-external-dns') }}"
 | 
				
			||||||
 | 
					    chart_ref: "{{ external_dns_chart | default('bitnami/external-dns') }}"
 | 
				
			||||||
 | 
					    chart_version: "{{ external_dns_version | default(omit) }}"
 | 
				
			||||||
 | 
					    release_values: "{{ external_dns_combined_values | from_yaml }}"
 | 
				
			||||||
 | 
					    wait: true
 | 
				
			||||||
							
								
								
									
										14
									
								
								roles/external-ingress-nginx/defaults/main.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								roles/external-ingress-nginx/defaults/main.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					external_ingress_nginx_default_values:
 | 
				
			||||||
 | 
					  controller:
 | 
				
			||||||
 | 
					    config:
 | 
				
			||||||
 | 
					      use-proxy-protocol: true
 | 
				
			||||||
 | 
					      use-forward-headers: true
 | 
				
			||||||
 | 
					      compute-full-forward-for: true
 | 
				
			||||||
 | 
					    publishService:
 | 
				
			||||||
 | 
					      enabled: true
 | 
				
			||||||
 | 
					    scope:
 | 
				
			||||||
 | 
					      enabled: false
 | 
				
			||||||
 | 
					    service:
 | 
				
			||||||
 | 
					      loadBalancerIP: "{{ external_loadbalancer_ip | default(omit) }}"
 | 
				
			||||||
 | 
					      externalTrafficPolicy: Local
 | 
				
			||||||
 | 
					    ingressClass: "{{ external_ingress_class }}"
 | 
				
			||||||
							
								
								
									
										13
									
								
								roles/external-ingress-nginx/tasks/main.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								roles/external-ingress-nginx/tasks/main.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					- set_fact:
 | 
				
			||||||
 | 
					    external_ingress_nginx_combined_values: "{{ external_ingress_nginx_default_values | combine(external_ingress_nginx_values, recursive=true) }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Deploy external Nginx Ingress
 | 
				
			||||||
 | 
					  community.kubernetes.helm:
 | 
				
			||||||
 | 
					    create_namespace: true
 | 
				
			||||||
 | 
					    release_namespace: "{{ external_ingress_nginx_namespace | default(ingress_namespace) | default(namespace) }}"
 | 
				
			||||||
 | 
					    release_name: "{{ external_ingress_nginx_name | default(namespace + '-external-ingress-nginx') }}"
 | 
				
			||||||
 | 
					    chart_ref: "{{ external_ingress_nginx_chart | default('ingress-nginx/ingress-nginx') }}"
 | 
				
			||||||
 | 
					    chart_version: "{{ external_ingress_nginx_version | default(omit) }}"
 | 
				
			||||||
 | 
					    release_values: "{{ external_ingress_nginx_combined_values | from_yaml }}"
 | 
				
			||||||
 | 
					    wait: true
 | 
				
			||||||
 | 
					  when: external_ingress_nginx_enabled | default(true)
 | 
				
			||||||
							
								
								
									
										137
									
								
								roles/gitea/defaults/main.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										137
									
								
								roles/gitea/defaults/main.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,137 @@
 | 
				
			|||||||
 | 
					gitea_enabled: true
 | 
				
			||||||
 | 
					gitea_publish_web: false
 | 
				
			||||||
 | 
					gitea_publish_ssh: false
 | 
				
			||||||
 | 
					gitea_use_external_db: true
 | 
				
			||||||
 | 
					gitea_ingress_class: "{{ gitea_namespace | default(namespace) }}-{{ 'public' if gitea_publish_web else 'private' }}-gitea-ingress-nginx"
 | 
				
			||||||
 | 
					gitea_default_values:
 | 
				
			||||||
 | 
					  config:
 | 
				
			||||||
 | 
					    disableInstaller: true
 | 
				
			||||||
 | 
					    admin_user: "{{ gitea_admin_user | default('gitea') }}"
 | 
				
			||||||
 | 
					    admin_pass: "{{ gitea_admin_pass | default(gitea_admin_password) }}"
 | 
				
			||||||
 | 
					    mailer:
 | 
				
			||||||
 | 
					      domain: "{{ mail_domain | default(domain) }}"
 | 
				
			||||||
 | 
					      enabled: true
 | 
				
			||||||
 | 
					      host: "mail.{{ mail_domain | default(domain) }}:465"
 | 
				
			||||||
 | 
					      skip_verify: false
 | 
				
			||||||
 | 
					      is_tls_enabled: true
 | 
				
			||||||
 | 
					      from: "gitea@{{ mail_domain | default(domain) }}"
 | 
				
			||||||
 | 
					      user: "{{ gitea_ldap_user | default('gitea') }}"
 | 
				
			||||||
 | 
					      passwd: "{{ gitea_ldap_pass | default(gitea_ldap_password) }}"
 | 
				
			||||||
 | 
					  ingress:
 | 
				
			||||||
 | 
					    ## Set to true to enable ingress record generation
 | 
				
			||||||
 | 
					    enabled: true
 | 
				
			||||||
 | 
					    ## When the ingress is enabled, a host pointing to this will be created
 | 
				
			||||||
 | 
					    hostname: "gitea.{{ domain }}"
 | 
				
			||||||
 | 
					    annotations:
 | 
				
			||||||
 | 
					      cert-manager.io/cluster-issuer: "letsencrypt-prod"
 | 
				
			||||||
 | 
					      cert-manager.io/acme-dns01-provider: "rfc2136"
 | 
				
			||||||
 | 
					      cert-manager.io/acme-challenge-type: "dns01"
 | 
				
			||||||
 | 
					      kubernetes.io/ingress.class: "{{ gitea_ingress_class }}"
 | 
				
			||||||
 | 
					      nginx.ingress.kubernetes.io/proxy-body-size: "0"
 | 
				
			||||||
 | 
					      nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
 | 
				
			||||||
 | 
					      nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
 | 
				
			||||||
 | 
					      kubernetes.io/tls-acme: "true"
 | 
				
			||||||
 | 
					      #
 | 
				
			||||||
 | 
					    ## The list of additional hostnames to be covered with this ingress record.
 | 
				
			||||||
 | 
					    ## Most likely the hostname above will be enough, but in the event more hosts are needed, this is an array
 | 
				
			||||||
 | 
					    # hosts:
 | 
				
			||||||
 | 
					    # - name: git.example.com
 | 
				
			||||||
 | 
					    #   path: /
 | 
				
			||||||
 | 
					    tls:    
 | 
				
			||||||
 | 
					     - hosts:    
 | 
				
			||||||
 | 
					       - "gitea.{{ domain }}"
 | 
				
			||||||
 | 
					       secretName: "gitea.{{ domain }}-tls" 
 | 
				
			||||||
 | 
					  service:
 | 
				
			||||||
 | 
					    type: ClusterIP
 | 
				
			||||||
 | 
					    ## This can stay as ClusterIP as (by default) we use ingress
 | 
				
			||||||
 | 
					    http:
 | 
				
			||||||
 | 
					      port: 3000
 | 
				
			||||||
 | 
					      ## Make the external port available
 | 
				
			||||||
 | 
					      # externalPort: 8082
 | 
				
			||||||
 | 
					      # externalHost: gitea.local
 | 
				
			||||||
 | 
					    ## SSH is commonly on port 22
 | 
				
			||||||
 | 
					    ssh:
 | 
				
			||||||
 | 
					      port: 22
 | 
				
			||||||
 | 
					      ## If serving on a different external port used for determining the ssh url in the gui
 | 
				
			||||||
 | 
					      # externalPort: 22
 | 
				
			||||||
 | 
					      # externalHost: gitea.local
 | 
				
			||||||
 | 
					      # externalIPs: []
 | 
				
			||||||
 | 
					  persistence:
 | 
				
			||||||
 | 
					    enabled: true
 | 
				
			||||||
 | 
					    # existingGiteaClaim: gitea-gitea
 | 
				
			||||||
 | 
					    accessMode: "{{ gitea_storage_mode | default('ReadWriteMany') }}"
 | 
				
			||||||
 | 
					    size: "{{ gitea_size | default('20Gi') }}"
 | 
				
			||||||
 | 
					    storageClass: "{{ gitea_storage | default('nfs-ssd') }}"
 | 
				
			||||||
 | 
					    ## addtional annotations for PVCs. Uncommenting will prevent the PVC from being deleted.
 | 
				
			||||||
 | 
					    annotations:
 | 
				
			||||||
 | 
					      "helm.sh/resource-policy": keep
 | 
				
			||||||
 | 
					  lfs:
 | 
				
			||||||
 | 
					    enabled: "{{ gitea_lfs | default(true) }}"
 | 
				
			||||||
 | 
					    accessMode: "{{ gitea_lfs_storage_mode | default('ReadWriteMany') }}"
 | 
				
			||||||
 | 
					    size: "{{ gitea_lfs_size | default('50Gi') }}"
 | 
				
			||||||
 | 
					    storageClass: "{{ gitea_lfs_storage | default('nfs-hdd') }}"
 | 
				
			||||||
 | 
					    annotations:
 | 
				
			||||||
 | 
					      "helm.sh/resource-policy": keep
 | 
				
			||||||
 | 
					  mariadb:
 | 
				
			||||||
 | 
					    enabled: false
 | 
				
			||||||
 | 
					  externalDB:
 | 
				
			||||||
 | 
					    enabled: true
 | 
				
			||||||
 | 
					    dbType: "postgres"
 | 
				
			||||||
 | 
					    dbHost: "{{ postgres_db_team | default(namespace) }}-postgres.{{ postgres_db_namespace | default(namespace) }}.svc.cluster.local"
 | 
				
			||||||
 | 
					    dbPort: "5432"
 | 
				
			||||||
 | 
					    dbDatabase: "gitea"
 | 
				
			||||||
 | 
					    dbUser: "{{ gitea_db_username | default(omit)}}"
 | 
				
			||||||
 | 
					    dbPassword: "{{ gitea_db_password | default(omit) }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gitea_publush_ingress_nginx_values:
 | 
				
			||||||
 | 
					  controller:
 | 
				
			||||||
 | 
					    config:
 | 
				
			||||||
 | 
					      use-proxy-protocol: true
 | 
				
			||||||
 | 
					      use-forward-headers: true
 | 
				
			||||||
 | 
					      compute-full-forward-for: true
 | 
				
			||||||
 | 
					    service:
 | 
				
			||||||
 | 
					      externalTrafficPolicy: Local
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gitea_ingress_nginx_default_values:
 | 
				
			||||||
 | 
					  controller:
 | 
				
			||||||
 | 
					    containerPort:
 | 
				
			||||||
 | 
					      ssh: 22
 | 
				
			||||||
 | 
					      http: 80
 | 
				
			||||||
 | 
					      https: 443
 | 
				
			||||||
 | 
					    publishService:
 | 
				
			||||||
 | 
					      enabled: true
 | 
				
			||||||
 | 
					    scope:
 | 
				
			||||||
 | 
					      enabled: true
 | 
				
			||||||
 | 
					    extraArgs:
 | 
				
			||||||
 | 
					      tcp-services-configmap: "{{ gitea_namespace | default(namespace) }}/{{ gitea_ingress_nginx_name | default(namespace + '-gitea-ingress-nginx') }}-tcp"
 | 
				
			||||||
 | 
					    service:
 | 
				
			||||||
 | 
					      enabled: true
 | 
				
			||||||
 | 
					      type: LoadBalancer
 | 
				
			||||||
 | 
					      loadBalancerIP: "{{ gitea_loadbalancer_ip | default(omit) }}"
 | 
				
			||||||
 | 
					      ports:
 | 
				
			||||||
 | 
					        ssh: 22
 | 
				
			||||||
 | 
					        http: 80
 | 
				
			||||||
 | 
					        https: 443
 | 
				
			||||||
 | 
					      targetPorts:
 | 
				
			||||||
 | 
					        ssh: ssh
 | 
				
			||||||
 | 
					        http: http
 | 
				
			||||||
 | 
					        https: https
 | 
				
			||||||
 | 
					    ingressClass: "{{ gitea_ingress_class }}"
 | 
				
			||||||
 | 
					  tcp: 
 | 
				
			||||||
 | 
					    22: "{{ gitea_namespace | default(namespace) }}/gitea-gitea-svc:22"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gitea_dns_default_values:
 | 
				
			||||||
 | 
					  fullnameOverride: "{{ gitea_dns_name | default(namespace + '-gitea-internal-dns') }}"
 | 
				
			||||||
 | 
					  annotationFilter: "kubernetes.io/ingress.class={{ gitea_ingress_class }}"
 | 
				
			||||||
 | 
					  domainFilters: ["{{ domain }}"]
 | 
				
			||||||
 | 
					  provider: rfc2136
 | 
				
			||||||
 | 
					  rfc2136:
 | 
				
			||||||
 | 
					    host: "{{ dns_ip }}"
 | 
				
			||||||
 | 
					    port: 53
 | 
				
			||||||
 | 
					    zone: "{{ domain }}"
 | 
				
			||||||
 | 
					    tsigSecret: "{{ k8s_tsig }}"
 | 
				
			||||||
 | 
					    tsigSecretAlg: "{{ gitea_dns_tsigSecretAlg | default('hmac-sha512') }}"
 | 
				
			||||||
 | 
					    tsigKeyname: "{{ gitea_dns_tsigKeyname | default('k8s') }}"
 | 
				
			||||||
 | 
					    tsigAxfr: true
 | 
				
			||||||
 | 
					    ## Possible units [ns, us, ms, s, m, h], see more https://golang.org/pkg/time/#ParseDuration
 | 
				
			||||||
 | 
					    minTTL: "30s"
 | 
				
			||||||
							
								
								
									
										50
									
								
								roles/gitea/tasks/main.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								roles/gitea/tasks/main.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
				
			|||||||
 | 
					- name: Import secret.yaml to obtain secrets
 | 
				
			||||||
 | 
					  include_tasks: secrets.yaml
 | 
				
			||||||
 | 
					  when: 
 | 
				
			||||||
 | 
					    - gitea_use_external_db
 | 
				
			||||||
 | 
					    - postgres_enable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- set_fact:
 | 
				
			||||||
 | 
					    gitea_combined_values: "{{ gitea_default_values | combine(gitea_values, recursive=true) }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- set_fact:
 | 
				
			||||||
 | 
					    gitea_dns_combined_values: "{{ gitea_dns_default_values | combine(gitea_dns_values, recursive=true) }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- set_fact:
 | 
				
			||||||
 | 
					    gitea_ingress_nginx_combined_values: "{{ gitea_ingress_nginx_default_values | combine(gitea_ingress_nginx_values, recursive=true) }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- set_fact:
 | 
				
			||||||
 | 
					    gitea_ingress_nginx_combined_values: "{{ gitea_ingress_nginx_combined_values | combine(gitea_publush_ingress_nginx_values, recursive=true) }}"
 | 
				
			||||||
 | 
					    when: gitea_publish_web
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Deploy Nginx Ingress for Gitea
 | 
				
			||||||
 | 
					  community.kubernetes.helm:
 | 
				
			||||||
 | 
					    create_namespace: true
 | 
				
			||||||
 | 
					    release_namespace: "{{ gitea_ingress_nginx_namespace | default(namespace) }}"
 | 
				
			||||||
 | 
					    release_name: "{{ gitea_ingress_nginx_name | default(namespace + '-gitea-ingress-nginx') }}"
 | 
				
			||||||
 | 
					    chart_ref: "{{ gitea_ingress_nginx_chart | default('ingress-nginx/ingress-nginx') }}"
 | 
				
			||||||
 | 
					    chart_version: "{{ gitea_ingress_nginx_version | default(omit) }}"
 | 
				
			||||||
 | 
					    release_values: "{{ gitea_ingress_nginx_combined_values | from_yaml }}"
 | 
				
			||||||
 | 
					    wait: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Deploy DNS for Gitea
 | 
				
			||||||
 | 
					  community.kubernetes.helm:
 | 
				
			||||||
 | 
					    create_namespace: true
 | 
				
			||||||
 | 
					    release_namespace: "{{ gitea_dns_namespace | default(namespace) }}"
 | 
				
			||||||
 | 
					    release_name: "{{ gitea_dns_name | default('gitea-internal-dns') }}"
 | 
				
			||||||
 | 
					    chart_ref: "{{ gitea_dns_chart | default('bitnami/external-dns') }}"
 | 
				
			||||||
 | 
					    chart_version: "{{ gitea_dns_version | default(omit) }}"
 | 
				
			||||||
 | 
					    release_values: "{{ gitea_dns_combined_values | from_yaml }}"
 | 
				
			||||||
 | 
					    wait: true
 | 
				
			||||||
 | 
					  when: gitea_publish_web == false 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- name: Deploy Gitea
 | 
				
			||||||
 | 
					  community.kubernetes.helm:
 | 
				
			||||||
 | 
					    create_namespace: true
 | 
				
			||||||
 | 
					    release_namespace: "{{ gitea_namespace | default(namespace) }}"
 | 
				
			||||||
 | 
					    release_name: "{{ gitea_name | default('gitea') }}"
 | 
				
			||||||
 | 
					    chart_ref: "{{ gitea_chart | default('ghp/gitea') }}"
 | 
				
			||||||
 | 
					    chart_version: "{{ gitea_version | default(omit) }}"
 | 
				
			||||||
 | 
					    release_values: "{{ gitea_combined_values | from_yaml }}"
 | 
				
			||||||
 | 
					    wait: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user