summaryrefslogtreecommitdiffstats
path: root/filter_plugins
diff options
context:
space:
mode:
authorAndrew Butcher <abutcher@redhat.com>2016-04-18 18:03:33 -0400
committerAndrew Butcher <abutcher@redhat.com>2016-04-20 10:31:41 -0400
commitbe00d3399795278ac799fab848918d5bd64a2c46 (patch)
treec11cf26d7043282f8cd8bc822458395bf04f81f5 /filter_plugins
parent3fccdb3e55a89597270e4ee2d9cdaf9dd66cb341 (diff)
downloadopenshift-be00d3399795278ac799fab848918d5bd64a2c46.tar.gz
openshift-be00d3399795278ac799fab848918d5bd64a2c46.tar.bz2
openshift-be00d3399795278ac799fab848918d5bd64a2c46.tar.xz
openshift-be00d3399795278ac799fab848918d5bd64a2c46.zip
Fix router selector fact migration and match multiple selectors when counting nodes.
Diffstat (limited to 'filter_plugins')
-rw-r--r--filter_plugins/oo_filters.py22
1 files changed, 19 insertions, 3 deletions
diff --git a/filter_plugins/oo_filters.py b/filter_plugins/oo_filters.py
index f6cc2edde..242a5a6fe 100644
--- a/filter_plugins/oo_filters.py
+++ b/filter_plugins/oo_filters.py
@@ -311,6 +311,16 @@ class FilterModule(object):
"color": "red"}}}]
selector = 'color=green'
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:
nodes (list[dict]): list of node definitions
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")
if not re.match('.*=.*', selector):
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
def oo_oc_nodes_with_label(nodes, label, value):