mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-07-22 12:50:22 -07:00
Make apache2_mod_proxy work with Python 3, half-way modern Apache 2 versions, and add basic tests (#9762)
* Move Apache 2 installation to setup role. * Make module work with Python 3. * Add basic tests. * Add changelog fragment. * Simplify change. * Pass referer.
This commit is contained in:
parent
d696bb7b89
commit
a3fd357d81
8 changed files with 341 additions and 30 deletions
7
tests/integration/targets/apache2_mod_proxy/aliases
Normal file
7
tests/integration/targets/apache2_mod_proxy/aliases
Normal file
|
@ -0,0 +1,7 @@
|
|||
# Copyright (c) Ansible Project
|
||||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
azp/posix/3
|
||||
destructive
|
||||
skip/aix
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
# Copyright (c) Ansible Project
|
||||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
dependencies:
|
||||
- setup_remote_constraints
|
||||
- setup_apache2
|
253
tests/integration/targets/apache2_mod_proxy/tasks/main.yml
Normal file
253
tests/integration/targets/apache2_mod_proxy/tasks/main.yml
Normal file
|
@ -0,0 +1,253 @@
|
|||
---
|
||||
####################################################################
|
||||
# WARNING: These are designed specifically for Ansible tests #
|
||||
# and should not be used as examples of how to write Ansible roles #
|
||||
####################################################################
|
||||
|
||||
# Copyright (c) Ansible Project
|
||||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
- meta: end_play
|
||||
when: ansible_os_family not in ['Debian', 'Suse']
|
||||
|
||||
- name: Enable mod_proxy
|
||||
community.general.apache2_module:
|
||||
state: present
|
||||
name: "{{ item }}"
|
||||
loop:
|
||||
- status
|
||||
- proxy
|
||||
- proxy_http
|
||||
- proxy_balancer
|
||||
- lbmethod_byrequests
|
||||
|
||||
- name: Add port 81
|
||||
lineinfile:
|
||||
path: "/etc/apache2/{{ 'ports.conf' if ansible_os_family == 'Debian' else 'listen.conf' }}"
|
||||
line: Listen 81
|
||||
|
||||
- name: Set up virtual host
|
||||
copy:
|
||||
dest: "/etc/apache2/{{ 'sites-available' if ansible_os_family == 'Debian' else 'vhosts.d' }}/000-apache2_mod_proxy-test.conf"
|
||||
content: |
|
||||
<VirtualHost *:81>
|
||||
<Proxy balancer://mycluster>
|
||||
BalancerMember http://127.0.0.1:8080
|
||||
BalancerMember http://127.0.0.1:8081
|
||||
</Proxy>
|
||||
|
||||
<IfModule mod_evasive20.c>
|
||||
DOSBlockingPeriod 0
|
||||
DOSWhiteList 127.0.0.1
|
||||
DOSWhiteList ::1
|
||||
</IfModule>
|
||||
|
||||
<Location "/app/">
|
||||
ProxyPreserveHost On
|
||||
ProxyPass balancer://mycluster/
|
||||
ProxyPassReverse balancer://mycluster/
|
||||
</Location>
|
||||
|
||||
<Location "/balancer-manager">
|
||||
SetHandler balancer-manager
|
||||
Require all granted
|
||||
</Location>
|
||||
</VirtualHost>
|
||||
|
||||
- name: Enable virtual host
|
||||
file:
|
||||
src: /etc/apache2/sites-available/000-apache2_mod_proxy-test.conf
|
||||
dest: /etc/apache2/sites-enabled/000-apache2_mod_proxy-test.conf
|
||||
owner: root
|
||||
group: root
|
||||
state: link
|
||||
when: ansible_os_family not in ['Suse']
|
||||
|
||||
- name: Restart Apache
|
||||
service:
|
||||
name: apache2
|
||||
state: restarted
|
||||
|
||||
- name: Install BeautifulSoup
|
||||
pip:
|
||||
name: "{{ 'BeautifulSoup' if ansible_python_version is version('3', '<') else 'BeautifulSoup4' }}"
|
||||
extra_args: "-c {{ remote_constraints }}"
|
||||
|
||||
- name: Get all current balancer pool members attributes
|
||||
community.general.apache2_mod_proxy:
|
||||
balancer_vhost: localhost:81
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is not changed
|
||||
- result.members | length == 2
|
||||
- result.members[0].port in ["8080", "8081"]
|
||||
- result.members[0].balancer_url == "http://localhost:81/balancer-manager/"
|
||||
- result.members[0].host == "127.0.0.1"
|
||||
- result.members[0].path is none
|
||||
- result.members[0].protocol == "http"
|
||||
- result.members[1].port in ["8080", "8081"]
|
||||
- result.members[1].balancer_url == "http://localhost:81/balancer-manager/"
|
||||
- result.members[1].host == "127.0.0.1"
|
||||
- result.members[1].path is none
|
||||
- result.members[1].protocol == "http"
|
||||
|
||||
- name: Enable member
|
||||
community.general.apache2_mod_proxy:
|
||||
balancer_vhost: localhost:81
|
||||
member_host: 127.0.0.1
|
||||
state: present
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is not changed
|
||||
|
||||
- name: Get all current balancer pool members attributes
|
||||
community.general.apache2_mod_proxy:
|
||||
balancer_vhost: localhost:81
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is not changed
|
||||
- result.members | length == 2
|
||||
- result.members[0].port in ["8080", "8081"]
|
||||
- result.members[0].balancer_url == "http://localhost:81/balancer-manager/"
|
||||
- result.members[0].host == "127.0.0.1"
|
||||
- result.members[0].path is none
|
||||
- result.members[0].protocol == "http"
|
||||
- result.members[0].status.disabled == false
|
||||
- result.members[0].status.drained == false
|
||||
- result.members[0].status.hot_standby == false
|
||||
- result.members[0].status.ignore_errors == false
|
||||
- result.members[1].port in ["8080", "8081"]
|
||||
- result.members[1].balancer_url == "http://localhost:81/balancer-manager/"
|
||||
- result.members[1].host == "127.0.0.1"
|
||||
- result.members[1].path is none
|
||||
- result.members[1].protocol == "http"
|
||||
- result.members[1].status.disabled == false
|
||||
- result.members[1].status.drained == false
|
||||
- result.members[1].status.hot_standby == false
|
||||
- result.members[1].status.ignore_errors == false
|
||||
|
||||
- name: Drain member
|
||||
community.general.apache2_mod_proxy:
|
||||
balancer_vhost: localhost:81
|
||||
member_host: 127.0.0.1
|
||||
state: drained
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
|
||||
# Note that since both members are on the same host, this always affects **both** members!
|
||||
|
||||
- name: Get all current balancer pool members attributes
|
||||
community.general.apache2_mod_proxy:
|
||||
balancer_vhost: localhost:81
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is not changed
|
||||
- result.members | length == 2
|
||||
- result.members[0].port in ["8080", "8081"]
|
||||
- result.members[0].balancer_url == "http://localhost:81/balancer-manager/"
|
||||
- result.members[0].host == "127.0.0.1"
|
||||
- result.members[0].path is none
|
||||
- result.members[0].protocol == "http"
|
||||
- result.members[0].status.disabled == false
|
||||
- result.members[0].status.drained == true
|
||||
- result.members[0].status.hot_standby == false
|
||||
- result.members[0].status.ignore_errors == false
|
||||
- result.members[1].port in ["8080", "8081"]
|
||||
- result.members[1].balancer_url == "http://localhost:81/balancer-manager/"
|
||||
- result.members[1].host == "127.0.0.1"
|
||||
- result.members[1].path is none
|
||||
- result.members[1].protocol == "http"
|
||||
- result.members[1].status.disabled == false
|
||||
- result.members[1].status.drained == true
|
||||
- result.members[1].status.hot_standby == false
|
||||
- result.members[1].status.ignore_errors == false
|
||||
|
||||
- name: Disable member
|
||||
community.general.apache2_mod_proxy:
|
||||
balancer_vhost: localhost:81
|
||||
member_host: 127.0.0.1
|
||||
state: absent
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
|
||||
- name: Get all current balancer pool members attributes
|
||||
community.general.apache2_mod_proxy:
|
||||
balancer_vhost: localhost:81
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is not changed
|
||||
- result.members | length == 2
|
||||
- result.members[0].port in ["8080", "8081"]
|
||||
- result.members[0].balancer_url == "http://localhost:81/balancer-manager/"
|
||||
- result.members[0].host == "127.0.0.1"
|
||||
- result.members[0].path is none
|
||||
- result.members[0].protocol == "http"
|
||||
- result.members[0].status.disabled == true
|
||||
- result.members[0].status.drained == false
|
||||
- result.members[0].status.hot_standby == false
|
||||
- result.members[0].status.ignore_errors == false
|
||||
- result.members[1].port in ["8080", "8081"]
|
||||
- result.members[1].balancer_url == "http://localhost:81/balancer-manager/"
|
||||
- result.members[1].host == "127.0.0.1"
|
||||
- result.members[1].path is none
|
||||
- result.members[1].protocol == "http"
|
||||
- result.members[1].status.disabled == true
|
||||
- result.members[1].status.drained == false
|
||||
- result.members[1].status.hot_standby == false
|
||||
- result.members[1].status.ignore_errors == false
|
||||
|
||||
- name: Enable member
|
||||
community.general.apache2_mod_proxy:
|
||||
balancer_vhost: localhost:81
|
||||
member_host: 127.0.0.1
|
||||
state: present
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
|
||||
- name: Get all current balancer pool members attributes
|
||||
community.general.apache2_mod_proxy:
|
||||
balancer_vhost: localhost:81
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is not changed
|
||||
- result.members | length == 2
|
||||
- result.members[0].port in ["8080", "8081"]
|
||||
- result.members[0].balancer_url == "http://localhost:81/balancer-manager/"
|
||||
- result.members[0].host == "127.0.0.1"
|
||||
- result.members[0].path is none
|
||||
- result.members[0].protocol == "http"
|
||||
- result.members[0].status.disabled == false
|
||||
- result.members[0].status.drained == false
|
||||
- result.members[0].status.hot_standby == false
|
||||
- result.members[0].status.ignore_errors == false
|
||||
- result.members[1].port in ["8080", "8081"]
|
||||
- result.members[1].balancer_url == "http://localhost:81/balancer-manager/"
|
||||
- result.members[1].host == "127.0.0.1"
|
||||
- result.members[1].path is none
|
||||
- result.members[1].protocol == "http"
|
||||
- result.members[1].status.disabled == false
|
||||
- result.members[1].status.drained == false
|
||||
- result.members[1].status.hot_standby == false
|
||||
- result.members[1].status.ignore_errors == false
|
7
tests/integration/targets/apache2_module/meta/main.yml
Normal file
7
tests/integration/targets/apache2_module/meta/main.yml
Normal file
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
# Copyright (c) Ansible Project
|
||||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
dependencies:
|
||||
- setup_apache2
|
|
@ -8,21 +8,6 @@
|
|||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
- name: install apache via apt
|
||||
apt:
|
||||
name: "{{item}}"
|
||||
state: present
|
||||
when: "ansible_os_family == 'Debian'"
|
||||
with_items:
|
||||
- apache2
|
||||
- libapache2-mod-evasive
|
||||
|
||||
- name: install apache via zypper
|
||||
community.general.zypper:
|
||||
name: apache2
|
||||
state: present
|
||||
when: "ansible_os_family == 'Suse'"
|
||||
|
||||
- name: test apache2_module
|
||||
block:
|
||||
- name: get list of enabled modules
|
||||
|
|
30
tests/integration/targets/setup_apache2/tasks/main.yml
Normal file
30
tests/integration/targets/setup_apache2/tasks/main.yml
Normal file
|
@ -0,0 +1,30 @@
|
|||
---
|
||||
####################################################################
|
||||
# WARNING: These are designed specifically for Ansible tests #
|
||||
# and should not be used as examples of how to write Ansible roles #
|
||||
####################################################################
|
||||
|
||||
# Copyright (c) Ansible Project
|
||||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
- name: Install apache via apt
|
||||
apt:
|
||||
name: "{{item}}"
|
||||
state: present
|
||||
when: "ansible_os_family == 'Debian'"
|
||||
with_items:
|
||||
- apache2
|
||||
- libapache2-mod-evasive
|
||||
|
||||
- name: Install apache via zypper
|
||||
community.general.zypper:
|
||||
name: apache2
|
||||
state: present
|
||||
when: "ansible_os_family == 'Suse'"
|
||||
|
||||
- name: Enable mod_slotmem_shm on SuSE
|
||||
apache2_module:
|
||||
name: slotmem_shm
|
||||
state: present
|
||||
when: "ansible_os_family == 'Suse'"
|
Loading…
Add table
Add a link
Reference in a new issue