Skip to content

Commit 4760d0f

Browse files
change all discover interfaces to receive a base location and aliases instance
1 parent f4e16ce commit 4760d0f

17 files changed

+168
-85
lines changed

core/src/main/python/discover.py

Lines changed: 46 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626

2727
sys.path.append(os.path.dirname(os.path.realpath(sys.argv[0])))
2828

29+
from wlsdeploy.aliases import model_constants
30+
from wlsdeploy.aliases.aliases import Aliases
31+
from wlsdeploy.aliases.location_context import LocationContext
2932
from wlsdeploy.aliases.wlst_modes import WlstModes
3033
from wlsdeploy.exception import exception_helper
3134
from wlsdeploy.logging.platform_logger import PlatformLogger
@@ -135,7 +138,7 @@ def __process_online_args(optional_arg_map):
135138
raise ex
136139
optional_arg_map[CommandLineArgUtil.ADMIN_PASS_SWITCH] = String(password)
137140

138-
__logger.info('WLSDPLY-06020')
141+
mode = WlstModes.ONLINE
139142
return mode
140143

141144

@@ -159,23 +162,28 @@ def __process_archive_filename_arg(required_arg_map):
159162
return
160163

161164

162-
def __discover(model_context):
165+
def __discover(model_context, aliases):
163166
"""
164167
Populate the model from the domain.
165168
:param model_context: the model context
166169
:return: the fully-populated model
167170
:raises DiscoverException: if an error occurred while discover the domain
168171
"""
169172
_method_name = '__discover'
170-
171173
model = Model()
174+
base_location = LocationContext()
172175
__connect_to_domain(model_context)
173176
try:
174-
DomainInfoDiscoverer(model_context, model.get_model_domain_info(), wlst_mode=__wlst_mode).discover()
175-
TopologyDiscoverer(model_context, model.get_model_topology(), wlst_mode=__wlst_mode).discover()
176-
ResourcesDiscoverer(model_context, model.get_model_resources(), wlst_mode=__wlst_mode).discover()
177-
DeploymentsDiscoverer(model_context, model.get_model_app_deployments(), wlst_mode=__wlst_mode).discover()
178-
__discover_multi_tenant(model, model_context)
177+
_add_domain_name(base_location, aliases)
178+
DomainInfoDiscoverer(model_context, model.get_model_domain_info(), base_location, wlst_mode=__wlst_mode,
179+
aliases=aliases).discover()
180+
TopologyDiscoverer(model_context, model.get_model_topology(), base_location, wlst_mode=__wlst_mode,
181+
aliases=aliases).discover()
182+
ResourcesDiscoverer(model_context, model.get_model_resources(), base_location, wlst_mode=__wlst_mode,
183+
aliases=aliases).discover()
184+
DeploymentsDiscoverer(model_context, model.get_model_app_deployments(), base_location, wlst_mode=__wlst_mode,
185+
aliases=aliases).discover()
186+
__discover_multi_tenant(model, model_context, base_location, aliases)
179187
except AliasException, ae:
180188
wls_version = WebLogicHelper(__logger).get_actual_weblogic_version()
181189
wlst_mode = WlstModes.from_value(__wlst_mode)
@@ -189,14 +197,32 @@ def __discover(model_context):
189197
return model
190198

191199

192-
def __discover_multi_tenant(model, model_context):
200+
def _add_domain_name(location, aliases):
201+
_method_name = '_get_domain_name'
202+
try:
203+
wlst_helper.cd('/')
204+
domain_name = wlst_helper.get(model_constants.DOMAIN_NAME)
205+
except PyWLSTException, pe:
206+
de = exception_helper.create_discover_exception('WLSDPLY-06020', pe.getLocalizedMessage())
207+
__logger.throwing(class_name=_class_name, method_name=_method_name, error=de)
208+
raise de
209+
if domain_name is not None:
210+
location.add_name_token(aliases.get_name_token(location), domain_name)
211+
__logger.info('WLSDPLY-06022', domain_name, class_name=_class_name, method_name=_method_name)
212+
else:
213+
de = exception_helper.create_discover_exception('WLSDPLY-WLSDPLY-06021')
214+
__logger.throwing(class_name=_class_name, method_name=_method_name, error=de)
215+
raise de
216+
217+
218+
def __discover_multi_tenant(model, model_context, base_location, aliases):
193219
"""
194220
Discover the multi-tenant-related parts of the domain, if they exist.
195221
:param model: the model object to populate
196222
:param model_context: the model context object
197223
:raises DiscoverException: if an error occurs during discovery
198224
"""
199-
MultiTenantDiscoverer(model, model_context, wlst_mode=__wlst_mode).discover()
225+
MultiTenantDiscoverer(model, model_context, base_location, wlst_mode=__wlst_mode, aliases=aliases).discover()
200226
return
201227

