소스 검색

Adding configmap support and adding tests.

Kenny Woodson 8 년 전
부모
커밋
ed210226e0
3개의 변경된 파일270개의 추가작업 그리고 21개의 파일을 삭제
  1. 1 0
      roles/lib_openshift/src/doc/volume
  2. 11 8
      roles/lib_openshift/src/lib/volume.py
  3. 258 13
      roles/lib_openshift/src/test/unit/test_oc_volume.py

+ 1 - 0
roles/lib_openshift/src/doc/volume

@@ -54,6 +54,7 @@ options:
     - hostpath
     - secret
     - pvc
+    - configmap
     aliases: []
   mount_path:
     description:

+ 11 - 8
roles/lib_openshift/src/lib/volume.py

@@ -1,9 +1,8 @@
 # pylint: skip-file
 # flake8: noqa
 
-
 class Volume(object):
-    ''' Class to represent the volume object'''
+    ''' Class to represent an openshift volume object'''
     volume_mounts_path = {"pod": "spec.containers[0].volumeMounts",
                           "dc":  "spec.template.spec.containers[0].volumeMounts",
                           "rc":  "spec.template.spec.containers[0].volumeMounts",
@@ -18,23 +17,27 @@ class Volume(object):
         ''' return a properly structured volume '''
         volume_mount = None
         volume = {'name': volume_info['name']}
-        if volume_info['type'] == 'secret':
+        volume_type = volume_info['type'].lower()
+        if volume_type == 'secret':
             volume['secret'] = {}
             volume[volume_info['type']] = {'secretName': volume_info['secret_name']}
             volume_mount = {'mountPath': volume_info['path'],
                             'name': volume_info['name']}
-        elif volume_info['type'] == 'emptydir':
+        elif volume_type == 'emptydir':
             volume['emptyDir'] = {}
             volume_mount = {'mountPath': volume_info['path'],
                             'name': volume_info['name']}
-        elif volume_info['type'] == 'pvc':
+        elif volume_type == 'pvc' or volume_type == 'persistentvolumeclaim':
             volume['persistentVolumeClaim'] = {}
             volume['persistentVolumeClaim']['claimName'] = volume_info['claimName']
             volume['persistentVolumeClaim']['claimSize'] = volume_info['claimSize']
-            volume_mount = {'mountPath': volume_info['path'],
-                            'name': volume_info['name']}
-        elif volume_info['type'] == 'hostpath':
+        elif volume_type == 'hostpath':
             volume['hostPath'] = {}
             volume['hostPath']['path'] = volume_info['path']
+        elif volume_type == 'configmap':
+            volume['configMap'] = {}
+            volume['configMap']['name'] = volume_info['name']
+            volume_mount = {'mountPath': volume_info['path'],
+                            'name': volume_info['name']}
 
         return (volume, volume_mount)

+ 258 - 13
roles/lib_openshift/src/test/unit/test_oc_volume.py

@@ -2,6 +2,7 @@
  Unit tests for oc volume
 '''
 
+import copy
 import os
 import six
 import sys
@@ -23,24 +24,25 @@ class OCVolumeTest(unittest.TestCase):
     '''
      Test class for OCVolume
     '''
+    params = {'name': 'oso-rhel7-zagg-web',
+              'kubeconfig': '/etc/origin/master/admin.kubeconfig',
+              'namespace': 'test',
+              'labels': None,
+              'state': 'present',
+              'kind': 'dc',
+              'mount_path': None,
+              'secret_name': None,
+              'mount_type': 'pvc',
+              'claim_name': 'testclaim',
+              'claim_size': '1G',
+              'vol_name': 'test-volume',
+              'debug': False}
 
     @mock.patch('oc_volume.Utils.create_tmpfile_copy')
     @mock.patch('oc_volume.OCVolume._run')
     def test_create_pvc(self, mock_cmd, mock_tmpfile_copy):
         ''' Testing a label list '''
-        params = {'name': 'oso-rhel7-zagg-web',
-                  'kubeconfig': '/etc/origin/master/admin.kubeconfig',
-                  'namespace': 'test',
-                  'labels': None,
-                  'state': 'present',
-                  'kind': 'dc',
-                  'mount_path': None,
-                  'secret_name': None,
-                  'mount_type': 'pvc',
-                  'claim_name': 'testclaim',
-                  'claim_size': '1G',
-                  'vol_name': 'test-volume',
-                  'debug': False}
+        params = copy.deepcopy(OCVolumeTest.params)
 
         dc = '''{
                 "kind": "DeploymentConfig",
@@ -277,6 +279,249 @@ class OCVolumeTest(unittest.TestCase):
         self.assertTrue(results['changed'])
         self.assertTrue(results['results']['results'][-1]['name'] == 'test-volume')
 
+    @mock.patch('oc_volume.Utils.create_tmpfile_copy')
+    @mock.patch('oc_volume.OCVolume._run')
+    def test_create_configmap(self, mock_cmd, mock_tmpfile_copy):
+        ''' Testing a label list '''
+        params = copy.deepcopy(OCVolumeTest.params)
+        params.update({'mount_path': '/configmap',
+                      'mount_type': 'configmap',
+                      'vol_name': 'configtest'})
+
+        dc = '''{
+                "kind": "DeploymentConfig",
+                "apiVersion": "v1",
+                "metadata": {
+                    "name": "oso-rhel7-zagg-web",
+                    "namespace": "new-monitoring",
+                    "selfLink": "/oapi/v1/namespaces/new-monitoring/deploymentconfigs/oso-rhel7-zagg-web",
+                    "uid": "f56e9dd2-7c13-11e6-b046-0e8844de0587",
+                    "resourceVersion": "137095771",
+                    "generation": 4,
+                    "creationTimestamp": "2016-09-16T13:46:24Z",
+                    "labels": {
+                        "app": "oso-rhel7-ops-base",
+                        "name": "oso-rhel7-zagg-web"
+                    },
+                    "annotations": {
+                        "openshift.io/generated-by": "OpenShiftNewApp"
+                    }
+                },
+                "spec": {
+                    "strategy": {
+                        "type": "Rolling",
+                        "rollingParams": {
+                            "updatePeriodSeconds": 1,
+                            "intervalSeconds": 1,
+                            "timeoutSeconds": 600,
+                            "maxUnavailable": "25%",
+                            "maxSurge": "25%"
+                        },
+                        "resources": {}
+                    },
+                    "triggers": [
+                        {
+                            "type": "ConfigChange"
+                        },
+                        {
+                            "type": "ImageChange",
+                            "imageChangeParams": {
+                                "automatic": true,
+                                "containerNames": [
+                                    "oso-rhel7-zagg-web"
+                                ],
+                                "from": {
+                                    "kind": "ImageStreamTag",
+                                    "namespace": "new-monitoring",
+                                    "name": "oso-rhel7-zagg-web:latest"
+                                },
+                                "lastTriggeredImage": "notused"
+                            }
+                        }
+                    ],
+                    "replicas": 10,
+                    "test": false,
+                    "selector": {
+                        "deploymentconfig": "oso-rhel7-zagg-web"
+                    },
+                    "template": {
+                        "metadata": {
+                            "creationTimestamp": null,
+                            "labels": {
+                                "app": "oso-rhel7-ops-base",
+                                "deploymentconfig": "oso-rhel7-zagg-web"
+                            },
+                            "annotations": {
+                                "openshift.io/generated-by": "OpenShiftNewApp"
+                            }
+                        },
+                        "spec": {
+                            "volumes": [
+                                {
+                                    "name": "monitoring-secrets",
+                                    "secret": {
+                                        "secretName": "monitoring-secrets"
+                                    }
+                                }
+                            ],
+                            "containers": [
+                                {
+                                    "name": "oso-rhel7-zagg-web",
+                                    "image": "notused",
+                                    "resources": {},
+                                    "volumeMounts": [
+                                        {
+                                            "name": "monitoring-secrets",
+                                            "mountPath": "/secrets"
+                                        }
+                                    ],
+                                    "terminationMessagePath": "/dev/termination-log",
+                                    "imagePullPolicy": "Always",
+                                    "securityContext": {
+                                        "capabilities": {},
+                                        "privileged": false
+                                    }
+                                }
+                            ],
+                            "restartPolicy": "Always",
+                            "terminationGracePeriodSeconds": 30,
+                            "dnsPolicy": "ClusterFirst",
+                            "securityContext": {}
+                        }
+                    }
+                }
+            }'''
+
+        post_dc = '''{
+                "kind": "DeploymentConfig",
+                "apiVersion": "v1",
+                "metadata": {
+                    "name": "oso-rhel7-zagg-web",
+                    "namespace": "new-monitoring",
+                    "selfLink": "/oapi/v1/namespaces/new-monitoring/deploymentconfigs/oso-rhel7-zagg-web",
+                    "uid": "f56e9dd2-7c13-11e6-b046-0e8844de0587",
+                    "resourceVersion": "137095771",
+                    "generation": 4,
+                    "creationTimestamp": "2016-09-16T13:46:24Z",
+                    "labels": {
+                        "app": "oso-rhel7-ops-base",
+                        "name": "oso-rhel7-zagg-web"
+                    },
+                    "annotations": {
+                        "openshift.io/generated-by": "OpenShiftNewApp"
+                    }
+                },
+                "spec": {
+                    "strategy": {
+                        "type": "Rolling",
+                        "rollingParams": {
+                            "updatePeriodSeconds": 1,
+                            "intervalSeconds": 1,
+                            "timeoutSeconds": 600,
+                            "maxUnavailable": "25%",
+                            "maxSurge": "25%"
+                        },
+                        "resources": {}
+                    },
+                    "triggers": [
+                        {
+                            "type": "ConfigChange"
+                        },
+                        {
+                            "type": "ImageChange",
+                            "imageChangeParams": {
+                                "automatic": true,
+                                "containerNames": [
+                                    "oso-rhel7-zagg-web"
+                                ],
+                                "from": {
+                                    "kind": "ImageStreamTag",
+                                    "namespace": "new-monitoring",
+                                    "name": "oso-rhel7-zagg-web:latest"
+                                },
+                                "lastTriggeredImage": "notused"
+                            }
+                        }
+                    ],
+                    "replicas": 10,
+                    "test": false,
+                    "selector": {
+                        "deploymentconfig": "oso-rhel7-zagg-web"
+                    },
+                    "template": {
+                        "metadata": {
+                            "creationTimestamp": null,
+                            "labels": {
+                                "app": "oso-rhel7-ops-base",
+                                "deploymentconfig": "oso-rhel7-zagg-web"
+                            },
+                            "annotations": {
+                                "openshift.io/generated-by": "OpenShiftNewApp"
+                            }
+                        },
+                        "spec": {
+                            "volumes": [
+                                {
+                                    "name": "monitoring-secrets",
+                                    "secret": {
+                                        "secretName": "monitoring-secrets"
+                                    }
+                                },
+                                {
+                                    "name": "configtest",
+                                    "configMap": {
+                                        "name": "configtest"
+                                    }
+                                }
+                            ],
+                            "containers": [
+                                {
+                                    "name": "oso-rhel7-zagg-web",
+                                    "image": "notused",
+                                    "resources": {},
+                                    "volumeMounts": [
+                                        {
+                                            "name": "monitoring-secrets",
+                                            "mountPath": "/secrets"
+                                        },
+                                        {
+                                            "name": "configtest",
+                                            "mountPath": "/configmap"
+                                        }
+                                    ],
+                                    "terminationMessagePath": "/dev/termination-log",
+                                    "imagePullPolicy": "Always",
+                                    "securityContext": {
+                                        "capabilities": {},
+                                        "privileged": false
+                                    }
+                                }
+                            ],
+                            "restartPolicy": "Always",
+                            "terminationGracePeriodSeconds": 30,
+                            "dnsPolicy": "ClusterFirst",
+                            "securityContext": {}
+                        }
+                    }
+                }
+            }'''
+
+        mock_cmd.side_effect = [
+            (0, dc, ''),
+            (0, dc, ''),
+            (0, '', ''),
+            (0, post_dc, ''),
+        ]
+
+        mock_tmpfile_copy.side_effect = [
+            '/tmp/mocked_kubeconfig',
+        ]
+
+        results = OCVolume.run_ansible(params, False)
+
+        self.assertTrue(results['changed'])
+        self.assertTrue(results['results']['results'][-1]['name'] == 'configtest')
+
     @unittest.skipIf(six.PY3, 'py2 test only')
     @mock.patch('os.path.exists')
     @mock.patch('os.environ.get')