From 07331b47724dbb7cd6952c1a2af54275ace7726e Mon Sep 17 00:00:00 2001
From: Kenny Woodson <kwoodson@redhat.com>
Date: Fri, 13 Jan 2017 12:37:30 -0500
Subject: lib_openshift modules.  This is the first one. oc_route.

---
 roles/lib_utils/src/ansible/yedit.py               | 45 +---------------
 roles/lib_utils/src/class/yedit.py                 | 62 ++++++++++++++++++----
 .../src/test/integration/kube-manager-test.yaml    | 58 ++++++++++++++++++++
 .../test/integration/kube-manager-test.yaml.orig   | 52 ++++++++++++++++++
 4 files changed, 164 insertions(+), 53 deletions(-)
 create mode 100644 roles/lib_utils/src/test/integration/kube-manager-test.yaml
 create mode 100644 roles/lib_utils/src/test/integration/kube-manager-test.yaml.orig

(limited to 'roles/lib_utils/src')

diff --git a/roles/lib_utils/src/ansible/yedit.py b/roles/lib_utils/src/ansible/yedit.py
index a80cd520c..efe034abf 100644
--- a/roles/lib_utils/src/ansible/yedit.py
+++ b/roles/lib_utils/src/ansible/yedit.py
@@ -1,49 +1,6 @@
 # flake8: noqa
 # pylint: skip-file
 
-
-def get_curr_value(invalue, val_type):
-    '''return the current value'''
-    if invalue is None:
-        return None
-
-    curr_value = invalue
-    if val_type == 'yaml':
-        curr_value = yaml.load(invalue)
-    elif val_type == 'json':
-        curr_value = json.loads(invalue)
-
-    return curr_value
-
-
-def parse_value(inc_value, vtype=''):
-    '''determine value type passed'''
-    true_bools = ['y', 'Y', 'yes', 'Yes', 'YES', 'true', 'True', 'TRUE',
-                  'on', 'On', 'ON', ]
-    false_bools = ['n', 'N', 'no', 'No', 'NO', 'false', 'False', 'FALSE',
-                   'off', 'Off', 'OFF']
-
-    # It came in as a string but you didn't specify value_type as string
-    # we will convert to bool if it matches any of the above cases
-    if isinstance(inc_value, str) and 'bool' in vtype:
-        if inc_value not in true_bools and inc_value not in false_bools:
-            raise YeditException('Not a boolean type. str=[%s] vtype=[%s]'
-                                 % (inc_value, vtype))
-    elif isinstance(inc_value, bool) and 'str' in vtype:
-        inc_value = str(inc_value)
-
-    # If vtype is not str then go ahead and attempt to yaml load it.
-    if isinstance(inc_value, str) and 'str' not in vtype:
-        try:
-            inc_value = yaml.load(inc_value)
-        except Exception:
-            raise YeditException('Could not determine type of incoming ' +
-                                 'value. value=[%s] vtype=[%s]'
-                                 % (type(inc_value), vtype))
-
-    return inc_value
-
-
 # pylint: disable=too-many-branches
 def main():
     ''' ansible oc module for secrets '''
@@ -75,7 +32,7 @@ def main():
 
     rval = Yedit.run_ansible(module)
     if 'failed' in rval and rval['failed']:
-        module.fail_json(msg=rval['msg'])
+        module.fail_json(**rval)
 
     module.exit_json(**rval)
 
diff --git a/roles/lib_utils/src/class/yedit.py b/roles/lib_utils/src/class/yedit.py
index e110bc11e..4521009ab 100644
--- a/roles/lib_utils/src/class/yedit.py
+++ b/roles/lib_utils/src/class/yedit.py
@@ -1,6 +1,7 @@
 # flake8: noqa
 # pylint: skip-file
 
+
 class YeditException(Exception):
     ''' Exception class for Yedit '''
     pass
