Преглед изворни кода

Merge pull request #1766 from abutcher/router-selector

Bug 1328119 - router selector not obeyed
Brenton Leanhardt пре 9 година
родитељ
комит
fd2eef29ab

+ 27 - 4
filter_plugins/oo_filters.py

@@ -311,6 +311,16 @@ class FilterModule(object):
                           "color": "red"}}}]
                           "color": "red"}}}]
                 selector = 'color=green'
                 selector = 'color=green'
                 returns = ['node1.example.com']
                 returns = ['node1.example.com']
+
+                nodes = [{"kind": "Node", "metadata": {"name": "node1.example.com",
+                          "labels": {"kubernetes.io/hostname": "node1.example.com",
+                          "color": "green"}}},
+                         {"kind": "Node", "metadata": {"name": "node2.example.com",
+                          "labels": {"kubernetes.io/hostname": "node2.example.com",
+                          "color": "red"}}}]
+                selector = 'color=green,color=red'
+                returns = ['node1.example.com','node2.example.com']
+
             Args:
             Args:
                 nodes (list[dict]): list of node definitions
                 nodes (list[dict]): list of node definitions
                 selector (str): "label=value" node selector to filter `nodes` by
                 selector (str): "label=value" node selector to filter `nodes` by
@@ -323,9 +333,15 @@ class FilterModule(object):
             raise errors.AnsibleFilterError("failed expects selector to be a string")
             raise errors.AnsibleFilterError("failed expects selector to be a string")
         if not re.match('.*=.*', selector):
         if not re.match('.*=.*', selector):
             raise errors.AnsibleFilterError("failed selector does not match \"label=value\" format")
             raise errors.AnsibleFilterError("failed selector does not match \"label=value\" format")
-        label = selector.split('=')[0]
-        value = selector.split('=')[1]
-        return FilterModule.oo_oc_nodes_with_label(nodes, label, value)
+        node_lists = []
+        for node_selector in ''.join(selector.split()).split(','):
+            label = node_selector.split('=')[0]
+            value = node_selector.split('=')[1]
+            node_lists.append(FilterModule.oo_oc_nodes_with_label(nodes, label, value))
+        nodes = set(node_lists[0])
+        for node_list in node_lists[1:]:
+            nodes.intersection_update(node_list)
+        return list(nodes)
 
 
     @staticmethod
     @staticmethod
     def oo_oc_nodes_with_label(nodes, label, value):
     def oo_oc_nodes_with_label(nodes, label, value):
@@ -634,7 +650,9 @@ class FilterModule(object):
 
 
     @staticmethod
     @staticmethod
     def oo_openshift_env(hostvars):
     def oo_openshift_env(hostvars):
-        ''' Return facts which begin with "openshift_"
+        ''' Return facts which begin with "openshift_" and translate
+            legacy facts to their openshift_env counterparts.
+
             Ex: hostvars = {'openshift_fact': 42,
             Ex: hostvars = {'openshift_fact': 42,
                             'theyre_taking_the_hobbits_to': 'isengard'}
                             'theyre_taking_the_hobbits_to': 'isengard'}
                 returns  = {'openshift_fact': 42}
                 returns  = {'openshift_fact': 42}
@@ -647,6 +665,11 @@ class FilterModule(object):
         for key in hostvars:
         for key in hostvars:
             if regex.match(key):
             if regex.match(key):
                 facts[key] = hostvars[key]
                 facts[key] = hostvars[key]
+
+        migrations = {'openshift_router_selector': 'openshift_hosted_router_selector'}
+        for old_fact, new_fact in migrations.iteritems():
+            if old_fact in facts and new_fact not in facts:
+                facts[new_fact] = facts[old_fact]
         return facts
         return facts
 
 
     @staticmethod
     @staticmethod

+ 1 - 1
playbooks/aws/openshift-cluster/config.yml

@@ -11,7 +11,7 @@
     openshift_deployment_type: "{{ deployment_type }}"
     openshift_deployment_type: "{{ deployment_type }}"
     openshift_public_hostname: "{{ ec2_ip_address }}"
     openshift_public_hostname: "{{ ec2_ip_address }}"
     openshift_registry_selector: 'type=infra'
     openshift_registry_selector: 'type=infra'
-    openshift_router_selector: 'type=infra'
+    openshift_hosted_router_selector: 'type=infra'
     openshift_infra_nodes: "{{ g_infra_hosts }}"
     openshift_infra_nodes: "{{ g_infra_hosts }}"
     openshift_node_labels: '{"region": "{{ ec2_region }}", "type": "{{ hostvars[inventory_hostname]["ec2_tag_sub-host-type"] if inventory_hostname in groups["tag_host-type_node"] else hostvars[inventory_hostname]["ec2_tag_host-type"] }}"}'
     openshift_node_labels: '{"region": "{{ ec2_region }}", "type": "{{ hostvars[inventory_hostname]["ec2_tag_sub-host-type"] if inventory_hostname in groups["tag_host-type_node"] else hostvars[inventory_hostname]["ec2_tag_host-type"] }}"}'
     openshift_master_cluster_method: 'native'
     openshift_master_cluster_method: 'native'

+ 1 - 1
playbooks/gce/openshift-cluster/config.yml

@@ -12,7 +12,7 @@
     openshift_deployment_type: "{{ deployment_type }}"
     openshift_deployment_type: "{{ deployment_type }}"
     openshift_hostname: "{{ gce_private_ip }}"
     openshift_hostname: "{{ gce_private_ip }}"
     openshift_registry_selector: 'type=infra'
     openshift_registry_selector: 'type=infra'
-    openshift_router_selector: 'type=infra'
+    openshift_hosted_router_selector: 'type=infra'
     openshift_infra_nodes: "{{ g_infra_hosts }}"
     openshift_infra_nodes: "{{ g_infra_hosts }}"
     openshift_master_cluster_method: 'native'
     openshift_master_cluster_method: 'native'
     openshift_use_openshift_sdn: "{{ lookup('oo_option', 'use_openshift_sdn') }}"
     openshift_use_openshift_sdn: "{{ lookup('oo_option', 'use_openshift_sdn') }}"

+ 1 - 1
playbooks/libvirt/openshift-cluster/config.yml

@@ -14,7 +14,7 @@
     openshift_debug_level: "{{ debug_level }}"
     openshift_debug_level: "{{ debug_level }}"
     openshift_deployment_type: "{{ deployment_type }}"
     openshift_deployment_type: "{{ deployment_type }}"
     openshift_registry_selector: 'type=infra'
     openshift_registry_selector: 'type=infra'
-    openshift_router_selector: 'type=infra'
+    openshift_hosted_router_selector: 'type=infra'
     openshift_infra_nodes: "{{ g_infra_hosts }}"
     openshift_infra_nodes: "{{ g_infra_hosts }}"
     openshift_master_cluster_method: 'native'
     openshift_master_cluster_method: 'native'
     openshift_use_openshift_sdn: "{{ lookup('oo_option', 'use_openshift_sdn') }}"
     openshift_use_openshift_sdn: "{{ lookup('oo_option', 'use_openshift_sdn') }}"

+ 1 - 1
playbooks/openstack/openshift-cluster/config.yml

@@ -11,7 +11,7 @@
     openshift_debug_level: "{{ debug_level }}"
     openshift_debug_level: "{{ debug_level }}"
     openshift_deployment_type: "{{ deployment_type }}"
     openshift_deployment_type: "{{ deployment_type }}"
     openshift_registry_selector: 'type=infra'
     openshift_registry_selector: 'type=infra'
-    openshift_router_selector: 'type=infra'
+    openshift_hosted_router_selector: 'type=infra'
     openshift_infra_nodes: "{{ g_infra_hosts }}"
     openshift_infra_nodes: "{{ g_infra_hosts }}"
     openshift_master_cluster_method: 'native'
     openshift_master_cluster_method: 'native'
     openshift_use_openshift_sdn: "{{ lookup('oo_option', 'use_openshift_sdn') }}"
     openshift_use_openshift_sdn: "{{ lookup('oo_option', 'use_openshift_sdn') }}"

+ 19 - 8
roles/openshift_facts/library/openshift_facts.py

