From 7d1ab3374e0b8c35ecbd7fb2339fc93c367c5c19 Mon Sep 17 00:00:00 2001
From: Denis Kadyshev <metajiji@gmail.com>
Date: Thu, 9 Apr 2020 15:25:44 +0700
Subject: [PATCH] Proxy fixes (#5869)

* Fix proxy and module_hotfixes

On CentOS 8 with proxy ansible render inline `proxy` and `module_hotfixes` options.

For example:

`proxy=http://127.0.0.1:3128module_hotfixes=True`

But expected result:

```
proxy=http://127.0.0.1:3128
module_hotfixes=True
```

* Use ini_file module for work with ini files

* Prevent duplicates proxy= option in /etc/yum.conf

Module `lineinfile` is weak, use most powerful module `ini_file` and add or remove `proxy=` when `http_proxy` is defined or not.
---
 roles/bootstrap-os/tasks/bootstrap-centos.yml       | 13 ++++++-------
 roles/container-engine/docker/tasks/main.yml        |  9 +++++----
 .../docker/templates/rh_docker.repo.j2              |  1 +
 3 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/roles/bootstrap-os/tasks/bootstrap-centos.yml b/roles/bootstrap-os/tasks/bootstrap-centos.yml
index 4bfe984fd..5429cf62c 100644
--- a/roles/bootstrap-os/tasks/bootstrap-centos.yml
+++ b/roles/bootstrap-os/tasks/bootstrap-centos.yml
@@ -42,15 +42,14 @@
     - not centos_fastestmirror_enabled
 
 - name: Add proxy to /etc/yum.conf if http_proxy is defined
-  lineinfile:
+  ini_file:
     path: "/etc/yum.conf"
-    regexp: "^proxy=.*$"
-    line: "proxy={{ http_proxy }}"
-    create: true
-    state: present
+    section: main
+    option: proxy
+    value: "{{ http_proxy | default(omit) }}"
+    state: "{{ http_proxy | default(False) | ternary('present', 'absent') }}"
+    no_extra_spaces: true
   become: true
-  when:
-    - http_proxy is defined
 
 - name: Gather host facts to get ansible_distribution_major_version
   setup:
diff --git a/roles/container-engine/docker/tasks/main.yml b/roles/container-engine/docker/tasks/main.yml
index 85d50e576..836c2b8f8 100644
--- a/roles/container-engine/docker/tasks/main.yml
+++ b/roles/container-engine/docker/tasks/main.yml
@@ -136,11 +136,12 @@
   when: ansible_distribution in ["CentOS","RedHat","OracleLinux"] and not is_ostree
 
 - name: Edit copy of yum.conf to set obsoletes=0
-  lineinfile:
+  ini_file:
     path: "{{ docker_yum_conf }}"
-    state: present
-    regexp: '^obsoletes='
-    line: 'obsoletes=0'
+    section: main
+    option: obsoletes
+    value: "0"
+    no_extra_spaces: true
   when: ansible_distribution in ["CentOS","RedHat","OracleLinux"] and not is_ostree
 
 - name: ensure docker packages are installed
diff --git a/roles/container-engine/docker/templates/rh_docker.repo.j2 b/roles/container-engine/docker/templates/rh_docker.repo.j2
index 81f9c37d5..fe01ed2e6 100644
--- a/roles/container-engine/docker/templates/rh_docker.repo.j2
+++ b/roles/container-engine/docker/templates/rh_docker.repo.j2
@@ -6,4 +6,5 @@ gpgcheck={{ '1' if docker_rh_repo_gpgkey else '0' }}
 keepcache={{ docker_rpm_keepcache | default('1') }}
 gpgkey={{ docker_rh_repo_gpgkey }}
 {% if http_proxy is defined %}proxy={{ http_proxy }}{% endif %}
+
 {% if ansible_os_family == "RedHat" and ansible_distribution_major_version|int == 8 %}module_hotfixes=True{% endif %}
-- 
GitLab