2026-01-07 14:27:55 +03:00
|
|
|
- name: Gather facts (implicit) and packages facts
|
|
|
|
|
hosts: all
|
|
|
|
|
tasks:
|
|
|
|
|
- name: Gather packages facts
|
|
|
|
|
ansible.builtin.package_facts:
|
|
|
|
|
tags:
|
|
|
|
|
- "always"
|
|
|
|
|
|
|
|
|
|
- name: Create local CA
|
|
|
|
|
hosts: all
|
|
|
|
|
gather_facts: false
|
|
|
|
|
vars_files:
|
2026-01-14 11:03:59 +03:00
|
|
|
- "vars/common.yml"
|
|
|
|
|
- "vars/secrets.yml"
|
2026-01-07 14:27:55 +03:00
|
|
|
vars:
|
|
|
|
|
local_ca_common_name: "Lab CA"
|
2026-01-14 11:03:59 +03:00
|
|
|
local_ca_passphrase: "{{ secrets.ca.passphrase }}"
|
|
|
|
|
local_ca_country_name: "{{ common.certificates.country_name }}"
|
|
|
|
|
local_ca_locality_name: "{{ common.certificates.locality_name }}"
|
|
|
|
|
local_ca_organization_name: "{{ common.certificates.organization_name }}"
|
|
|
|
|
local_ca_email_address: "{{ common.certificates.email_address }}"
|
2026-01-07 14:27:55 +03:00
|
|
|
roles:
|
|
|
|
|
- "local_ca"
|
|
|
|
|
tags:
|
|
|
|
|
- "local_ca"
|
|
|
|
|
|
2026-02-05 09:52:04 +03:00
|
|
|
- name: Proxy server
|
|
|
|
|
hosts: proxy
|
|
|
|
|
gather_facts: false
|
|
|
|
|
vars_files:
|
|
|
|
|
- "vars/common.yml"
|
|
|
|
|
- "vars/secrets.yml"
|
|
|
|
|
vars:
|
|
|
|
|
squid_authorized_networks:
|
|
|
|
|
- "{{ ansible_default_ipv4.network }}/24"
|
|
|
|
|
roles:
|
|
|
|
|
- "squid"
|
|
|
|
|
tags:
|
|
|
|
|
- "proxy"
|
|
|
|
|
|
2026-01-07 14:27:55 +03:00
|
|
|
- name: Common
|
|
|
|
|
hosts: all
|
|
|
|
|
gather_facts: false
|
|
|
|
|
vars_files:
|
2026-01-14 11:03:59 +03:00
|
|
|
- "vars/common.yml"
|
|
|
|
|
- "vars/secrets.yml"
|
2026-01-07 14:27:55 +03:00
|
|
|
vars:
|
2026-02-05 09:52:04 +03:00
|
|
|
common_proxy_server: "{{ hostvars['proxy1'].ansible_default_ipv4.address }}:3128"
|
2026-01-19 15:06:34 +03:00
|
|
|
common_default_packages:
|
|
|
|
|
- "net-tools"
|
|
|
|
|
- "htop"
|
|
|
|
|
- "aptitude"
|
|
|
|
|
- "screen"
|
|
|
|
|
- "tcpdump"
|
2026-01-07 14:27:55 +03:00
|
|
|
roles:
|
|
|
|
|
- "common"
|
|
|
|
|
tags:
|
|
|
|
|
- "common"
|
|
|
|
|
|
2026-01-14 11:03:59 +03:00
|
|
|
- name: Web Application Firewalls (install)
|
2026-01-07 14:27:55 +03:00
|
|
|
hosts: waf
|
|
|
|
|
gather_facts: false
|
|
|
|
|
vars_files:
|
2026-01-14 11:03:59 +03:00
|
|
|
- "vars/common.yml"
|
|
|
|
|
- "vars/secrets.yml"
|
2026-01-07 14:27:55 +03:00
|
|
|
vars:
|
2026-01-19 15:06:34 +03:00
|
|
|
local_ca_certs_ca_passphrase: "{{ secrets.ca.passphrase }}"
|
|
|
|
|
local_ca_certs_default_country_name: "{{ common.certificates.country_name }}"
|
|
|
|
|
local_ca_certs_default_locality_name: "{{ common.certificates.locality_name }}"
|
|
|
|
|
local_ca_certs_default_organization_name: "{{ common.certificates.organization_name }}"
|
|
|
|
|
local_ca_certs_default_email_address: "{{ common.certificates.email_address }}"
|
|
|
|
|
local_ca_certs_list:
|
2026-01-14 11:03:59 +03:00
|
|
|
# Consul
|
|
|
|
|
- cn: "server.{{ common.consul.datacenter }}.{{ common.consul.domain }}"
|
|
|
|
|
domains:
|
|
|
|
|
- "DNS:server.{{ common.consul.datacenter }}.{{ common.consul.domain }}"
|
|
|
|
|
# Sites
|
|
|
|
|
- cn: "test.lab"
|
|
|
|
|
domains:
|
|
|
|
|
- "DNS:test.lab"
|
|
|
|
|
- "DNS:{{ ansible_fqdn }}"
|
|
|
|
|
- "DNS:{{ ansible_hostname }}"
|
|
|
|
|
- "IP:{{ ansible_default_ipv4.address }}"
|
|
|
|
|
consul_domain: "{{ common.consul.domain }}"
|
|
|
|
|
consul_datacenter: "{{ common.consul.datacenter }}"
|
|
|
|
|
consul_secret_key: "{{ secrets.consul.secret_key }}"
|
2026-01-19 15:06:34 +03:00
|
|
|
consul_servers: ["waf1", "waf2", "waf3"]
|
|
|
|
|
consul_server: true
|
|
|
|
|
consul_services:
|
2026-01-19 21:00:14 +03:00
|
|
|
- name: "www"
|
2026-01-19 15:06:34 +03:00
|
|
|
port: 443
|
|
|
|
|
check_http: "http://{{ ansible_default_ipv4.address }}:80/"
|
2026-01-20 17:40:16 +03:00
|
|
|
# keepalived_script_user: "byow"
|
2026-01-19 15:06:34 +03:00
|
|
|
# keepalived_monitored_process: "caddy"
|
|
|
|
|
# keepalived_vrrp_password: "{{ secrets.keepalived.secret }}"
|
|
|
|
|
# keepalived_vrrp_ips:
|
|
|
|
|
# - master: "waf1"
|
|
|
|
|
# virtual_router_id: 251
|
|
|
|
|
# addr: "{{ ansible_default_ipv4.address | regex_replace('\\.[0-9]+$', '') }}.251/24"
|
|
|
|
|
# - master: "waf2"
|
|
|
|
|
# virtual_router_id: 252
|
|
|
|
|
# addr: "{{ ansible_default_ipv4.address | regex_replace('\\.[0-9]+$', '') }}.252/24"
|
|
|
|
|
# - master: "waf3"
|
|
|
|
|
# virtual_router_id: 253
|
|
|
|
|
# addr: "{{ ansible_default_ipv4.address | regex_replace('\\.[0-9]+$', '') }}.253/24"
|
|
|
|
|
# # Multipass network doesn't seem to support well multicast.
|
|
|
|
|
# keepalived_unicast_peers:
|
|
|
|
|
# - "{{ hostvars['waf1'].ansible_default_ipv4.address }}"
|
|
|
|
|
# - "{{ hostvars['waf2'].ansible_default_ipv4.address }}"
|
|
|
|
|
# - "{{ hostvars['waf3'].ansible_default_ipv4.address }}"
|
|
|
|
|
unbound_listen_interfaces:
|
|
|
|
|
- "{{ ansible_default_ipv4.address }}"
|
|
|
|
|
unbound_stub_zones:
|
|
|
|
|
- name: "{{ common.consul.datacenter }}.{{ common.consul.domain }}"
|
|
|
|
|
stub_to: "127.0.0.1@8600"
|
2026-01-20 12:27:03 +03:00
|
|
|
caddy_sites: "{{ common.sites }}"
|
2026-02-05 09:52:04 +03:00
|
|
|
# ovh_ldp_cluster: "gra2.logs.ovh.com"
|
|
|
|
|
# ovh_ldp_token: "{{ secrets.ovh_ldp.token }}"
|
2026-01-07 14:27:55 +03:00
|
|
|
roles:
|
2026-01-19 15:06:34 +03:00
|
|
|
- "local_ca_certs"
|
2026-01-07 14:27:55 +03:00
|
|
|
- "consul"
|
2026-01-20 12:27:03 +03:00
|
|
|
- "caddy"
|
2026-01-19 15:06:34 +03:00
|
|
|
# - "keepalived"
|
|
|
|
|
- "unbound"
|
2026-02-05 09:52:04 +03:00
|
|
|
# - "ovh_ldp"
|
2026-01-07 14:27:55 +03:00
|
|
|
tags:
|
2026-01-14 11:03:59 +03:00
|
|
|
- "waf"
|
2026-01-19 15:06:34 +03:00
|
|
|
|
|
|
|
|
- name: MySQL servers
|
|
|
|
|
hosts: mysql
|
|
|
|
|
gather_facts: false
|
|
|
|
|
vars_files:
|
|
|
|
|
- "vars/common.yml"
|
|
|
|
|
- "vars/secrets.yml"
|
|
|
|
|
vars:
|
|
|
|
|
local_ca_certs_ca_passphrase: "{{ secrets.ca.passphrase }}"
|
|
|
|
|
local_ca_certs_default_country_name: "{{ common.certificates.country_name }}"
|
|
|
|
|
local_ca_certs_default_locality_name: "{{ common.certificates.locality_name }}"
|
|
|
|
|
local_ca_certs_default_organization_name: "{{ common.certificates.organization_name }}"
|
|
|
|
|
local_ca_certs_default_email_address: "{{ common.certificates.email_address }}"
|
|
|
|
|
local_ca_certs_list:
|
|
|
|
|
- cn: "{{ ansible_fqdn }}"
|
|
|
|
|
domains:
|
|
|
|
|
- "DNS:{{ ansible_fqdn }}"
|
|
|
|
|
- "DNS:{{ ansible_hostname }}"
|
|
|
|
|
- "IP:{{ ansible_default_ipv4.address }}"
|
|
|
|
|
mysql_databases:
|
|
|
|
|
- "wordpress"
|
|
|
|
|
mysql_users:
|
|
|
|
|
- name: "wordpress"
|
|
|
|
|
password: "{{ secrets.wordpress.mysql_password }}"
|
|
|
|
|
priv: "wordpress.*:ALL"
|
|
|
|
|
host: "{{ ansible_default_ipv4.network }}/255.255.255.0"
|
|
|
|
|
consul_domain: "{{ common.consul.domain }}"
|
|
|
|
|
consul_datacenter: "{{ common.consul.datacenter }}"
|
|
|
|
|
consul_secret_key: "{{ secrets.consul.secret_key }}"
|
|
|
|
|
consul_key_file: "/etc/ssl/private/{{ ansible_fqdn }}.key"
|
|
|
|
|
consul_cert_file: "/etc/ssl/certs/{{ ansible_fqdn }}.crt"
|
|
|
|
|
consul_servers: ["waf1", "waf2", "waf3"]
|
|
|
|
|
consul_services:
|
|
|
|
|
- name: "test-lab-mysql"
|
|
|
|
|
port: 3306
|
|
|
|
|
check_tcp: "{{ ansible_default_ipv4.address }}:3306"
|
|
|
|
|
roles:
|
|
|
|
|
- "local_ca_certs"
|
|
|
|
|
- "mysql"
|
|
|
|
|
- "consul"
|
|
|
|
|
tags:
|
|
|
|
|
- "mysql"
|
|
|
|
|
|
2026-01-19 16:07:13 +03:00
|
|
|
- name: NFS servers
|
|
|
|
|
hosts: nfs
|
|
|
|
|
gather_facts: false
|
|
|
|
|
vars_files:
|
|
|
|
|
- "vars/common.yml"
|
|
|
|
|
- "vars/secrets.yml"
|
|
|
|
|
vars:
|
|
|
|
|
nfs_server_exports:
|
|
|
|
|
- path: "/srv/wordpress"
|
|
|
|
|
owner: 1001
|
|
|
|
|
group: 33
|
|
|
|
|
clients:
|
|
|
|
|
- address: "www1"
|
|
|
|
|
options: "rw,no_root_squash"
|
|
|
|
|
- address: "www2"
|
|
|
|
|
options: "rw,no_root_squash"
|
|
|
|
|
- address: "www3"
|
|
|
|
|
options: "rw,no_root_squash"
|
|
|
|
|
roles:
|
|
|
|
|
- "nfs_server"
|
|
|
|
|
tags:
|
|
|
|
|
- "nfs"
|
|
|
|
|
|
2026-01-19 15:06:34 +03:00
|
|
|
- name: HTTP Servers
|
|
|
|
|
hosts: www
|
|
|
|
|
gather_facts: false
|
|
|
|
|
vars_files:
|
|
|
|
|
- "vars/common.yml"
|
|
|
|
|
- "vars/secrets.yml"
|
|
|
|
|
vars:
|
|
|
|
|
local_ca_certs_ca_passphrase: "{{ secrets.ca.passphrase }}"
|
|
|
|
|
local_ca_certs_default_country_name: "{{ common.certificates.country_name }}"
|
|
|
|
|
local_ca_certs_default_locality_name: "{{ common.certificates.locality_name }}"
|
|
|
|
|
local_ca_certs_default_organization_name: "{{ common.certificates.organization_name }}"
|
|
|
|
|
local_ca_certs_default_email_address: "{{ common.certificates.email_address }}"
|
|
|
|
|
local_ca_certs_list:
|
|
|
|
|
- cn: "{{ ansible_fqdn }}"
|
|
|
|
|
domains:
|
|
|
|
|
- "DNS:{{ ansible_fqdn }}"
|
|
|
|
|
- "DNS:{{ ansible_hostname }}"
|
|
|
|
|
- "IP:{{ ansible_default_ipv4.address }}"
|
2026-01-19 16:07:13 +03:00
|
|
|
nfs_client_mounts:
|
|
|
|
|
- mount_point: "/var/www/wordpress"
|
|
|
|
|
server: "nfs1:/srv/wordpress"
|
|
|
|
|
owner: 1001
|
|
|
|
|
group: 33
|
|
|
|
|
wordpress_create_master: "www1"
|
2026-01-19 15:06:34 +03:00
|
|
|
wordpress_site: "test.lab"
|
|
|
|
|
wordpress_url: "test.lab"
|
|
|
|
|
wordpress_site_title: "Lab Test"
|
|
|
|
|
wordpress_admin_user: "spock"
|
|
|
|
|
wordpress_admin_password: "{{ secrets.wordpress.admin_password }}"
|
|
|
|
|
wordpress_admin_email: "seb@itik.fr"
|
|
|
|
|
wordpress_themes: ["twentytwentyfive"]
|
|
|
|
|
wordpress_active_theme: "twentytwentyfive"
|
2026-01-20 17:40:16 +03:00
|
|
|
wordpress_db_host: "sql1"
|
2026-01-19 15:06:34 +03:00
|
|
|
wordpress_db_pass: "{{ secrets.wordpress.mysql_password }}"
|
|
|
|
|
consul_domain: "{{ common.consul.domain }}"
|
|
|
|
|
consul_datacenter: "{{ common.consul.datacenter }}"
|
|
|
|
|
consul_secret_key: "{{ secrets.consul.secret_key }}"
|
|
|
|
|
consul_key_file: "/etc/ssl/private/{{ ansible_fqdn }}.key"
|
|
|
|
|
consul_cert_file: "/etc/ssl/certs/{{ ansible_fqdn }}.crt"
|
|
|
|
|
consul_servers: ["waf1", "waf2", "waf3"]
|
|
|
|
|
consul_services:
|
|
|
|
|
- name: "test-lab-www"
|
|
|
|
|
port: 80
|
|
|
|
|
check_http: "http://localhost:80/"
|
|
|
|
|
roles:
|
|
|
|
|
- "local_ca_certs"
|
2026-01-19 16:07:13 +03:00
|
|
|
- "nfs_client"
|
2026-01-19 15:06:34 +03:00
|
|
|
- "wordpress"
|
|
|
|
|
- "consul"
|
|
|
|
|
tags:
|
|
|
|
|
- "www"
|