202228

@@ -356,7 +382,7 @@ def __persist_model(model, model_context):
356382
return
357383

358384

359-
def __check_and_customize_model(model, model_context):
385+
def __check_and_customize_model(model, model_context, aliases):
360386
"""
361387
Customize the model dictionary before persisting. Validate the model after customization for informational
362388
purposes. Any validation errors will not stop the discovered model to be persisted.
@@ -368,25 +394,24 @@ def __check_and_customize_model(model, model_context):
368394
if filter_helper.apply_filters(model.get_model(), "discover"):
369395
__logger.info('WLSDPLY-06014', _class_name=_class_name, method_name=_method_name)
370396

371-
372397
try:
373-
validator = Validator(model_context, wlst_mode=__wlst_mode)
398+
validator = Validator(model_context, wlst_mode=__wlst_mode, aliases=aliases)
374399

375400
# no variables are generated by the discover tool
376401
validator.validate_in_tool_mode(model.get_model(), variables_file_name=None,
377-
archive_file_name=model_context.get_archive_file_name())
402+
archive_file_name=model_context.get_archive_file_name())
378403
except ValidateException, ex:
379404
__logger.warning('WLSDPLY-06015', ex.getLocalizedMessage(), class_name=_class_name, method_name=_method_name)
380405

381406

382-
def __log_and_exit(exit_code, _class_name, _method_name):
407+
def __log_and_exit(exit_code, class_name, method_name):
383408
"""
384409
Helper method to log the exiting message and call sys.exit()
385410
:param exit_code: the exit code to use
386-
:param _class_name: the class name to pass to the logger
387-
:param _method_name: the method name to pass to the logger
411+
:param class_name: the class name to pass to the logger
412+
:param method_name: the method name to pass to the logger
388413
"""
389-
__logger.exiting(result=exit_code, class_name=_class_name, method_name=_method_name)
414+
__logger.exiting(result=exit_code, class_name=class_name, method_name=method_name)
390415
sys.exit(exit_code)
391416

392417

@@ -424,16 +449,17 @@ def main(args):
424449
ex.getLocalizedMessage(), error=ex, class_name=_class_name, method_name=_method_name)
425450
__log_and_exit(CommandLineArgUtil.PROG_ERROR_EXIT_CODE, _class_name, _method_name)
426451

452+
aliases = Aliases(model_context, wlst_mode=__wlst_mode)
427453
model = None
428454
try:
429-
model = __discover(model_context)
455+
model = __discover(model_context, aliases)
430456
except DiscoverException, ex:
431457
__logger.severe('WLSDPLY-06011', _program_name, model_context.get_domain_name(),
432458
model_context.get_domain_home(), ex.getLocalizedMessage(),
433459
error=ex, class_name=_class_name, method_name=_method_name)
434460
__log_and_exit(CommandLineArgUtil.PROG_ERROR_EXIT_CODE, _class_name, _method_name)
435461

436-
__check_and_customize_model(model, model_context)
462+
__check_and_customize_model(model, model_context, aliases)
437463

438464
try:
439465
__persist_model(model, model_context)

core/src/main/python/wlsdeploy/aliases/aliases.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -809,7 +809,7 @@ def get_model_attribute_name_and_value(self, location, wlst_attribute_name, wlst
809809
model_attribute_value = None
810810

811811
attribute_info = self._alias_entries.get_alias_attribute_entry_by_wlst_name(location, wlst_attribute_name)
812-
if attribute_info is not None:
812+
if attribute_info is not None and not self.__is_model_attribute_read_only(location, attribute_info):
813813
data_type, delimiter = \
814814
alias_utils.compute_read_data_type_and_delimiter_from_attribute_info(attribute_info,
815815
wlst_attribute_value)

core/src/main/python/wlsdeploy/tool/discover/coherence_resources_discoverer.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,14 @@ class CoherenceResourcesDiscoverer(Discoverer):
3030
Discover the weblogic coherence resources from the domain.
3131
"""
3232