@@ -426,6 +427,48 @@ class Yedit(object):
 
         return (False, self.yaml_dict)
 
+    @staticmethod
+    def get_curr_value(invalue, val_type):
+        '''return the current value'''
+        if invalue is None:
+            return None
+
+        curr_value = invalue
+        if val_type == 'yaml':
+            curr_value = yaml.load(invalue)
+        elif val_type == 'json':
+            curr_value = json.loads(invalue)
+
+        return curr_value
+
+    @staticmethod
+    def parse_value(inc_value, vtype=''):
+        '''determine value type passed'''
+        true_bools = ['y', 'Y', 'yes', 'Yes', 'YES', 'true', 'True', 'TRUE',
+                      'on', 'On', 'ON', ]
+        false_bools = ['n', 'N', 'no', 'No', 'NO', 'false', 'False', 'FALSE',
+                       'off', 'Off', 'OFF']
+
+        # It came in as a string but you didn't specify value_type as string
+        # we will convert to bool if it matches any of the above cases
+        if isinstance(inc_value, str) and 'bool' in vtype:
+            if inc_value not in true_bools and inc_value not in false_bools:
+                raise YeditException('Not a boolean type. str=[%s] vtype=[%s]'
+                                     % (inc_value, vtype))
+        elif isinstance(inc_value, bool) and 'str' in vtype:
+            inc_value = str(inc_value)
+
+        # If vtype is not str then go ahead and attempt to yaml load it.
+        if isinstance(inc_value, str) and 'str' not in vtype:
+            try:
+                inc_value = yaml.load(inc_value)
+            except Exception:
+                raise YeditException('Could not determine type of incoming ' +
+                                     'value. value=[%s] vtype=[%s]'
+                                     % (type(inc_value), vtype))
+
+        return inc_value
+
     # pylint: disable=too-many-return-statements,too-many-branches
     @staticmethod
     def run_ansible(module):
@@ -446,8 +489,8 @@ class Yedit(object):
 
         if module.params['state'] == 'list':
             if module.params['content']:
-                content = parse_value(module.params['content'],
-                                      module.params['content_type'])
+                content = Yedit.parse_value(module.params['content'],
+                                            module.params['content_type'])
                 yamlfile.yaml_dict = content
 
             if module.params['key']:
@@ -457,8 +500,8 @@ class Yedit(object):
 
         elif module.params['state'] == 'absent':
             if module.params['content']:
-                content = parse_value(module.params['content'],
-                                      module.params['content_type'])
+                content = Yedit.parse_value(module.params['content'],
+                                            module.params['content_type'])
                 yamlfile.yaml_dict = content
 
             if module.params['update']:
@@ -475,8 +518,8 @@ class Yedit(object):
         elif module.params['state'] == 'present':
             # check if content is different than what is in the file
             if module.params['content']:
-                content = parse_value(module.params['content'],
-                                      module.params['content_type'])
+                content = Yedit.parse_value(module.params['content'],
+                                            module.params['content_type'])
 
                 # We had no edits to make and the contents are the same
                 if yamlfile.yaml_dict == content and \
@@ -489,12 +532,13 @@ class Yedit(object):
 
             # we were passed a value; parse it
             if module.params['value']:
-                value = parse_value(module.params['value'],
-                                    module.params['value_type'])
+                value = Yedit.parse_value(module.params['value'],
+                                          module.params['value_type'])
                 key = module.params['key']
                 if module.params['update']:
                     # pylint: disable=line-too-long
-                    curr_value = get_curr_value(parse_value(module.params['curr_value']), module.params['curr_value_format'])  # noqa: #501
+                    curr_value = Yedit.get_curr_value(Yedit.parse_value(module.params['curr_value']),  # noqa: E501
+                                                      module.params['curr_value_format'])  # noqa: E501
 
                     rval = yamlfile.update(key, value, module.params['index'], curr_value)  # noqa: E501
 
