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
Exemple #5
0
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