|
4 | 4 | """
|
5 | 5 |
|
6 | 6 | from oracle.weblogic.deploy.util import WLSDeployArchive
|
7 |
| -from oracle.weblogic.deploy.exception import BundleAwareException |
8 | 7 |
|
9 | 8 | from wlsdeploy.aliases.location_context import LocationContext
|
10 | 9 | from wlsdeploy.aliases.validation_codes import ValidationCodes
|
@@ -166,97 +165,56 @@ def _create_mbean(self, type_name, model_nodes, base_location, log_created=False
|
166 | 165 | self.logger.exiting(class_name=self.__class_name, method_name=_method_name)
|
167 | 166 | return
|
168 | 167 |
|
169 |
| - def _create_security_provider_mbeans(self, type_name, model_nodes, base_location, log_created=False): |
| 168 | + def _create_named_subtype_mbeans(self, type_name, model_nodes, base_location, log_created=False): |
170 | 169 | """
|
171 |
| - Create the specified security provider MBean types that support multiple instances but use an |
172 |
| - artificial type subfolder in the specified location. |
| 170 | + Create the specified type of MBeans that support multiple instances, and require an artificial subtype |
| 171 | + layer after each name. |
| 172 | + There is no default behavior for this method. Sub-classes (currently only SecurityProviderCreator) will |
| 173 | + implement specialized behavior. |
173 | 174 | :param type_name: the model folder type
|
174 | 175 | :param model_nodes: the model dictionary of the specified model folder type
|
175 | 176 | :param base_location: the base location object to use to create the MBeans
|
176 | 177 | :param log_created: whether or not to log created at INFO level, by default it is logged at the FINE level
|
177 | 178 | :raises: CreateException: if an error occurs
|
178 | 179 | """
|
179 |
| - _method_name = '_create_security_provider_mbeans' |
180 |
| - |
181 |
| - self.logger.entering(type_name, str(base_location), log_created, |
182 |
| - class_name=self.__class_name, method_name=_method_name) |
183 |
| - if not self._is_type_valid(base_location, type_name): |
184 |
| - return |
185 |
| - |
186 |
| - location = LocationContext(base_location).append_location(type_name) |
187 |
| - self._process_flattened_folder(location) |
188 |
| - |
189 |
| - # For create, delete the existing nodes, and re-add in order found in model in iterative code below |
190 |
| - self._delete_existing_providers(location) |
191 |
| - |
192 |
| - if model_nodes is None or len(model_nodes) == 0: |
193 |
| - return |
194 |
| - |
195 |
| - token_name = self.alias_helper.get_name_token(location) |
196 |
| - create_path = self.alias_helper.get_wlst_create_path(location) |
197 |
| - list_path = self.alias_helper.get_wlst_list_path(location) |
198 |
| - existing_folder_names = self._get_existing_folders(list_path) |
199 |
| - known_providers = self.alias_helper.get_model_subfolder_names(location) |
200 |
| - allow_custom = str(self.alias_helper.is_custom_folder_allowed(location)) |
201 |
| - |
202 |
| - for model_name in model_nodes: |
203 |
| - model_node = model_nodes[model_name] |
204 |
| - |
205 |
| - if model_node is None: |
206 |
| - # The node is empty so nothing to do... move to the next named node. |
207 |
| - continue |
208 |
| - |
209 |
| - if len(model_node) != 1: |
210 |
| - # there should be exactly one type folder under the name folder |
211 |
| - ex = exception_helper.create_exception(self._exception_type, 'WLSDPLY-12117', type_name, model_name, |
212 |
| - len(model_node)) |
213 |
| - self.logger.throwing(ex, class_name=self.__class_name, method_name=_method_name) |
214 |
| - raise ex |
215 |
| - |
216 |
| - model_type_subfolder_name = list(model_node.keys())[0] |
217 |
| - child_nodes = dictionary_utils.get_dictionary_element(model_node, model_type_subfolder_name) |
218 |
| - |
219 |
| - # custom providers require special processing, they are not described in alias framework |
220 |
| - if allow_custom and (model_type_subfolder_name not in known_providers): |
221 |
| - self.custom_folder_helper.update_security_folder(base_location, type_name, model_type_subfolder_name, |
222 |
| - model_name, child_nodes) |
223 |
| - continue |
| 180 | + return |
224 | 181 |
|
225 |
| - # for a known provider, process using aliases |
226 |
| - prov_location = LocationContext(location) |
227 |
| - name = self.wlst_helper.get_quoted_name_for_wlst(model_name) |
228 |
| - if token_name is not None: |
229 |
| - prov_location.add_name_token(token_name, name) |
| 182 | + def _create_subfolders(self, location, model_nodes): |
| 183 | + """ |
| 184 | + Create the child MBean folders at the specified location. |
| 185 | + :param location: the location |
| 186 | + :param model_nodes: the model dictionary |
| 187 | + :raises: CreateException: if an error occurs |
| 188 | + """ |
| 189 | + _method_name = '_create_subfolders' |
230 | 190 |
|
231 |
| - wlst_base_provider_type, wlst_name = self.alias_helper.get_wlst_mbean_type_and_name(prov_location) |
| 191 | + self.logger.entering(location.get_folder_path(), class_name=self.__class_name, method_name=_method_name) |
| 192 | + model_subfolder_names = self.alias_helper.get_model_subfolder_names(location) |
| 193 | + for key in model_nodes: |
| 194 | + if key in model_subfolder_names: |
| 195 | + subfolder_nodes = model_nodes[key] |
| 196 | + # don't check for empty subfolder nodes here, some create methods allow them |
232 | 197 |
|
233 |
| - prov_location.append_location(model_type_subfolder_name) |
234 |
| - wlst_type = self.alias_helper.get_wlst_mbean_type(prov_location) |
| 198 | + sub_location = LocationContext(location).append_location(key) |
235 | 199 |
|
236 |
| - if wlst_name not in existing_folder_names: |
237 |
| - if log_created: |
238 |
| - self.logger.info('WLSDPLY-12118', type_name, model_type_subfolder_name, name, create_path, |
239 |
| - class_name=self.__class_name, method_name=_method_name) |
240 |
| - else: |
241 |
| - self.logger.fine('WLSDPLY-12118', type_name, model_type_subfolder_name, name, create_path, |
242 |
| - class_name=self.__class_name, method_name=_method_name) |
243 |
| - self.wlst_helper.cd(create_path) |
244 |
| - self.wlst_helper.create(wlst_name, wlst_type, wlst_base_provider_type) |
245 |
| - else: |
246 |
| - if log_created: |
247 |
| - self.logger.info('WLSDPLY-12119', type_name, model_type_subfolder_name, name, create_path, |
248 |
| - class_name=self.__class_name, method_name=_method_name) |
| 200 | + if self.alias_helper.requires_artificial_type_subfolder_handling(sub_location): |
| 201 | + self.logger.finest('WLSDPLY-12116', key, str(sub_location), subfolder_nodes, |
| 202 | + class_name=self.__class_name, method_name=_method_name) |
| 203 | + self._create_named_subtype_mbeans(key, subfolder_nodes, location, True) |
| 204 | + elif self.alias_helper.supports_multiple_mbean_instances(sub_location): |
| 205 | + self.logger.finest('WLSDPLY-12109', key, str(sub_location), subfolder_nodes, |
| 206 | + class_name=self.__class_name, method_name=_method_name) |
| 207 | + self._create_named_mbeans(key, subfolder_nodes, location) |
| 208 | + elif self.alias_helper.is_artificial_type_folder(sub_location): |
| 209 | + # these should have been handled inside create_named_subtype_mbeans |
| 210 | + ex = exception_helper.create_create_exception('WLSDPLY-12120', str(sub_location), |
| 211 | + key, str(location)) |
| 212 | + self.logger.throwing(ex, class_name=self.__class_name, method_name=_method_name) |
| 213 | + raise ex |
249 | 214 | else:
|
250 |
| - self.logger.fine('WLSDPLY-12119', type_name, model_type_subfolder_name, name, create_path, |
251 |
| - class_name=self.__class_name, method_name=_method_name) |
252 |
| - |
253 |
| - attribute_path = self.alias_helper.get_wlst_attributes_path(prov_location) |
254 |
| - self.wlst_helper.cd(attribute_path) |
255 |
| - |
256 |
| - self.logger.finest('WLSDPLY-12111', self.alias_helper.get_model_folder_path(prov_location), |
257 |
| - self.wlst_helper.get_pwd(), class_name=self.__class_name, method_name=_method_name) |
258 |
| - self._set_attributes(prov_location, child_nodes) |
259 |
| - self._create_subfolders(prov_location, child_nodes) |
| 215 | + self.logger.finest('WLSDPLY-12110', key, str(sub_location), subfolder_nodes, |
| 216 | + class_name=self.__class_name, method_name=_method_name) |
| 217 | + self._create_mbean(key, subfolder_nodes, location) |
260 | 218 |
|
261 | 219 | self.logger.exiting(class_name=self.__class_name, method_name=_method_name)
|
262 | 220 | return
|
@@ -382,44 +340,6 @@ def _set_attribute(self, location, model_name, model_value, uses_path_tokens_nam
|
382 | 340 | self.wlst_helper.set(wlst_name, wlst_value, masked=masked)
|
383 | 341 | return
|
384 | 342 |
|
385 |
| - def _create_subfolders(self, location, model_nodes): |
386 |
| - """ |
387 |
| - Create the child MBean folders at the specified location. |
388 |
| - :param location: the location |
389 |
| - :param model_nodes: the model dictionary |
390 |
| - :raises: CreateException: if an error occurs |
391 |
| - """ |
392 |
| - _method_name = '_create_subfolders' |
393 |
| - |
394 |
| - self.logger.entering(location.get_folder_path(), class_name=self.__class_name, method_name=_method_name) |
395 |
| - model_subfolder_names = self.alias_helper.get_model_subfolder_names(location) |
396 |
| - for key in model_nodes: |
397 |
| - if key in model_subfolder_names: |
398 |
| - subfolder_nodes = model_nodes[key] |
399 |
| - sub_location = LocationContext(location).append_location(key) |
400 |
| - # both create and update are merge to model so will process a subfolder with an empty node |
401 |
| - if self.alias_helper.requires_artificial_type_subfolder_handling(sub_location): |
402 |
| - self.logger.finest('WLSDPLY-12116', key, str(sub_location), subfolder_nodes, |
403 |
| - class_name=self.__class_name, method_name=_method_name) |
404 |
| - self._create_security_provider_mbeans(key, subfolder_nodes, location, True) |
405 |
| - elif len(subfolder_nodes) != 0: |
406 |
| - if self.alias_helper.supports_multiple_mbean_instances(sub_location): |
407 |
| - self.logger.finest('WLSDPLY-12109', key, str(sub_location), subfolder_nodes, |
408 |
| - class_name=self.__class_name, method_name=_method_name) |
409 |
| - self._create_named_mbeans(key, subfolder_nodes, location) |
410 |
| - elif self.alias_helper.is_artificial_type_folder(sub_location): |
411 |
| - ex = exception_helper.create_create_exception('WLSDPLY-12120', str(sub_location), |
412 |
| - key, str(location)) |
413 |
| - self.logger.throwing(ex, class_name=self.__class_name, method_name=_method_name) |
414 |
| - raise ex |
415 |
| - else: |
416 |
| - self.logger.finest('WLSDPLY-12110', key, str(sub_location), subfolder_nodes, |
417 |
| - class_name=self.__class_name, method_name=_method_name) |
418 |
| - self._create_mbean(key, subfolder_nodes, location) |
419 |
| - |
420 |
| - self.logger.exiting(class_name=self.__class_name, method_name=_method_name) |
421 |
| - return |
422 |
| - |
423 | 343 | def _is_type_valid(self, location, type_name):
|
424 | 344 | """
|
425 | 345 | Verify that the specified location in valid for the current WLS version.
|
@@ -457,62 +377,6 @@ def _process_flattened_folder(self, location):
|
457 | 377 | self.wlst_helper.create(mbean_name, mbean_type)
|
458 | 378 | return
|
459 | 379 |
|
460 |
| - def _delete_existing_providers(self, location): |
461 |
| - """ |
462 |
| - The security realms providers in the model are processed as merge to the model. Each realm provider |
463 |
| - section must be complete and true to the resulting domain. Any existing provider not found in the |
464 |
| - model will be removed, and any provider in the model but not in the domain will be added. The resulting |
465 |
| - provider list will be ordered as listed in the model. If the provider type (i.e. AuthenticationProvider) |
466 |
| - is not in the model, it is assumed no configuration or ordering is needed, and the provider is skipped. |
467 |
| - If the provider type is in the model, but there is no MBean entry under the provider, then it is |
468 |
| - assumed that all providers for that provider type must be removed. |
469 |
| -
|
470 |
| - For create, the default realm and default providers have been added by the weblogic base template and any |
471 |
| - extension templates. They have default values. These providers will be removed from the domain. During |
472 |
| - the normal iteration through the provider list, the providers, if in the model, will be re-added in model |
473 |
| - order. Any attributes in the model that are not the default value are then applied to the the new provider. |
474 |
| -
|
475 |
| - By deleting all providers and re-adding from the model, we are both merging to the model and ordering the |
476 |
| - providers. In offline wlst, the set<providertype>Providers(<provider_object_list>, which reorders existing |
477 |
| - providers, does not work. Deleting the providers and re-adding also has the added benefit of fixing the 11g |
478 |
| - problem where the providers have no name. They are returned with the name 'Provider'. In the authentication |
479 |
| - provider, there are two default providers, and just setting the name does not work. When we re-add we re-add |
480 |
| - with the correct name. And the DefaultAuthenticationProvider successfully re-adds with the correct default |
481 |
| - identity asserter. |
482 |
| -
|
483 |
| - This release also supports updating the security configuration realms in both offline and online mode. This |
484 |
| - release requires a complete list of providers as described in the first paragraph. |
485 |
| -
|
486 |
| - :param location: current context of the location pointing at the provider mbean |
487 |
| - """ |
488 |
| - _method_name = '_delete_existing_providers' |
489 |
| - self.logger.entering(location.get_folder_path(), class_name=self.__class_name, method_name=_method_name) |
490 |
| - |
491 |
| - list_path = self.alias_helper.get_wlst_list_path(location) |
492 |
| - existing_folder_names = self._get_existing_folders(list_path) |
493 |
| - wlst_base_provider_type = self.alias_helper.get_wlst_mbean_type(location) |
494 |
| - if len(existing_folder_names) == 0: |
495 |
| - self.logger.finer('WLSDPLY-12136', wlst_base_provider_type, list_path, class_name=self.__class_name, |
496 |
| - method_name=_method_name) |
497 |
| - else: |
498 |
| - create_path = self.alias_helper.get_wlst_create_path(location) |
499 |
| - self.wlst_helper.cd(create_path) |
500 |
| - for existing_folder_name in existing_folder_names: |
501 |
| - try: |
502 |
| - self.logger.info('WLSDPLY-12135', existing_folder_name, wlst_base_provider_type, create_path, |
503 |
| - class_name=self.__class_name, method_name=_method_name) |
504 |
| - self.wlst_helper.delete(existing_folder_name, wlst_base_provider_type) |
505 |
| - except BundleAwareException, bae: |
506 |
| - ex = exception_helper.create_exception(self._exception_type, 'WLSDPLY-12134', existing_folder_name, |
507 |
| - self.wls_helper.get_weblogic_version(), |
508 |
| - wlst_base_provider_type, bae.getLocalizedMessage(), |
509 |
| - error=bae) |
510 |
| - self.logger.throwing(ex, class_name=self.__class_name, method_name=_method_name) |
511 |
| - raise ex |
512 |
| - |
513 |
| - self.logger.exiting(class_name=self.__class_name, method_name=_method_name) |
514 |
| - return |
515 |
| - |
516 | 380 | def _get_existing_folders(self, wlst_path):
|
517 | 381 | """
|
518 | 382 | Get the list of existing folders at the specified WLST path.
|
|
0 commit comments