summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWesley Hearn <whearn@redhat.com>2015-05-20 16:45:31 -0400
committerWesley Hearn <whearn@redhat.com>2015-05-20 16:45:31 -0400
commit4da7b790d5eb8e870bd81208f7074bba81a0989b (patch)
treee9082b593384b26fae4ad4611330b386f57a4709
parent294f2254b818c466ecf7ab71426a08b6dc99f89c (diff)
downloadopenshift-4da7b790d5eb8e870bd81208f7074bba81a0989b.tar.gz
openshift-4da7b790d5eb8e870bd81208f7074bba81a0989b.tar.bz2
openshift-4da7b790d5eb8e870bd81208f7074bba81a0989b.tar.xz
openshift-4da7b790d5eb8e870bd81208f7074bba81a0989b.zip
Made a generic set_attr and set_attrs function to reduce dup code
-rw-r--r--filter_plugins/oo_filters.py32
-rw-r--r--filter_plugins/oo_resourceconfig.py87
2 files changed, 87 insertions, 32 deletions
diff --git a/filter_plugins/oo_filters.py b/filter_plugins/oo_filters.py
index 8feb53f43..e02114d9e 100644
--- a/filter_plugins/oo_filters.py
+++ b/filter_plugins/oo_filters.py
@@ -176,38 +176,6 @@ def oo_ec2_volume_definition(data, host_type, docker_ephemeral=False):
return [root_vol, docker_vol]
return [root_vol]
-def oo_set_node_label(arg, key, value, attr_key=None, attr_value=None):
- ''' This cycles through openshift node definitions
- (from "osc get nodes -o json"), and adds a label.
-
- If attr_key and attr_value are set, this will only set the label on
- nodes where the attribute matches the specified value.
-
- Ex:
- - shell: osc get nodes -o json
- register: output
-
- - set_fact:
- node_facts: "{{ output.stdout
- | from_json
- | oo_set_node_label('region', 'infra',
- 'metadata.name', '172.16.17.43') }}"
- '''
-
- for item in arg['items']:
- if attr_key and attr_value:
- actual_attr_value = get_attr(item, attr_key)
-
- if str(attr_value) != str(actual_attr_value):
- continue # We only want to set the values on hosts with defined attributes
-
- if 'labels' not in item['metadata']:
- item['metadata']['labels'] = {}
-
- item['metadata']['labels'][key] = value
-
- return arg
-
# disabling pylint checks for too-few-public-methods and no-self-use since we
# need to expose a FilterModule object that has a filters method that returns
# a mapping of filter names to methods.
diff --git a/filter_plugins/oo_resourceconfig.py b/filter_plugins/oo_resourceconfig.py
new file mode 100644
index 000000000..6d1c31443
--- /dev/null
+++ b/filter_plugins/oo_resourceconfig.py
@@ -0,0 +1,87 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+# vim: expandtab:tabstop=4:shiftwidth=4
+'''
+Filters for configuring resources in openshift-ansible
+'''
+
+from ansible import errors
+
+def get_attr(data, attribute=None):
+ ''' This looks up dictionary attributes of the form a.b.c and returns
+ the value.
+ Ex: data = {'a': {'b': {'c': 5}}}
+ attribute = "a.b.c"
+ returns 5
+ '''
+ if not attribute:
+ raise errors.AnsibleFilterError("|failed expects attribute to be set")
+
+ ptr = data
+ for attr in attribute.split('.'):
+ ptr = ptr[attr]
+
+ return ptr
+
+def set_attr(item, key, value, attr_key=None, attr_value=None):
+ if attr_key and attr_value:
+ actual_attr_value = get_attr(item, attr_key)
+
+ if str(attr_value) != str(actual_attr_value):
+ continue # We only want to set the values on hosts with defined attributes
+
+ kvp = item
+ for attr in key.split('.'):
+ if attr == key.split('.')[len(key.split('.'))-1]:
+ kvp[attr] = value
+ continue
+ if attr not in kvp:
+ kvp[attr] = {}
+
+ kvp = kvp[attr]
+ return item
+
+
+def set_attrs(items, key, value, attr_key=None, attr_value=None):
+ for item in items:
+ create_update_key(item, key, value, attr_key, attr_value)
+
+ return items
+
+
+def oo_set_node_label(arg, key, value, attr_key=None, attr_value=None):
+ ''' This cycles through openshift node definitions
+ (from "osc get nodes -o json"), and adds a label.
+
+ If attr_key and attr_value are set, this will only set the label on
+ nodes where the attribute matches the specified value.
+
+ Ex:
+ - shell: osc get nodes -o json
+ register: output
+
+ - set_fact:
+ node_facts: "{{ output.stdout
+ | from_json
+ | oo_set_node_label('region', 'infra',
+ 'metadata.name', '172.16.17.43') }}"
+ '''
+ arg['items'] = set_attrs(arg['items'], key, value, attr_key, attr_value)
+
+ return arg
+
+
+def oo_set_resource_node(arg, value):
+ arg = set_attr(arg, 'template.podTemplate.nodeSelector.region', value)
+
+ return arg
+
+
+class FilterModule(object):
+ ''' FilterModule '''
+ def filters(self):
+ ''' returns a mapping of filters to methods '''
+ return {
+ "oo_set_node_label": oo_set_node_label,
+ "oo_set_resource_node": oo_set_resource_node
+ }