Skip to content

Commit 40e1182

Browse files
authored
Merge pull request #104 from oracle/issue#95-add-update-domain-capability
Issue#95 add update domain capability
2 parents b1ede94 + 1254a44 commit 40e1182

File tree

11 files changed

+2172
-664
lines changed

11 files changed

+2172
-664
lines changed

core/src/main/python/update.py

Lines changed: 501 additions & 0 deletions
Large diffs are not rendered by default.

core/src/main/python/wlsdeploy/tool/create/creator.py

Lines changed: 7 additions & 149 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22
Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
33
The Universal Permissive License (UPL), Version 1.0
44
"""
5-
import copy
65

7-
from oracle.weblogic.deploy.util import PyOrderedDict as OrderedDict
86
from oracle.weblogic.deploy.util import WLSDeployArchive
97

108
from wlsdeploy.aliases.location_context import LocationContext
@@ -17,29 +15,26 @@
1715
from wlsdeploy.tool.util.wlst_helper import WlstHelper
1816
from wlsdeploy.util import dictionary_utils
1917
from wlsdeploy.util.model import Model
20-
from wlsdeploy.util import string_utils
2118
from wlsdeploy.util.weblogic_helper import WebLogicHelper
2219

23-
from wlsdeploy.aliases.model_constants import CLUSTER
24-
from wlsdeploy.aliases.model_constants import MODEL_LIST_DELIMITER
25-
from wlsdeploy.aliases.model_constants import SERVER
26-
2720

2821
class Creator(object):
2922
"""
3023
The base class used by the DomainCreator.
3124
"""
3225
__class_name = 'Creator'
3326

34-
def __init__(self, model, model_context, aliases):
35-
self.logger = PlatformLogger('wlsdeploy.create')
27+
def __init__(self, model, model_context, aliases, exception_type=ExceptionType.CREATE,
28+
logger=PlatformLogger('wlsdeploy.create')):
29+
30+
self.logger = logger
3631
self.aliases = aliases
37-
self.alias_helper = AliasHelper(self.aliases, self.logger, ExceptionType.CREATE)
38-
self.wlst_helper = WlstHelper(self.logger, ExceptionType.CREATE)
32+
self.alias_helper = AliasHelper(self.aliases, self.logger, exception_type)
33+
self.wlst_helper = WlstHelper(self.logger, exception_type)
3934
self.model = Model(model)
4035
self.model_context = model_context
4136
self.wls_helper = WebLogicHelper(self.logger)
42-
self.attribute_setter = AttributeSetter(self.aliases, self.logger, ExceptionType.CREATE)
37+
self.attribute_setter = AttributeSetter(self.aliases, self.logger, exception_type)
4338
# Must be initialized by the subclass since only it has
4439
# the knowledge required to compute the domain name.
4540
self.archive_helper = None
@@ -393,7 +388,6 @@ def _create_subfolders(self, location, model_nodes):
393388
self.logger.exiting(class_name=self.__class_name, method_name=_method_name)
394389
return
395390

396-
397391
def _is_type_valid(self, location, type_name):
398392
"""
399393
Verify that the specified location in valid for the current WLS version.
@@ -451,139 +445,3 @@ def _format_model_path(self, location, name):
451445
path += '/'
452446
path += name
453447
return path
454-
455-
def _get_existing_server_names(self):
456-
"""
457-
Get the list of server names from WLST.
458-
:return: the list of server names
459-
:raises: CreateException: is an error occurs reading from the aliases or WLST
460-
"""
461-
_method_name = '_get_existing_server_names'
462-
463-
self.logger.entering(class_name=self.__class_name, method_name=_method_name)
464-
server_location = LocationContext().append_location(SERVER)
465-
server_list_path = self.alias_helper.get_wlst_list_path(server_location)
466-
result = self.wlst_helper.get_existing_object_list(server_list_path)
467-
self.logger.exiting(class_name=self.__class_name, method_name=_method_name, result=result)
468-
return result
469-
470-
def _get_clusters_and_members_map(self):
471-
"""
472-
Get a map keyed by cluster name with values that are a list of member server names
473-
:return: the cluster name to member server names map
474-
:raises: CreateException: is an error occurs reading from the aliases or WLST
475-
"""
476-
_method_name = '_get_clusters_and_members_map'
477-
478-
self.logger.entering(class_name=self.__class_name, method_name=_method_name)
479-
server_location = LocationContext().append_location(SERVER)
480-
server_list_path = self.alias_helper.get_wlst_list_path(server_location)
481-
server_names = self.wlst_helper.get_existing_object_list(server_list_path)
482-
server_token = self.alias_helper.get_name_token(server_location)
483-
cluster_map = OrderedDict()
484-
for server_name in server_names:
485-
server_location.add_name_token(server_token, server_name)
486-
server_attributes_path = self.alias_helper.get_wlst_attributes_path(server_location)
487-
self.wlst_helper.cd(server_attributes_path)
488-
489-
server_attributes_map = self.wlst_helper.lsa()
490-
cluster_name = dictionary_utils.get_element(server_attributes_map, CLUSTER)
491-
if string_utils.is_empty(cluster_name):
492-
# if server is not part of a cluster, continue with the next server
493-
continue
494-
495-
if cluster_name not in cluster_map:
496-
cluster_map[cluster_name] = list()
497-
cluster_map[cluster_name].append(server_name)
498-
499-
self.logger.exiting(class_name=self.__class_name, method_name=_method_name, result=cluster_map)
500-
return cluster_map
501-
502-
def _get_server_group_targeting_limits(self, server_group_targeting_limits, clusters_map):
503-
"""
504-
Get any server group targeting limits specified in the model, converting any cluster
505-
names to the list of members. This method assumes that the limits dictionary is not
506-
None or empty.
507-
:param server_group_targeting_limits: the raw server group targeting_limits from the model
508-
:param clusters_map: the map of cluster names to member server names
509-
:return: the map of server groups to server names to target
510-
"""
511-
_method_name = '_get_server_group_targeting_limits'
512-
513-
self.logger.entering(str(server_group_targeting_limits), str(clusters_map),
514-
class_name=self.__class_name, method_name=_method_name)
515-
sg_targeting_limits = copy.deepcopy(server_group_targeting_limits)
516-
for server_group_name, sg_targeting_limit in sg_targeting_limits.iteritems():
517-
if type(sg_targeting_limit) is str:
518-
if MODEL_LIST_DELIMITER in sg_targeting_limit:
519-
sg_targeting_limit = sg_targeting_limit.split(MODEL_LIST_DELIMITER)
520-
else:
521-
# convert a single value into a list of one...
522-
new_list = list()
523-
new_list.append(sg_targeting_limit)
524-
sg_targeting_limit = new_list
525-
526-
# Convert any references to a cluster name into the list of member server names
527-
new_list = list()
528-
for target_name in sg_targeting_limit:
529-
target_name = target_name.strip()
530-
if target_name in clusters_map:
531-
cluster_members = dictionary_utils.get_element(clusters_map, target_name)
532-
new_list.extend(cluster_members)
533-
else:
534-
# Assume it is a server name and add it to the new list
535-
new_list.append(target_name)
536-
sg_targeting_limits[server_group_name] = new_list
537-
538-
self.logger.exiting(class_name=self.__class_name, method_name=_method_name, result=sg_targeting_limits)
539-
return sg_targeting_limits
540-
541-
def _get_server_to_server_groups_map(self, admin_server_name, server_names, server_groups, sg_targeting_limits):
542-
"""
543-
Get the map of server names to the list of server groups to target to that server.
544-
:param admin_server_name: the admin server name
545-
:param server_names: the list of server names
546-
:param server_groups: the complete list of server groups that will, by default, be targeted to
547-
all managed servers unless the server is listed in the targeting limits map
548-
:param sg_targeting_limits: the targeting limits map
549-
:return: the map of server names to the list of server groups to target to that server
550-
"""
551-
_method_name = '_get_server_to_server_groups_map'
552-
553-
self.logger.entering(admin_server_name, str(server_names), str(server_groups), str(sg_targeting_limits),
554-
class_name=self.__class_name, method_name=_method_name)
555-
result = OrderedDict()
556-
for server_name in server_names:
557-
server_groups_for_server = self.__get_server_groups_for_server(server_name, sg_targeting_limits)
558-
if server_groups_for_server is not None:
559-
result[server_name] = server_groups_for_server
560-
elif server_name != admin_server_name:
561-
# By default, we only target managed servers unless explicitly listed in the targeting limits
562-
result[server_name] = list(server_groups)
563-
else:
564-
result[admin_server_name] = list()
565-
if admin_server_name not in result:
566-
result[admin_server_name] = list()
567-
self.logger.exiting(class_name=self.__class_name, method_name=_method_name, result=result)
568-
return result
569-
570-
def __get_server_groups_for_server(self, server_name, sg_targeting_limits):
571-
"""
572-
Get the servers groups to target for a given server name.
573-
:param server_name: the server name
574-
:param sg_targeting_limits: the targeting limits
575-
:return: the list of server groups to target to the specified server name, or None
576-
if the server name does not appear in the targeting limits
577-
"""
578-
_method_name = '__get_server_groups_for_server'
579-
580-
self.logger.entering(server_name, str(sg_targeting_limits),
581-
class_name=self.__class_name, method_name=_method_name)
582-
result = None
583-
for server_group, server_names_list in sg_targeting_limits.iteritems():
584-
if server_name in server_names_list:
585-
if result is None:
586-
result = list()
587-
result.append(server_group)
588-
self.logger.exiting(class_name=self.__class_name, method_name=_method_name, result=result)
589-
return result

0 commit comments

Comments
 (0)