try: import hashlib _md5 = hashlib.md5 except ImportError: import md5 _md5 = md5.new logger = logging.getLogger(__name__) # default timeout DEFAULT_CONNECTION_TIMEOUT = 5 WebResponse = namedtuple('WebResponse', 'status_code time_millis error_msg') ensure_ssl_using_protocol( AmbariConfig.get_resolved_config().get_force_https_protocol_name(), AmbariConfig.get_resolved_config().get_ca_cert_file_path() ) class WebAlert(BaseAlert): def __init__(self, alert_meta, alert_source_meta, config): super(WebAlert, self).__init__(alert_meta, alert_source_meta, config) connection_timeout = DEFAULT_CONNECTION_TIMEOUT # extract any lookup keys from the URI structure self.uri_property_keys = None if 'uri' in alert_source_meta: uri = alert_source_meta['uri'] self.uri_property_keys = self._lookup_uri_property_keys(uri)
# preserving 2.4 compatibility. try: import hashlib _md5 = hashlib.md5 except ImportError: import md5 _md5 = md5.new logger = logging.getLogger(__name__) # default timeout DEFAULT_CONNECTION_TIMEOUT = 5 WebResponse = namedtuple('WebResponse', 'status_code time_millis error_msg') ensure_ssl_using_protocol(AmbariConfig.get_resolved_config().get_force_https_protocol()) class WebAlert(BaseAlert): def __init__(self, alert_meta, alert_source_meta, config): super(WebAlert, self).__init__(alert_meta, alert_source_meta, config) connection_timeout = DEFAULT_CONNECTION_TIMEOUT # extract any lookup keys from the URI structure self.uri_property_keys = None if 'uri' in alert_source_meta: uri = alert_source_meta['uri'] self.uri_property_keys = self._lookup_uri_property_keys(uri) if 'connection_timeout' in uri:
from resource_management.libraries.functions import StackFeature from resource_management.libraries.functions.stack_features import check_stack_feature from resource_management.core import shell from resource_management.core.shell import as_user, as_sudo from resource_management.core.source import Template from resource_management.core.exceptions import ComponentIsNotRunning from resource_management.core.logger import Logger from resource_management.libraries.functions.curl_krb_request import curl_krb_request from resource_management.libraries.script.script import Script from resource_management.libraries.functions.namenode_ha_utils import get_namenode_states from resource_management.libraries.functions.show_logs import show_logs from ambari_commons.inet_utils import ensure_ssl_using_protocol from zkfc_slave import ZkfcSlaveDefault ensure_ssl_using_protocol( Script.get_force_https_protocol_name(), Script.get_ca_cert_file_path() ) def safe_zkfc_op(action, env): """ Idempotent operation on the zkfc process to either start or stop it. :param action: start or stop :param env: environment """ Logger.info("Performing action {0} on zkfc.".format(action)) zkfc = None if action == "start": try: ZkfcSlaveDefault.status_static(env) except ComponentIsNotRunning: ZkfcSlaveDefault.start_static(env)
from resource_management.libraries.functions import check_process_status from resource_management.libraries.functions import StackFeature from resource_management.libraries.functions.stack_features import check_stack_feature from resource_management.core import shell from resource_management.core.shell import as_user, as_sudo from resource_management.core.source import Template from resource_management.core.exceptions import ComponentIsNotRunning from resource_management.core.logger import Logger from resource_management.libraries.functions.curl_krb_request import curl_krb_request from resource_management.libraries.functions.namenode_ha_utils import get_namenode_states from resource_management.libraries.functions.show_logs import show_logs from resource_management.libraries.script.script import Script from ambari_commons.inet_utils import ensure_ssl_using_protocol from zkfc_slave import ZkfcSlaveDefault ensure_ssl_using_protocol(Script.get_force_https_protocol_name()) def safe_zkfc_op(action, env): """ Idempotent operation on the zkfc process to either start or stop it. :param action: start or stop :param env: environment """ Logger.info("Performing action {0} on zkfc.".format(action)) zkfc = None if action == "start": try: ZkfcSlaveDefault.status_static(env) except ComponentIsNotRunning: ZkfcSlaveDefault.start_static(env)
def execute(self): """ Sets up logging; Parses command parameters and executes method relevant to command type """ parser = OptionParser() parser.add_option("-o", "--out-files-logging", dest="log_out_files", action="store_true", help="use this option to enable outputting *.out files of the service pre-start") (self.options, args) = parser.parse_args() self.log_out_files = self.options.log_out_files # parse arguments if len(args) < 6: print "Script expects at least 6 arguments" print USAGE.format(os.path.basename(sys.argv[0])) # print to stdout sys.exit(1) self.command_name = str.lower(sys.argv[1]) self.command_data_file = sys.argv[2] self.basedir = sys.argv[3] self.stroutfile = sys.argv[4] self.load_structured_out() self.logging_level = sys.argv[5] Script.tmp_dir = sys.argv[6] # optional script arguments for forcing https protocol and ca_certs file if len(sys.argv) >= 8: Script.force_https_protocol = sys.argv[7] if len(sys.argv) >= 9: Script.ca_cert_file_path = sys.argv[8] logging_level_str = logging._levelNames[self.logging_level] Logger.initialize_logger(__name__, logging_level=logging_level_str) # on windows we need to reload some of env variables manually because there is no default paths for configs(like # /etc/something/conf on linux. When this env vars created by one of the Script execution, they can not be updated # in agent, so other Script executions will not be able to access to new env variables if OSCheck.is_windows_family(): reload_windows_env() # !!! status commands re-use structured output files; if the status command doesn't update the # the file (because it doesn't have to) then we must ensure that the file is reset to prevent # old, stale structured output from a prior status command from being used if self.command_name == "status": Script.structuredOut = {} self.put_structured_out({}) # make sure that script has forced https protocol and ca_certs file passed from agent ensure_ssl_using_protocol(Script.get_force_https_protocol_name(), Script.get_ca_cert_file_path()) try: with open(self.command_data_file) as f: pass Script.config = ConfigDictionary(json.load(f)) # load passwords here(used on windows to impersonate different users) Script.passwords = {} for k, v in _PASSWORD_MAP.iteritems(): if get_path_from_configuration(k, Script.config) and get_path_from_configuration(v, Script.config): Script.passwords[get_path_from_configuration(k, Script.config)] = get_path_from_configuration(v, Script.config) except IOError: Logger.logger.exception("Can not read json file with command parameters: ") sys.exit(1) # Run class method depending on a command type try: method = self.choose_method_to_execute(self.command_name) with Environment(self.basedir, tmp_dir=Script.tmp_dir) as env: env.config.download_path = Script.tmp_dir if not self.is_hook(): self.execute_prefix_function(self.command_name, 'pre', env) method(env) if not self.is_hook(): self.execute_prefix_function(self.command_name, 'post', env) except Fail as ex: ex.pre_raise() raise finally: if self.should_expose_component_version(self.command_name): self.save_component_version_to_structured_out()