Skip to content

Commit 105c9e6

Browse files
Merge pull request #396 from oracle/WDT-346-domain-info-targeting-fail
Jira:WDT-346 fix reported issue and other known problems with dynamic…
2 parents 02bd732 + 47ae3fd commit 105c9e6

File tree

5 files changed

+110
-48
lines changed

5 files changed

+110
-48
lines changed

KnownIssues.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,30 @@
11
The following list are known issues. The issue may contain a work-around or an associated Issue number.
22

3+
**ISSUE**:
4+
The createDomain and updateDomain tools cannot target non-JRF product resources to dynamic clusters because
5+
WebLogic WLST will not assign resources associated with extension or custom template user server groups
6+
to dynamic clusters. Resources associated to JRF user server groups defined in the domain typedef
7+
(i.e. JRF, RestrictedJRF) will be targeted to the dynamic cluster by the WDT tools using the FMW WLST function
8+
applyJRF.
9+
10+
If you have only non-JRF user server groups targeted to a dynamic cluster, you will see the following message:
11+
12+
WLSDPLY-12238: Unable to target non-JRF template server groups for domain type <your domain typedef> to dynamic cluster(s).
13+
14+
You will not see this message if you have a mix of non-JRF and JRF user server groups targeted to the dynamic
15+
cluster. WDT cannot detect if a user server group is associated to JRF, and therefore, whether the applyJRF will
16+
target the user group resources to the dynamic cluster.
17+
18+
**ACTION**:
19+
20+
You must contact WebLogic support to assist you with a solution for this targeting dilemma. You can perform
21+
the following action as a temporary work-around to the described issue.
22+
23+
1. Add a configured managed server to your dynamic cluster and re-run the createDomain or updateDomain tool.
24+
The dynamic cluster becomes a "mixed" cluster once the managed server is added. When the WDT tool targets the
25+
user server groups to the configured managed server, the resources are automatically targeted to the cluster
26+
by WebLogic, which includes both the managed server and the dynamic servers.
27+
328
**ISSUE**:
429
The discoverDomain STDOUT contains many SEVERE messages about cd() and ls() when it is run against a 12.2.1 domain.
530
The discover tool navigates through the domain MBeans using wlst to determine which MBeans are present in a

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -487,13 +487,13 @@ def __create_domain_with_select_template(self, domain_home):
487487

488488
server_groups_to_target = self._domain_typedef.get_server_groups_to_target()
489489
server_assigns, dynamic_assigns = self.target_helper.target_server_groups_to_servers(server_groups_to_target)
490-
if server_assigns is not None:
490+
if len(server_assigns) > 0:
491491
self.target_helper.target_server_groups(server_assigns)
492492

493493
self.wlst_helper.write_domain(domain_home)
494494
self.wlst_helper.close_template()
495495

496-
if dynamic_assigns is not None:
496+
if len(dynamic_assigns) > 0:
497497
self.target_helper.target_server_groups_to_dynamic_clusters(dynamic_assigns)
498498

499499
self.logger.exiting(class_name=self.__class_name, method_name=_method_name)

core/src/main/python/wlsdeploy/tool/deploy/topology_updater.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,11 @@ def update(self):
129129
server_groups_to_target = self._domain_typedef.get_server_groups_to_target()
130130
server_assigns, dynamic_assigns = \
131131
self.target_helper.target_server_groups_to_servers(server_groups_to_target)
132-
if dynamic_assigns is not None:
132+
if len(dynamic_assigns) > 0:
133133
self.wlst_helper.save_and_close(self.model_context)
134134
self.target_helper.target_server_groups_to_dynamic_clusters(dynamic_assigns)
135135
self.wlst_helper.reopen(self.model_context)
136-
if server_assigns is not None:
136+
if len(server_assigns) > 0:
137137
self.target_helper.target_server_groups(server_assigns)
138138
elif self._domain_typedef.is_jrf_domain_type():
139139
self.target_helper.target_jrf_groups_to_clusters_servers()

core/src/main/python/wlsdeploy/tool/util/target_helper.py