33-
def __init__(self, model_context, resource_dictionary, wlst_mode=WlstModes.OFFLINE,
34-
base_location=LocationContext()):
33+
def __init__(self, model_context, resource_dictionary, base_location, wlst_mode=WlstModes.OFFLINE, aliases=None):
3534
"""
3635
Initialize this discoverer instance with the specific information needed to discover coherence resources.
3736
:param model_context: context about the model for this instance of discover domain
3837
:param resource_dictionary: was provided on the discover call, else use initialized resources
3938
:param base_location: current context for discover or new context if not provided
4039
"""
41-
Discoverer.__init__(self, model_context, wlst_mode, base_location)
40+
Discoverer.__init__(self, model_context, base_location, wlst_mode, aliases)
4241
self._dictionary = resource_dictionary
4342
self._add_att_handler(model_constants.COHERENCE_CUSTOM_CLUSTER_CONFIGURATION,
4443
self._add_custom_configuration_to_archive)

core/src/main/python/wlsdeploy/tool/discover/common_resources_discoverer.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,14 @@ class CommonResourcesDiscoverer(Discoverer):
3030
partition resource group.
3131
"""
3232

33-
def __init__(self, model_context, resource_dictionary, wlst_mode=WlstModes.OFFLINE,
34-
base_location=LocationContext()):
33+
def __init__(self, model_context, resource_dictionary, base_location, wlst_mode=WlstModes.OFFLINE, aliases=None):
3534
"""
3635
3736
:param model_context: context about the model for this instance of discover domain
3837
:param resource_dictionary: to populate the common resources. By default, populates the initialized resources
3938
:param base_location: to look for common weblogic resources. By default this is the global path or '/'
4039
"""
41-
Discoverer.__init__(self, model_context, wlst_mode, base_location)
40+
Discoverer.__init__(self, model_context, base_location, wlst_mode, aliases)
4241
self._dictionary = resource_dictionary
4342
self._add_att_handler(model_constants.PATH_TO_SCRIPT, self._add_wldf_script)
4443

@@ -59,10 +58,12 @@ def discover(self):
5958
discoverer.add_to_model_if_not_empty(self._dictionary, model_folder_name, folder_result)
6059
model_folder_name, folder_result = self.get_jdbc_stores()
6160
discoverer.add_to_model_if_not_empty(self._dictionary, model_folder_name, folder_result)
62-
JmsResourcesDiscoverer(self._model_context, self._dictionary, wlst_mode=self._wlst_mode).discover()
61+
JmsResourcesDiscoverer(self._model_context, self._dictionary, self._base_location, wlst_mode=self._wlst_mode,
62+
aliases=self._aliases).discover()
6363
model_folder_name, folder_result = self.get_wldf_system_resources()
6464
discoverer.add_to_model_if_not_empty(self._dictionary, model_folder_name, folder_result)
65-
CoherenceResourcesDiscoverer(self._model_context, self._dictionary, wlst_mode=self._wlst_mode).discover()
65+
CoherenceResourcesDiscoverer(self._model_context, self._dictionary, self._base_location,
66+
wlst_mode=self._wlst_mode, aliases=self._aliases).discover()
6667

6768
_logger.exiting(class_name=_class_name, method_name=_method_name)
6869
return self._dictionary

core/src/main/python/wlsdeploy/tool/discover/deployments_discoverer.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,8 @@ class DeploymentsDiscoverer(Discoverer):
2828
binaries and plans into the discovery archive file.
2929
"""
3030

31-
def __init__(self, model_context, deployments_dictionary, wlst_mode=WlstModes.OFFLINE,
32-
base_location=LocationContext()):
33-
Discoverer.__init__(self, model_context, wlst_mode, base_location)
31+
def __init__(self, model_context, deployments_dictionary, base_location, wlst_mode=WlstModes.OFFLINE, aliases=None):
32+
Discoverer.__init__(self, model_context, base_location, wlst_mode, aliases)
3433
self._dictionary = deployments_dictionary
3534

3635
def discover(self):

