-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Make apache2_mod_proxy work with Python 3, half-way modern Apache 2 v…
…ersions, 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.
- Loading branch information
1 parent
d696bb7
commit a3fd357
Showing
8 changed files
with
341 additions
and
30 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
bugfixes: | ||
- "apache2_mod_proxy - make compatible with Python 3 (https://github.com/ansible-collections/community.general/pull/9762)." | ||
- "apache2_mod_proxy - passing the cluster's page as referer for the member's pages. This makes the module actually work again for halfway modern Apache versions. | ||
According to some comments founds on the net the referer was required since at least 2019 for some versions of Apache 2 | ||
(https://github.com/ansible-collections/community.general/pull/9762)." |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 changes: 253 additions & 0 deletions
253
tests/integration/targets/apache2_mod_proxy/tasks/main.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
Oops, something went wrong.