diff --git a/roles/lib_utils/src/test/integration/kube-manager-test.yaml b/roles/lib_utils/src/test/integration/kube-manager-test.yaml
new file mode 100644
index 000000000..aea8e668f
--- /dev/null
+++ b/roles/lib_utils/src/test/integration/kube-manager-test.yaml
@@ -0,0 +1,58 @@
+apiVersion: v1
+kind: Pod
+metadata:
+  name: kube-controller-manager
+  namespace: kube-system
+spec:
+  hostNetwork: true
+  containers:
+  - name: kube-controller-manager
+    image: openshift/kube:v1.0.0
+    command:
+    - /hyperkube
+    - controller-manager
+    - --master=http://127.0.0.1:8080
+    - --leader-elect=true
+    - --service-account-private-key-file=/etc/kubernetes/ssl/apiserver-key.pem
+    - --root-ca-file=/etc/k8s/ssl/my.pem
+    - --my-new-parameter=openshift
+    livenessProbe:
+      httpGet:
+        host: 127.0.0.1
+        path: /healthz
+        port: 10252
+      initialDelaySeconds: 15
+      timeoutSeconds: 1
+    volumeMounts:
+    - mountPath: /etc/kubernetes/ssl
+      name: ssl-certs-kubernetes
+      readOnly: true
+    - mountPath: /etc/ssl/certs
+      name: ssl-certs-host
+      readOnly: 'true'
+  volumes:
+  - hostPath:
+      path: /etc/kubernetes/ssl
+    name: ssl-certs-kubernetes
+  - hostPath:
+      path: /usr/share/ca-certificates
+    name: ssl-certs-host
+yedittest: yedittest
+metadata-namespace: openshift-is-awesome
+nonexistingkey:
+- --my-new-parameter=openshift
+a:
+  b:
+    c: d
+e:
+  f:
+    g:
+      h:
+        i:
+          j: k
+z:
+  x:
+    y:
+    - 1
+    - 2
+    - 3
diff --git a/roles/lib_utils/src/test/integration/kube-manager-test.yaml.orig b/roles/lib_utils/src/test/integration/kube-manager-test.yaml.orig
new file mode 100644
index 000000000..5541c3dae
--- /dev/null
+++ b/roles/lib_utils/src/test/integration/kube-manager-test.yaml.orig
@@ -0,0 +1,52 @@
+apiVersion: v1
+kind: Pod
+metadata:
+  name: kube-controller-manager
+  namespace: kube-system
+spec:
+  hostNetwork: true
+  containers:
+  - name: kube-controller-manager
+    image: openshift/kube:v1.0.0
+    command:
+    - /hyperkube
+    - controller-manager
+    - --master=http://127.0.0.1:8080
+    - --leader-elect=true
+    - --service-account-private-key-file=/etc/kubernetes/ssl/apiserver-key.pem
+    - --root-ca-file=/etc/k8s/ssl/my.pem
+    - --my-new-parameter=openshift
+    livenessProbe:
+      httpGet:
+        host: 127.0.0.1
+        path: /healthz
+        port: 10252
+      initialDelaySeconds: 15
+      timeoutSeconds: 1
+    volumeMounts:
+    - mountPath: /etc/kubernetes/ssl
+      name: ssl-certs-kubernetes
+      readOnly: true
+    - mountPath: /etc/ssl/certs
+      name: ssl-certs-host
+      readOnly: 'true'
+  volumes:
+  - hostPath:
+      path: /etc/kubernetes/ssl
+    name: ssl-certs-kubernetes
+  - hostPath:
+      path: /usr/share/ca-certificates
+    name: ssl-certs-host
+yedittest: yedittest
+metadata-namespace: openshift-is-awesome
+nonexistingkey:
+- --my-new-parameter=openshift
+a:
+  b:
+    c: d
+e:
+  f:
+    g:
+      h:
+        i:
+          j: k
-- 
cgit v1.2.3