Explorar o código

add configuration for build default+overrides settings

Ben Parees %!s(int64=8) %!d(string=hai) anos
pai
achega
313f52af56

+ 1 - 0
roles/openshift_builddefaults/tasks/main.yml

@@ -15,6 +15,7 @@
       no_proxy: "{{ openshift_builddefaults_no_proxy | default(None) }}"
       git_http_proxy: "{{ openshift_builddefaults_git_http_proxy | default(None) }}"
       git_https_proxy: "{{ openshift_builddefaults_git_https_proxy | default(None) }}"
+      git_no_proxy: "{{ openshift_builddefaults_git_no_proxy | default(None) }}"
 
 - name: Set builddefaults config structure
   openshift_facts:

+ 14 - 2
roles/openshift_builddefaults/vars/main.yml

@@ -6,16 +6,28 @@ builddefaults_yaml:
       kind: BuildDefaultsConfig
       gitHTTPProxy: "{{ openshift.builddefaults.git_http_proxy | default('', true) }}"
       gitHTTPSProxy: "{{ openshift.builddefaults.git_https_proxy | default('', true) }}"
+      gitNoProxy: "{{ openshift.builddefaults.git_no_proxy | default('', true) }}"
       env:
       - name: HTTP_PROXY
         value: "{{ openshift.builddefaults.http_proxy | default('', true) }}"
       - name: HTTPS_PROXY
         value: "{{ openshift.builddefaults.https_proxy | default('', true) }}"
       - name: NO_PROXY
-        value: "{{ openshift.builddefaults.no_proxy | default('', true) | join(',') }}"
+        value: "{{ openshift.builddefaults.no_proxy | default('', true) }}"
       - name: http_proxy
         value: "{{ openshift.builddefaults.http_proxy | default('', true) }}"
       - name: https_proxy
         value: "{{ openshift.builddefaults.https_proxy | default('', true) }}"
       - name: no_proxy
-        value: "{{ openshift.builddefaults.no_proxy | default('', true) | join(',') }}"
+        value: "{{ openshift.builddefaults.no_proxy | default('', true) }}"
+      imageLabels: "{{ openshift_builddefaults_image_labels | default(None) }}"
+      nodeSelector: "{{ openshift_builddefaults_nodeselectors | default(None) }}"
+      annotations: "{{ openshift_builddefaults_annotations | default(None) }}"
+      #resources: "{{ openshift.builddefaults.resources | default(None) }}"
+      resources:
+        requests:
+          cpu: "{{ openshift_builddefaults_resources_requests_cpu | default(None) }}"
+          memory: "{{ openshift_builddefaults_resources_requests_memory | default(None) }}"
+        limits:
+          cpu: "{{ openshift_builddefaults_resources_limits_cpu | default(None) }}"
+          memory: "{{ openshift_builddefaults_resources_limits_memory | default(None) }}"

+ 15 - 0
roles/openshift_buildoverrides/meta/main.yml

@@ -0,0 +1,15 @@
+---
+galaxy_info:
+  author: Ben Parees
+  description: OpenShift Build Overrides configuration
+  company: Red Hat, Inc.
+  license: Apache License, Version 2.0
+  min_ansible_version: 1.9
+  platforms:
+  - name: EL
+    versions:
+    - 7
+  categories:
+  - cloud
+dependencies:
+- role: openshift_facts

+ 15 - 0
roles/openshift_buildoverrides/tasks/main.yml

@@ -0,0 +1,15 @@
+---
+#- name: Set buildoverrides
+#  openshift_facts:
+#    role: buildoverrides
+#    local_facts:
+#      force_pull: "{{ openshift_buildoverrides_force_pull | default(None) }}"
+#      image_labels: "{{ openshift_buildoverrides_image_labels | default(None) }}"
+#      nodeselectors: "{{ openshift_buildoverrides_nodeselectors | default(None) }}"
+#      annotations: "{{ openshift_buildoverrides_annotations | default(None) }}"
+
+- name: Set buildoverrides config structure
+  openshift_facts:
+    role: buildoverrides
+    local_facts:
+      config: "{{ openshift_buildoverrides_json | default(buildoverrides_yaml) }}"

+ 10 - 0
roles/openshift_buildoverrides/vars/main.yml

@@ -0,0 +1,10 @@
+---
+buildoverrides_yaml:
+  BuildOverrides:
+    configuration:
+      apiVersion: v1
+      kind: BuildOverridesConfig
+      forcePull: "{{ openshift_buildoverrides_force_pull | default('', true) }}"
+      imageLabels: "{{ openshift_buildoverrides_image_labels | default(None) }}"
+      nodeSelector: "{{ openshift_buildoverrides_nodeselectors | default(None) }}"
+      annotations: "{{ openshift_buildoverrides_annotations | default(None) }}"

+ 49 - 15
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)

+ 1 - 0
roles/openshift_master/meta/main.yml

@@ -23,6 +23,7 @@ dependencies:
 - role: openshift_clock
 - role: openshift_cloud_provider
 - role: openshift_builddefaults
+- role: openshift_buildoverrides
 - role: os_firewall
   os_firewall_allow:
   - service: api server https

+ 0 - 21
roles/openshift_master_facts/vars/main.yml

@@ -2,24 +2,3 @@
 openshift_master_config_dir: "{{ openshift.common.config_base }}/master"
 openshift_master_config_file: "{{ openshift_master_config_dir }}/master-config.yaml"
 openshift_master_scheduler_conf: "{{ openshift_master_config_dir }}/scheduler.json"
-
-builddefaults_yaml:
-  BuildDefaults:
-    configuration:
-      apiVersion: v1
-      kind: BuildDefaultsConfig
-      gitHTTPProxy: "{{ openshift.master.builddefaults_git_http_proxy | default(omit, true) }}"
-      gitHTTPSProxy: "{{ openshift.master.builddefaults_git_https_proxy | default(omit, true) }}"
-      env:
-      - name: HTTP_PROXY
-        value: "{{ openshift.master.builddefaults_http_proxy | default(omit, true) }}"
-      - name: HTTPS_PROXY
-        value: "{{ openshift.master.builddefaults_https_proxy | default(omit, true) }}"
-      - name: NO_PROXY
-        value: "{{ openshift.master.builddefaults_no_proxy | default(omit, true) | join(',') }}"
-      - name: http_proxy
-        value: "{{ openshift.master.builddefaults_http_proxy | default(omit, true) }}"
-      - name: https_proxy
-        value: "{{ openshift.master.builddefaults_https_proxy | default(omit, true) }}"
-      - name: no_proxy
-        value: "{{ openshift.master.builddefaults_no_proxy | default(omit, true) | join(',') }}"