core/src/main/python/wlsdeploy/tool/discover/discoverer.py

Lines changed: 57 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class Discoverer(object):
3232
Discoverer contains the private methods used to facilitate discovery of the domain information by its subclasses.
3333
"""
3434

35-
def __init__(self, model_context, wlst_mode, base_location=LocationContext()):
35+
def __init__(self, model_context, base_location, wlst_mode, aliases=None):
3636
"""
3737
3838
:param model_context: context about the model for this instance of discover domain
@@ -41,8 +41,11 @@ def __init__(self, model_context, wlst_mode, base_location=LocationContext()):
4141
self._model_context = model_context
4242
self._base_location = base_location
4343
self._wlst_mode = wlst_mode
44-
self.__aliases = Aliases(self._model_context, wlst_mode=self._wlst_mode)
45-
self._alias_helper = AliasHelper(self.__aliases, _logger, ExceptionType.DISCOVER)
44+
if aliases:
45+
self._aliases = aliases
46+
else:
47+
self._aliases = Aliases(self._model_context, wlst_mode=self._wlst_mode)
48+
self._alias_helper = AliasHelper(self._aliases, _logger, ExceptionType.DISCOVER)
4649
self._att_handler_map = OrderedDict()
4750
self._wls_version = WebLogicHelper(_logger).get_actual_weblogic_version()
4851
self._wlst_helper = WlstHelper(_logger, ExceptionType.DISCOVER)
@@ -61,10 +64,10 @@ def _populate_model_parameters(self, dictionary, location):
6164
wlst_path = self._alias_helper.get_wlst_attributes_path(location)
6265
_logger.finer('WLSDPLY-06100', wlst_path, class_name=_class_name, method_name=_method_name)
6366
self._wlst_helper.cd(wlst_path)
64-
wlst_params = self._wlst_helper.lsa()
67+
wlst_params = self._get_attributes_for_current_location(location)
6568
_logger.finest('WLSDPLY-06102', self._wlst_helper.get_pwd(), wlst_params, class_name=_class_name,
6669
method_name=_method_name)
67-
wlst_get_params = self._alias_helper.get_wlst_get_required_attribute_names(location)
70+
wlst_get_params = self._get_required_attributes(location)
6871
_logger.finest('WLSDPLY-06103', str(location), wlst_get_params,
6972
class_name=_class_name, method_name=_method_name)
7073
attr_dict = OrderedDict()
@@ -120,6 +123,50 @@ def _get_attributes_for_current_location(self, location):
120123
method_name=_method_name)
121124
return attributes
122125

126+
def _get_required_attributes(self, location):
127+
if self._wlst_mode == WlstModes.OFFLINE:
128+
return self._get_required_attributes_offline(location)
129+
else:
130+
return self._get_required_attributes_online(location)
131+
132+
def _get_required_attributes_offline(self, location):
133+
return self._alias_helper.get_wlst_get_required_attribute_names(location)
134+
135+
def _get_required_attributes_online(self, location):
136+
"""
137+
Use get for all online attributes, and use the attribute names in the
138+
:param location:
139+
:return:
140+
"""
141+
_method_name = '_get_required_attributes_online'
142+
attributes = []
143+
try:
144+
mbi = wlst_helper.get_mbi()
145+
mbean_attribute_info = mbi.getAttributes()
146+
for mbean_attribute in mbean_attribute_info:
147+
attributes.append(mbean_attribute.getName())
148+
except PyWLSTException, pe:
149+
name = location.get_model_folders()[-1]
150+
_logger.warning('WLSDPLY-06109', name, str(location), pe.getLocalizedMessage(), class_name=_class_name,
151+
method_name=_method_name)
152+
return attributes
153+
154+
def _mbean_names_exist(self, location):
155+
"""
156+
Check to see if there are any configured MBeans for the current location
157+
:param location: context with the current location
158+
:return: True if MBeans of the type at the location exist
159+
"""
160+
path = self._alias_helper.get_wlst_list_path(location)
161+
mbean_name_map = None
162+
try:
163+
mbean_name_map = wlst_helper.lsa(path)
164+
except DiscoverException, de:
165+
_logger.warning('WLSDPLY-06130', path, de.getLocalizedMessage())
166+
if mbean_name_map:
167+
return True
168+
return False
169+
123170
def _check_attribute(self, model_name, model_value, location):
124171
"""
125172
Check to see if the attribute has special handling indicated by the discover handler map. If the
@@ -203,10 +250,11 @@ def _discover_subfolder_singleton(self, model_subfolder_name, location):
203250
_logger.entering(model_subfolder_name, str(location), class_name=_class_name, method_name=_method_name)
204251
subfolder_result = OrderedDict()
205252
# For all server subfolder names there should only be one path
206-
subfolder_path = self._alias_helper.get_wlst_attributes_path(location)
207-
self._wlst_helper.cd(subfolder_path)
208-
self._populate_model_parameters(subfolder_result, location)
209-
self._discover_subfolders(subfolder_result, location)
253+
if self._mbean_names_exist(location):
254+
subfolder_path = self._alias_helper.get_wlst_attributes_path(location)
255+
self._wlst_helper.cd(subfolder_path)
256+
self._populate_model_parameters(subfolder_result, location)
257+
self._discover_subfolders(subfolder_result, location)
210258
_logger.finest('WLSDPLY-06111', str(location), class_name=_class_name, method_name=_method_name)
211259
_logger.exiting(class_name=_class_name, method_name=_method_name)
212260
return subfolder_result

core/src/main/python/wlsdeploy/tool/discover/domain_info_discoverer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ class DomainInfoDiscoverer(Discoverer):
2626
configuration files, but extra information that is required for the completeness of the domain.
2727
"""
2828

