Skip to content

Commit

Permalink
Properly handle unauthenticated yum proxy config (ansible#51915)
Browse files Browse the repository at this point in the history
Fixes ansible#51548

Signed-off-by: Adam Miller <admiller@redhat.com>
(cherry picked from commit 2721ed2)
  • Loading branch information
maxamillion authored and 1kaw committed Feb 14, 2019
1 parent 396a2f7 commit dd97346
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 17 deletions.
2 changes: 2 additions & 0 deletions changelogs/fragments/yum-unauthenticated-proxy.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
bugfixes:
- yum - properly handle a proxy config in yum.conf for an unauthenticated proxy
6 changes: 6 additions & 0 deletions lib/ansible/modules/packaging/os/yum.py
Original file line number Diff line number Diff line change
Expand Up @@ -736,6 +736,12 @@ def set_env_proxy(self):
r"(http://)",
r"\1" + namepass, proxy_url
)
else:
for item in scheme:
os.environ[item + "_proxy"] = re.sub(
r"(http://)",
r"\g<1>", proxy_url
)
yield
except yum.Errors.YumBaseError:
raise
Expand Down
97 changes: 80 additions & 17 deletions test/integration/targets/yum/tasks/proxy.yml
Original file line number Diff line number Diff line change
@@ -1,24 +1,74 @@
- name: test yum proxy settings
block:
- yum:
- name: install tinyproxy
yum:
name: 'https://s3.amazonaws.com/ansible-ci-files/test/integration/targets/yum/tinyproxy-1.10.0-3.el7.x86_64.rpm'
state: installed

- lineinfile:
# systemd doesn't play nice with this in a container for some reason
- name: start tinyproxy (systemd with tiny proxy does not work in container)
shell: tinyproxy
changed_when: false

# test proxy without auth
- name: set unauthenticated proxy in yum.conf
lineinfile:
path: /etc/yum.conf
line: "proxy=http://127.0.0.1:8888"
state: present

- name: install ninvaders with unauthenticated proxy
yum:
name: 'https://s3.amazonaws.com/ansible-ci-files/test/integration/targets/yum/ninvaders-0.1.1-18.el7.x86_64.rpm'
state: installed
register: yum_proxy_result

- assert:
that:
- "yum_proxy_result.changed"
- "'msg' in yum_proxy_result"
- "'rc' in yum_proxy_result"

- name: uninstall ninvaders with unauthenticated proxy
yum:
name: ninvaders
state: absent
register: yum_proxy_result

- assert:
that:
- "yum_proxy_result.changed"
- "'msg' in yum_proxy_result"
- "'rc' in yum_proxy_result"

- name: unset unauthenticated proxy in yum.conf
lineinfile:
path: /etc/yum.conf
line: "proxy=http://127.0.0.1:8888"
state: absent

# test proxy with auth
- name: set authenticated proxy config in tinyproxy.conf
lineinfile:
path: /etc/tinyproxy/tinyproxy.conf
line: "BasicAuth testuser testpassword"
state: present

# systemd doesn't play nice with this in a container for some reason
- shell: tinyproxy
- name: SIGHUP tinyproxy to reload config (workaround because of systemd+tinyproxy in container)
shell: kill -HUP $(ps -ef | grep tinyproxy | grep -v grep | awk '{print $2}')
changed_when: false
args:
executable: /usr/bin/bash

- lineinfile:
- name: set authenticated proxy config in yum.conf
lineinfile:
path: /etc/yum.conf
line: "proxy=http://testuser:testpassword@127.0.0.1:8888"
state: present

- yum:
- name: install ninvaders with authenticated proxy
yum:
name: 'https://s3.amazonaws.com/ansible-ci-files/test/integration/targets/yum/ninvaders-0.1.1-18.el7.x86_64.rpm'
state: installed
register: yum_proxy_result
Expand All @@ -29,31 +79,37 @@
- "'msg' in yum_proxy_result"
- "'rc' in yum_proxy_result"

- yum:
- name: uninstall ninvaders with authenticated proxy
yum:
name: ninvaders
state: absent

- lineinfile:
- name: unset authenticated proxy config in yum.conf
lineinfile:
path: /etc/yum.conf
line: "proxy=http://testuser:testpassword@127.0.0.1:8888"
state: absent

- lineinfile:
- name: set proxy config in yum.conf
lineinfile:
path: /etc/yum.conf
line: "proxy=http://127.0.0.1:8888"
state: present

- lineinfile:
- name: set proxy_username config in yum.conf
lineinfile:
path: /etc/yum.conf
line: "proxy_username=testuser"
state: present

- lineinfile:
- name: set proxy_password config in yum.conf
lineinfile:
path: /etc/yum.conf
line: "proxy_password=testpassword"
state: present

- yum:
- name: install ninvaders with proxy, proxy_username, and proxy_password config in yum.conf
yum:
name: 'https://s3.amazonaws.com/ansible-ci-files/test/integration/targets/yum/ninvaders-0.1.1-18.el7.x86_64.rpm'
state: installed
register: yum_proxy_result
Expand All @@ -65,30 +121,37 @@
- "'rc' in yum_proxy_result"

always:
- yum:
#cleanup
- name: uninstall tinyproxy
yum:
name: tinyproxy
state: absent

- yum:
- name: uninstall ninvaders
yum:
name: ninvaders
state: absent

- lineinfile:
- name: ensure unset authenticated proxy
lineinfile:
path: /etc/yum.conf
line: "proxy=http://testuser:testpassword@127.0.0.1:8888"
state: absent

- lineinfile:
- name: ensure unset proxy
lineinfile:
path: /etc/yum.conf
line: "proxy=http://127.0.0.1:8888"
state: absent

- lineinfile:
- name: ensure unset proxy_username
lineinfile:
path: /etc/yum.conf
line: "proxy_username=testuser"
state: absent

- lineinfile:
- name: ensure unset proxy_password
lineinfile:
path: /etc/yum.conf
line: "proxy_password=testpassword"
state: absent
Expand Down

0 comments on commit dd97346

Please sign in to comment.