summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenny Woodson <kwoodson@redhat.com>2017-02-28 17:35:41 -0500
committerKenny Woodson <kwoodson@redhat.com>2017-02-28 17:35:41 -0500
commit2fe8c26ff7c2b6c26da83c4aec40bc64c4b67a9f (patch)
treebab62ff02d3769d19902d045736a6e875cf68e02
parenteca2d2496bc35a77fccceda71d449bcde056841f (diff)
downloadopenshift-2fe8c26ff7c2b6c26da83c4aec40bc64c4b67a9f.tar.gz
openshift-2fe8c26ff7c2b6c26da83c4aec40bc64c4b67a9f.tar.bz2
openshift-2fe8c26ff7c2b6c26da83c4aec40bc64c4b67a9f.tar.xz
openshift-2fe8c26ff7c2b6c26da83c4aec40bc64c4b67a9f.zip
Fixed failures on create when objects exist.
-rw-r--r--roles/lib_openshift/library/oc_adm_registry.py39
-rw-r--r--roles/lib_openshift/library/oc_adm_router.py89
-rw-r--r--roles/lib_openshift/src/class/oc_adm_registry.py39
-rw-r--r--roles/lib_openshift/src/class/oc_adm_router.py91
4 files changed, 163 insertions, 95 deletions
diff --git a/roles/lib_openshift/library/oc_adm_registry.py b/roles/lib_openshift/library/oc_adm_registry.py
index 338d25351..b6b1f4a04 100644
--- a/roles/lib_openshift/library/oc_adm_registry.py
+++ b/roles/lib_openshift/library/oc_adm_registry.py
@@ -2335,8 +2335,20 @@ class Registry(OpenShiftCLI):
def create(self):
'''Create a registry'''
results = []
- for config_file in ['deployment_file', 'service_file']:
- results.append(self._create(self.prepared_registry[config_file]))
+ self.needs_update()
+ # if the object is none, then we need to create it
+ # if the object needs an update, then we should call replace
+ # Handle the deploymentconfig
+ if self.deploymentconfig is None:
+ results.append(self._create(self.prepared_registry['deployment_file']))
+ elif self.prepared_registry['deployment_update']:
+ results.append(self._replace(self.prepared_registry['deployment_file']))
+
+ # Handle the service
+ if self.service is None:
+ results.append(self._create(self.prepared_registry['service_file']))
+ elif self.prepared_registry['service_update']:
+ results.append(self._replace(self.prepared_registry['service_file']))
# Clean up returned results
rval = 0
@@ -2348,7 +2360,7 @@ class Registry(OpenShiftCLI):
return {'returncode': rval, 'results': results}
def update(self):
- '''run update for the registry. This performs a delete and then create '''
+ '''run update for the registry. This performs a replace if required'''
# Store the current service IP
if self.service:
svcip = self.service.get('spec.clusterIP')
@@ -2422,14 +2434,12 @@ class Registry(OpenShiftCLI):
def needs_update(self):
''' check to see if we need to update '''
- if not self.service or not self.deploymentconfig:
- return True
-
exclude_list = ['clusterIP', 'portalIP', 'type', 'protocol']
- if not Utils.check_def_equal(self.prepared_registry['service'].yaml_dict,
- self.service.yaml_dict,
- exclude_list,
- debug=self.verbose):
+ if self.service is None or \
+ not Utils.check_def_equal(self.prepared_registry['service'].yaml_dict,
+ self.service.yaml_dict,
+ exclude_list,
+ debug=self.verbose):
self.prepared_registry['service_update'] = True
exclude_list = ['dnsPolicy',
@@ -2445,10 +2455,11 @@ class Registry(OpenShiftCLI):
'activeDeadlineSeconds', # added in 1.5 for timeouts
]
- if not Utils.check_def_equal(self.prepared_registry['deployment'].yaml_dict,
- self.deploymentconfig.yaml_dict,
- exclude_list,
- debug=self.verbose):
+ if self.deploymentconfig is None or \
+ not Utils.check_def_equal(self.prepared_registry['deployment'].yaml_dict,
+ self.deploymentconfig.yaml_dict,
+ exclude_list,
+ debug=self.verbose):
self.prepared_registry['deployment_update'] = True
return self.prepared_registry['deployment_update'] or self.prepared_registry['service_update'] or False
diff --git a/roles/lib_openshift/library/oc_adm_router.py b/roles/lib_openshift/library/oc_adm_router.py
index 344a339e4..bb4ce5e70 100644
--- a/roles/lib_openshift/library/oc_adm_router.py
+++ b/roles/lib_openshift/library/oc_adm_router.py
@@ -2611,6 +2611,21 @@ class Router(OpenShiftCLI):
''' setter for property rolebinding '''
self._rolebinding = config
+ def get_object_by_kind(self, kind):
+ '''return the current object kind by name'''
+ if re.match("^(dc|deploymentconfig)$", kind, flags=re.IGNORECASE):
+ return self.deploymentconfig
+ elif re.match("^(svc|service)$", kind, flags=re.IGNORECASE):
+ return self.service
+ elif re.match("^(sa|serviceaccount)$", kind, flags=re.IGNORECASE):
+ return self.serviceaccount
+ elif re.match("secret", kind, flags=re.IGNORECASE):
+ return self.secret
+ elif re.match("clusterrolebinding", kind, flags=re.IGNORECASE):
+ return self.rolebinding
+
+ return None
+
def get(self):
''' return the self.router_parts '''
self.service = None
@@ -2761,13 +2776,19 @@ class Router(OpenShiftCLI):
- clusterrolebinding
'''
results = []
+ self.needs_update()
import time
# pylint: disable=maybe-no-member
- for _, oc_data in self.prepared_router.items():
+ for kind, oc_data in self.prepared_router.items():
if oc_data['obj'] is not None:
time.sleep(1)
- results.append(self._create(oc_data['path']))
+ if self.get_object_by_kind(kind) is None:
+ results.append(self._create(oc_data['path']))
+
+ elif oc_data['update']:
+ results.append(self._replace(oc_data['path']))
+
rval = 0
for result in results:
@@ -2795,17 +2816,15 @@ class Router(OpenShiftCLI):
# pylint: disable=too-many-return-statements,too-many-branches
def needs_update(self):
''' check to see if we need to update '''
- if not self.deploymentconfig or not self.service or not self.serviceaccount or not self.secret:
- return True
-
# ServiceAccount:
# Need to determine changes from the pregenerated ones from the original
# Since these are auto generated, we can skip
skip = ['secrets', 'imagePullSecrets']
- if not Utils.check_def_equal(self.prepared_router['ServiceAccount']['obj'].yaml_dict,
- self.serviceaccount.yaml_dict,
- skip_keys=skip,
- debug=self.verbose):
+ if self.serviceaccount is None or \
+ not Utils.check_def_equal(self.prepared_router['ServiceAccount']['obj'].yaml_dict,
+ self.serviceaccount.yaml_dict,
+ skip_keys=skip,
+ debug=self.verbose):
self.prepared_router['ServiceAccount']['update'] = True
# Secret:
@@ -2814,10 +2833,11 @@ class Router(OpenShiftCLI):
if not self.secret:
self.prepared_router['Secret']['update'] = True
- if not Utils.check_def_equal(self.prepared_router['Secret']['obj'].yaml_dict,
- self.secret.yaml_dict,
- skip_keys=skip,
- debug=self.verbose):
+ if self.secret is None or \
+ not Utils.check_def_equal(self.prepared_router['Secret']['obj'].yaml_dict,
+ self.secret.yaml_dict,
+ skip_keys=skip,
+ debug=self.verbose):
self.prepared_router['Secret']['update'] = True
# Service:
@@ -2826,28 +2846,30 @@ class Router(OpenShiftCLI):
port['protocol'] = 'TCP'
skip = ['portalIP', 'clusterIP', 'sessionAffinity', 'type']
- if not Utils.check_def_equal(self.prepared_router['Service']['obj'].yaml_dict,
- self.service.yaml_dict,
- skip_keys=skip,
- debug=self.verbose):
+ if self.service is None or \
+ not Utils.check_def_equal(self.prepared_router['Service']['obj'].yaml_dict,
+ self.service.yaml_dict,
+ skip_keys=skip,
+ debug=self.verbose):
self.prepared_router['Service']['update'] = True
# DeploymentConfig:
# Router needs some exceptions.
# We do not want to check the autogenerated password for stats admin
- if not self.config.config_options['stats_password']['value']:
- for idx, env_var in enumerate(self.prepared_router['DeploymentConfig']['obj'].get(\
- 'spec.template.spec.containers[0].env') or []):
- if env_var['name'] == 'STATS_PASSWORD':
- env_var['value'] = \
- self.deploymentconfig.get('spec.template.spec.containers[0].env[%s].value' % idx)
- break
+ if self.deploymentconfig is not None:
+ if not self.config.config_options['stats_password']['value']:
+ for idx, env_var in enumerate(self.prepared_router['DeploymentConfig']['obj'].get(\
+ 'spec.template.spec.containers[0].env') or []):
+ if env_var['name'] == 'STATS_PASSWORD':
+ env_var['value'] = \
+ self.deploymentconfig.get('spec.template.spec.containers[0].env[%s].value' % idx)
+ break
- # dry-run doesn't add the protocol to the ports section. We will manually do that.
- for idx, port in enumerate(self.prepared_router['DeploymentConfig']['obj'].get(\
- 'spec.template.spec.containers[0].ports') or []):
- if not 'protocol' in port:
- port['protocol'] = 'TCP'
+ # dry-run doesn't add the protocol to the ports section. We will manually do that.
+ for idx, port in enumerate(self.prepared_router['DeploymentConfig']['obj'].get(\
+ 'spec.template.spec.containers[0].ports') or []):
+ if not 'protocol' in port:
+ port['protocol'] = 'TCP'
# These are different when generating
skip = ['dnsPolicy',
@@ -2858,10 +2880,11 @@ class Router(OpenShiftCLI):
'defaultMode',
]
- if not Utils.check_def_equal(self.prepared_router['DeploymentConfig']['obj'].yaml_dict,
- self.deploymentconfig.yaml_dict,
- skip_keys=skip,
- debug=self.verbose):
+ if self.deploymentconfig is None or \
+ not Utils.check_def_equal(self.prepared_router['DeploymentConfig']['obj'].yaml_dict,
+ self.deploymentconfig.yaml_dict,
+ skip_keys=skip,
+ debug=self.verbose):
self.prepared_router['DeploymentConfig']['update'] = True
# Check if any of the parts need updating, if so, return True
diff --git a/roles/lib_openshift/src/class/oc_adm_registry.py b/roles/lib_openshift/src/class/oc_adm_registry.py
index 92ebda235..37904c43f 100644
--- a/roles/lib_openshift/src/class/oc_adm_registry.py
+++ b/roles/lib_openshift/src/class/oc_adm_registry.py
@@ -196,8 +196,20 @@ class Registry(OpenShiftCLI):
def create(self):
'''Create a registry'''
results = []
- for config_file in ['deployment_file', 'service_file']:
- results.append(self._create(self.prepared_registry[config_file]))
+ self.needs_update()
+ # if the object is none, then we need to create it
+ # if the object needs an update, then we should call replace
+ # Handle the deploymentconfig
+ if self.deploymentconfig is None:
+ results.append(self._create(self.prepared_registry['deployment_file']))
+ elif self.prepared_registry['deployment_update']:
+ results.append(self._replace(self.prepared_registry['deployment_file']))
+
+ # Handle the service
+ if self.service is None:
+ results.append(self._create(self.prepared_registry['service_file']))
+ elif self.prepared_registry['service_update']:
+ results.append(self._replace(self.prepared_registry['service_file']))
# Clean up returned results
rval = 0
@@ -209,7 +221,7 @@ class Registry(OpenShiftCLI):
return {'returncode': rval, 'results': results}
def update(self):
- '''run update for the registry. This performs a delete and then create '''
+ '''run update for the registry. This performs a replace if required'''
# Store the current service IP
if self.service:
svcip = self.service.get('spec.clusterIP')
@@ -283,14 +295,12 @@ class Registry(OpenShiftCLI):
def needs_update(self):
''' check to see if we need to update '''
- if not self.service or not self.deploymentconfig:
- return True
-
exclude_list = ['clusterIP', 'portalIP', 'type', 'protocol']
- if not Utils.check_def_equal(self.prepared_registry['service'].yaml_dict,
- self.service.yaml_dict,
- exclude_list,
- debug=self.verbose):
+ if self.service is None or \
+ not Utils.check_def_equal(self.prepared_registry['service'].yaml_dict,
+ self.service.yaml_dict,
+ exclude_list,
+ debug=self.verbose):
self.prepared_registry['service_update'] = True
exclude_list = ['dnsPolicy',
@@ -306,10 +316,11 @@ class Registry(OpenShiftCLI):
'activeDeadlineSeconds', # added in 1.5 for timeouts
]
- if not Utils.check_def_equal(self.prepared_registry['deployment'].yaml_dict,
- self.deploymentconfig.yaml_dict,
- exclude_list,
- debug=self.verbose):
+ if self.deploymentconfig is None or \
+ not Utils.check_def_equal(self.prepared_registry['deployment'].yaml_dict,
+ self.deploymentconfig.yaml_dict,
+ exclude_list,
+ debug=self.verbose):
self.prepared_registry['deployment_update'] = True
return self.prepared_registry['deployment_update'] or self.prepared_registry['service_update'] or False
diff --git a/roles/lib_openshift/src/class/oc_adm_router.py b/roles/lib_openshift/src/class/oc_adm_router.py
index 66769e73b..7b163b120 100644
--- a/roles/lib_openshift/src/class/oc_adm_router.py
+++ b/roles/lib_openshift/src/class/oc_adm_router.py
@@ -113,6 +113,21 @@ class Router(OpenShiftCLI):
''' setter for property rolebinding '''
self._rolebinding = config
+ def get_object_by_kind(self, kind):
+ '''return the current object kind by name'''
+ if re.match("^(dc|deploymentconfig)$", kind, flags=re.IGNORECASE):
+ return self.deploymentconfig
+ elif re.match("^(svc|service)$", kind, flags=re.IGNORECASE):
+ return self.service
+ elif re.match("^(sa|serviceaccount)$", kind, flags=re.IGNORECASE):
+ return self.serviceaccount
+ elif re.match("secret", kind, flags=re.IGNORECASE):
+ return self.secret
+ elif re.match("clusterrolebinding", kind, flags=re.IGNORECASE):
+ return self.rolebinding
+
+ return None
+
def get(self):
''' return the self.router_parts '''
self.service = None
@@ -263,13 +278,19 @@ class Router(OpenShiftCLI):
- clusterrolebinding
'''
results = []
+ self.needs_update()
import time
# pylint: disable=maybe-no-member
- for _, oc_data in self.prepared_router.items():
+ for kind, oc_data in self.prepared_router.items():
if oc_data['obj'] is not None:
time.sleep(1)
- results.append(self._create(oc_data['path']))
+ if self.get_object_by_kind(kind) is None:
+ results.append(self._create(oc_data['path']))
+
+ elif oc_data['update']:
+ results.append(self._replace(oc_data['path']))
+
rval = 0
for result in results:
@@ -297,17 +318,15 @@ class Router(OpenShiftCLI):
# pylint: disable=too-many-return-statements,too-many-branches
def needs_update(self):
''' check to see if we need to update '''
- if not self.deploymentconfig or not self.service or not self.serviceaccount or not self.secret:
- return True
-
# ServiceAccount:
# Need to determine changes from the pregenerated ones from the original
# Since these are auto generated, we can skip
skip = ['secrets', 'imagePullSecrets']
- if not Utils.check_def_equal(self.prepared_router['ServiceAccount']['obj'].yaml_dict,
- self.serviceaccount.yaml_dict,
- skip_keys=skip,
- debug=self.verbose):
+ if self.serviceaccount is None or \
+ not Utils.check_def_equal(self.prepared_router['ServiceAccount']['obj'].yaml_dict,
+ self.serviceaccount.yaml_dict,
+ skip_keys=skip,
+ debug=self.verbose):
self.prepared_router['ServiceAccount']['update'] = True
# Secret:
@@ -316,10 +335,11 @@ class Router(OpenShiftCLI):
if not self.secret:
self.prepared_router['Secret']['update'] = True
- if not Utils.check_def_equal(self.prepared_router['Secret']['obj'].yaml_dict,
- self.secret.yaml_dict,
- skip_keys=skip,
- debug=self.verbose):
+ if self.secret is None or \
+ not Utils.check_def_equal(self.prepared_router['Secret']['obj'].yaml_dict,
+ self.secret.yaml_dict,
+ skip_keys=skip,
+ debug=self.verbose):
self.prepared_router['Secret']['update'] = True
# Service:
@@ -328,28 +348,30 @@ class Router(OpenShiftCLI):
port['protocol'] = 'TCP'
skip = ['portalIP', 'clusterIP', 'sessionAffinity', 'type']
- if not Utils.check_def_equal(self.prepared_router['Service']['obj'].yaml_dict,
- self.service.yaml_dict,
- skip_keys=skip,
- debug=self.verbose):
+ if self.service is None or \
+ not Utils.check_def_equal(self.prepared_router['Service']['obj'].yaml_dict,
+ self.service.yaml_dict,
+ skip_keys=skip,
+ debug=self.verbose):
self.prepared_router['Service']['update'] = True
# DeploymentConfig:
# Router needs some exceptions.
# We do not want to check the autogenerated password for stats admin
- if not self.config.config_options['stats_password']['value']:
- for idx, env_var in enumerate(self.prepared_router['DeploymentConfig']['obj'].get(\
- 'spec.template.spec.containers[0].env') or []):
- if env_var['name'] == 'STATS_PASSWORD':
- env_var['value'] = \
- self.deploymentconfig.get('spec.template.spec.containers[0].env[%s].value' % idx)
- break
-
- # dry-run doesn't add the protocol to the ports section. We will manually do that.
- for idx, port in enumerate(self.prepared_router['DeploymentConfig']['obj'].get(\
- 'spec.template.spec.containers[0].ports') or []):
- if not 'protocol' in port:
- port['protocol'] = 'TCP'
+ if self.deploymentconfig is not None:
+ if not self.config.config_options['stats_password']['value']:
+ for idx, env_var in enumerate(self.prepared_router['DeploymentConfig']['obj'].get(\
+ 'spec.template.spec.containers[0].env') or []):
+ if env_var['name'] == 'STATS_PASSWORD':
+ env_var['value'] = \
+ self.deploymentconfig.get('spec.template.spec.containers[0].env[%s].value' % idx)
+ break
+
+ # dry-run doesn't add the protocol to the ports section. We will manually do that.
+ for idx, port in enumerate(self.prepared_router['DeploymentConfig']['obj'].get(\
+ 'spec.template.spec.containers[0].ports') or []):
+ if not 'protocol' in port:
+ port['protocol'] = 'TCP'
# These are different when generating
skip = ['dnsPolicy',
@@ -360,10 +382,11 @@ class Router(OpenShiftCLI):
'defaultMode',
]
- if not Utils.check_def_equal(self.prepared_router['DeploymentConfig']['obj'].yaml_dict,
- self.deploymentconfig.yaml_dict,
- skip_keys=skip,
- debug=self.verbose):
+ if self.deploymentconfig is None or \
+ not Utils.check_def_equal(self.prepared_router['DeploymentConfig']['obj'].yaml_dict,
+ self.deploymentconfig.yaml_dict,
+ skip_keys=skip,
+ debug=self.verbose):
self.prepared_router['DeploymentConfig']['update'] = True
# Check if any of the parts need updating, if so, return True