Lines changed: 76 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"""
55

66
import copy
7-
import oracle.weblogic.deploy.util.StringUtils as StringUtils
7+
88
import oracle.weblogic.deploy.util.PyOrderedDict as OrderedDict
99
import wlsdeploy.util.dictionary_utils as dictionary_utils
1010

@@ -16,7 +16,6 @@
1616
from wlsdeploy.aliases.model_constants import MODEL_LIST_DELIMITER
1717
from wlsdeploy.aliases.model_constants import SERVER
1818
from wlsdeploy.aliases.model_constants import SERVER_GROUP_TARGETING_LIMITS
19-
from wlsdeploy.exception import exception_helper
2019
from wlsdeploy.tool.util.alias_helper import AliasHelper
2120
from wlsdeploy.tool.util.wlst_helper import WlstHelper
2221
from wlsdeploy.util import string_utils
@@ -140,32 +139,52 @@ def target_server_groups_to_servers(self, server_groups_to_target):
140139
method_name=_method_name)
141140

142141
final_assignment_map = dict()
143-
if len(server_names) > 0:
142+
dynamic_cluster_assigns = dict()
143+
# Target servers and dynamic clusters to the server group resources
144+
if len(server_names) > 0 or len(dynamic_cluster_names) > 0:
144145
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)
146+
if len(server_groups) > 0:
147+
if server in server_names:
148+
final_assignment_map[server] = server_groups
149+
elif server in dynamic_cluster_names:
150+
dynamic_cluster_assigns[server] = server_groups
151+
152+
#
153+
# Domain has not targeted the server groups to managed servers (configured), or the
154+
# domain has no managed servers (configured) but has user server groups. The resources for the
155+
# user server groups must be targeted before the write/update domain or the write/update will fail.
156+
# Thus assign the user server groups to the admin server.
157+
#
158+
# Because of the interaction of the working context in the different wlst helpers, the dynamic
159+
# clusters will be applied to the resources separately and after the write/update domain.
160+
#
161+
# (From original blurb)
162+
# This is really a best effort attempt. It works for JRF domains but it is certainly possible
163+
# that it may cause problems with other custom domain types. Of course, creating a domain with
164+
# no managed servers is not a primary use case of this tool so do it and hope for the best...
165+
#
166+
# (New comment)
167+
# As we have added the intricacies of the dynamic clusters, if the targeting is to dynamic
168+
# clusters only, the set server groups with the admin server will get through the write/update domain
169+
# and the applyJRF with the dynamic cluster should theoretically unset the AdminServer on the user server
170+
# groups. It works with JRF type domains.
171+
172+
if len(server_groups_to_target) > 0:
173+
if len(final_assignment_map) == 0:
174+
# This is a quickie to fix the issue where server groups are not targeted because no configured
175+
# managed servers exist in the domain
176+
final_assignment_map[server_names[0]] = server_groups_to_target
177+
else:
178+
# If a server group or groups is not targeted in the assignments, log it to stdout
179+
no_targets = [server_target for server_target in server_groups_to_target if server_target not in
180+
[server_target for row in final_assignment_map.itervalues() for
181+
server_target in server_groups_to_target if server_target in row]]
182+
if len(no_targets) > 0:
183+
self.logger.info('WLSDPLY-12248', no_targets,
184+
class_name=self.__class_name, method_name=_method_name)
185+
186+
self.logger.exiting(result=str(dynamic_cluster_assigns),
187+
class_name=self.__class_name, method_name=_method_name)
169188
return final_assignment_map, dynamic_cluster_assigns
170189

171190
def target_server_groups(self, server_assigns):
@@ -200,15 +219,14 @@ def target_server_groups_to_dynamic_clusters(self, dynamic_cluster_assigns):
200219
domain_typedef = self.model_context.get_domain_typedef()
201220

202221
if len(dynamic_cluster_assigns) > 0:
222+
self.logger.info('WLSDPLY-12247', class_name=self.__class_name, method_name=_method_name)
203223
# TBD assign server group resources to cluster. The JRF resources could still be applied separately
204224
# using this technique - or remove this technique and replace with the resource targeting
205225
if domain_typedef.has_jrf_resources():
206226
self._target_jrf_resources(dynamic_cluster_assigns)
207227
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
228+
self.logger.warning('WLSDPLY-12238', domain_typedef.get_domain_type(),
229+
class_name=self.__class_name, method_name=_method_name)
212230

213231
self.logger.exiting(class_name=self.__class_name, method_name=_method_name)
214232
return
@@ -357,7 +375,7 @@ def _get_server_group_targeting_limits(self, server_group_targeting_limits, clus
357375
if DYNAMIC_SERVERS in cluster_members:
358376
# This will need special handling to target server group resources
359377
cluster_members.remove(DYNAMIC_SERVERS)
360-
cluster_members.add(target_name)
378+
cluster_members.append(target_name)
361379
new_list.extend(cluster_members)
362380
else:
363381
# Assume it is a server name and add it to the new list
@@ -385,28 +403,47 @@ def _get_server_to_server_groups_map(self, admin_server_name, server_names, dyna
385403
self.logger.entering(admin_server_name, str(server_names), str(server_groups), str(sg_targeting_limits),
386404
class_name=self.__class_name, method_name=_method_name)
387405
result = OrderedDict()
406+
revised_server_groups = self._revised_list_server_groups(server_groups, sg_targeting_limits)
388407
for server_name in server_names:
389408
server_groups_for_server = self.__get_server_groups_for_entity(server_name, sg_targeting_limits)
390-
if server_groups_for_server is not None:
409+
if len(server_groups_for_server) > 0:
391410
result[server_name] = server_groups_for_server
392411
elif server_name != admin_server_name:
393412
# By default, we only target managed servers unless explicitly listed in the targeting limits
394-
result[server_name] = list(server_groups)
413+
result[server_name] = list(revised_server_groups)
395414
else:
396415
result[admin_server_name] = list()
397416
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:
417+
server_groups_for_cluster = \
418+
self.__get_server_groups_for_entity(cluster_name, sg_targeting_limits)
419+
if len(server_groups_for_cluster) > 0:
400420
result[cluster_name] = server_groups_for_cluster
401421
else:
402-
result[cluster_name] = list(server_groups)
422+
result[cluster_name] = list(revised_server_groups)
403423
self.logger.finer('WLSDPLY-12239', result[cluster_name], cluster_name,
404424
class_name=self.__class_name, method_name=_method_name)
405425
if admin_server_name not in result:
406426
result[admin_server_name] = list()
407427
self.logger.exiting(class_name=self.__class_name, method_name=_method_name, result=result)
408428
return result
409429

430+
def _revised_list_server_groups(self, server_groups, sg_targeting_limits):
431+
"""
432+
Remove all server groups that are explicitly targeted to a cluster, server set or stand-alone
433+
managed server.
434+
:param server_groups: list of server groups applied by the extension templates
435+
:param sg_targeting_limits: list of targeting from the domainInfo section
436+
:return: server group list with the specific targeted server groups removed
437+
"""
438+
_method_name = '_revised_list_server_groups'
439+
self.logger.entering(sg_targeting_limits, class_name=self.__class_name, method_name=_method_name)
440+
result = list()
441+
targeted_server_groups = sg_targeting_limits.keys()
442+
for server_group in server_groups:
443+
if server_group not in targeted_server_groups:
444+
result.append(server_group)
445+
return result
446+
410447
def __get_server_groups_for_entity(self, entity_name, sg_targeting_limits):
411448
"""
412449
Get the servers groups to target for a given server or dynamic cluster name.
@@ -416,14 +453,11 @@ def __get_server_groups_for_entity(self, entity_name, sg_targeting_limits):
416453
if the entity name does not appear in the targeting limits
417454
"""
418455
_method_name = '__get_server_groups_for_entity'
419-
420-
result = None
456+
result = list()
421457
for server_group, entity_names_list in sg_targeting_limits.iteritems():
422458
if entity_name in entity_names_list:
423-
if result is None:
424-
result = list()
425459
result.append(server_group)
426-
if result is not None:
460+
if len(result) > 0:
427461
self.logger.fine('WLSDPLY-12243', entity_name, result, class_name=self.__class_name,
428462
method_name=_method_name)
429463
return result

core/src/main/resources/oracle/weblogic/deploy/messages/wlsdeploy_rb.properties

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1073,8 +1073,8 @@ WLSDPLY-12234=Unable to copy domain library {0} to directory {1}
10731073
WLSDPLY-12235=Installing domain library {0} to lib directory of {1}
10741074
WLSDPLY-12236=Target the JRF resources to the clusters with dynamic servers {0}
10751075
WLSDPLY-12237=Target the resources for server groups {0} to cluster {1} with dynamic server members
1076-
WLSDPLY-12238=Unable to target template server groups for domain type {0} to dynamic clusters. This will \
1077-
be available in a follow-up release of WebLogic Deploy Tooling.
1076+
WLSDPLY-12238=Unable to target non-JRF template server groups for domain type {0} to dynamic cluster(s).
1077+
10781078
WLSDPLY-12239=Found server groups {0} for cluster {1}
10791079
WLSDPLY-12240=Server group targeting limits {0} found in model
10801080
WLSDPLY-12242=The assignment of servers to server groups map is {0}
@@ -1083,6 +1083,9 @@ WLSDPLY-12244=Targeting JRF resources to a dynamic cluster(s), {0}, for a Restri
10831083
when updating in online mode
10841084
WLSDPLY-12245=Selecting custom extension template named {0}
10851085
WLSDPLY-12246=Adding custom extension template file {0} to domain
1086+
WLSDPLY-12247=WebLogic does not support targeting resources to dynamic servers. JRF product related resources \
1087+
will be targeted to the dynamic cluster using the applyJRF function.
1088+
WLSDPLY-12248=The server group(s) {0} will not be targeted to the Admin server or a configured manage server
10861089

10871090
# domain_typedef.py
10881091
WLSDPLY-12300={0} got the domain type {1} but the domain type definition file {2} was not valid: {3}

0 commit comments

Comments
 (0)