瀏覽代碼

Fixing registry doc and suggestions.

Kenny Woodson 8 年之前
父節點
當前提交
8daf54c2da

+ 86 - 57
roles/lib_openshift/library/oadm_registry.py

@@ -33,6 +33,7 @@
 
 from __future__ import print_function
 import atexit
+import copy
 import json
 import os
 import re
@@ -40,7 +41,11 @@ import shutil
 import subprocess
 import tempfile
 # pylint: disable=import-error
-import ruamel.yaml as yaml
+try:
+    import ruamel.yaml as yaml
+except ImportError:
+    import yaml
+
 from ansible.module_utils.basic import AnsibleModule
 
 # -*- -*- -*- End included fragment: lib/import.py -*- -*- -*-
@@ -49,11 +54,19 @@ from ansible.module_utils.basic import AnsibleModule
 
 DOCUMENTATION = '''
 ---
-module: oadm_manage_node
-short_description: Module to manage openshift nodes
+module: oc_adm_registry
+short_description: Module to manage openshift registry
 description:
-  - Manage openshift nodes programmatically.
+  - Manage openshift registry programmatically.
 options:
+  state:
+    description:
+    - The desired action when managing openshift registry
+    - present - update or create the registry
+    - absent - tear down the registry service and deploymentconfig
+    required: false
+    default: False
+    aliases: []
   kubeconfig:
     description:
     - The path for the kubeconfig file to use for authentication
@@ -78,12 +91,6 @@ options:
     required: false
     default: None
     aliases: []
-  credentials:
-    description:
-    - Path to a .kubeconfig file that will contain the credentials the registry should use to contact the master.
-    required: false
-    default: None
-    aliases: []
   images:
     description:
     - The image to base this registry on - ${component} will be replaced with --type
@@ -150,18 +157,6 @@ options:
     required: false
     default: None
     aliases: []
-  registry_type:
-    description:
-    - The registry image to use - if you specify --images this flag may be ignored.
-    required: false
-    default: 'docker-registry'
-    aliases: []
-  volume:
-    description:
-    - The volume path to use for registry storage; defaults to /registry which is the default for origin-docker-registry.
-    required: false
-    default: '/registry'
-    aliases: []
   volume_mounts:
     description:
     - The volume mounts for the registry.
@@ -180,6 +175,18 @@ options:
     required: false
     default: None
     aliases: []
+  env_vars:
+    description:
+    - A dictionary of modifications to make on the deploymentconfig. e.g. FOO: BAR
+    required: false
+    default: None
+    aliases: []
+  force:
+    description:
+    - Force a registry update.
+    required: false
+    default: False
+    aliases: []
 author:
 - "Kenny Woodson <kwoodson@redhat.com>"
 extends_documentation_fragment: []
@@ -432,11 +439,15 @@ class Yedit(object):
         if self.backup and self.file_exists():
             shutil.copy(self.filename, self.filename + '.orig')
 
-        # pylint: disable=no-member
-        if hasattr(self.yaml_dict, 'fa'):
-            self.yaml_dict.fa.set_block_style()
+        if hasattr(yaml, 'RoundTripDumper'):
+            # pylint: disable=no-member
+            if hasattr(self.yaml_dict, 'fa'):
+                self.yaml_dict.fa.set_block_style()
 
-        Yedit._write(self.filename, yaml.dump(self.yaml_dict, Dumper=yaml.RoundTripDumper))
+            # pylint: disable=no-member
+            Yedit._write(self.filename, yaml.dump(self.yaml_dict, Dumper=yaml.RoundTripDumper))
+        else:
+            Yedit._write(self.filename, yaml.safe_dump(self.yaml_dict, default_flow_style=False))
 
         return (True, self.yaml_dict)
 
@@ -476,10 +487,16 @@ class Yedit(object):
         # check if it is yaml
         try:
             if content_type == 'yaml' and contents:
-                self.yaml_dict = yaml.load(contents, yaml.RoundTripLoader)
+                # pylint: disable=no-member
+                if hasattr(yaml, 'RoundTripLoader'):
+                    self.yaml_dict = yaml.load(contents, yaml.RoundTripLoader)
+                else:
+                    self.yaml_dict = yaml.safe_load(contents)
+
                 # pylint: disable=no-member
                 if hasattr(self.yaml_dict, 'fa'):
                     self.yaml_dict.fa.set_block_style()
+
             elif content_type == 'json' and contents:
                 self.yaml_dict = json.loads(contents)
         except yaml.YAMLError as err:
@@ -644,12 +661,19 @@ class Yedit(object):
             return (False, self.yaml_dict)
 
         # deepcopy didn't work
-        tmp_copy = yaml.load(yaml.round_trip_dump(self.yaml_dict,
-                                                  default_flow_style=False),
-                             yaml.RoundTripLoader)
-        # pylint: disable=no-member
-        if hasattr(self.yaml_dict, 'fa'):
-            tmp_copy.fa.set_block_style()
+        if hasattr(yaml, 'round_trip_dump'):
+            # pylint: disable=no-member
+            tmp_copy = yaml.load(yaml.round_trip_dump(self.yaml_dict,
+                                                      default_flow_style=False),
+                                 yaml.RoundTripLoader)
+
+            # pylint: disable=no-member
+            if hasattr(self.yaml_dict, 'fa'):
+                tmp_copy.fa.set_block_style()
+
+        else:
+            tmp_copy = copy.deepcopy(self.yaml_dict)
+
         result = Yedit.add_entry(tmp_copy, path, value, self.separator)
         if not result:
             return (False, self.yaml_dict)
@@ -662,11 +686,17 @@ class Yedit(object):
         ''' create a yaml file '''
         if not self.file_exists():
             # deepcopy didn't work
-            tmp_copy = yaml.load(yaml.round_trip_dump(self.yaml_dict, default_flow_style=False),  # noqa: E501
-                                 yaml.RoundTripLoader)
-            # pylint: disable=no-member
-            if hasattr(self.yaml_dict, 'fa'):
-                tmp_copy.fa.set_block_style()
+            if hasattr(yaml, 'round_trip_dump'):
+                # pylint: disable=no-member
+                tmp_copy = yaml.load(yaml.round_trip_dump(self.yaml_dict, default_flow_style=False),  # noqa: E501
+                                     yaml.RoundTripLoader)
+
+                # pylint: disable=no-member
+                if hasattr(self.yaml_dict, 'fa'):
+                    tmp_copy.fa.set_block_style()
+            else:
+                tmp_copy = copy.deepcopy(self.yaml_dict)
+
             result = Yedit.add_entry(tmp_copy, path, value, self.separator)
             if result:
                 self.yaml_dict = tmp_copy
@@ -1108,7 +1138,12 @@ class Utils(object):
         tmp = Utils.create_tmpfile(prefix=rname)
 
         if ftype == 'yaml':
-            Utils._write(tmp, yaml.dump(data, Dumper=yaml.RoundTripDumper))
+            # pylint: disable=no-member
+            if hasattr(yaml, 'RoundTripDumper'):
+                Utils._write(tmp, yaml.dump(data, Dumper=yaml.RoundTripDumper))
+            else:
+                Utils._write(tmp, yaml.safe_dump(data, default_flow_style=False))
+
         elif ftype == 'json':
             Utils._write(tmp, json.dumps(data))
         else:
@@ -1190,7 +1225,11 @@ class Utils(object):
             contents = sfd.read()
 
         if sfile_type == 'yaml':
-            contents = yaml.load(contents, yaml.RoundTripLoader)
+            # pylint: disable=no-member
+            if hasattr(yaml, 'RoundTripLoader'):
+                contents = yaml.load(contents, yaml.RoundTripLoader)
+            else:
+                contents = yaml.safe_load(contents)
         elif sfile_type == 'json':
             contents = json.loads(contents)
 
@@ -2169,12 +2208,6 @@ class Registry(OpenShiftCLI):
 
     def prep_registry(self):
         ''' prepare a registry for instantiation '''
-        # In <= 3.4 credentials are used
-        # In >= 3.5 credentials are removed
-        versions = self.version.get()
-        if '3.5' in versions['oc']:
-            self.config.config_options['credentials']['include'] = False
-
         options = self.config.to_option_list()
 
         cmd = ['registry', '-n', self.config.namespace]
@@ -2352,8 +2385,7 @@ class Registry(OpenShiftCLI):
         rconfig = RegistryConfig(params['name'],
                                  params['namespace'],
                                  params['kubeconfig'],
-                                 {'credentials': {'value': params['credentials'], 'include': True},
-                                  'default_cert': {'value': None, 'include': True},
+                                 {'default_cert': {'value': None, 'include': True},
                                   'images': {'value': params['images'], 'include': True},
                                   'latest_images': {'value': params['latest_images'], 'include': True},
                                   'labels': {'value': params['labels'], 'include': True},
@@ -2363,11 +2395,12 @@ class Registry(OpenShiftCLI):
                                   'service_account': {'value': params['service_account'], 'include': True},
                                   'registry_type': {'value': params['registry_type'], 'include': False},
                                   'mount_host': {'value': params['mount_host'], 'include': True},
-                                  'volume': {'value': params['mount_host'], 'include': True},
-                                  'template': {'value': params['template'], 'include': True},
+                                  'volume': {'value': '/registry', 'include': True},
                                   'env_vars': {'value': params['env_vars'], 'include': False},
                                   'volume_mounts': {'value': params['volume_mounts'], 'include': False},
                                   'edits': {'value': params['edits'], 'include': False},
+                                  'enforce_quota': {'value': params['enforce_quota'], 'include': True},
+                                  'daemonset': {'value': params['daemonset'], 'include': True},
                                  })
 
 
@@ -2399,7 +2432,7 @@ class Registry(OpenShiftCLI):
             if not ocregistry.exists():
 
                 if check_mode:
-                    return {'changed': True, 'msg': 'CHECK_MODE: Would have performed a delete.'}
+                    return {'changed': True, 'msg': 'CHECK_MODE: Would have performed a create.'}
 
                 api_rval = ocregistry.create()
 
@@ -2444,7 +2477,6 @@ def main():
             name=dict(default=None, required=True, type='str'),
 
             kubeconfig=dict(default='/etc/origin/master/admin.kubeconfig', type='str'),
-            credentials=dict(default='/etc/origin/master/openshift-registry.kubeconfig', type='str'),
             images=dict(default=None, type='str'),
             latest_images=dict(default=False, type='bool'),
             labels=dict(default=None, type='list'),
@@ -2453,15 +2485,12 @@ def main():
             selector=dict(default=None, type='str'),
             service_account=dict(default='registry', type='str'),
             mount_host=dict(default=None, type='str'),
-            registry_type=dict(default='docker-registry', type='str'),
-            template=dict(default=None, type='str'),
-            volume=dict(default='/registry', type='str'),
-            env_vars=dict(default=None, type='dict'),
             volume_mounts=dict(default=None, type='list'),
+            env_vars=dict(default=None, type='dict'),
             edits=dict(default=None, type='list'),
+            enforce_quota=dict(default=False, type='bool'),
             force=dict(default=False, type='bool'),
         ),
-        mutually_exclusive=[["registry_type", "images"]],
 
         supports_check_mode=True,
     )

+ 56 - 19
roles/lib_openshift/library/oadm_router.py

@@ -33,6 +33,7 @@
 
 from __future__ import print_function
 import atexit
+import copy
 import json
 import os
 import re
@@ -40,7 +41,11 @@ import shutil
 import subprocess
 import tempfile
 # pylint: disable=import-error
-import ruamel.yaml as yaml
+try:
+    import ruamel.yaml as yaml
+except ImportError:
+    import yaml
+
 from ansible.module_utils.basic import AnsibleModule
 
 # -*- -*- -*- End included fragment: lib/import.py -*- -*- -*-
@@ -440,11 +445,15 @@ class Yedit(object):
         if self.backup and self.file_exists():
             shutil.copy(self.filename, self.filename + '.orig')
 
-        # pylint: disable=no-member
-        if hasattr(self.yaml_dict, 'fa'):
-            self.yaml_dict.fa.set_block_style()
+        if hasattr(yaml, 'RoundTripDumper'):
+            # pylint: disable=no-member
+            if hasattr(self.yaml_dict, 'fa'):
+                self.yaml_dict.fa.set_block_style()
 
-        Yedit._write(self.filename, yaml.dump(self.yaml_dict, Dumper=yaml.RoundTripDumper))
+            # pylint: disable=no-member
+            Yedit._write(self.filename, yaml.dump(self.yaml_dict, Dumper=yaml.RoundTripDumper))
+        else:
+            Yedit._write(self.filename, yaml.safe_dump(self.yaml_dict, default_flow_style=False))
 
         return (True, self.yaml_dict)
 
@@ -484,10 +493,16 @@ class Yedit(object):
         # check if it is yaml
         try:
             if content_type == 'yaml' and contents:
-                self.yaml_dict = yaml.load(contents, yaml.RoundTripLoader)
+                # pylint: disable=no-member
+                if hasattr(yaml, 'RoundTripLoader'):
+                    self.yaml_dict = yaml.load(contents, yaml.RoundTripLoader)
+                else:
+                    self.yaml_dict = yaml.safe_load(contents)
+
                 # pylint: disable=no-member
                 if hasattr(self.yaml_dict, 'fa'):
                     self.yaml_dict.fa.set_block_style()
+
             elif content_type == 'json' and contents:
                 self.yaml_dict = json.loads(contents)
         except yaml.YAMLError as err:
@@ -652,12 +667,19 @@ class Yedit(object):
             return (False, self.yaml_dict)
 
         # deepcopy didn't work
-        tmp_copy = yaml.load(yaml.round_trip_dump(self.yaml_dict,
-                                                  default_flow_style=False),
-                             yaml.RoundTripLoader)
-        # pylint: disable=no-member
-        if hasattr(self.yaml_dict, 'fa'):
-            tmp_copy.fa.set_block_style()
+        if hasattr(yaml, 'round_trip_dump'):
+            # pylint: disable=no-member
+            tmp_copy = yaml.load(yaml.round_trip_dump(self.yaml_dict,
+                                                      default_flow_style=False),
+                                 yaml.RoundTripLoader)
+
+            # pylint: disable=no-member
+            if hasattr(self.yaml_dict, 'fa'):
+                tmp_copy.fa.set_block_style()
+
+        else:
+            tmp_copy = copy.deepcopy(self.yaml_dict)
+
         result = Yedit.add_entry(tmp_copy, path, value, self.separator)
         if not result:
             return (False, self.yaml_dict)
@@ -670,11 +692,17 @@ class Yedit(object):
         ''' create a yaml file '''
         if not self.file_exists():
             # deepcopy didn't work
-            tmp_copy = yaml.load(yaml.round_trip_dump(self.yaml_dict, default_flow_style=False),  # noqa: E501
-                                 yaml.RoundTripLoader)
-            # pylint: disable=no-member
-            if hasattr(self.yaml_dict, 'fa'):
-                tmp_copy.fa.set_block_style()
+            if hasattr(yaml, 'round_trip_dump'):
+                # pylint: disable=no-member
+                tmp_copy = yaml.load(yaml.round_trip_dump(self.yaml_dict, default_flow_style=False),  # noqa: E501
+                                     yaml.RoundTripLoader)
+
+                # pylint: disable=no-member
+                if hasattr(self.yaml_dict, 'fa'):
+                    tmp_copy.fa.set_block_style()
+            else:
+                tmp_copy = copy.deepcopy(self.yaml_dict)
+
             result = Yedit.add_entry(tmp_copy, path, value, self.separator)
             if result:
                 self.yaml_dict = tmp_copy
@@ -1116,7 +1144,12 @@ class Utils(object):
         tmp = Utils.create_tmpfile(prefix=rname)
 
         if ftype == 'yaml':
-            Utils._write(tmp, yaml.dump(data, Dumper=yaml.RoundTripDumper))
+            # pylint: disable=no-member
+            if hasattr(yaml, 'RoundTripDumper'):
+                Utils._write(tmp, yaml.dump(data, Dumper=yaml.RoundTripDumper))
+            else:
+                Utils._write(tmp, yaml.safe_dump(data, default_flow_style=False))
+
         elif ftype == 'json':
             Utils._write(tmp, json.dumps(data))
         else:
@@ -1198,7 +1231,11 @@ class Utils(object):
             contents = sfd.read()
 
         if sfile_type == 'yaml':
-            contents = yaml.load(contents, yaml.RoundTripLoader)
+            # pylint: disable=no-member
+            if hasattr(yaml, 'RoundTripLoader'):
+                contents = yaml.load(contents, yaml.RoundTripLoader)
+            else:
+                contents = yaml.safe_load(contents)
         elif sfile_type == 'json':
             contents = json.loads(contents)
 

+ 2 - 6
roles/lib_openshift/src/ansible/oadm_registry.py

@@ -15,7 +15,6 @@ def main():
             name=dict(default=None, required=True, type='str'),
 
             kubeconfig=dict(default='/etc/origin/master/admin.kubeconfig', type='str'),
-            credentials=dict(default='/etc/origin/master/openshift-registry.kubeconfig', type='str'),
             images=dict(default=None, type='str'),
             latest_images=dict(default=False, type='bool'),
             labels=dict(default=None, type='list'),
@@ -24,15 +23,12 @@ def main():
             selector=dict(default=None, type='str'),
             service_account=dict(default='registry', type='str'),
             mount_host=dict(default=None, type='str'),
-            registry_type=dict(default='docker-registry', type='str'),
-            template=dict(default=None, type='str'),
-            volume=dict(default='/registry', type='str'),
-            env_vars=dict(default=None, type='dict'),
             volume_mounts=dict(default=None, type='list'),
+            env_vars=dict(default=None, type='dict'),
             edits=dict(default=None, type='list'),
+            enforce_quota=dict(default=False, type='bool'),
             force=dict(default=False, type='bool'),
         ),
-        mutually_exclusive=[["registry_type", "images"]],
 
         supports_check_mode=True,
     )

+ 5 - 11
roles/lib_openshift/src/class/oadm_registry.py

@@ -136,12 +136,6 @@ class Registry(OpenShiftCLI):
 
     def prep_registry(self):
         ''' prepare a registry for instantiation '''
-        # In <= 3.4 credentials are used
-        # In >= 3.5 credentials are removed
-        versions = self.version.get()
-        if '3.5' in versions['oc']:
-            self.config.config_options['credentials']['include'] = False
-
         options = self.config.to_option_list()
 
         cmd = ['registry', '-n', self.config.namespace]
@@ -319,8 +313,7 @@ class Registry(OpenShiftCLI):
         rconfig = RegistryConfig(params['name'],
                                  params['namespace'],
                                  params['kubeconfig'],
-                                 {'credentials': {'value': params['credentials'], 'include': True},
-                                  'default_cert': {'value': None, 'include': True},
+                                 {'default_cert': {'value': None, 'include': True},
                                   'images': {'value': params['images'], 'include': True},
                                   'latest_images': {'value': params['latest_images'], 'include': True},
                                   'labels': {'value': params['labels'], 'include': True},
@@ -330,11 +323,12 @@ class Registry(OpenShiftCLI):
                                   'service_account': {'value': params['service_account'], 'include': True},
                                   'registry_type': {'value': params['registry_type'], 'include': False},
                                   'mount_host': {'value': params['mount_host'], 'include': True},
-                                  'volume': {'value': params['mount_host'], 'include': True},
-                                  'template': {'value': params['template'], 'include': True},
+                                  'volume': {'value': '/registry', 'include': True},
                                   'env_vars': {'value': params['env_vars'], 'include': False},
                                   'volume_mounts': {'value': params['volume_mounts'], 'include': False},
                                   'edits': {'value': params['edits'], 'include': False},
+                                  'enforce_quota': {'value': params['enforce_quota'], 'include': True},
+                                  'daemonset': {'value': params['daemonset'], 'include': True},
                                  })
 
 
@@ -366,7 +360,7 @@ class Registry(OpenShiftCLI):
             if not ocregistry.exists():
 
                 if check_mode:
-                    return {'changed': True, 'msg': 'CHECK_MODE: Would have performed a delete.'}
+                    return {'changed': True, 'msg': 'CHECK_MODE: Would have performed a create.'}
 
                 api_rval = ocregistry.create()
 

+ 23 - 21
roles/lib_openshift/src/doc/registry

@@ -3,11 +3,19 @@
 
 DOCUMENTATION = '''
 ---
