Browse Source

Moving replica logic to filter_plugin to fix skipped task variable behavior.

Kenny Woodson 8 years ago
parent
commit
3b877826bc

+ 35 - 0
roles/openshift_hosted/filter_plugins/filters.py

@@ -0,0 +1,35 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+'''
+Custom filters for use in openshift_hosted
+'''
+
+
+class FilterModule(object):
+    ''' Custom ansible filters for use by openshift_hosted role'''
+
+    @staticmethod
+    def get_router_replicas(replicas=None, router_nodes=None):
+        ''' This function will return the number of replicas
+            based on the results from the defined
+            openshift.hosted.router.replicas OR
+            the query from oc_obj on openshift nodes with a selector OR
+            default to 1
+
+        '''
+        # We always use what they've specified if they've specified a value
+        if replicas is not None:
+            return replicas
+
+        if (isinstance(router_nodes, dict) and
+                'results' in router_nodes and
+                'results' in router_nodes['results'] and
+                'items' in router_nodes['results']['results']):
+
+            return len(router_nodes['results']['results'][0]['items'])
+
+        return 1
+
+    def filters(self):
+        ''' returns a mapping of filters to methods '''
+        return {'get_router_replicas': self.get_router_replicas}

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

@@ -10,7 +10,7 @@
 
 - name: set_fact replicas
   set_fact:
-    replicas: "{{ openshift.hosted.router.replicas | default(router_nodes.results.results[0]['items'] | length) }}"
+    replicas: "{{ openshift.hosted.router.replicas|default(None) | get_router_replicas(router_nodes) }}"
 
 - block: