diff options
| author | OpenShift Bot <eparis+openshiftbot@redhat.com> | 2017-07-18 00:12:51 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-07-18 00:12:51 -0400 | 
| commit | 99f37b81671fd103d6bf8756d5dd17f56fa03e0c (patch) | |
| tree | 02306ea6cd31bb1487cecbc9a4e7c5dc772d3a8a /roles | |
| parent | a786acd3e6f4ab1fa6b7c4e57d45a8e9fe09be58 (diff) | |
| parent | b99b5544d49d06c5c8b450f4ba9b8f6c160db8cb (diff) | |
| download | openshift-99f37b81671fd103d6bf8756d5dd17f56fa03e0c.tar.gz openshift-99f37b81671fd103d6bf8756d5dd17f56fa03e0c.tar.bz2 openshift-99f37b81671fd103d6bf8756d5dd17f56fa03e0c.tar.xz openshift-99f37b81671fd103d6bf8756d5dd17f56fa03e0c.zip  | |
Merge pull request #4762 from tbielawa/bz1470165_bz1468424
Merged by openshift-bot
Diffstat (limited to 'roles')
| -rwxr-xr-x | roles/openshift_facts/library/openshift_facts.py | 101 | 
1 files changed, 69 insertions, 32 deletions
diff --git a/roles/openshift_facts/library/openshift_facts.py b/roles/openshift_facts/library/openshift_facts.py index 04b5dc86b..beef77896 100755 --- a/roles/openshift_facts/library/openshift_facts.py +++ b/roles/openshift_facts/library/openshift_facts.py @@ -1643,38 +1643,75 @@ def set_proxy_facts(facts):      if 'common' in facts:          common = facts['common'] -        # No openshift_no_proxy settings detected, empty list for now -        if 'no_proxy' not in common: -            common['no_proxy'] = [] - -        # _no_proxy settings set. It is just a simple string, not a -        # list or anything -        elif 'no_proxy' in common and isinstance(common['no_proxy'], string_types): -            # no_proxy is now a list of all the comma-separated items -            # in the _no_proxy value -            common['no_proxy'] = common['no_proxy'].split(",") - -            # at this point common['no_proxy'] is a LIST datastructure. It -            # may be empty, or it may contain some hostnames or ranges. - -            # We always add local dns domain, the service domain, and -            # ourselves, no matter what (if you are setting any -            # NO_PROXY values) -            common['no_proxy'].append('.svc') -            common['no_proxy'].append('.' + common['dns_domain']) -            common['no_proxy'].append(common['hostname']) - -        # You are also setting system proxy vars, openshift_http_proxy/openshift_https_proxy -        if 'http_proxy' in common or 'https_proxy' in common: -            # You want to generate no_proxy hosts and it's a boolean value -            if 'generate_no_proxy_hosts' in common and safe_get_bool(common['generate_no_proxy_hosts']): -                # And you want to set up no_proxy for internal hostnames -                if 'no_proxy_internal_hostnames' in common: -                    # Split the internal_hostnames string by a comma -                    # and add that list to the overall no_proxy list -                    common['no_proxy'].extend(common['no_proxy_internal_hostnames'].split(',')) - -        common['no_proxy'] = ','.join(sort_unique(common['no_proxy'])) +        ###################################################################### +        # We can exit early now if we don't need to set any proxy facts +        proxy_params = ['no_proxy', 'https_proxy', 'http_proxy'] +        # If any of the known Proxy Params (pp) are defined +        proxy_settings_defined = any( +            [True for pp in proxy_params if pp in common] +        ) + +        if not proxy_settings_defined: +            common['no_proxy'] = '' +            return facts + +        # As of 3.6 if ANY of the proxy parameters are defined in the +        # inventory then we MUST add certain domains to the NO_PROXY +        # environment variable. + +        ###################################################################### + +        # Spot to build up some data we may insert later +        raw_no_proxy_list = [] + +        # Automatic 3.6 NO_PROXY additions if a proxy is in use +        svc_cluster_name = ['.svc', '.' + common['dns_domain'], common['hostname']] + +        # auto_hosts: Added to NO_PROXY list if any proxy params are +        # set in the inventory. This a list of the FQDNs of all +        # cluster hosts: +        auto_hosts = common['no_proxy_internal_hostnames'].split(',') + +        # custom_no_proxy_hosts: If you define openshift_no_proxy in +        # inventory we automatically add those hosts to the list: +        if 'no_proxy' in common: +            custom_no_proxy_hosts = common['no_proxy'].split(',') +        else: +            custom_no_proxy_hosts = [] + +        # This should exist no matter what. Defaults to true. +        if 'generate_no_proxy_hosts' in common: +            generate_no_proxy_hosts = safe_get_bool(common['generate_no_proxy_hosts']) + +        ###################################################################### + +        # You set a proxy var. Now we are obliged to add some things +        raw_no_proxy_list = svc_cluster_name + custom_no_proxy_hosts + +        # You did not turn openshift_generate_no_proxy_hosts to False +        if generate_no_proxy_hosts: +            raw_no_proxy_list.extend(auto_hosts) + +        ###################################################################### + +        # Was anything actually added? There should be something by now. +        processed_no_proxy_list = sort_unique(raw_no_proxy_list) +        if processed_no_proxy_list != list(): +            common['no_proxy'] = ','.join(processed_no_proxy_list) +        else: +            # Somehow we got an empty list. This should have been +            # skipped by now in the 'return' earlier. If +            # common['no_proxy'] is DEFINED it will cause unexpected +            # behavior and bad templating. Ensure it does not +            # exist. Even an empty list or string will have undesired +            # side-effects. +            del common['no_proxy'] + +        ###################################################################### +        # In case you were wondering, because 'common' is a reference +        # to the object facts['common'], there is no need to re-assign +        # it. +      return facts  | 
