feat(tests): add tls and default tests for vagrant and docker
This commit is contained in:
parent
6903225edd
commit
8330cc750c
@ -6,12 +6,7 @@ deploy_haproxy_version: latest
|
|||||||
deploy_haproxy_env_variables: {}
|
deploy_haproxy_env_variables: {}
|
||||||
deploy_haproxy_start_service: true
|
deploy_haproxy_start_service: true
|
||||||
deploy_haproxy_cert_dir: ""
|
deploy_haproxy_cert_dir: ""
|
||||||
|
|
||||||
# docker-only options
|
|
||||||
deploy_haproxy_extra_container_volumes: []
|
deploy_haproxy_extra_container_volumes: []
|
||||||
|
|
||||||
# Options from the "default" config block in haproxy.cfg
|
|
||||||
# The default values here are usually set, but you can change any of them.
|
|
||||||
deploy_haproxy_global:
|
deploy_haproxy_global:
|
||||||
- log /dev/log local0
|
- log /dev/log local0
|
||||||
- log /dev/log local1 notice
|
- log /dev/log local1 notice
|
||||||
@ -49,11 +44,6 @@ deploy_haproxy_backends:
|
|||||||
# - server srv_nginx1 172.17.0.4:80 check inter 5s
|
# - server srv_nginx1 172.17.0.4:80 check inter 5s
|
||||||
# - server srv_nginx2 172.17.0.3:80 check inter 5s
|
# - server srv_nginx2 172.17.0.3:80 check inter 5s
|
||||||
|
|
||||||
# listen configuration blocks
|
|
||||||
# the default values expose a monitoring listener on all interfaces on port 9000
|
|
||||||
# /stats returns the haproxy dashboard (please change the user and password in the configuration)
|
|
||||||
# /health returns a 200 OK response as long as haproxy is alive and well
|
|
||||||
# /metrics returns prometheus metrics for the haproxy instance
|
|
||||||
deploy_haproxy_listen:
|
deploy_haproxy_listen:
|
||||||
- name: monitoring
|
- name: monitoring
|
||||||
options:
|
options:
|
||||||
|
@ -4,3 +4,176 @@
|
|||||||
gather_facts: true
|
gather_facts: true
|
||||||
become: true
|
become: true
|
||||||
tasks:
|
tasks:
|
||||||
|
- name: "Test: haproxy user and group"
|
||||||
|
block:
|
||||||
|
- name: "Getent user haproxy"
|
||||||
|
ansible.builtin.getent:
|
||||||
|
database: passwd
|
||||||
|
key: haproxy
|
||||||
|
register: haproxy_user
|
||||||
|
|
||||||
|
- name: "Getent group haproxy"
|
||||||
|
ansible.builtin.getent:
|
||||||
|
database: group
|
||||||
|
key: haproxy
|
||||||
|
register: haproxy_group
|
||||||
|
|
||||||
|
- name: "Verify haproxy user and group"
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- not haproxy_user.failed
|
||||||
|
- not haproxy_group.failed
|
||||||
|
- "'haproxy' in haproxy_user.ansible_facts.getent_passwd.keys()"
|
||||||
|
- "'/var/lib/haproxy' in haproxy_user.ansible_facts.getent_passwd['haproxy']"
|
||||||
|
- "'/bin/false' in haproxy_user.ansible_facts.getent_passwd['haproxy']"
|
||||||
|
- "'haproxy' in haproxy_group.ansible_facts.getent_group.keys()"
|
||||||
|
|
||||||
|
- name: "Test: directory /etc/haproxy"
|
||||||
|
block:
|
||||||
|
- name: "Stat directory /etc/haproxy"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/etc/haproxy"
|
||||||
|
register: stat_etc_haproxy
|
||||||
|
|
||||||
|
- name: "Stat file /etc/haproxy/haproxy.env"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/etc/haproxy/haproxy.env"
|
||||||
|
register: stat_etc_haproxy_haproxy_env
|
||||||
|
|
||||||
|
- name: "Stat file /etc/haproxy/haproxy.cfg"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/etc/haproxy/haproxy.cfg"
|
||||||
|
register: stat_etc_haproxy_haproxy_cfg
|
||||||
|
|
||||||
|
- name: "Slurp file /etc/haproxy/haproxy.cfg"
|
||||||
|
ansible.builtin.slurp:
|
||||||
|
src: "/etc/haproxy/haproxy.cfg"
|
||||||
|
register: slurp_etc_haproxy_haproxy_cfg
|
||||||
|
|
||||||
|
- name: "Verify directory /etc/haproxy"
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- stat_etc_haproxy.stat.exists
|
||||||
|
- stat_etc_haproxy.stat.isdir
|
||||||
|
- stat_etc_haproxy.stat.pw_name == 'haproxy'
|
||||||
|
- stat_etc_haproxy.stat.gr_name == 'haproxy'
|
||||||
|
- stat_etc_haproxy.stat.mode == '0755'
|
||||||
|
- stat_etc_haproxy_haproxy_env.stat.exists
|
||||||
|
- stat_etc_haproxy_haproxy_env.stat.isreg
|
||||||
|
- stat_etc_haproxy_haproxy_env.stat.pw_name == 'haproxy'
|
||||||
|
- stat_etc_haproxy_haproxy_env.stat.gr_name == 'haproxy'
|
||||||
|
- stat_etc_haproxy_haproxy_env.stat.mode == '0600'
|
||||||
|
- stat_etc_haproxy_haproxy_cfg.stat.exists
|
||||||
|
- stat_etc_haproxy_haproxy_cfg.stat.isreg
|
||||||
|
- stat_etc_haproxy_haproxy_cfg.stat.pw_name == 'haproxy'
|
||||||
|
- stat_etc_haproxy_haproxy_cfg.stat.gr_name == 'haproxy'
|
||||||
|
- stat_etc_haproxy_haproxy_cfg.stat.mode == '0600'
|
||||||
|
- slurp_etc_haproxy_haproxy_cfg.content != ''
|
||||||
|
|
||||||
|
- name: "Test: directory /var/lib/haproxy"
|
||||||
|
block:
|
||||||
|
- name: "Stat directory /var/lib/haproxy"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/var/lib/haproxy"
|
||||||
|
register: stat_var_lib_haproxy
|
||||||
|
|
||||||
|
- name: "Stat socket /var/lib/haproxy/stats"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/var/lib/haproxy/stats"
|
||||||
|
register: stat_var_lib_haproxy_stats
|
||||||
|
|
||||||
|
- name: "Verify directory /var/lib/haproxy"
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- stat_var_lib_haproxy.stat.exists
|
||||||
|
- stat_var_lib_haproxy.stat.isdir
|
||||||
|
- stat_var_lib_haproxy.stat.pw_name == 'haproxy'
|
||||||
|
- stat_var_lib_haproxy.stat.gr_name == 'haproxy'
|
||||||
|
- stat_var_lib_haproxy.stat.mode == '0755'
|
||||||
|
- stat_var_lib_haproxy_stats.stat.exists
|
||||||
|
- stat_var_lib_haproxy_stats.stat.issock
|
||||||
|
|
||||||
|
- name: "Test: service haproxy"
|
||||||
|
block:
|
||||||
|
- name: "Get service haproxy"
|
||||||
|
ansible.builtin.service_facts:
|
||||||
|
|
||||||
|
- name: "Stat file /etc/systemd/system/haproxy.service"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/etc/systemd/system/haproxy.service"
|
||||||
|
register: stat_etc_systemd_system_haproxy_service
|
||||||
|
|
||||||
|
- name: "Slurp file /etc/systemd/system/haproxy.service"
|
||||||
|
ansible.builtin.slurp:
|
||||||
|
src: "/etc/systemd/system/haproxy.service"
|
||||||
|
register: slurp_etc_systemd_system_haproxy_service
|
||||||
|
|
||||||
|
- name: "Verify service haproxy"
|
||||||
|
vars:
|
||||||
|
haproxy_expected_service_file: |
|
||||||
|
# Ansible managed: Do NOT edit this file manually!
|
||||||
|
[Unit]
|
||||||
|
Description=HAProxy Load Balancer
|
||||||
|
Documentation=man:haproxy(1)
|
||||||
|
Documentation=file:/usr/share/doc/haproxy/configuration.txt.gz
|
||||||
|
ConditionFileNotEmpty=/etc/haproxy/haproxy.cfg
|
||||||
|
After=network-online.target rsyslog.service
|
||||||
|
Wants=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
EnvironmentFile=-/etc/default/haproxy
|
||||||
|
EnvironmentFile=-/etc/haproxy/haproxy.env
|
||||||
|
BindReadOnlyPaths=/dev/log:/var/lib/haproxy/dev/log
|
||||||
|
Environment="CONFIG=/etc/haproxy/haproxy.cfg" "PIDFILE=/run/haproxy.pid" "EXTRAOPTS=-S /run/haproxy-master.sock"
|
||||||
|
ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS
|
||||||
|
ExecReload=/usr/sbin/haproxy -Ws -f $CONFIG -c $EXTRAOPTS
|
||||||
|
ExecReload=/bin/kill -USR2 $MAINPID
|
||||||
|
KillMode=mixed
|
||||||
|
Restart=always
|
||||||
|
SuccessExitStatus=143
|
||||||
|
Type=notify
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- stat_etc_systemd_system_haproxy_service.stat.exists
|
||||||
|
- stat_etc_systemd_system_haproxy_service.stat.isreg
|
||||||
|
- stat_etc_systemd_system_haproxy_service.stat.pw_name == 'root'
|
||||||
|
- stat_etc_systemd_system_haproxy_service.stat.gr_name == 'root'
|
||||||
|
- stat_etc_systemd_system_haproxy_service.stat.mode == '0644'
|
||||||
|
- (slurp_etc_systemd_system_haproxy_service.content|b64decode) == haproxy_expected_service_file
|
||||||
|
- ansible_facts.services['haproxy.service'] is defined
|
||||||
|
- ansible_facts.services['haproxy.service']['source'] == 'systemd'
|
||||||
|
- ansible_facts.services['haproxy.service']['state'] == 'running'
|
||||||
|
- ansible_facts.services['haproxy.service']['status'] == 'enabled'
|
||||||
|
|
||||||
|
- name: "Test: haproxy endpoints"
|
||||||
|
block:
|
||||||
|
- name: "Get haproxy /health"
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "http://127.0.0.1:9000/health"
|
||||||
|
method: GET
|
||||||
|
register: haproxy_health_endpoint
|
||||||
|
|
||||||
|
- name: "Get haproxy /stats"
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "http://127.0.0.1:9000/stats"
|
||||||
|
method: GET
|
||||||
|
force_basic_auth: true
|
||||||
|
url_username: admin
|
||||||
|
url_password: password
|
||||||
|
register: haproxy_stats_endpoint
|
||||||
|
|
||||||
|
- name: "Get haproxy /metrics"
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "http://127.0.0.1:9000/metrics"
|
||||||
|
method: GET
|
||||||
|
register: haproxy_metrics_endpoint
|
||||||
|
|
||||||
|
- name: "Verify haproxy endpoints"
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- haproxy_health_endpoint.status == 200
|
||||||
|
- haproxy_stats_endpoint.status == 200
|
||||||
|
- haproxy_metrics_endpoint.status == 200
|
||||||
|
@ -1,15 +1,10 @@
|
|||||||
---
|
---
|
||||||
deploy_haproxy_deploy_method: docker # deployment method, either host or docker
|
deploy_haproxy_deploy_method: docker # deployment method, either host or docker
|
||||||
deploy_haproxy_version: "2.8"
|
deploy_haproxy_version: latest
|
||||||
|
|
||||||
deploy_haproxy_env_variables: {}
|
deploy_haproxy_env_variables: {}
|
||||||
deploy_haproxy_start_service: true
|
deploy_haproxy_start_service: true
|
||||||
|
deploy_haproxy_cert_dir: ""
|
||||||
# docker-only options
|
|
||||||
deploy_haproxy_extra_container_volumes: []
|
deploy_haproxy_extra_container_volumes: []
|
||||||
|
|
||||||
# Options from the "default" config block in haproxy.cfg
|
|
||||||
# The default values here are usually set, but you can change any of them.
|
|
||||||
deploy_haproxy_global:
|
deploy_haproxy_global:
|
||||||
- log stdout format raw daemon debug
|
- log stdout format raw daemon debug
|
||||||
- stats socket {{ deploy_haproxy_socket }} level admin
|
- stats socket {{ deploy_haproxy_socket }} level admin
|
||||||
@ -26,29 +21,10 @@ deploy_haproxy_defaults:
|
|||||||
- timeout client 5000
|
- timeout client 5000
|
||||||
- timeout server 5000
|
- timeout server 5000
|
||||||
|
|
||||||
deploy_haproxy_frontends:
|
deploy_haproxy_frontends: []
|
||||||
- name: default
|
|
||||||
options:
|
|
||||||
- description default frontend
|
|
||||||
- mode http
|
|
||||||
- bind :1024
|
|
||||||
- default_backend default
|
|
||||||
|
|
||||||
deploy_haproxy_backends:
|
deploy_haproxy_backends: []
|
||||||
- name: default
|
|
||||||
options:
|
|
||||||
- description default backend
|
|
||||||
- option forwardfor
|
|
||||||
- option httpchk
|
|
||||||
- http-check send meth GET uri /
|
|
||||||
- server srv_nginx1 172.17.0.2:80 check inter 5s
|
|
||||||
- server srv_nginx2 172.17.0.3:80 check inter 5s
|
|
||||||
|
|
||||||
# listen configuration blocks
|
|
||||||
# the default values expose a monitoring listener on all interfaces on port 9000
|
|
||||||
# /stats returns the haproxy dashboard (please change the user and password in the configuration)
|
|
||||||
# /health returns a 200 OK response as long as haproxy is alive and well
|
|
||||||
# /metrics returns prometheus metrics for the haproxy instance
|
|
||||||
deploy_haproxy_listen:
|
deploy_haproxy_listen:
|
||||||
- name: monitoring
|
- name: monitoring
|
||||||
options:
|
options:
|
||||||
|
@ -4,3 +4,151 @@
|
|||||||
gather_facts: true
|
gather_facts: true
|
||||||
become: true
|
become: true
|
||||||
tasks:
|
tasks:
|
||||||
|
- name: "Test: directory /etc/haproxy"
|
||||||
|
block:
|
||||||
|
- name: "Stat directory /etc/haproxy"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/etc/haproxy"
|
||||||
|
register: stat_etc_haproxy
|
||||||
|
|
||||||
|
- name: "Stat file /etc/default/haproxy"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/etc/default/haproxy"
|
||||||
|
register: stat_etc_default_haproxy
|
||||||
|
|
||||||
|
- name: "Stat file /etc/haproxy/haproxy.cfg"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/etc/haproxy/haproxy.cfg"
|
||||||
|
register: stat_etc_haproxy_haproxy_cfg
|
||||||
|
|
||||||
|
- name: "Slurp file /etc/haproxy/haproxy.cfg"
|
||||||
|
ansible.builtin.slurp:
|
||||||
|
src: "/etc/haproxy/haproxy.cfg"
|
||||||
|
register: slurp_etc_haproxy_haproxy_cfg
|
||||||
|
|
||||||
|
- name: "Verify directory /etc/haproxy"
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- stat_etc_haproxy.stat.exists
|
||||||
|
- stat_etc_haproxy.stat.isdir
|
||||||
|
- (stat_etc_haproxy.stat.uid | int) == 99
|
||||||
|
- (stat_etc_haproxy.stat.gid | int) == 99
|
||||||
|
- stat_etc_haproxy.stat.mode == '0755'
|
||||||
|
- stat_etc_default_haproxy.stat.exists
|
||||||
|
- stat_etc_default_haproxy.stat.isreg
|
||||||
|
- stat_etc_default_haproxy.stat.pw_name == 'root'
|
||||||
|
- stat_etc_default_haproxy.stat.gr_name == 'root'
|
||||||
|
- stat_etc_default_haproxy.stat.mode == '0600'
|
||||||
|
- stat_etc_haproxy_haproxy_cfg.stat.exists
|
||||||
|
- stat_etc_haproxy_haproxy_cfg.stat.isreg
|
||||||
|
- (stat_etc_haproxy_haproxy_cfg.stat.uid | int) == 99
|
||||||
|
- (stat_etc_haproxy_haproxy_cfg.stat.gid | int) == 99
|
||||||
|
- stat_etc_haproxy_haproxy_cfg.stat.mode == '0600'
|
||||||
|
- slurp_etc_haproxy_haproxy_cfg.content != ''
|
||||||
|
|
||||||
|
- name: "Test: directory /var/lib/haproxy"
|
||||||
|
block:
|
||||||
|
- name: "Stat directory /var/lib/haproxy"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/var/lib/haproxy"
|
||||||
|
register: stat_var_lib_haproxy
|
||||||
|
|
||||||
|
- name: "Stat socket /var/lib/haproxy/stats"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/var/lib/haproxy/stats"
|
||||||
|
register: stat_var_lib_haproxy_stats
|
||||||
|
|
||||||
|
- name: "Verify directory /var/lib/haproxy"
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- stat_var_lib_haproxy.stat.exists
|
||||||
|
- stat_var_lib_haproxy.stat.isdir
|
||||||
|
- (stat_var_lib_haproxy.stat.uid | int) == 99
|
||||||
|
- (stat_var_lib_haproxy.stat.gid | int) == 99
|
||||||
|
- stat_var_lib_haproxy.stat.mode == '0755'
|
||||||
|
- stat_var_lib_haproxy_stats.stat.exists
|
||||||
|
- stat_var_lib_haproxy_stats.stat.issock
|
||||||
|
|
||||||
|
- name: "Test: service haproxy"
|
||||||
|
block:
|
||||||
|
- name: "Get service haproxy"
|
||||||
|
ansible.builtin.service_facts:
|
||||||
|
|
||||||
|
- name: "Stat file /etc/systemd/system/haproxy_container.service"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/etc/systemd/system/haproxy_container.service"
|
||||||
|
register: stat_etc_systemd_system_haproxy_container_service
|
||||||
|
|
||||||
|
- name: "Slurp file /etc/systemd/system/haproxy_container.service"
|
||||||
|
ansible.builtin.slurp:
|
||||||
|
src: "/etc/systemd/system/haproxy_container.service"
|
||||||
|
register: slurp_etc_systemd_system_haproxy_container_service
|
||||||
|
|
||||||
|
- name: "Verify service haproxy"
|
||||||
|
vars:
|
||||||
|
haproxy_expected_service_file: |
|
||||||
|
# Ansible managed: Do NOT edit this file manually!
|
||||||
|
[Unit]
|
||||||
|
After=docker.service
|
||||||
|
PartOf=docker.service
|
||||||
|
Requires=docker.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
EnvironmentFile=/etc/default/haproxy
|
||||||
|
ExecStartPre=-/usr/bin/docker rm -f haproxy
|
||||||
|
ExecStart=/usr/bin/docker run --name haproxy \
|
||||||
|
--rm \
|
||||||
|
--env-file /etc/default/haproxy \
|
||||||
|
--network "host" \
|
||||||
|
--volume "/etc/haproxy:/usr/local/etc/haproxy" \
|
||||||
|
--volume "/var/lib/haproxy:/var/lib/haproxy" \
|
||||||
|
haproxytech/haproxy-debian:latest
|
||||||
|
ExecStop=/usr/bin/docker stop haproxy
|
||||||
|
SyslogIdentifier=haproxy
|
||||||
|
Restart=always
|
||||||
|
RestartSec=10s
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=docker.service
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- stat_etc_systemd_system_haproxy_container_service.stat.exists
|
||||||
|
- stat_etc_systemd_system_haproxy_container_service.stat.isreg
|
||||||
|
- stat_etc_systemd_system_haproxy_container_service.stat.pw_name == 'root'
|
||||||
|
- stat_etc_systemd_system_haproxy_container_service.stat.gr_name == 'root'
|
||||||
|
- stat_etc_systemd_system_haproxy_container_service.stat.mode == '0644'
|
||||||
|
- (slurp_etc_systemd_system_haproxy_container_service.content|b64decode) == haproxy_expected_service_file
|
||||||
|
- ansible_facts.services['haproxy_container.service'] is defined
|
||||||
|
- ansible_facts.services['haproxy_container.service']['source'] == 'systemd'
|
||||||
|
- ansible_facts.services['haproxy_container.service']['state'] == 'running'
|
||||||
|
- ansible_facts.services['haproxy_container.service']['status'] == 'enabled'
|
||||||
|
|
||||||
|
- name: "Test: haproxy endpoints"
|
||||||
|
block:
|
||||||
|
- name: "Get haproxy /health"
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "http://127.0.0.1:9000/health"
|
||||||
|
method: GET
|
||||||
|
register: haproxy_health_endpoint
|
||||||
|
|
||||||
|
- name: "Get haproxy /stats"
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "http://127.0.0.1:9000/stats"
|
||||||
|
method: GET
|
||||||
|
force_basic_auth: true
|
||||||
|
url_username: admin
|
||||||
|
url_password: password
|
||||||
|
register: haproxy_stats_endpoint
|
||||||
|
|
||||||
|
- name: "Get haproxy /metrics"
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "http://127.0.0.1:9000/metrics"
|
||||||
|
method: GET
|
||||||
|
register: haproxy_metrics_endpoint
|
||||||
|
|
||||||
|
- name: "Verify haproxy endpoints"
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- haproxy_health_endpoint.status == 200
|
||||||
|
- haproxy_stats_endpoint.status == 200
|
||||||
|
- haproxy_metrics_endpoint.status == 200
|
||||||
|
8
molecule/with_tls_enabled/converge.yml
Normal file
8
molecule/with_tls_enabled/converge.yml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- name: Converge
|
||||||
|
hosts: all
|
||||||
|
become: true
|
||||||
|
tasks:
|
||||||
|
- name: "Include ednxzu.deploy_haproxy"
|
||||||
|
ansible.builtin.include_role:
|
||||||
|
name: "ednxzu.deploy_haproxy"
|
43
molecule/with_tls_enabled/group_vars/all.yml
Normal file
43
molecule/with_tls_enabled/group_vars/all.yml
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
---
|
||||||
|
deploy_haproxy_deploy_method: host # deployment method, either host or docker
|
||||||
|
deploy_haproxy_version: "2.8"
|
||||||
|
deploy_haproxy_env_variables: {}
|
||||||
|
deploy_haproxy_start_service: true
|
||||||
|
deploy_haproxy_cert_dir: "/tmp/haproxy-cert"
|
||||||
|
deploy_haproxy_extra_container_volumes: []
|
||||||
|
deploy_haproxy_global:
|
||||||
|
- log /dev/log local0
|
||||||
|
- log /dev/log local1 notice
|
||||||
|
- stats socket {{ deploy_haproxy_socket }} level admin
|
||||||
|
- chroot {{ deploy_haproxy_chroot }}
|
||||||
|
- daemon
|
||||||
|
- description hashistack haproxy
|
||||||
|
|
||||||
|
deploy_haproxy_defaults:
|
||||||
|
- log global
|
||||||
|
- mode http
|
||||||
|
- option httplog
|
||||||
|
- option dontlognull
|
||||||
|
- timeout connect 5000
|
||||||
|
- timeout client 5000
|
||||||
|
- timeout server 5000
|
||||||
|
|
||||||
|
deploy_haproxy_frontends: []
|
||||||
|
deploy_haproxy_backends: []
|
||||||
|
deploy_haproxy_listen:
|
||||||
|
- name: monitoring
|
||||||
|
options:
|
||||||
|
- bind :9000 ssl crt /var/lib/haproxy/certs/cert.pem
|
||||||
|
- mode http
|
||||||
|
- option httpchk
|
||||||
|
- stats enable
|
||||||
|
- stats uri /stats
|
||||||
|
- stats refresh 30s
|
||||||
|
- stats show-desc
|
||||||
|
- stats show-legends
|
||||||
|
- stats auth admin:password
|
||||||
|
- http-check send meth GET uri /health ver HTTP/1.1 hdr Host localhost
|
||||||
|
- http-check expect status 200
|
||||||
|
- acl health_check_ok nbsrv() ge 1
|
||||||
|
- monitor-uri /health
|
||||||
|
- http-request use-service prometheus-exporter if { path /metrics }
|
37
molecule/with_tls_enabled/molecule.yml
Normal file
37
molecule/with_tls_enabled/molecule.yml
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
dependency:
|
||||||
|
name: galaxy
|
||||||
|
options:
|
||||||
|
requirements-file: ./requirements.yml
|
||||||
|
driver:
|
||||||
|
name: docker
|
||||||
|
platforms:
|
||||||
|
- name: instance
|
||||||
|
image: geerlingguy/docker-${MOLECULE_TEST_OS}-ansible
|
||||||
|
command: ""
|
||||||
|
volumes:
|
||||||
|
- /sys/fs/cgroup:/sys/fs/cgroup
|
||||||
|
cgroupns_mode: host
|
||||||
|
privileged: true
|
||||||
|
pre_build_image: true
|
||||||
|
provisioner:
|
||||||
|
name: ansible
|
||||||
|
config_options:
|
||||||
|
defaults:
|
||||||
|
remote_tmp: /tmp/.ansible
|
||||||
|
verifier:
|
||||||
|
name: ansible
|
||||||
|
scenario:
|
||||||
|
name: with_tls_enabled
|
||||||
|
test_sequence:
|
||||||
|
- dependency
|
||||||
|
- cleanup
|
||||||
|
- destroy
|
||||||
|
- syntax
|
||||||
|
- create
|
||||||
|
- prepare
|
||||||
|
- converge
|
||||||
|
- idempotence
|
||||||
|
- verify
|
||||||
|
- cleanup
|
||||||
|
- destroy
|
38
molecule/with_tls_enabled/prepare.yml
Normal file
38
molecule/with_tls_enabled/prepare.yml
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
---
|
||||||
|
- name: Prepare
|
||||||
|
hosts: all
|
||||||
|
become: true
|
||||||
|
tasks:
|
||||||
|
- name: "Generate self-signed certificates" # noqa: run-once[task]
|
||||||
|
delegate_to: localhost
|
||||||
|
run_once: true
|
||||||
|
block:
|
||||||
|
- name: "Create temporary cert directory /tmp/haproxy-cert"
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: "/tmp/haproxy-cert"
|
||||||
|
state: directory
|
||||||
|
owner: "1000"
|
||||||
|
group: "1000"
|
||||||
|
mode: "0777"
|
||||||
|
|
||||||
|
- name: "Create private key"
|
||||||
|
community.crypto.openssl_privatekey:
|
||||||
|
path: /tmp/haproxy-cert/cert.pem.key
|
||||||
|
owner: "1000"
|
||||||
|
group: "1000"
|
||||||
|
|
||||||
|
- name: "Create certificate signing request"
|
||||||
|
community.crypto.openssl_csr_pipe:
|
||||||
|
privatekey_path: /tmp/haproxy-cert/cert.pem.key
|
||||||
|
common_name: haproxy.ansible.test
|
||||||
|
organization_name: Ansible, Inc.
|
||||||
|
register: csr
|
||||||
|
|
||||||
|
- name: "Create self-signed certificate from CSR"
|
||||||
|
community.crypto.x509_certificate:
|
||||||
|
path: /tmp/haproxy-cert/cert.pem
|
||||||
|
csr_content: "{{ csr.csr }}"
|
||||||
|
privatekey_path: /tmp/haproxy-cert/cert.pem.key
|
||||||
|
provider: selfsigned
|
||||||
|
owner: "1000"
|
||||||
|
group: "1000"
|
6
molecule/with_tls_enabled/requirements.yml
Normal file
6
molecule/with_tls_enabled/requirements.yml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
# requirements file for molecule
|
||||||
|
roles:
|
||||||
|
- name: ednxzu.manage_repositories
|
||||||
|
- name: ednxzu.manage_apt_packages
|
||||||
|
- name: ednxzu.install_docker
|
182
molecule/with_tls_enabled/verify.yml
Normal file
182
molecule/with_tls_enabled/verify.yml
Normal file
@ -0,0 +1,182 @@
|
|||||||
|
---
|
||||||
|
- name: Verify
|
||||||
|
hosts: all
|
||||||
|
gather_facts: true
|
||||||
|
become: true
|
||||||
|
tasks:
|
||||||
|
- name: "Test: haproxy user and group"
|
||||||
|
block:
|
||||||
|
- name: "Getent user haproxy"
|
||||||
|
ansible.builtin.getent:
|
||||||
|
database: passwd
|
||||||
|
key: haproxy
|
||||||
|
register: haproxy_user
|
||||||
|
|
||||||
|
- name: "Getent group haproxy"
|
||||||
|
ansible.builtin.getent:
|
||||||
|
database: group
|
||||||
|
key: haproxy
|
||||||
|
register: haproxy_group
|
||||||
|
|
||||||
|
- name: "Verify haproxy user and group"
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- not haproxy_user.failed
|
||||||
|
- not haproxy_group.failed
|
||||||
|
- "'haproxy' in haproxy_user.ansible_facts.getent_passwd.keys()"
|
||||||
|
- "'/var/lib/haproxy' in haproxy_user.ansible_facts.getent_passwd['haproxy']"
|
||||||
|
- "'/bin/false' in haproxy_user.ansible_facts.getent_passwd['haproxy']"
|
||||||
|
- "'haproxy' in haproxy_group.ansible_facts.getent_group.keys()"
|
||||||
|
|
||||||
|
- name: "Test: directory /etc/haproxy"
|
||||||
|
block:
|
||||||
|
- name: "Stat directory /etc/haproxy"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/etc/haproxy"
|
||||||
|
register: stat_etc_haproxy
|
||||||
|
|
||||||
|
- name: "Stat file /etc/haproxy/haproxy.env"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/etc/haproxy/haproxy.env"
|
||||||
|
register: stat_etc_haproxy_haproxy_env
|
||||||
|
|
||||||
|
- name: "Stat file /etc/haproxy/haproxy.cfg"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/etc/haproxy/haproxy.cfg"
|
||||||
|
register: stat_etc_haproxy_haproxy_cfg
|
||||||
|
|
||||||
|
- name: "Slurp file /etc/haproxy/haproxy.cfg"
|
||||||
|
ansible.builtin.slurp:
|
||||||
|
src: "/etc/haproxy/haproxy.cfg"
|
||||||
|
register: slurp_etc_haproxy_haproxy_cfg
|
||||||
|
|
||||||
|
- name: "Verify directory /etc/haproxy"
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- stat_etc_haproxy.stat.exists
|
||||||
|
- stat_etc_haproxy.stat.isdir
|
||||||
|
- stat_etc_haproxy.stat.pw_name == 'haproxy'
|
||||||
|
- stat_etc_haproxy.stat.gr_name == 'haproxy'
|
||||||
|
- stat_etc_haproxy.stat.mode == '0755'
|
||||||
|
- stat_etc_haproxy_haproxy_env.stat.exists
|
||||||
|
- stat_etc_haproxy_haproxy_env.stat.isreg
|
||||||
|
- stat_etc_haproxy_haproxy_env.stat.pw_name == 'haproxy'
|
||||||
|
- stat_etc_haproxy_haproxy_env.stat.gr_name == 'haproxy'
|
||||||
|
- stat_etc_haproxy_haproxy_env.stat.mode == '0600'
|
||||||
|
- stat_etc_haproxy_haproxy_cfg.stat.exists
|
||||||
|
- stat_etc_haproxy_haproxy_cfg.stat.isreg
|
||||||
|
- stat_etc_haproxy_haproxy_cfg.stat.pw_name == 'haproxy'
|
||||||
|
- stat_etc_haproxy_haproxy_cfg.stat.gr_name == 'haproxy'
|
||||||
|
- stat_etc_haproxy_haproxy_cfg.stat.mode == '0600'
|
||||||
|
- slurp_etc_haproxy_haproxy_cfg.content != ''
|
||||||
|
|
||||||
|
- name: "Test: directory /var/lib/haproxy"
|
||||||
|
block:
|
||||||
|
- name: "Stat directory /var/lib/haproxy"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/var/lib/haproxy"
|
||||||
|
register: stat_var_lib_haproxy
|
||||||
|
|
||||||
|
- name: "Stat socket /var/lib/haproxy/stats"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/var/lib/haproxy/stats"
|
||||||
|
register: stat_var_lib_haproxy_stats
|
||||||
|
|
||||||
|
- name: "Verify directory /var/lib/haproxy"
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- stat_var_lib_haproxy.stat.exists
|
||||||
|
- stat_var_lib_haproxy.stat.isdir
|
||||||
|
- stat_var_lib_haproxy.stat.pw_name == 'haproxy'
|
||||||
|
- stat_var_lib_haproxy.stat.gr_name == 'haproxy'
|
||||||
|
- stat_var_lib_haproxy.stat.mode == '0755'
|
||||||
|
- stat_var_lib_haproxy_stats.stat.exists
|
||||||
|
- stat_var_lib_haproxy_stats.stat.issock
|
||||||
|
|
||||||
|
- name: "Test: service haproxy"
|
||||||
|
block:
|
||||||
|
- name: "Get service haproxy"
|
||||||
|
ansible.builtin.service_facts:
|
||||||
|
|
||||||
|
- name: "Stat file /etc/systemd/system/haproxy.service"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/etc/systemd/system/haproxy.service"
|
||||||
|
register: stat_etc_systemd_system_haproxy_service
|
||||||
|
|
||||||
|
- name: "Slurp file /etc/systemd/system/haproxy.service"
|
||||||
|
ansible.builtin.slurp:
|
||||||
|
src: "/etc/systemd/system/haproxy.service"
|
||||||
|
register: slurp_etc_systemd_system_haproxy_service
|
||||||
|
|
||||||
|
- name: "Verify service haproxy"
|
||||||
|
vars:
|
||||||
|
haproxy_expected_service_file: |
|
||||||
|
# Ansible managed: Do NOT edit this file manually!
|
||||||
|
[Unit]
|
||||||
|
Description=HAProxy Load Balancer
|
||||||
|
Documentation=man:haproxy(1)
|
||||||
|
Documentation=file:/usr/share/doc/haproxy/configuration.txt.gz
|
||||||
|
ConditionFileNotEmpty=/etc/haproxy/haproxy.cfg
|
||||||
|
After=network-online.target rsyslog.service
|
||||||
|
Wants=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
EnvironmentFile=-/etc/default/haproxy
|
||||||
|
EnvironmentFile=-/etc/haproxy/haproxy.env
|
||||||
|
BindReadOnlyPaths=/dev/log:/var/lib/haproxy/dev/log
|
||||||
|
Environment="CONFIG=/etc/haproxy/haproxy.cfg" "PIDFILE=/run/haproxy.pid" "EXTRAOPTS=-S /run/haproxy-master.sock"
|
||||||
|
ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $EXTRAOPTS
|
||||||
|
ExecReload=/usr/sbin/haproxy -Ws -f $CONFIG -c $EXTRAOPTS
|
||||||
|
ExecReload=/bin/kill -USR2 $MAINPID
|
||||||
|
KillMode=mixed
|
||||||
|
Restart=always
|
||||||
|
SuccessExitStatus=143
|
||||||
|
Type=notify
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- stat_etc_systemd_system_haproxy_service.stat.exists
|
||||||
|
- stat_etc_systemd_system_haproxy_service.stat.isreg
|
||||||
|
- stat_etc_systemd_system_haproxy_service.stat.pw_name == 'root'
|
||||||
|
- stat_etc_systemd_system_haproxy_service.stat.gr_name == 'root'
|
||||||
|
- stat_etc_systemd_system_haproxy_service.stat.mode == '0644'
|
||||||
|
- (slurp_etc_systemd_system_haproxy_service.content|b64decode) == haproxy_expected_service_file
|
||||||
|
- ansible_facts.services['haproxy.service'] is defined
|
||||||
|
- ansible_facts.services['haproxy.service']['source'] == 'systemd'
|
||||||
|
- ansible_facts.services['haproxy.service']['state'] == 'running'
|
||||||
|
- ansible_facts.services['haproxy.service']['status'] == 'enabled'
|
||||||
|
|
||||||
|
- name: "Test: haproxy endpoints"
|
||||||
|
block:
|
||||||
|
- name: "Get haproxy /health"
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "https://127.0.0.1:9000/health"
|
||||||
|
method: GET
|
||||||
|
validate_certs: false
|
||||||
|
register: haproxy_health_endpoint
|
||||||
|
|
||||||
|
- name: "Get haproxy /stats"
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "https://127.0.0.1:9000/stats"
|
||||||
|
method: GET
|
||||||
|
force_basic_auth: true
|
||||||
|
url_username: admin
|
||||||
|
url_password: password
|
||||||
|
validate_certs: false
|
||||||
|
register: haproxy_stats_endpoint
|
||||||
|
|
||||||
|
- name: "Get haproxy /metrics"
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "https://127.0.0.1:9000/metrics"
|
||||||
|
method: GET
|
||||||
|
validate_certs: false
|
||||||
|
register: haproxy_metrics_endpoint
|
||||||
|
|
||||||
|
- name: "Verify haproxy endpoints"
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- haproxy_health_endpoint.status == 200
|
||||||
|
- haproxy_stats_endpoint.status == 200
|
||||||
|
- haproxy_metrics_endpoint.status == 200
|
@ -1,16 +1,10 @@
|
|||||||
---
|
---
|
||||||
deploy_haproxy_deploy_method: docker # deployment method, either host or docker
|
deploy_haproxy_deploy_method: docker # deployment method, either host or docker
|
||||||
deploy_haproxy_version: "2.8"
|
deploy_haproxy_version: "2.8"
|
||||||
|
|
||||||
deploy_haproxy_env_variables: {}
|
deploy_haproxy_env_variables: {}
|
||||||
deploy_haproxy_start_service: true
|
deploy_haproxy_start_service: true
|
||||||
deploy_haproxy_cert_dir: "/tmp/haproxy-cert"
|
deploy_haproxy_cert_dir: "/tmp/haproxy-cert"
|
||||||
|
|
||||||
# docker-only options
|
|
||||||
deploy_haproxy_extra_container_volumes: []
|
deploy_haproxy_extra_container_volumes: []
|
||||||
|
|
||||||
# Options from the "default" config block in haproxy.cfg
|
|
||||||
# The default values here are usually set, but you can change any of them.
|
|
||||||
deploy_haproxy_global:
|
deploy_haproxy_global:
|
||||||
- log stdout format raw daemon debug
|
- log stdout format raw daemon debug
|
||||||
- stats socket {{ deploy_haproxy_socket }} level admin
|
- stats socket {{ deploy_haproxy_socket }} level admin
|
||||||
@ -27,29 +21,8 @@ deploy_haproxy_defaults:
|
|||||||
- timeout client 5000
|
- timeout client 5000
|
||||||
- timeout server 5000
|
- timeout server 5000
|
||||||
|
|
||||||
deploy_haproxy_frontends:
|
deploy_haproxy_frontends: []
|
||||||
- name: default
|
deploy_haproxy_backends: []
|
||||||
options:
|
|
||||||
- description default frontend
|
|
||||||
- mode http
|
|
||||||
- bind :1024
|
|
||||||
- default_backend default
|
|
||||||
|
|
||||||
deploy_haproxy_backends:
|
|
||||||
- name: default
|
|
||||||
options:
|
|
||||||
- description default backend
|
|
||||||
- option forwardfor
|
|
||||||
- option httpchk
|
|
||||||
- http-check send meth GET uri /
|
|
||||||
- server srv_nginx1 172.17.0.2:80 check inter 5s
|
|
||||||
- server srv_nginx2 172.17.0.3:80 check inter 5s
|
|
||||||
|
|
||||||
# listen configuration blocks
|
|
||||||
# the default values expose a monitoring listener on all interfaces on port 9000
|
|
||||||
# /stats returns the haproxy dashboard (please change the user and password in the configuration)
|
|
||||||
# /health returns a 200 OK response as long as haproxy is alive and well
|
|
||||||
# /metrics returns prometheus metrics for the haproxy instance
|
|
||||||
deploy_haproxy_listen:
|
deploy_haproxy_listen:
|
||||||
- name: monitoring
|
- name: monitoring
|
||||||
options:
|
options:
|
||||||
|
@ -24,6 +24,8 @@
|
|||||||
- name: "Create private key"
|
- name: "Create private key"
|
||||||
community.crypto.openssl_privatekey:
|
community.crypto.openssl_privatekey:
|
||||||
path: /tmp/haproxy-cert/cert.pem.key
|
path: /tmp/haproxy-cert/cert.pem.key
|
||||||
|
owner: "1000"
|
||||||
|
group: "1000"
|
||||||
|
|
||||||
- name: "Create certificate signing request"
|
- name: "Create certificate signing request"
|
||||||
community.crypto.openssl_csr_pipe:
|
community.crypto.openssl_csr_pipe:
|
||||||
@ -38,3 +40,5 @@
|
|||||||
csr_content: "{{ csr.csr }}"
|
csr_content: "{{ csr.csr }}"
|
||||||
privatekey_path: /tmp/haproxy-cert/cert.pem.key
|
privatekey_path: /tmp/haproxy-cert/cert.pem.key
|
||||||
provider: selfsigned
|
provider: selfsigned
|
||||||
|
owner: "1000"
|
||||||
|
group: "1000"
|
@ -4,3 +4,154 @@
|
|||||||
gather_facts: true
|
gather_facts: true
|
||||||
become: true
|
become: true
|
||||||
tasks:
|
tasks:
|
||||||
|
- name: "Test: directory /etc/haproxy"
|
||||||
|
block:
|
||||||
|
- name: "Stat directory /etc/haproxy"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/etc/haproxy"
|
||||||
|
register: stat_etc_haproxy
|
||||||
|
|
||||||
|
- name: "Stat file /etc/default/haproxy"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/etc/default/haproxy"
|
||||||
|
register: stat_etc_default_haproxy
|
||||||
|
|
||||||
|
- name: "Stat file /etc/haproxy/haproxy.cfg"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/etc/haproxy/haproxy.cfg"
|
||||||
|
register: stat_etc_haproxy_haproxy_cfg
|
||||||
|
|
||||||
|
- name: "Slurp file /etc/haproxy/haproxy.cfg"
|
||||||
|
ansible.builtin.slurp:
|
||||||
|
src: "/etc/haproxy/haproxy.cfg"
|
||||||
|
register: slurp_etc_haproxy_haproxy_cfg
|
||||||
|
|
||||||
|
- name: "Verify directory /etc/haproxy"
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- stat_etc_haproxy.stat.exists
|
||||||
|
- stat_etc_haproxy.stat.isdir
|
||||||
|
- (stat_etc_haproxy.stat.uid | int) == 99
|
||||||
|
- (stat_etc_haproxy.stat.gid | int) == 99
|
||||||
|
- stat_etc_haproxy.stat.mode == '0755'
|
||||||
|
- stat_etc_default_haproxy.stat.exists
|
||||||
|
- stat_etc_default_haproxy.stat.isreg
|
||||||
|
- stat_etc_default_haproxy.stat.pw_name == 'root'
|
||||||
|
- stat_etc_default_haproxy.stat.gr_name == 'root'
|
||||||
|
- stat_etc_default_haproxy.stat.mode == '0600'
|
||||||
|
- stat_etc_haproxy_haproxy_cfg.stat.exists
|
||||||
|
- stat_etc_haproxy_haproxy_cfg.stat.isreg
|
||||||
|
- (stat_etc_haproxy_haproxy_cfg.stat.uid | int) == 99
|
||||||
|
- (stat_etc_haproxy_haproxy_cfg.stat.gid | int) == 99
|
||||||
|
- stat_etc_haproxy_haproxy_cfg.stat.mode == '0600'
|
||||||
|
- slurp_etc_haproxy_haproxy_cfg.content != ''
|
||||||
|
|
||||||
|
- name: "Test: directory /var/lib/haproxy"
|
||||||
|
block:
|
||||||
|
- name: "Stat directory /var/lib/haproxy"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/var/lib/haproxy"
|
||||||
|
register: stat_var_lib_haproxy
|
||||||
|
|
||||||
|
- name: "Stat socket /var/lib/haproxy/stats"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/var/lib/haproxy/stats"
|
||||||
|
register: stat_var_lib_haproxy_stats
|
||||||
|
|
||||||
|
- name: "Verify directory /var/lib/haproxy"
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- stat_var_lib_haproxy.stat.exists
|
||||||
|
- stat_var_lib_haproxy.stat.isdir
|
||||||
|
- (stat_var_lib_haproxy.stat.uid | int) == 99
|
||||||
|
- (stat_var_lib_haproxy.stat.gid | int) == 99
|
||||||
|
- stat_var_lib_haproxy.stat.mode == '0755'
|
||||||
|
- stat_var_lib_haproxy_stats.stat.exists
|
||||||
|
- stat_var_lib_haproxy_stats.stat.issock
|
||||||
|
|
||||||
|
- name: "Test: service haproxy"
|
||||||
|
block:
|
||||||
|
- name: "Get service haproxy"
|
||||||
|
ansible.builtin.service_facts:
|
||||||
|
|
||||||
|
- name: "Stat file /etc/systemd/system/haproxy_container.service"
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "/etc/systemd/system/haproxy_container.service"
|
||||||
|
register: stat_etc_systemd_system_haproxy_container_service
|
||||||
|
|
||||||
|
- name: "Slurp file /etc/systemd/system/haproxy_container.service"
|
||||||
|
ansible.builtin.slurp:
|
||||||
|
src: "/etc/systemd/system/haproxy_container.service"
|
||||||
|
register: slurp_etc_systemd_system_haproxy_container_service
|
||||||
|
|
||||||
|
- name: "Verify service haproxy"
|
||||||
|
vars:
|
||||||
|
haproxy_expected_service_file: |
|
||||||
|
# Ansible managed: Do NOT edit this file manually!
|
||||||
|
[Unit]
|
||||||
|
After=docker.service
|
||||||
|
PartOf=docker.service
|
||||||
|
Requires=docker.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
EnvironmentFile=/etc/default/haproxy
|
||||||
|
ExecStartPre=-/usr/bin/docker rm -f haproxy
|
||||||
|
ExecStart=/usr/bin/docker run --name haproxy \
|
||||||
|
--rm \
|
||||||
|
--env-file /etc/default/haproxy \
|
||||||
|
--network "host" \
|
||||||
|
--volume "/etc/haproxy:/usr/local/etc/haproxy" \
|
||||||
|
--volume "/var/lib/haproxy:/var/lib/haproxy" \
|
||||||
|
haproxytech/haproxy-debian:latest
|
||||||
|
ExecStop=/usr/bin/docker stop haproxy
|
||||||
|
SyslogIdentifier=haproxy
|
||||||
|
Restart=always
|
||||||
|
RestartSec=10s
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=docker.service
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- stat_etc_systemd_system_haproxy_container_service.stat.exists
|
||||||
|
- stat_etc_systemd_system_haproxy_container_service.stat.isreg
|
||||||
|
- stat_etc_systemd_system_haproxy_container_service.stat.pw_name == 'root'
|
||||||
|
- stat_etc_systemd_system_haproxy_container_service.stat.gr_name == 'root'
|
||||||
|
- stat_etc_systemd_system_haproxy_container_service.stat.mode == '0644'
|
||||||
|
- (slurp_etc_systemd_system_haproxy_container_service.content|b64decode) == haproxy_expected_service_file
|
||||||
|
- ansible_facts.services['haproxy_container.service'] is defined
|
||||||
|
- ansible_facts.services['haproxy_container.service']['source'] == 'systemd'
|
||||||
|
- ansible_facts.services['haproxy_container.service']['state'] == 'running'
|
||||||
|
- ansible_facts.services['haproxy_container.service']['status'] == 'enabled'
|
||||||
|
|
||||||
|
- name: "Test: haproxy endpoints"
|
||||||
|
block:
|
||||||
|
- name: "Get haproxy /health"
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "https://127.0.0.1:9000/health"
|
||||||
|
method: GET
|
||||||
|
validate_certs: false
|
||||||
|
register: haproxy_health_endpoint
|
||||||
|
|
||||||
|
- name: "Get haproxy /stats"
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "https://127.0.0.1:9000/stats"
|
||||||
|
method: GET
|
||||||
|
force_basic_auth: true
|
||||||
|
url_username: admin
|
||||||
|
url_password: password
|
||||||
|
validate_certs: false
|
||||||
|
register: haproxy_stats_endpoint
|
||||||
|
|
||||||
|
- name: "Get haproxy /metrics"
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "https://127.0.0.1:9000/metrics"
|
||||||
|
method: GET
|
||||||
|
validate_certs: false
|
||||||
|
register: haproxy_metrics_endpoint
|
||||||
|
|
||||||
|
- name: "Verify haproxy endpoints"
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- haproxy_health_endpoint.status == 200
|
||||||
|
- haproxy_stats_endpoint.status == 200
|
||||||
|
- haproxy_metrics_endpoint.status == 200
|
Loading…
Reference in New Issue
Block a user