def __process_java_home(optional_arg_map): _method_name = '__process_java_home' if CommandLineArgUtil.JAVA_HOME_SWITCH in optional_arg_map: java_home_name = optional_arg_map[CommandLineArgUtil.JAVA_HOME_SWITCH] else: java_home_name = os.environ.get('JAVA_HOME') try: FileUtils.validateExistingDirectory(java_home_name) except IllegalArgumentException, iae: # this value is used for java home global token in attributes. # If this was passed as command line, it might no longer exist. # The JAVA_HOME environment variable was validated by script. __logger.info('WLSDPLY-06027', java_home_name, iae.getLocalizedMessage(), class_name=_class_name, method_name=_method_name)
def __process_java_home_arg(optional_arg_map): """ Verify that java_home is set. If not, set it. :param optional_arg_map: the optional arguments map :raises CLAException: if the java home argument is not valid """ _method_name = '__process_java_home_arg' if CommandLineArgUtil.JAVA_HOME_SWITCH not in optional_arg_map: java_home_name = os.environ.get('JAVA_HOME') try: java_home = FileUtils.validateExistingDirectory(java_home_name) except IllegalArgumentException, iae: ex = exception_helper.create_cla_exception( 'WLSDPLY-12400', _program_name, java_home_name, iae.getLocalizedMessage(), error=iae) ex.setExitCode(CommandLineArgUtil.ARG_VALIDATION_ERROR_EXIT_CODE) __logger.throwing(ex, class_name=_class_name, method_name=_method_name) raise ex optional_arg_map[ CommandLineArgUtil.JAVA_HOME_SWITCH] = java_home.getAbsolutePath()
def _validate_wlst_path_arg(self, value): method_name = '_validate_wlst_path_arg' try: wlst_path = JFileUtils.validateExistingDirectory(value) except JIllegalArgumentException, iae: ex = exception_helper.create_cla_exception('WLSDPLY-01610', value, iae.getLocalizedMessage(), error=iae) ex.setExitCode(self.ARG_VALIDATION_ERROR_EXIT_CODE) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex
def verify_directory_exists(directory_name, logger): """ :param directory_name: :param logger: A PlatformLogger instance that will be used for logging any exceptions that are thrown :return: """ _method_name = 'verify_directory_exists' try: j_file = FileUtils.validateExistingDirectory(directory_name) except IllegalArgumentException, iae: ex = exception_helper.create_testing_exception( 'WLSDPLY-09809', directory_name, iae.getLocalizedMessage(), error=iae) logger.throwing(ex, class_name=_class_name, method_name=_method_name) raise ex
class CommandLineArgUtil(object): """ Class that handles command-line argument parsing and common validation. """ _class_name = 'CommandLineArgUtil' HELP_SWITCH = '-help' ORACLE_HOME_SWITCH = '-oracle_home' JAVA_HOME_SWITCH = '-java_home' DOMAIN_HOME_SWITCH = '-domain_home' DOMAIN_PARENT_SWITCH = '-domain_parent' DOMAIN_TYPE_SWITCH = '-domain_type' # never used by the tools but used by shell scripts WLST_PATH_SWITCH = '-wlst_path' ADMIN_URL_SWITCH = '-admin_url' ADMIN_USER_SWITCH = '-admin_user' # phony arg used as a key to store the password ADMIN_PASS_SWITCH = '-admin_pass' ARCHIVE_FILE_SWITCH = '-archive_file' MODEL_FILE_SWITCH = '-model_file' PREVIOUS_MODEL_FILE_SWITCH = '-prev_model_file' VARIABLE_FILE_SWITCH = '-variable_file' PRINT_USAGE_SWITCH = '-print_usage' RCU_DB_SWITCH = '-rcu_db' RCU_PREFIX_SWITCH = '-rcu_prefix' # phony arg used as a key to store the password RCU_SYS_PASS_SWITCH = '-rcu_sys_pass' # phony arg used as a key to store the password RCU_SCHEMA_PASS_SWITCH = '-rcu_schema_pass' # phony arg used as a key to store the encryption passphrase PASSPHRASE_SWITCH = '-passphrase' ENCRYPT_MANUAL_SWITCH = '-manual' # phony arg used as a key to store the password ONE_PASS_SWITCH = '-password' USE_ENCRYPTION_SWITCH = '-use_encryption' RUN_RCU_SWITCH = '-run_rcu' TARGET_VERSION_SWITCH = '-target_version' TARGET_MODE_SWITCH = '-target_mode' ATTRIBUTES_ONLY_SWITCH = '-attributes_only' FOLDERS_ONLY_SWITCH = '-folders_only' RECURSIVE_SWITCH = '-recursive' # overrides for the variable injector VARIABLE_INJECTOR_FILE_SWITCH = '-variable_injector_file' VARIABLE_KEYWORDS_FILE_SWITCH = '-variable_keywords_file' VARIABLE_PROPERTIES_FILE_SWITCH = '-variable_properties_file' # a slot to stash the parsed domain typedef dictionary DOMAIN_TYPEDEF = 'domain_typedef' # a slot to stash the archive file object ARCHIVE_FILE = 'archive_file' HELP_EXIT_CODE = 100 USAGE_ERROR_EXIT_CODE = 99 ARG_VALIDATION_ERROR_EXIT_CODE = 98 PROG_ERROR_EXIT_CODE = 2 PROG_WARNING_EXIT_CODE = 1 PROG_OK_EXIT_CODE = 0 def __init__(self, program_name, required_args, optional_args): self._program_name = program_name self._logger = PlatformLogger('wlsdeploy.util') self._required_args = list(required_args) self._optional_args = list(optional_args) # # Add args that all tools should accept. # self._optional_args.append(self.HELP_SWITCH) self._optional_args.append(self.WLST_PATH_SWITCH) self._required_result = {} self._optional_result = {} return def process_args(self, args, for_domain_create=False): """ This method parses the command-line arguments and returns dictionaries of the required and optional args. :param args: sys.argv :param for_domain_create: true if validating for domain creation :return: the required and optional argument dictionaries :raises CLAException: if argument processing encounters a usage or validation exception """ method_name = 'process_args' self._logger.entering(args, class_name=self._class_name, method_name=method_name) # # reset the result fields in case the object was reused # self._required_result = {} self._optional_result = {} args_len = len(args) if args_len == 1: ex = exception_helper.create_cla_exception('Dummy Key') ex.setExitCode(self.HELP_EXIT_CODE) raise ex idx = 1 while idx < args_len: key = args[idx] self._logger.fine('WLSDPLY-01600', key, class_name=self._class_name, method_name=method_name) if self.is_help_key(key): ex = exception_helper.create_cla_exception('Dummy Key') ex.setExitCode(self.HELP_EXIT_CODE) raise ex elif self.is_oracle_home_key(key): idx += 1 if idx < args_len: full_path = self._validate_oracle_home_arg(args[idx]) self._add_arg(key, full_path, True) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_java_home_key(key): idx += 1 if idx < args_len: full_path = self._validate_java_home_arg(args[idx]) self._add_arg(key, full_path, True) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_domain_home_key(key): idx += 1 if idx < args_len: if for_domain_create: full_path = self._validate_domain_home_arg_for_create( args[idx]) else: full_path = self._validate_domain_home_arg(args[idx]) self._add_arg(key, full_path, True) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_domain_parent_key(key): idx += 1 if idx < args_len: full_path = self._validate_domain_parent_arg(args[idx]) self._add_arg(key, full_path, True) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_domain_type_key(key): idx += 1 if idx < args_len: self._validate_domain_type_arg(args[idx]) self._add_arg(key, args[idx]) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_wlst_path_key(key): idx += 1 if idx < args_len: full_path = self._validate_wlst_path_arg(args[idx]) self._add_arg(key, full_path, True) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_admin_url_key(key): idx += 1 if idx < args_len: self._validate_admin_url_arg(args[idx]) self._add_arg(key, args[idx]) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_admin_user_key(key): idx += 1 if idx < args_len: self._validate_admin_user_arg(args[idx]) self._add_arg(key, args[idx]) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_admin_pass_key(key): idx += 1 if idx < args_len: self._validate_admin_pass_arg(args[idx]) self._add_arg(key, args[idx]) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_archive_file_key(key): idx += 1 if idx < args_len: full_path = self._validate_archive_file_arg(args[idx]) self._add_arg(key, full_path, True) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_model_file_key(key): idx += 1 if idx < args_len: full_path = self._validate_model_file_arg(args[idx]) self._add_arg(key, full_path, True) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_previous_model_file_key(key): idx += 1 if idx < args_len: full_path = self._validate_previous_model_file_arg( args[idx]) self._add_arg(key, full_path, True) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_print_usage_key(key): idx += 1 if idx < args_len: context = self._validate_print_usage_arg(args[idx]) self._add_arg(key, context) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_variable_file_key(key): idx += 1 if idx < args_len: full_path = self._validate_variable_file_arg(args[idx]) self._add_arg(key, full_path, True) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_rcu_database_key(key): idx += 1 if idx < args_len: self._validate_rcu_database_arg(args[idx]) self._add_arg(key, args[idx]) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_rcu_prefix_key(key): idx += 1 if idx < args_len: self._validate_rcu_prefix_arg(args[idx]) self._add_arg(key, args[idx]) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_rcu_sys_pass_key(key): idx += 1 if idx < args_len: self._validate_rcu_sys_pass_arg(args[idx]) self._add_arg(key, args[idx]) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_rcu_schema_pass_key(key): idx += 1 if idx < args_len: self._validate_rcu_schema_pass_arg(args[idx]) self._add_arg(key, args[idx]) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_passphrase_switch(key): idx += 1 if idx < args_len: self._validate_passphrase_arg(args[idx]) self._add_arg(key, args[idx]) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_encrypt_manual_switch(key): self._add_arg(key, True) elif self.is_one_pass_switch(key): idx += 1 if idx < args_len: self._validate_one_pass_arg(args[idx]) self._add_arg(key, args[idx]) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_use_encryption_switch(key): self._add_arg(key, True) elif self.is_run_rcu_switch(key): self._add_arg(key, True) elif self.is_target_version_switch(key): idx += 1 if idx < args_len: self._validate_target_version_arg(args[idx]) self._add_arg(key, args[idx]) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_target_mode_switch(key): idx += 1 if idx < args_len: self._validate_target_mode_arg(args[idx]) self._add_arg(key, args[idx]) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_attributes_only_switch(key): self._add_arg(key, True) elif self.is_folders_only_switch(key): self._add_arg(key, True) elif self.is_recursive_switch(key): self._add_arg(key, True) elif self.is_variable_injector_file_key(key): idx += 1 if idx < args_len: full_path = self._validate_variable_injector_file_arg( args[idx]) self._add_arg(key, full_path, True) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_variable_keywords_file_key(key): idx += 1 if idx < args_len: full_path = self._validate_variable_keywords_file_arg( args[idx]) self._add_arg(key, full_path, True) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex elif self.is_variable_properties_file_key(key): idx += 1 if idx < args_len: full_path = self._validate_variable_properties_file_arg( args[idx]) self._add_arg(key, full_path, True) else: ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex else: ex = exception_helper.create_cla_exception( 'WLSDPLY-01601', self._program_name, key) ex.setExitCode(self.USAGE_ERROR_EXIT_CODE) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex idx += 1 print_result = { 'required': self._required_result, 'optional': self._optional_result } self._logger.exiting(class_name=self._class_name, method_name=method_name, result=print_result) return self._required_result, self._optional_result def get_help_key(self): return self.HELP_SWITCH def is_help_key(self, key): return self.HELP_SWITCH == key def get_oracle_home_key(self): return str(self.ORACLE_HOME_SWITCH) def is_oracle_home_key(self, key): return self.ORACLE_HOME_SWITCH == key def _validate_oracle_home_arg(self, value): method_name = '_validate_oracle_home_arg' try: oh = JFileUtils.validateExistingDirectory(value) except JIllegalArgumentException, iae: ex = exception_helper.create_cla_exception( 'WLSDPLY-01602', value, iae.getLocalizedMessage(), error=iae) ex.setExitCode(self.ARG_VALIDATION_ERROR_EXIT_CODE) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex oh_name = oh.getAbsolutePath() wl_helper = WebLogicHelper(self._logger) wl_home_name = wl_helper.get_weblogic_home(oh_name) try: JFileUtils.validateExistingDirectory(wl_home_name) except JIllegalArgumentException, iae: ex = exception_helper.create_cla_exception( 'WLSDPLY-01603', wl_home_name, iae.getLocalizedMessage(), error=iae) ex.setExitCode(self.ARG_VALIDATION_ERROR_EXIT_CODE) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex
class CommandLineArgUtil(object): """ Class that handles command-line argument parsing and common validation. """ _class_name = 'CommandLineArgUtil' HELP_SWITCH = '-help' ORACLE_HOME_SWITCH = '-oracle_home' JAVA_HOME_SWITCH = '-java_home' DOMAIN_HOME_SWITCH = '-domain_home' DOMAIN_PARENT_SWITCH = '-domain_parent' DOMAIN_TYPE_SWITCH = '-domain_type' # never used by the tools but used by shell scripts WLST_PATH_SWITCH = '-wlst_path' ADMIN_URL_SWITCH = '-admin_url' ADMIN_USER_SWITCH = '-admin_user' # phony arg used as a key to store the password ADMIN_PASS_SWITCH = '-admin_pass' ARCHIVE_FILE_SWITCH = '-archive_file' MODEL_FILE_SWITCH = '-model_file' OPSS_WALLET_SWITCH = '-opss_wallet' OPSS_WALLET_PASSPHRASE = '-opss_wallet_passphrase' PREVIOUS_MODEL_FILE_SWITCH = '-prev_model_file' VARIABLE_FILE_SWITCH = '-variable_file' RCU_DB_SWITCH = '-rcu_db' RCU_PREFIX_SWITCH = '-rcu_prefix' # phony arg used as a key to store the password RCU_SYS_PASS_SWITCH = '-rcu_sys_pass' # phony arg used as a key to store the password RCU_SCHEMA_PASS_SWITCH = '-rcu_schema_pass' # phony arg used as a key to store the encryption passphrase PASSPHRASE_SWITCH = '-passphrase' ENCRYPT_MANUAL_SWITCH = '-manual' # phony arg used as a key to store the password ONE_PASS_SWITCH = '-password' ROLLBACK_IF_RESTART_REQ_SWITCH = '-rollback_if_require_restart' USE_ENCRYPTION_SWITCH = '-use_encryption' RUN_RCU_SWITCH = '-run_rcu' TARGET_VERSION_SWITCH = '-target_version' TARGET_MODE_SWITCH = '-target_mode' # phony arg used as a key to store the trailing (non-switched) arguments TRAILING_ARGS_SWITCH = '-trailing_arguments' ATTRIBUTES_ONLY_SWITCH = '-attributes_only' FOLDERS_ONLY_SWITCH = '-folders_only' MODEL_SAMPLE_SWITCH = '-model_sample' RECURSIVE_SWITCH = '-recursive' UPDATE_RCU_SCHEMA_PASS_SWITCH = '-updateRCUSchemaPassword' VALIDATION_METHOD = '-method' # overrides for the variable injector VARIABLE_INJECTOR_FILE_SWITCH = '-variable_injector_file' VARIABLE_KEYWORDS_FILE_SWITCH = '-variable_keywords_file' VARIABLE_PROPERTIES_FILE_SWITCH = '-variable_properties_file' # extractDomainResource output file DOMAIN_RESOURCE_FILE_SWITCH = '-domain_resource_file' COMPARE_MODEL_OUTPUT_DIR_SWITCH = "-output_dir" # arguments that are true if specified, false if not BOOLEAN_SWITCHES = [ ATTRIBUTES_ONLY_SWITCH, ENCRYPT_MANUAL_SWITCH, FOLDERS_ONLY_SWITCH, MODEL_SAMPLE_SWITCH, RECURSIVE_SWITCH, ROLLBACK_IF_RESTART_REQ_SWITCH, RUN_RCU_SWITCH, UPDATE_RCU_SCHEMA_PASS_SWITCH, USE_ENCRYPTION_SWITCH ] # a slot to stash the parsed domain typedef dictionary DOMAIN_TYPEDEF = 'domain_typedef' # a slot to stash the archive file object ARCHIVE_FILE = 'archive_file' ARCHIVE_FILES_SEPARATOR = ',' MODEL_FILES_SEPARATOR = ',' HELP_EXIT_CODE = 100 USAGE_ERROR_EXIT_CODE = 99 ARG_VALIDATION_ERROR_EXIT_CODE = 98 PROG_RESTART_REQUIRED = 103 PROG_ROLLBACK_IF_RESTART_EXIT_CODE = 104 PROG_ERROR_EXIT_CODE = 2 PROG_WARNING_EXIT_CODE = 1 PROG_OK_EXIT_CODE = 0 def __init__(self, program_name, required_args, optional_args): self._program_name = program_name self._logger = PlatformLogger('wlsdeploy.util') self._required_args = list(required_args) self._optional_args = list(optional_args) self._allow_multiple_models = False # # Add args that all tools should accept. # self._optional_args.append(self.HELP_SWITCH) self._optional_args.append(self.WLST_PATH_SWITCH) self._required_result = {} self._optional_result = {} return def set_allow_multiple_models(self, allow_multiple_models): """ This method determines if this instance allows multiple models to be specified for the MODEL_FILE_SWITCH argument. By default, multiple models are not allowed. :param allow_multiple_models: the flag indicating if multiple models are allowed """ self._allow_multiple_models = allow_multiple_models def process_args(self, args, tool_type=TOOL_TYPE_DEFAULT, trailing_arg_count=0): """ This method parses the command-line arguments and returns dictionaries of the required and optional args. :param args: sys.argv :param tool_type: optional, type of tool for special argument processing :param trailing_arg_count: optional, the number of trailing (no switch) arguments :return: the required and optional argument dictionaries :raises CLAException: if argument processing encounters a usage or validation exception """ method_name = 'process_args' self._logger.entering(args, class_name=self._class_name, method_name=method_name) # # reset the result fields in case the object was reused # self._required_result = {} self._optional_result = {} args_len = len(args) if args_len == 1: ex = exception_helper.create_cla_exception('Dummy Key') ex.setExitCode(self.HELP_EXIT_CODE) raise ex args = self._check_trailing_arguments(args, trailing_arg_count) args_len = len(args) idx = 1 while idx < args_len: key = args[idx] self._logger.fine('WLSDPLY-01600', key, class_name=self._class_name, method_name=method_name) if self.is_help_key(key): ex = exception_helper.create_cla_exception('Dummy Key') ex.setExitCode(self.HELP_EXIT_CODE) raise ex elif self.is_oracle_home_key(key): value, idx = self._get_arg_value(args, idx, key) full_path = self._validate_oracle_home_arg(value) self._add_arg(key, full_path, True) elif self.is_java_home_key(key): value, idx = self._get_arg_value(args, idx, key) full_path = self._validate_java_home_arg(value) self._add_arg(key, full_path, True) elif self.is_domain_home_key(key): value, idx = self._get_arg_value(args, idx, key) if tool_type == TOOL_TYPE_CREATE: full_path = self._validate_domain_home_arg_for_create( value) elif tool_type == TOOL_TYPE_EXTRACT: full_path = self._validate_domain_home_arg_for_extract( value) else: full_path = self._validate_domain_home_arg(value) self._add_arg(key, full_path, True) elif self.is_domain_parent_key(key): value, idx = self._get_arg_value(args, idx, key) full_path = self._validate_domain_parent_arg(value) self._add_arg(key, full_path, True) elif self.is_domain_type_key(key): value, idx = self._get_arg_value(args, idx, key) self._validate_domain_type_arg(value) self._add_arg(key, value) elif self.is_wlst_path_key(key): value, idx = self._get_arg_value(args, idx, key) full_path = self._validate_wlst_path_arg(value) self._add_arg(key, full_path, True) elif self.is_admin_url_key(key): value, idx = self._get_arg_value(args, idx, key) self._validate_admin_url_arg(value) self._add_arg(key, value) elif self.is_admin_user_key(key): value, idx = self._get_arg_value(args, idx, key) self._validate_admin_user_arg(value) self._add_arg(key, value) elif self.is_admin_pass_key(key): value, idx = self._get_arg_value(args, idx, key) self._validate_admin_pass_arg(value) self._add_arg(key, value) elif self.is_archive_file_key(key): value, idx = self._get_arg_value(args, idx, key) full_path = self._validate_archive_file_arg(value) self._add_arg(key, full_path, True) elif self.is_opss_passphrase_key(key): value, idx = self._get_arg_value(args, idx, key) self._validate_opss_passphrase_arg(value) self._add_arg(key, value) elif self.is_opss_wallet_key(key): value, idx = self._get_arg_value(args, idx, key) full_path = self._validate_opss_wallet_arg(value) self._add_arg(key, full_path, True) elif self.is_model_file_key(key): value, idx = self._get_arg_value(args, idx, key) full_path = self._validate_model_file_arg(value) self._add_arg(key, full_path, True) elif self.is_previous_model_file_key(key): value, idx = self._get_arg_value(args, idx, key) full_path = self._validate_previous_model_file_arg(value) self._add_arg(key, full_path, True) elif self.is_validate_method_key(key): value, idx = self._get_arg_value(args, idx, key) context = self._validate_validate_method_arg(value) self._add_arg(key, context) elif self.is_variable_file_key(key): value, idx = self._get_arg_value(args, idx, key) self._add_arg(key, value, True) elif self.is_rcu_database_key(key): value, idx = self._get_arg_value(args, idx, key) self._validate_rcu_database_arg(value) self._add_arg(key, value) elif self.is_rcu_prefix_key(key): value, idx = self._get_arg_value(args, idx, key) self._validate_rcu_prefix_arg(value) self._add_arg(key, value) elif self.is_rcu_sys_pass_key(key): value, idx = self._get_arg_value(args, idx, key) self._validate_rcu_sys_pass_arg(value) self._add_arg(key, value) elif self.is_rcu_schema_pass_key(key): value, idx = self._get_arg_value(args, idx, key) self._validate_rcu_schema_pass_arg(value) self._add_arg(key, value) elif self.is_passphrase_switch(key): value, idx = self._get_arg_value(args, idx, key) self._validate_passphrase_arg(value) self._add_arg(key, value) elif self.is_one_pass_switch(key): value, idx = self._get_arg_value(args, idx, key) self._validate_one_pass_arg(value) self._add_arg(key, value) elif self.is_target_version_switch(key): value, idx = self._get_arg_value(args, idx, key) self._validate_target_version_arg(value) self._add_arg(key, value) elif self.is_target_mode_switch(key): value, idx = self._get_arg_value(args, idx, key) self._validate_target_mode_arg(value) self._add_arg(key, value) elif self.is_variable_injector_file_key(key): value, idx = self._get_arg_value(args, idx, key) full_path = self._validate_variable_injector_file_arg(value) self._add_arg(key, full_path, True) elif self.is_variable_keywords_file_key(key): value, idx = self._get_arg_value(args, idx, key) full_path = self._validate_variable_keywords_file_arg(value) self._add_arg(key, full_path, True) elif self.is_variable_properties_file_key(key): value, idx = self._get_arg_value(args, idx, key) full_path = self._validate_variable_properties_file_arg(value) self._add_arg(key, full_path, True) elif self.is_domain_resource_file_key(key): value, idx = self._get_arg_value(args, idx, key) full_path = self._validate_domain_resource_file_arg(value) self._add_arg(key, full_path, True) elif self.is_boolean_switch(key): self._add_arg(key, True) elif self.is_compare_model_output_dir_switch(key): value, idx = self._get_arg_value(args, idx, key) full_path = self._validate_compare_model_output_dir_arg(value) self._add_arg(key, full_path, True) else: ex = exception_helper.create_cla_exception( 'WLSDPLY-01601', self._program_name, key) ex.setExitCode(self.USAGE_ERROR_EXIT_CODE) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex idx += 1 print_result = { 'required': self._required_result, 'optional': self._optional_result } self._logger.exiting(class_name=self._class_name, method_name=method_name, result=print_result) return self._required_result, self._optional_result def _get_arg_value(self, args, index, key): """ Return the value after the specified index in the argument array. Throw an exception if the next index is past the end of the arguments. :param args: the arguments to be examined :param index: the index argument before the value :param key: the key of the previous argument, for logging :return: the value of the argument, and the next index value """ method_name = '_get_arg_value' key = args[index] index = index + 1 if index >= len(args): ex = self._get_out_of_args_exception(key) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex return args[index], index def _check_trailing_arguments(self, args, trailing_arg_count): """ Remove any trailing (no switch) arguments from the argument list and add them to the required result. example: command.sh -oracle_home /oracle file1 file2 file1 and file2 are trailing arguments :param args: the arguments to be examined :param trailing_arg_count: the number of trailing arguments that are expected :return: the argument list, with the trailing arguments removed :raises CLAException: if there are not enough arguments present """ method_name = '_check_trailing_arguments' args_len = len(args) # verify there are enough arguments for any trailing (no switch) args if args_len < trailing_arg_count + 1: ex = exception_helper.create_cla_exception('WLSDPLY-01639', trailing_arg_count) ex.setExitCode(self.ARG_VALIDATION_ERROR_EXIT_CODE) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex # set required_result['TRAILING_ARGS'] to list of trailing args (such as ['file1', 'file2']) trailing_args = [] for index in range(args_len - trailing_arg_count, args_len): arg = args[index] trailing_args.append(arg) self._required_result[self.TRAILING_ARGS_SWITCH] = trailing_args # remove trailing args from the list and return revised list return args[0:(args_len - trailing_arg_count)] def get_help_key(self): return self.HELP_SWITCH def is_help_key(self, key): return self.HELP_SWITCH == key def get_oracle_home_key(self): return str(self.ORACLE_HOME_SWITCH) def is_oracle_home_key(self, key): return self.ORACLE_HOME_SWITCH == key def _validate_oracle_home_arg(self, value): method_name = '_validate_oracle_home_arg' try: oh = JFileUtils.validateExistingDirectory(value) except JIllegalArgumentException, iae: ex = exception_helper.create_cla_exception( 'WLSDPLY-01602', value, iae.getLocalizedMessage(), error=iae) ex.setExitCode(self.ARG_VALIDATION_ERROR_EXIT_CODE) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex oh_name = oh.getAbsolutePath() wl_helper = WebLogicHelper(self._logger) wl_home_name = wl_helper.get_weblogic_home(oh_name) try: JFileUtils.validateExistingDirectory(wl_home_name) except JIllegalArgumentException, iae: ex = exception_helper.create_cla_exception( 'WLSDPLY-01603', wl_home_name, iae.getLocalizedMessage(), error=iae) ex.setExitCode(self.ARG_VALIDATION_ERROR_EXIT_CODE) self._logger.throwing(ex, class_name=self._class_name, method_name=method_name) raise ex