-module: oadm_manage_node
-short_description: Module to manage openshift nodes
+module: oc_adm_registry
+short_description: Module to manage openshift registry
 description:
-  - Manage openshift nodes programmatically.
+  - Manage openshift registry programmatically.
 options:
+  state:
+    description:
+    - The desired action when managing openshift registry
+    - present - update or create the registry
+    - absent - tear down the registry service and deploymentconfig
+    required: false
+    default: False
+    aliases: []
   kubeconfig:
     description:
     - The path for the kubeconfig file to use for authentication
@@ -32,12 +40,6 @@ options:
     required: false
     default: None
     aliases: []
-  credentials:
-    description:
-    - Path to a .kubeconfig file that will contain the credentials the registry should use to contact the master.
-    required: false
-    default: None
-    aliases: []
   images:
     description:
     - The image to base this registry on - ${component} will be replaced with --type
@@ -104,18 +106,6 @@ options:
     required: false
     default: None
     aliases: []
-  registry_type:
-    description:
-    - The registry image to use - if you specify --images this flag may be ignored.
-    required: false
-    default: 'docker-registry'
-    aliases: []
-  volume:
-    description:
-    - The volume path to use for registry storage; defaults to /registry which is the default for origin-docker-registry.
-    required: false
-    default: '/registry'
-    aliases: []
   volume_mounts:
     description:
     - The volume mounts for the registry.
@@ -134,6 +124,18 @@ options:
     required: false
     default: None
     aliases: []
+  env_vars:
+    description:
+    - A dictionary of modifications to make on the deploymentconfig. e.g. FOO: BAR
+    required: false
+    default: None
+    aliases: []
+  force:
+    description:
+    - Force a registry update.
+    required: false
+    default: False
+    aliases: []
 author:
 - "Kenny Woodson <kwoodson@redhat.com>"
 extends_documentation_fragment: []