Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Properly handle unauthenticated yum proxy config #51915

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions changelogs/fragments/yum-unauthenticated-proxy.yaml
@@ -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
Expand Up @@ -724,6 +724,12 @@ def set_env_proxy(self):
r"(http://)",
r"\g<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
@@ -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 1testuser 1testpassword"
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://1testuser:1testpassword@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://1testuser:1testpassword@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=1testuser"
state: present

- lineinfile:
- name: set proxy_password config in yum.conf
lineinfile:
path: /etc/yum.conf
line: "proxy_password=1testpassword"
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://1testuser:1testpassword@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=1testuser"
state: absent

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