16
16
from wlsdeploy .exception import exception_helper
17
17
from wlsdeploy .exception .expection_types import ExceptionType
18
18
from wlsdeploy .logging .platform_logger import PlatformLogger
19
+ from wlsdeploy .tool .util .mbean_utils import MBeanUtils
19
20
from wlsdeploy .tool .util .alias_helper import AliasHelper
20
21
from wlsdeploy .tool .util .wlst_helper import WlstHelper
21
22
from wlsdeploy .util import path_utils
@@ -51,6 +52,7 @@ def __init__(self, model_context, base_location, wlst_mode, aliases=None):
51
52
self ._weblogic_helper = WebLogicHelper (_logger )
52
53
self ._wls_version = self ._weblogic_helper .get_actual_weblogic_version ()
53
54
self ._wlst_helper = WlstHelper (_logger , ExceptionType .DISCOVER )
55
+ self ._mbean_utils = MBeanUtils (self ._model_context , self ._alias_helper , ExceptionType .DISCOVER )
54
56
55
57
# methods for use only by the subclasses
56
58
@@ -69,50 +71,76 @@ def _populate_model_parameters(self, dictionary, location):
69
71
if not self .wlst_cd (wlst_path , location ):
70
72
return
71
73
72
- wlst_params = self ._get_attributes_for_current_location (location )
73
- _logger .finest ('WLSDPLY-06102' , self ._wlst_helper .get_pwd (), wlst_params , class_name = _class_name ,
74
+ wlst_lsa_params = self ._get_attributes_for_current_location (location )
75
+ _logger .finest ('WLSDPLY-06102' , self ._wlst_helper .get_pwd (), wlst_lsa_params , class_name = _class_name ,
74
76
method_name = _method_name )
75
77
wlst_get_params = self ._get_required_attributes (location )
76
78
_logger .finest ('WLSDPLY-06103' , str (location ), wlst_get_params ,
77
79
class_name = _class_name , method_name = _method_name )
78
- attr_dict = OrderedDict ()
79
- if wlst_params :
80
- for wlst_param in wlst_params :
81
- if wlst_param in wlst_get_params :
82
- _logger .finest ('WLSDPLY-06104' , wlst_param , class_name = _class_name , method_name = _method_name )
83
- try :
84
- wlst_value = wlst_helper .get (wlst_param )
85
- except PyWLSTException , pe :
86
- _logger .warning ('WLSDPLY-06127' , wlst_param , wlst_path ,
87
- pe .getLocalizedMessage (), class_name = _class_name , method_name = _method_name )
80
+ if wlst_lsa_params is not None :
81
+ for wlst_lsa_param in wlst_lsa_params :
82
+ if wlst_lsa_param in wlst_get_params :
83
+ success , wlst_value = self ._get_attribute_value_with_get (wlst_lsa_param , wlst_path )
84
+ if not success :
88
85
continue
89
86
else :
90
- _logger .finer ('WLSDPLY-06131' , wlst_param , class_name = _class_name , method_name = _method_name )
91
- wlst_value = wlst_params [wlst_param ]
87
+ _logger .finer ('WLSDPLY-06131' , wlst_lsa_param , class_name = _class_name , method_name = _method_name )
88
+ wlst_value = wlst_lsa_params [wlst_lsa_param ]
89
+ self ._add_to_dictionary (dictionary , location , wlst_lsa_param , wlst_value , wlst_path )
92
90
93
- # if type(wlst_value) == str and len(wlst_value) == 0:
94
- # wlst_value = None
95
-
96
- _logger .finer ('WLSDPLY-06105' , wlst_param , wlst_value , wlst_path , class_name = _class_name ,
97
- method_name = _method_name )
98
- try :
99
- model_param , model_value = self ._aliases .get_model_attribute_name_and_value (location ,
100
- wlst_param ,
101
- wlst_value )
102
- except AliasException , de :
103
- _logger .info ('WLSDPLY-06106' , wlst_param , wlst_path , de .getLocalizedMessage (),
91
+ # These will come after the lsa / get params in the ordered dictionary
92
+ wlst_extra_params = self ._get_additional_parameters (location )
93
+ _logger .finest ('WLSDPLY-06149' , str (location ), wlst_extra_params ,
94
+ class_name = _class_name , method_name = _method_name )
95
+ if wlst_extra_params is not None :
96
+ for wlst_extra_param in wlst_extra_params :
97
+ if wlst_extra_param in wlst_get_params :
98
+ success , wlst_value = self ._get_attribute_value_with_get (wlst_extra_param , wlst_path )
99
+ if success :
100
+ self ._add_to_dictionary (dictionary , location , wlst_extra_param , wlst_value , wlst_path )
101
+ else :
102
+ _logger .info ('WLSDPLY-06152' , wlst_extra_param , location .get_folder_path (),
103
+ class_name = _class_name , method_name = _method_name )
104
+ elif self ._is_defined_attribute (location , wlst_extra_param ):
105
+ _logger .info ('WLSDPLY-06154' , wlst_extra_param , location .get_folder_path (),
106
+ class_name = _class_name , method_name = _method_name )
107
+ else :
108
+ _logger .info ('WLSDPLY-06153' , wlst_extra_param , location .get_folder_path (),
104
109
class_name = _class_name , method_name = _method_name )
105
- continue
106
110
107
- attr_dict [model_param ] = wlst_value
108
- model_value = self ._check_attribute (model_param , model_value , location )
109
- if model_value is not None :
110
- _logger .finer ('WLSDPLY-06107' , model_param , model_value , class_name = _class_name ,
111
- method_name = _method_name )
112
- dictionary [model_param ] = model_value
113
- elif model_param is None :
114
- _logger .finest ('WLSDPLY-06108' , model_param , class_name = _class_name , method_name = _method_name )
115
- return attr_dict
111
+ def _get_attribute_value_with_get (self , wlst_get_param , wlst_path ):
112
+ _method_name = '_get_attribute_value_with_get'
113
+ _logger .finest ('WLSDPLY-06104' , wlst_get_param , class_name = _class_name , method_name = _method_name )
114
+ success = False
115
+ wlst_value = None
116
+ try :
117
+ wlst_value = self ._wlst_helper .get (wlst_get_param )
118
+ success = True
119
+ except DiscoverException , pe :
120
+ _logger .warning ('WLSDPLY-06127' , wlst_get_param , wlst_path , pe .getLocalizedMessage (),
121
+ class_name = _class_name , method_name = _method_name )
122
+ return success , wlst_value
123
+
124
+ def _add_to_dictionary (self , dictionary , location , wlst_param , wlst_value , wlst_path ):
125
+ _method_name = '_add_to_dictionary'
126
+ _logger .finer ('WLSDPLY-06105' , wlst_param , wlst_value , wlst_path , class_name = _class_name ,
127
+ method_name = _method_name )
128
+ try :
129
+ model_param , model_value = self ._aliases .get_model_attribute_name_and_value (location ,
130
+ wlst_param ,
131
+ wlst_value )
132
+ except AliasException , de :
133
+ _logger .info ('WLSDPLY-06106' , wlst_param , wlst_path , de .getLocalizedMessage (),
134
+ class_name = _class_name , method_name = _method_name )
135
+ return
136
+
137
+ model_value = self ._check_attribute (model_param , model_value , location )
138
+ if model_value is not None :
139
+ _logger .finer ('WLSDPLY-06107' , model_param , model_value , class_name = _class_name ,
140
+ method_name = _method_name )
141
+ dictionary [model_param ] = model_value
142
+ elif model_param is None :
143
+ _logger .finest ('WLSDPLY-06108' , model_param , class_name = _class_name , method_name = _method_name )
116
144
117
145
def _get_attributes_for_current_location (self , location ):
118
146
"""
@@ -121,13 +149,7 @@ def _get_attributes_for_current_location(self, location):
121
149
:param location: context with the current location information
122
150
:return: list of attributes
123
151
"""
124
- if self ._wlst_mode == WlstModes .OFFLINE :
125
- return self ._get_attributes_for_current_location_offline (location )
126
- else :
127
- return self ._get_attributes_for_current_location_online (location )
128
-
129
- def _get_attributes_for_current_location_offline (self , location ):
130
- _method_name = '_get_attributes_for_current_location_offline'
152
+ _method_name = '_get_attributes_for_current_location'
131
153
attributes = []
132
154
path = self ._alias_helper .get_wlst_attributes_path (location )
133
155
try :
@@ -138,37 +160,12 @@ def _get_attributes_for_current_location_offline(self, location):
138
160
method_name = _method_name )
139
161
return attributes
140
162
141
- def _get_attributes_for_current_location_online (self , location ):
142
- _method_name = '_get_attributes_for_current_location_online'
143
- lsa_attributes = dict ()
144
- path = self ._alias_helper .get_wlst_attributes_path (location )
145
- try :
146
- lsa_attributes = wlst_helper .lsa (path )
147
- mbi_attributes = _get_mbi_attribute_list (path )
148
- if mbi_attributes :
149
- for lsa_attribute_name in lsa_attributes :
150
- if lsa_attribute_name in lsa_attributes and lsa_attribute_name not in mbi_attributes :
151
- _logger .finer ('WLSDPLY-06142' , lsa_attribute_name )
152
- del lsa_attributes [lsa_attribute_name ]
153
- for mbi_attribute_name in mbi_attributes :
154
- if mbi_attribute_name not in lsa_attributes and mbi_attribute_name in mbi_attributes :
155
- # don't count on the item in the get required list in caller, just get the value
156
- # and add it to our lsa list
157
- _logger .finer ('WLSDPLY-06141' , mbi_attribute_name , class_name = _class_name ,
158
- method_name = _method_name )
159
- lsa_attributes [mbi_attribute_name ] = wlst_helper .get (mbi_attribute_name )
160
- except PyWLSTException , pe :
161
- name = location .get_model_folders ()[- 1 ]
162
- _logger .fine ('WLSDPLY-06109' , name , str (location ), pe .getLocalizedMessage (), class_name = _class_name ,
163
- method_name = _method_name )
164
- return lsa_attributes
165
-
166
163
def _is_defined_attribute (self , location , wlst_name ):
167
164
attribute = False
168
165
try :
169
- if self ._aliases .get_model_attribute_name (location , wlst_name ):
166
+ if self ._alias_helper .get_model_attribute_name (location , wlst_name , check_read_only = False ):
170
167
attribute = True
171
- except AliasException :
168
+ except DiscoverException :
172
169
pass
173
170
return attribute
174
171
@@ -179,7 +176,7 @@ def _get_required_attributes(self, location):
179
176
:return: list of attributes that require wlst.get
180
177
"""
181
178
_method_name = '_get_required_attributes'
182
- attributes = []
179
+ attributes = list ()
183
180
try :
184
181
attributes = self ._alias_helper .get_wlst_get_required_attribute_names (location )
185
182
except DiscoverException , de :
@@ -188,6 +185,20 @@ def _get_required_attributes(self, location):
188
185
class_name = _class_name , method_name = _method_name )
189
186
return attributes
190
187
188
+ def _get_additional_parameters (self , location ):
189
+ _method_name = '_get_additional_parameters'
190
+ other_attributes = list ()
191
+ try :
192
+ other_attributes = self ._mbean_utils .get_attributes_not_in_lsa_map (location )
193
+ except DiscoverException , de :
194
+ name = 'DomainConfig'
195
+ folders = location .get_model_folders ()
196
+ if len (folders ) > 0 :
197
+ name = location .get_model_folders ()[- 1 ]
198
+ _logger .info ('WLSDPLY-06150' , name , location .get_folder_path (), de .getLocalizedMessage (),
199
+ class_name = _class_name , method_name = _method_name )
200
+ return other_attributes
201
+
191
202
def _mbean_names_exist (self , location ):
192
203
"""
193
204
Check to see if there are any configured MBeans for the current location
@@ -687,47 +698,10 @@ def convert_to_absolute_path(relative_to, file_name):
687
698
return file_name
688
699
689
700
690
- def _get_mbi_attribute_list (path ):
691
- attribute_list = []
692
- for mbean_attribute_info in wlst_helper .get_mbi (path ).getAttributes ():
693
- if _is_attribute (mbean_attribute_info ):
694
- attribute_list .append (mbean_attribute_info .getName ())
695
- return attribute_list
696
-
697
-
698
- def _is_attribute (attributes_info ):
699
- return _is_attribute_type (attributes_info ) or _is_valid_reference (attributes_info )
700
-
701
-
702
- def _is_valid_reference (attribute_info ):
703
- # check again after all done to see whether need to use get deprecated
704
- return _is_reference (attribute_info ) and (
705
- attribute_info .isWritable () or not _is_deprecated (attribute_info ))
706
-
707
-
708
- def _is_reference (mbean_attribute_info ):
709
- return mbean_attribute_info .getDescriptor ().getFieldValue ('com.bea.relationship' ) == 'reference'
710
-
711
-
712
- def _is_deprecated (mbean_attribute_info ):
713
- deprecated_version = mbean_attribute_info .getDescriptor ().getFieldValue ('deprecated' )
714
- return deprecated_version is not None and deprecated_version != 'null' and len (deprecated_version ) > 1
715
-
716
-
717
701
def _is_containment (mbean_attribute_info ):
718
702
return mbean_attribute_info .getDescriptor ().getFieldValue ('com.bea.relationship' ) == 'containment'
719
703
720
704
721
- def _is_attribute_type (attribute_info ):
722
- _method_name = '_is_attribute_type'
723
- if not attribute_info .isWritable () and _is_deprecated (attribute_info ):
724
- _logger .finer ('WLSDPLY-06143' , attribute_info .getName (), wlst_helper .get_pwd (),
725
- class_name = _class_name , method_name = _method_name )
726
- return attribute_info .getDescriptor ().getFieldValue (
727
- 'descriptorType' ) == 'Attribute' and attribute_info .getDescriptor ().getFieldValue (
728
- 'com.bea.relationship' ) is None and (attribute_info .isWritable () or not _is_deprecated (attribute_info ))
729
-
730
-
731
705
def _massage_online_folders (lsc_folders ):
732
706
_method_name = '_massage_online_folders'
733
707
location = wlst_helper .get_pwd ()
0 commit comments