@@ -95,6 +95,7 @@ def migrate_local_facts(facts):
     migrated_facts = migrate_docker_facts(migrated_facts)
     migrated_facts = migrate_docker_facts(migrated_facts)
     migrated_facts = migrate_common_facts(migrated_facts)
     migrated_facts = migrate_common_facts(migrated_facts)
     migrated_facts = migrate_node_facts(migrated_facts)
     migrated_facts = migrate_node_facts(migrated_facts)
+    migrated_facts = migrate_hosted_facts(migrated_facts)
     return migrated_facts
     return migrated_facts
 
 
 def migrate_hosted_facts(facts):
 def migrate_hosted_facts(facts):
@@ -1852,14 +1853,7 @@ class OpenShiftFacts(object):
                         val = [x.strip() for x in val.split(',')]
                         val = [x.strip() for x in val.split(',')]
                     new_local_facts['docker'][key] = list(set(val) - set(['']))
                     new_local_facts['docker'][key] = list(set(val) - set(['']))
 
 
-        for facts in new_local_facts.values():
-            keys_to_delete = []
-            if isinstance(facts, dict):
-                for fact, value in facts.iteritems():
-                    if value == "" or value is None:
-                        keys_to_delete.append(fact)
-                for key in keys_to_delete:
-                    del facts[key]
+        new_local_facts = self.remove_empty_facts(new_local_facts)
 
 
         if new_local_facts != local_facts:
         if new_local_facts != local_facts:
             self.validate_local_facts(new_local_facts)
             self.validate_local_facts(new_local_facts)
@@ -1870,6 +1864,23 @@ class OpenShiftFacts(object):
         self.changed = changed
         self.changed = changed
         return new_local_facts
         return new_local_facts
 
 
+    def remove_empty_facts(self, facts=None):
+        """ Remove empty facts
+
+            Args:
+                facts (dict): facts to clean
+        """
+        facts_to_remove = []
+        for fact, value in facts.iteritems():
+            if isinstance(facts[fact], dict):
+                facts[fact] = self.remove_empty_facts(facts[fact])
+            else:
+                if value == "" or value is None:
+                    facts_to_remove.append(fact)
+        for fact in facts_to_remove:
+            del facts[fact]
+        return facts
+
     def validate_local_facts(self, facts=None):
     def validate_local_facts(self, facts=None):
         """ Validate local facts
         """ Validate local facts
 
 

+ 1 - 0
roles/openshift_hosted/tasks/router.yml

@@ -32,6 +32,7 @@
     {{ openshift.common.client_binary }} --api-version='v1' -o json
     {{ openshift.common.client_binary }} --api-version='v1' -o json
     get nodes -n default --config={{ openshift.common.config_base }}/master/admin.kubeconfig
     get nodes -n default --config={{ openshift.common.config_base }}/master/admin.kubeconfig
   register: openshift_hosted_router_nodes_json
   register: openshift_hosted_router_nodes_json
+  changed_when: false
   when: openshift.hosted.router.replicas | default(None) == None
   when: openshift.hosted.router.replicas | default(None) == None
 
 
 - name: Collect nodes matching router selector
 - name: Collect nodes matching router selector

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

@@ -54,7 +54,6 @@
       mcs_allocator_range: "{{ osm_mcs_allocator_range | default(None) }}"
       mcs_allocator_range: "{{ osm_mcs_allocator_range | default(None) }}"
       mcs_labels_per_project: "{{ osm_mcs_labels_per_project | default(None) }}"
       mcs_labels_per_project: "{{ osm_mcs_labels_per_project | default(None) }}"
       uid_allocator_range: "{{ osm_uid_allocator_range | default(None) }}"
       uid_allocator_range: "{{ osm_uid_allocator_range | default(None) }}"
-      router_selector: "{{ openshift_router_selector | default(None) }}"
       registry_selector: "{{ openshift_registry_selector | default(None) }}"
       registry_selector: "{{ openshift_registry_selector | default(None) }}"
       api_server_args: "{{ osm_api_server_args | default(None) }}"
       api_server_args: "{{ osm_api_server_args | default(None) }}"
       controller_args: "{{ osm_controller_args | default(None) }}"
       controller_args: "{{ osm_controller_args | default(None) }}"