44"""
55
66import copy
7- import oracle .weblogic .deploy .util .StringUtils as StringUtils
7+
8+ import java .lang .Boolean as Boolean
9+
810import oracle .weblogic .deploy .util .PyOrderedDict as OrderedDict
911import wlsdeploy .util .dictionary_utils as dictionary_utils
1012
@@ -140,32 +142,52 @@ def target_server_groups_to_servers(self, server_groups_to_target):
140142 method_name = _method_name )
141143
142144 final_assignment_map = dict ()
143- if len (server_names ) > 0 :
145+ dynamic_cluster_assigns = dict ()
146+ # Target servers and dynamic clusters to the server group resources
147+ if len (server_names ) > 0 or len (dynamic_cluster_names ) > 0 :
144148 for server , server_groups in server_to_server_groups_map .iteritems ():
145- if server in server_names and len (server_groups ) > 0 :
146- final_assignment_map [server ] = server_groups
147-
148- elif len (server_names ) == 0 and len (dynamic_cluster_names ) == 0 :
149- #
150- # Domain has no managed servers and there were not targeting limits specified to target
151- # server groups to the admin server so make sure that the server groups are targeted to
152- # the admin server.
153- #
154- # This is really a best effort attempt. It works for JRF domains but it is certainly possible
155- # that it may cause problems with other custom domain types. Of course, creating a domain with
156- # no managed servers is not a primary use case of this tool so do it and hope for the best...
157- #
158- final_assignment_map [server_names [0 ]] = server_groups_to_target
159-
160- # Target any dynamic clusters to the server group resources
161- dynamic_cluster_assigns = None
162- if len (dynamic_cluster_names ) > 0 :
163- dynamic_cluster_assigns = dict ()
164- for name in dynamic_cluster_names :
165- if name in server_to_server_groups_map :
166- dynamic_cluster_assigns [name ] = server_to_server_groups_map [name ]
167-
168- self .logger .exiting (result = str (dynamic_cluster_assigns ), class_name = self .__class_name , method_name = _method_name )
149+ if len (server_groups ) > 0 :
150+ if server in server_names :
151+ final_assignment_map [server ] = server_groups
152+ elif server in dynamic_cluster_names :
153+ dynamic_cluster_assigns [server ] = server_groups
154+
155+ #
156+ # Domain has not targeted the server groups to managed servers (configured), or the
157+ # domain has no managed servers (configured) but has user server groups. The resources for the
158+ # user server groups must be targeted before the write/update domain or the write/update will fail.
159+ # Thus assign the user server groups to the admin server.
160+ #
161+ # Because of the interaction of the working context in the different wlst helpers, the dynamic
162+ # clusters will be applied to the resources separately and after the write/update domain.
163+ #
164+ # (From original blurb)
165+ # This is really a best effort attempt. It works for JRF domains but it is certainly possible
166+ # that it may cause problems with other custom domain types. Of course, creating a domain with
167+ # no managed servers is not a primary use case of this tool so do it and hope for the best...
168+ #
169+ # (New comment)
170+ # As we have added the intricacies of the dynamic clusters, if the targeting is to dynamic
171+ # clusters only, the set server groups with the admin server will get through the write/update domain
172+ # and the applyJRF with the dynamic cluster should theoretically unset the AdminServer on the user server
173+ # groups. It works with JRF type domains.
174+
175+ if len (server_groups_to_target ) > 0 :
176+ if len (final_assignment_map ) == 0 :
177+ # This is a quickie to fix the issue where server groups are not targeted because no configured
178+ # managed servers exist in the domain
179+ final_assignment_map [server_names [0 ]] = server_groups_to_target
180+ else :
181+ # If a server group or groups is not targeted in the assignments, log it to stdout
182+ no_targets = [server_target for server_target in server_groups_to_target if server_target not in
183+ [server_target for row in final_assignment_map .itervalues () for
184+ server_target in server_groups_to_target if server_target in row ]]
185+ if len (no_targets ) > 0 :
186+ self .logger .info ('WLSDPLY-12248' , no_targets ,
187+ class_name = self .__class_name , method_name = _method_name )
188+
189+ self .logger .exiting (result = str (dynamic_cluster_assigns ),
190+ class_name = self .__class_name , method_name = _method_name )
169191 return final_assignment_map , dynamic_cluster_assigns
170192
171193 def target_server_groups (self , server_assigns ):
@@ -200,15 +222,14 @@ def target_server_groups_to_dynamic_clusters(self, dynamic_cluster_assigns):
200222 domain_typedef = self .model_context .get_domain_typedef ()
201223
202224 if len (dynamic_cluster_assigns ) > 0 :
225+ self .logger .info ('WLSDPLY-12247' , class_name = self .__class_name , method_name = _method_name )
203226 # TBD assign server group resources to cluster. The JRF resources could still be applied separately
204227 # using this technique - or remove this technique and replace with the resource targeting
205228 if domain_typedef .has_jrf_resources ():
206229 self ._target_jrf_resources (dynamic_cluster_assigns )
207230 else :
208- ex = exception_helper .create_exception (self .exception_type , 'WLSDPLY-12238' ,
209- domain_typedef .get_domain_type ())
210- self .logger .throwing (ex , class_name = self .__class_name , method_name = _method_name )
211- raise ex
231+ self .logger .warning ('WLSDPLY-12238' , domain_typedef .get_domain_type (),
232+ class_name = self .__class_name , method_name = _method_name )
212233
213234 self .logger .exiting (class_name = self .__class_name , method_name = _method_name )
214235 return
@@ -357,7 +378,7 @@ def _get_server_group_targeting_limits(self, server_group_targeting_limits, clus
357378 if DYNAMIC_SERVERS in cluster_members :
358379 # This will need special handling to target server group resources
359380 cluster_members .remove (DYNAMIC_SERVERS )
360- cluster_members .add (target_name )
381+ cluster_members .append (target_name )
361382 new_list .extend (cluster_members )
362383 else :
363384 # Assume it is a server name and add it to the new list
@@ -385,28 +406,47 @@ def _get_server_to_server_groups_map(self, admin_server_name, server_names, dyna
385406 self .logger .entering (admin_server_name , str (server_names ), str (server_groups ), str (sg_targeting_limits ),
386407 class_name = self .__class_name , method_name = _method_name )
387408 result = OrderedDict ()
409+ revised_server_groups = self ._revised_list_server_groups (server_groups , sg_targeting_limits )
388410 for server_name in server_names :
389411 server_groups_for_server = self .__get_server_groups_for_entity (server_name , sg_targeting_limits )
390- if server_groups_for_server is not None :
412+ if len ( server_groups_for_server ) > 0 :
391413 result [server_name ] = server_groups_for_server
392414 elif server_name != admin_server_name :
393415 # By default, we only target managed servers unless explicitly listed in the targeting limits
394- result [server_name ] = list (server_groups )
416+ result [server_name ] = list (revised_server_groups )
395417 else :
396418 result [admin_server_name ] = list ()
397419 for cluster_name in dynamic_cluster_names :
398- server_groups_for_cluster = self .__get_server_groups_for_entity (cluster_name , sg_targeting_limits )
399- if server_groups_for_cluster is not None :
420+ server_groups_for_cluster = \
421+ self .__get_server_groups_for_entity (cluster_name , sg_targeting_limits )
422+ if len (server_groups_for_cluster ) > 0 :
400423 result [cluster_name ] = server_groups_for_cluster
401424 else :
402- result [cluster_name ] = list (server_groups )
425+ result [cluster_name ] = list (revised_server_groups )
403426 self .logger .finer ('WLSDPLY-12239' , result [cluster_name ], cluster_name ,
404427 class_name = self .__class_name , method_name = _method_name )
405428 if admin_server_name not in result :
406429 result [admin_server_name ] = list ()
407430 self .logger .exiting (class_name = self .__class_name , method_name = _method_name , result = result )
408431 return result
409432
433+ def _revised_list_server_groups (self , server_groups , sg_targeting_limits ):
434+ """
435+ Remove all server groups that are explicitly targeted to a cluster, server set or stand-alone
436+ managed server.
437+ :param server_groups: list of server groups applied by the extension templates
438+ :param sg_targeting_limits: list of targeting from the domainInfo section
439+ :return: server group list with the specific targeted server groups removed
440+ """
441+ _method_name = '_revised_list_server_groups'
442+ self .logger .entering (sg_targeting_limits , class_name = self .__class_name , method_name = _method_name )
443+ result = list ()
444+ targeted_server_groups = sg_targeting_limits .keys ()
445+ for server_group in server_groups :
446+ if server_group not in targeted_server_groups :
447+ result .append (server_group )
448+ return result
449+
410450 def __get_server_groups_for_entity (self , entity_name , sg_targeting_limits ):
411451 """
412452 Get the servers groups to target for a given server or dynamic cluster name.
@@ -416,14 +456,11 @@ def __get_server_groups_for_entity(self, entity_name, sg_targeting_limits):
416456 if the entity name does not appear in the targeting limits
417457 """
418458 _method_name = '__get_server_groups_for_entity'
419-
420- result = None
459+ result = list ()
421460 for server_group , entity_names_list in sg_targeting_limits .iteritems ():
422461 if entity_name in entity_names_list :
423- if result is None :
424- result = list ()
425462 result .append (server_group )
426- if result is not None :
463+ if len ( result ) > 0 :
427464 self .logger .fine ('WLSDPLY-12243' , entity_name , result , class_name = self .__class_name ,
428465 method_name = _method_name )
429466 return result
0 commit comments