From 313f52af560af6b651e067d4b9f22b554a4e9cf7 Mon Sep 17 00:00:00 2001
From: Ben Parees <bparees@redhat.com>
Date: Fri, 6 Jan 2017 14:07:51 -0500
Subject: add configuration for build default+overrides settings

---
 roles/openshift_facts/library/openshift_facts.py | 64 ++++++++++++++++++------
 1 file changed, 49 insertions(+), 15 deletions(-)

(limited to 'roles/openshift_facts/library')

diff --git a/roles/openshift_facts/library/openshift_facts.py b/roles/openshift_facts/library/openshift_facts.py
index 10e30f1c4..80f84c103 100755
--- a/roles/openshift_facts/library/openshift_facts.py
+++ b/roles/openshift_facts/library/openshift_facts.py
@@ -1463,7 +1463,9 @@ def merge_facts(orig, new, additive_facts_to_overwrite, protected_facts_to_overw
     # here, just completely overwrite with the new if they are present there.
     inventory_json_facts = ['admission_plugin_config',
                             'kube_admission_plugin_config',
-                            'image_policy_config']
+                            'image_policy_config',
+                            "builddefaults",
+                            "buildoverrides"]
 
     facts = dict()
     for key, value in iteritems(orig):
@@ -1623,11 +1625,7 @@ def safe_get_bool(fact):
 
 
 def set_proxy_facts(facts):
-    """ Set global proxy facts and promote defaults from http_proxy, https_proxy,
-        no_proxy to the more specific builddefaults and builddefaults_git vars.
-           1. http_proxy, https_proxy, no_proxy
-           2. builddefaults_*
-           3. builddefaults_git_*
+    """ Set global proxy facts
 
         Args:
             facts(dict): existing facts
@@ -1649,6 +1647,21 @@ def set_proxy_facts(facts):
             common['no_proxy'].append(common['hostname'])
             common['no_proxy'] = sort_unique(common['no_proxy'])
         facts['common'] = common
+    return facts
+
+
+def set_builddefaults_facts(facts):
+    """ Set build defaults including setting proxy values from http_proxy, https_proxy,
+        no_proxy to the more specific builddefaults and builddefaults_git vars.
+           1. http_proxy, https_proxy, no_proxy
+           2. builddefaults_*
+           3. builddefaults_git_*
+
+        Args:
+            facts(dict): existing facts
+        Returns:
+            facts(dict): Updated facts with missing values
+    """
 
     if 'builddefaults' in facts:
         builddefaults = facts['builddefaults']
@@ -1658,24 +1671,42 @@ def set_proxy_facts(facts):
             builddefaults['http_proxy'] = common['http_proxy']
         if 'https_proxy' not in builddefaults and 'https_proxy' in common:
             builddefaults['https_proxy'] = common['https_proxy']
-        # make no_proxy into a list if it's not
-        if 'no_proxy' in builddefaults and isinstance(builddefaults['no_proxy'], string_types):
-            builddefaults['no_proxy'] = builddefaults['no_proxy'].split(",")
         if 'no_proxy' not in builddefaults and 'no_proxy' in common:
             builddefaults['no_proxy'] = common['no_proxy']
+
+        # Create git specific facts from generic values, if git specific values are
+        # not defined.
         if 'git_http_proxy' not in builddefaults and 'http_proxy' in builddefaults:
             builddefaults['git_http_proxy'] = builddefaults['http_proxy']
         if 'git_https_proxy' not in builddefaults and 'https_proxy' in builddefaults:
             builddefaults['git_https_proxy'] = builddefaults['https_proxy']
-        # If we're actually defining a proxy config then create admission_plugin_config
-        # if it doesn't exist, then merge builddefaults[config] structure
-        # into admission_plugin_config
-        if 'config' in builddefaults and ('http_proxy' in builddefaults or
-                                          'https_proxy' in builddefaults):
+        if 'git_no_proxy' not in builddefaults and 'no_proxy' in builddefaults:
+            builddefaults['git_no_proxy'] = builddefaults['no_proxy']
+        # If we're actually defining a builddefaults config then create admission_plugin_config
+        # then merge builddefaults[config] structure into admission_plugin_config
+        if 'config' in builddefaults:
             if 'admission_plugin_config' not in facts['master']:
                 facts['master']['admission_plugin_config'] = dict()
             facts['master']['admission_plugin_config'].update(builddefaults['config'])
-        facts['builddefaults'] = builddefaults
+    return facts
+
+
+def set_buildoverrides_facts(facts):
+    """ Set build overrides
+
+        Args:
+            facts(dict): existing facts
+        Returns:
+            facts(dict): Updated facts with missing values
+    """
+    if 'buildoverrides' in facts:
+        buildoverrides = facts['buildoverrides']
+        # If we're actually defining a buildoverrides config then create admission_plugin_config
+        # then merge buildoverrides[config] structure into admission_plugin_config
+        if 'config' in buildoverrides:
+            if 'admission_plugin_config' not in facts['master']:
+                facts['master']['admission_plugin_config'] = dict()
+            facts['master']['admission_plugin_config'].update(buildoverrides['config'])
 
     return facts
 
@@ -1814,6 +1845,7 @@ class OpenShiftFacts(object):
             OpenShiftFactsUnsupportedRoleError:
     """
     known_roles = ['builddefaults',
+                   'buildoverrides',
                    'clock',
                    'cloudprovider',
                    'common',
@@ -1918,6 +1950,8 @@ class OpenShiftFacts(object):
         facts = set_aggregate_facts(facts)
         facts = set_etcd_facts_if_unset(facts)
         facts = set_proxy_facts(facts)
+        facts = set_builddefaults_facts(facts)
+        facts = set_buildoverrides_facts(facts)
         if not safe_get_bool(facts['common']['is_containerized']):
             facts = set_installed_variant_rpm_facts(facts)
         facts = set_nodename(facts)
-- 
cgit v1.2.3