def script_variables(self): user = self.driver.get_metric_collector_user(self.credential.user) password = self.driver.get_metric_collector_password( self.credential.password) create_telegraf_config = True if self.instance.instance_type == self.instance.REDIS_SENTINEL: if len(self.host.instances.all()) > 1: create_telegraf_config = False create_default_file = self.instance.instance_type in ( self.instance.MYSQL, self.instance.MONGODB, self.instance.REDIS, self.instance.MYSQL_PERCONA) master_ssl_ca = None if self.infra.ssl_configured: from workflow.steps.util.ssl import InfraSSLBaseName infra_ssl = InfraSSLBaseName(self.instance) master_ssl_ca = infra_ssl.master_ssl_ca variables = { 'HOSTNAME': self.host.hostname.split('.')[0], 'HOSTADDRESS': self.host.address, 'PORT': self.instance.port, 'USER': user, 'PASSWORD': password, 'MYSQL': self.instance.is_mysql, 'MONGODB': self.instance.instance_type == self.instance.MONGODB, 'REDIS': self.instance.instance_type == self.instance.REDIS, 'CREATE_TELEGRAF_CONFIG': create_telegraf_config, 'CREATE_DEFAULT_FILE': create_default_file, 'KAFKA_ENDPOINT': self.credential.endpoint, 'KAFKA_TOPIC': self.kafka_topic, 'SSL_CONFIGURED': self.infra.ssl_configured, 'MASTER_SSL_CA': master_ssl_ca } return variables
def script_variables(self): variables = { 'DATABASENAME': self.database.name, 'DBPASSWORD': self.infra.password, 'HOST': self.host.hostname.split('.')[0], 'HOSTADDRESS': self.instance.address, 'ENGINE': self.plan.engine.engine_type.name, 'MOVE_DATA': bool(self.upgrade) or bool(self.reinstall_vm), 'DRIVER_NAME': self.infra.get_driver().topology_name(), # TODO: Remove that when VP is ready 'DISK_SIZE_IN_GB': self.disk_offering.size_gb()if self.disk_offering else 8, 'ENVIRONMENT': self.environment, 'HAS_PERSISTENCE': self.infra.plan.has_persistence, 'IS_READ_ONLY': self.instance.read_only, 'SSL_CONFIGURED': self.infra.ssl_configured, } if self.infra.ssl_configured: from workflow.steps.util.ssl import InfraSSLBaseName from workflow.steps.util.ssl import InstanceSSLBaseName infra_ssl = InfraSSLBaseName(self.instance) instance_ssl = InstanceSSLBaseName(self.instance) variables['INFRA_SSL_CA'] = infra_ssl.ca_file_path variables['INFRA_SSL_CERT'] = infra_ssl.cert_file_path variables['INFRA_SSL_KEY'] = infra_ssl.key_file_path variables['INSTANCE_SSL_CA'] = instance_ssl.ca_file_path variables['INSTANCE_SSL_CERT'] = instance_ssl.cert_file_path variables['INSTANCE_SSL_KEY'] = instance_ssl.key_file_path variables['configuration'] = self.get_configuration() variables['GRAYLOG_ENDPOINT'] = self.get_graylog_config() variables.update(self.get_variables_specifics()) return variables
def base_context(self): context = { 'DATABASENAME': self.database.name, 'DBPASSWORD': self.infra.password, 'HOST': self.host.hostname.split('.')[0], 'HOSTADDRESS': self.instance.address, 'ENGINE': self.plan.engine.engine_type.name, 'MOVE_DATA': self.need_move_data, 'DRIVER_NAME': self.driver.topology_name(), 'DISK_SIZE_IN_GB': (self.disk_offering.size_gb() if self.disk_offering else 8), 'ENVIRONMENT': self.environment, 'HAS_PERSISTENCE': self.plan.has_persistence, 'IS_READ_ONLY': self.instance.read_only, 'SSL_CONFIGURED': self.infra.ssl_configured, 'SSL_MODE_ALLOW': self.infra.ssl_mode == self.infra.ALLOWTLS, 'SSL_MODE_PREFER': self.infra.ssl_mode == self.infra.PREFERTLS, 'SSL_MODE_REQUIRE': self.infra.ssl_mode == self.infra.REQUIRETLS, } if self.infra.ssl_configured: from workflow.steps.util.ssl import InfraSSLBaseName from workflow.steps.util.ssl import InstanceSSLBaseName infra_ssl = InfraSSLBaseName(self.instance) instance_ssl = InstanceSSLBaseName(self.instance) context['INFRA_SSL_CA'] = infra_ssl.ca_file_path context['INFRA_SSL_CERT'] = infra_ssl.cert_file_path context['INFRA_SSL_KEY'] = infra_ssl.key_file_path context['MASTER_SSL_CA'] = infra_ssl.master_ssl_ca context['INSTANCE_SSL_CA'] = instance_ssl.ca_file_path context['INSTANCE_SSL_CERT'] = instance_ssl.cert_file_path context['INSTANCE_SSL_KEY'] = instance_ssl.key_file_path context['configuration'] = self.get_configuration() return context
def script_variables(self): variables = { 'DATABASENAME': self.database.name, 'DBPASSWORD': self.infra.password, 'HOST': self.host.hostname.split('.')[0], # 'HOSTADDRESS': self.instance.address, 'ENGINE': self.plan.engine.engine_type.name, 'MOVE_DATA': (bool(self.upgrade) or bool(self.reinstall_vm) or bool(self.engine_migration)), 'DRIVER_NAME': self.infra.get_driver().topology_name(), 'DISK_SIZE_IN_GB': (self.disk_offering.size_gb() if self.disk_offering else 8), 'ENVIRONMENT': self.environment, 'HAS_PERSISTENCE': self.infra.plan.has_persistence, 'IS_READ_ONLY': self.instance.read_only, 'SSL_CONFIGURED': self.infra.ssl_configured, 'DATABASE_LOG_FULL_PATH': self.database_log_full_path, 'VOLUME_PATH_ROOT': self.volume_path_root, 'VOLUME_PATH_DB': self.volume_path_db } if self.infra.ssl_configured: from workflow.steps.util.ssl import InfraSSLBaseName from workflow.steps.util.ssl import InstanceSSLBaseName infra_ssl = InfraSSLBaseName(self.instance) instance_ssl = InstanceSSLBaseName(self.instance) variables['INFRA_SSL_CA'] = infra_ssl.ca_file_path variables['INFRA_SSL_CERT'] = infra_ssl.cert_file_path variables['INFRA_SSL_KEY'] = infra_ssl.key_file_path variables['INSTANCE_SSL_CA'] = instance_ssl.ca_file_path variables['INSTANCE_SSL_CERT'] = instance_ssl.cert_file_path variables['INSTANCE_SSL_KEY'] = instance_ssl.key_file_path variables['configuration'] = self.get_configuration() variables['LOG_ENDPOINT'] = self.get_log_endpoint() return variables
def execute(task, mongodb_restarted_hosts): task.update_details("Checking restarted instances and executing script...", persist=True) user = password = None if mongodb_restarted_hosts: first_host = mongodb_restarted_hosts[0] instance = first_host.instances.first() infra = instance.databaseinfra master_ssl_ca = InfraSSLBaseName(instance).master_ssl_ca driver = infra.get_driver() user, password, _ = driver.build_new_infra_auth() if not user or not password: raise Exception("Credentials not found") for i, host in enumerate(mongodb_restarted_hosts): log = '\n{} of {} - Host {}'.format(i + 1, len(mongodb_restarted_hosts), host) LOG.info(log) task.update_details(log, persist=True) infra = host.instances.first().databaseinfra if infra.ssl_mode == infra.REQUIRETLS: ssl_connect = '--tls --tlsCAFile {}'.format(master_ssl_ca) else: ssl_connect = '' script_mongodb_rotate_formated = script_mongodb_rotate % ( ssl_connect, ssl_connect, ssl_connect) output = host.ssh.run_script(script=script_is_syslog, raise_if_error=False) if output['exit_code'] == 0: msg = '\nHost {}: SYSLOG'.format(host) LOG.info(msg) task.update_details(msg, persist=True) else: output = host.ssh.run_script(script=script_is_datalog_empty, raise_if_error=False) if output['exit_code'] == 0: msg = '\nHost {}: Writing to filer, but it needs restart.'.format( host) LOG.info(msg) task.update_details(msg, persist=True) else: output = host.ssh.run_script( script=script_rotate_already_executed, raise_if_error=False) if output['exit_code'] == 0: msg = '\nHost {}: Rotate already updated.'.format(host) LOG.info(msg) task.update_details(msg, persist=True) else: msg = '\nStarting log rotate changes.' LOG.info(msg) task.update_details(msg, persist=True) msg = '\nRemoving old rotate file.' LOG.info(msg) task.update_details(msg, persist=True) host.ssh.run_script(remove_log_rotate_file) msg = '\nCreating new rotate scripts.' LOG.info(msg) task.update_details(msg, persist=True) host.ssh.run_script(create_mongodb_rotate_script) host.ssh.run_script(create_log_params_script) host.ssh.run_script(script_mongodb_rotate_formated) host.ssh.run_script(script_mongodb_log_params) msg = '\nCreating profile file.' LOG.info(msg) task.update_details(msg, persist=True) host.ssh.run_script( create_profile_file.format(user, password)) msg = '\nCreating cron job.' LOG.info(msg) task.update_details(msg, persist=True) host.ssh.run_script(add_cron_job) msg = '\nHost {}: Rotate script successfully updated.'.format( host) LOG.info(msg) task.update_details(msg, persist=True)
def root_certificate_file(self): return InfraSSLBaseName(self.instance).master_ssl_ca