29-
def __init__(self, model_context, domain_info_dictionary, wlst_mode=WlstModes.OFFLINE):
30-
Discoverer.__init__(self, model_context, wlst_mode)
29+
def __init__(self, model_context, domain_info_dictionary, base_location, wlst_mode=WlstModes.OFFLINE, aliases=None):
30+
Discoverer.__init__(self, model_context, base_location, wlst_mode, aliases)
3131
self._dictionary = domain_info_dictionary
3232

3333
def discover(self):

core/src/main/python/wlsdeploy/tool/discover/global_resources_discoverer.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ class GlobalResourcesDiscoverer(Discoverer):
2222

2323
TYPE_domain = "Domain"
2424

25-
def __init__(self, model_context, resource_dictionary, wlst_mode=WlstModes.OFFLINE):
25+
def __init__(self, model_context, resource_dictionary, base_location, wlst_mode=WlstModes.OFFLINE, aliases=None):
2626
"""
2727
2828
:param model_context: context about the model for this instance of the discover domain
2929
:param resource_dictionary: to populate with global resources. Uses the initialized resources if none passed
3030
"""
31-
Discoverer.__init__(self, model_context, wlst_mode)
31+
Discoverer.__init__(self, model_context, base_location, wlst_mode, aliases)
3232
self._dictionary = resource_dictionary
3333

3434
def discover(self):
@@ -58,7 +58,7 @@ def get_self_tuning(self):
5858
_logger.entering(class_name=_class_name, method_name=_method_name)
5959
result = OrderedDict()
6060
model_top_folder_name = model_constants.SELF_TUNING
61-
location = LocationContext()
61+
location = LocationContext(self._base_location)
6262
location.append_location(model_top_folder_name)
6363
tuning = self._find_singleton_name_in_folder(location)
6464
if tuning is not None:
@@ -77,7 +77,7 @@ def get_startup_classes(self):
7777
_logger.entering(class_name=_class_name, method_name=_method_name)
7878
result = OrderedDict()
7979
model_top_folder_name = model_constants.STARTUP_CLASS
80-
location = LocationContext()
80+
location = LocationContext(self._base_location)
8181
location.append_location(model_top_folder_name)
8282
startup_classes = self._find_names_in_folder(location)
8383
if startup_classes is not None:
@@ -102,7 +102,7 @@ def get_shutdown_classes(self):
102102
_logger.entering(class_name=_class_name, method_name=_method_name)
103103
result = OrderedDict()
104104
model_top_folder_name = model_constants.SHUTDOWN_CLASS
105-
location = LocationContext()
105+
location = LocationContext(self._base_location)
106106
location.append_location(model_top_folder_name)
107107
shutdown_classes = self._find_names_in_folder(location)
108108
if shutdown_classes is not None:

0 commit comments

Comments
 (0)