mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-07-24 22:00:22 -07:00
Add http(s)_proxy support in yum module (#36800)
* added set_env_proxy function for setting proxy environment Added set_env_proxy function, that set system http(s)_proxy environment for fetching RPM if proxy settings set in yum.conf file that fix Issue - #18979 * fix automatic field numbering specification * changed if statement in setting http_proxy environment * Change set_env_proxy function to function with decorator That decorator set system proxy environment from yum.conf and revert back to system configuration after fetching RPM * Minor fix - rename variable schem to scheme - change 'in' to 'startswith' * change decorator set_env_proxy to decorating through contextmanager - added import contextmanager from contextlib - set_env_proxy now decorating through contextmanager - fix http/https setting environment principle
This commit is contained in:
parent
6aed74a97d
commit
1d6bc094cf
1 changed files with 37 additions and 2 deletions
|
@ -266,6 +266,8 @@ try:
|
||||||
except ImportError:
|
except ImportError:
|
||||||
transaction_helpers = False
|
transaction_helpers = False
|
||||||
|
|
||||||
|
from contextlib import contextmanager
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
from ansible.module_utils._text import to_native
|
from ansible.module_utils._text import to_native
|
||||||
from ansible.module_utils.urls import fetch_url
|
from ansible.module_utils.urls import fetch_url
|
||||||
|
@ -640,6 +642,37 @@ def local_envra(path):
|
||||||
header[rpm.RPMTAG_ARCH])
|
header[rpm.RPMTAG_ARCH])
|
||||||
|
|
||||||
|
|
||||||
|
@contextmanager
|
||||||
|
def set_env_proxy(conf_file, installroot):
|
||||||
|
# setting system proxy environment and saving old, if exists
|
||||||
|
my = yum_base(conf_file, installroot)
|
||||||
|
namepass = ""
|
||||||
|
scheme = ["http", "https"]
|
||||||
|
old_proxy_env = [os.getenv("http_proxy"), os.getenv("https_proxy")]
|
||||||
|
try:
|
||||||
|
if my.conf.proxy:
|
||||||
|
if my.conf.proxy_username:
|
||||||
|
namepass = namepass + my.conf.proxy_username
|
||||||
|
if my.conf.proxy_password:
|
||||||
|
namepass = namepass + ":" + my.conf.proxy_password
|
||||||
|
namepass = namepass + '@'
|
||||||
|
for item in scheme:
|
||||||
|
os.environ[item + "_proxy"] = re.sub(r"(http://)",
|
||||||
|
r"\1" + namepass, my.conf.proxy)
|
||||||
|
yield
|
||||||
|
except yum.Errors.YumBaseError:
|
||||||
|
raise
|
||||||
|
finally:
|
||||||
|
# revert back to previously system configuration
|
||||||
|
for item in scheme:
|
||||||
|
if os.getenv("{0}_proxy".format(item)):
|
||||||
|
del os.environ["{0}_proxy".format(item)]
|
||||||
|
if old_proxy_env[0]:
|
||||||
|
os.environ["http_proxy"] = old_proxy_env[0]
|
||||||
|
if old_proxy_env[1]:
|
||||||
|
os.environ["https_proxy"] = old_proxy_env[1]
|
||||||
|
|
||||||
|
|
||||||
def pkg_to_dict(pkgstr):
|
def pkg_to_dict(pkgstr):
|
||||||
if pkgstr.strip():
|
if pkgstr.strip():
|
||||||
n, e, v, r, a, repo = pkgstr.split('|')
|
n, e, v, r, a, repo = pkgstr.split('|')
|
||||||
|
@ -762,7 +795,8 @@ def install(module, items, repoq, yum_basecmd, conf_file, en_repos, dis_repos, i
|
||||||
module.fail_json(**res)
|
module.fail_json(**res)
|
||||||
|
|
||||||
if '://' in spec:
|
if '://' in spec:
|
||||||
package = fetch_rpm_from_url(spec, module=module)
|
with set_env_proxy(conf_file, installroot):
|
||||||
|
package = fetch_rpm_from_url(spec, module=module)
|
||||||
else:
|
else:
|
||||||
package = spec
|
package = spec
|
||||||
|
|
||||||
|
@ -1075,7 +1109,8 @@ def latest(module, items, repoq, yum_basecmd, conf_file, en_repos, dis_repos, up
|
||||||
# URL
|
# URL
|
||||||
elif '://' in spec:
|
elif '://' in spec:
|
||||||
# download package so that we can check if it's already installed
|
# download package so that we can check if it's already installed
|
||||||
package = fetch_rpm_from_url(spec, module=module)
|
with set_env_proxy(conf_file, installroot):
|
||||||
|
package = fetch_rpm_from_url(spec, module=module)
|
||||||
envra = local_envra(package)
|
envra = local_envra(package)
|
||||||
|
|
||||||
if envra is None:
|
if envra is None:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue