コード例 #1
0
    def do(self, workflow_dict):
        try:

            databaseinfra = workflow_dict['databaseinfra']

            master_host = workflow_dict['host']
            master_instance = Instance.objects.get(hostname=master_host)

            secondary_host = workflow_dict['not_primary_hosts'][0]
            secondary_instance = Instance.objects.get(hostname=secondary_host)

            master_log_file, master_log_pos = get_replication_information_from_file(
                host=master_host)

            return_code, output = use_database_initialization_script(
                databaseinfra=databaseinfra, host=master_host, option='start')
            if return_code != 0:
                raise Exception(str(output))

            return_code, output = use_database_initialization_script(
                databaseinfra=databaseinfra,
                host=secondary_host,
                option='start')
            if return_code != 0:
                raise Exception(str(output))

            LOG.info("Waiting 1 minute to continue")
            sleep(60)

            change_master_to(instance=master_instance,
                             master_host=secondary_host.address,
                             bin_log_file=master_log_file,
                             bin_log_position=master_log_pos)

            change_master_to(instance=secondary_instance,
                             master_host=master_host.address,
                             bin_log_file=master_log_file,
                             bin_log_position=master_log_pos)

            start_slave(instance=master_instance)
            start_slave(instance=secondary_instance)

            LOG.info("Waiting 30 seconds to continue")
            sleep(30)
            set_infra_read_ip(slave_host=workflow_dict['host'],
                              infra_name=databaseinfra.name)

            set_infra_write_ip(
                master_host=workflow_dict['not_primary_hosts'][0],
                infra_name=databaseinfra.name)

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0020)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
コード例 #2
0
    def do(self, workflow_dict):
        try:

            databaseinfra = workflow_dict['databaseinfra']

            master_host = workflow_dict['host']
            master_instance = Instance.objects.get(hostname=master_host)

            secondary_host = workflow_dict['not_primary_hosts'][0]
            secondary_instance = Instance.objects.get(hostname=secondary_host)

            master_log_file, master_log_pos = get_replication_information_from_file(host=master_host)

            return_code, output = use_database_initialization_script(databaseinfra=databaseinfra,
                                                                     host=master_host,
                                                                     option='start')
            if return_code != 0:
                raise Exception(str(output))

            return_code, output = use_database_initialization_script(databaseinfra=databaseinfra,
                                                                     host=secondary_host,
                                                                     option='start')
            if return_code != 0:
                raise Exception(str(output))

            LOG.info("Waiting 1 minute to continue")
            sleep(60)

            change_master_to(instance=master_instance,
                             master_host=secondary_host.address,
                             bin_log_file=master_log_file,
                             bin_log_position=master_log_pos)

            change_master_to(instance=secondary_instance,
                             master_host=master_host.address,
                             bin_log_file=master_log_file,
                             bin_log_position=master_log_pos)

            start_slave(instance=master_instance)
            start_slave(instance=secondary_instance)

            LOG.info("Waiting 30 seconds to continue")
            sleep(30)
            set_infra_read_ip(slave_host=workflow_dict['host'],
                              infra_name=databaseinfra.name)

            set_infra_write_ip(master_host=workflow_dict['not_primary_hosts'][0],
                               infra_name=databaseinfra.name)

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0020)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
コード例 #3
0
    def undo(self, workflow_dict):
        LOG.info("Running undo...")
        try:
            databaseinfra = workflow_dict['databaseinfra']
            host = workflow_dict['host']
            hosts = [host, ]

            if workflow_dict['not_primary_hosts'] >= 1:
                hosts.extend(workflow_dict['not_primary_hosts'])

            for host in hosts:
                return_code, output = use_database_initialization_script(databaseinfra=databaseinfra,
                                                                         host=host,
                                                                         option='stop')

                if return_code != 0:
                    LOG.info(str(output))

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0021)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
コード例 #4
0
    def do(self, workflow_dict):
        try:
            databaseinfra = workflow_dict['databaseinfra']
            host = workflow_dict['host']
            hosts = [host, ]

            if workflow_dict['not_primary_hosts'] >= 1:
                hosts.extend(workflow_dict['not_primary_hosts'])

            for host in hosts:
                return_code, output = use_database_initialization_script(databaseinfra=databaseinfra,
                                                                         host=host,
                                                                         option='start')

                if return_code != 0:
                    raise Exception(str(output))

                LOG.info('Wait 1 minute before start other instance')
                sleep(60)

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0021)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
コード例 #5
0
    def do(self, workflow_dict):
        try:
            databaseinfra = workflow_dict['databaseinfra']
            host = workflow_dict['host']
            hosts = [
                host,
            ]
            workflow_dict['stoped_hosts'] = []

            hosts.extend(workflow_dict['not_primary_hosts'])

            LOG.debug("HOSTS: {}".format(hosts))
            for host in hosts:
                LOG.info('Stopping database on host {}'.format(host))
                return_code, output = use_database_initialization_script(
                    databaseinfra=databaseinfra, host=host, option='stop')
                if return_code != 0:
                    raise Exception(str(output))

                workflow_dict['stoped_hosts'].append(host)

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0021)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
コード例 #6
0
    def undo(self, workflow_dict):
        LOG.info("Running undo...")
        try:
            databaseinfra = workflow_dict['databaseinfra']
            instance = workflow_dict['instance']

            if workflow_dict['host_stoped']:
                host = workflow_dict['host']
                return_code, output = use_database_initialization_script(databaseinfra=databaseinfra,
                                                                         host=host,
                                                                         option='start')

                if return_code != 0:
                    LOG.warn(str(output))

            if databaseinfra.plan.is_ha:
                driver = databaseinfra.get_driver()
                driver.start_slave(instance=instance)

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0022)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
コード例 #7
0
    def undo(self, workflow_dict):
        LOG.info("Running undo...")
        try:
            databaseinfra = workflow_dict['databaseinfra']
            instance = workflow_dict['instance']

            if workflow_dict['host_stoped']:
                host = workflow_dict['host']
                return_code, output = use_database_initialization_script(
                    databaseinfra=databaseinfra, host=host, option='start')

                if return_code != 0:
                    LOG.warn(str(output))

            if databaseinfra.plan.is_ha:
                driver = databaseinfra.get_driver()
                driver.start_slave(instance=instance)

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0022)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
コード例 #8
0
    def undo(self, workflow_dict):
        LOG.info("Running undo...")
        try:
            databaseinfra = workflow_dict['databaseinfra']
            host = workflow_dict['host']
            return_code, output = use_database_initialization_script(
                databaseinfra=databaseinfra, host=host, option='stop')

            if return_code != 0:
                LOG.info(str(output))

            cs_host_attr = CsHostAttr.objects.get(host=host)
            output = {}
            return_code = exec_remote_command(
                server=host.address,
                username=cs_host_attr.vm_user,
                password=cs_host_attr.vm_password,
                command='umount /data',
                output=output)

            if return_code != 0:
                raise Exception(str(output))

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0022)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
コード例 #9
0
    def undo(self, workflow_dict):
        LOG.info("Running undo...")
        try:
            databaseinfra = workflow_dict['databaseinfra']
            host = workflow_dict['host']
            return_code, output = use_database_initialization_script(databaseinfra=databaseinfra,
                                                                     host=host,
                                                                     option='stop')

            if return_code != 0:
                LOG.info(str(output))

            cs_host_attr = CsHostAttr.objects.get(host=host)
            output = {}
            return_code = exec_remote_command(server=host.address,
                                              username=cs_host_attr.vm_user,
                                              password=cs_host_attr.vm_password,
                                              command='umount /data',
                                              output=output)

            if return_code != 0:
                raise Exception(str(output))

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0022)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
コード例 #10
0
    def do(self, workflow_dict):
        try:
            databaseinfra = workflow_dict['databaseinfra']
            host = workflow_dict['host']
            hosts = [
                host,
            ]

            if workflow_dict['not_primary_hosts'] >= 1:
                hosts.extend(workflow_dict['not_primary_hosts'])

            for host in hosts:
                return_code, output = use_database_initialization_script(
                    databaseinfra=databaseinfra, host=host, option='start')

                if return_code != 0:
                    raise Exception(str(output))

                LOG.info('Wait 1 minute before start other instance')
                sleep(60)

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0021)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
コード例 #11
0
    def undo(self, workflow_dict):
        LOG.info("Running undo...")
        try:
            databaseinfra = workflow_dict['databaseinfra']
            host = workflow_dict['host']
            hosts = [host, ]

            if workflow_dict['not_primary_hosts'] >= 1:
                hosts.extend(workflow_dict['not_primary_hosts'])

            for host in hosts:
                return_code, output = use_database_initialization_script(databaseinfra=databaseinfra,
                                                                         host=host,
                                                                         option='stop')

                if return_code != 0:
                    LOG.info(str(output))

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0021)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
コード例 #12
0
    def undo(self, workflow_dict):
        LOG.info("Running undo...")
        try:
            databaseinfra = workflow_dict['databaseinfra']

            for host in workflow_dict['stoped_hosts']:
                LOG.info('Starting database on host {}'.format(host))
                return_code, output = use_database_initialization_script(databaseinfra=databaseinfra,
                                                                         host=host,
                                                                         option='start')

                if return_code != 0:
                    LOG.warn(str(output))

                instance = host.instance_set.all()[0]
                start_slave(instance=instance)

            LOG.info('Wainting 30 seconds to setting flipper IPs')
            sleep(30)
            LOG.info('Setting read IP on {}'.format(workflow_dict['host']))
            set_infra_read_ip(slave_host=workflow_dict['host'],
                              infra_name=databaseinfra.name)

            LOG.info('Setting write IP on {}'.format(workflow_dict['not_primary_hosts'][0]))
            set_infra_write_ip(master_host=workflow_dict['not_primary_hosts'][0],
                               infra_name=databaseinfra.name)

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0021)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
コード例 #13
0
    def do(self, workflow_dict):
        try:
            databaseinfra = workflow_dict['databaseinfra']
            host = workflow_dict['host']
            hosts = [host, ]
            workflow_dict['stoped_hosts'] = []

            if len(workflow_dict['not_primary_hosts']) >= 1:
                LOG.info("SECONDARY HOSTS: {}".format(workflow_dict['not_primary_hosts']))
                hosts.extend(workflow_dict['not_primary_hosts'])

            LOG.debug("HOSTS: {}".format(hosts))
            for host in hosts:
                return_code, output = use_database_initialization_script(databaseinfra=databaseinfra,
                                                                         host=host,
                                                                         option='stop')
                if return_code != 0:
                    raise Exception(str(output))

                workflow_dict['stoped_hosts'].append(host)

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0021)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
コード例 #14
0
    def do(self, workflow_dict):
        try:
            databaseinfra = workflow_dict['databaseinfra']
            master = workflow_dict['host']
            hosts = [master, ]

            if workflow_dict['not_primary_hosts'] >= 1:
                hosts.extend(workflow_dict['not_primary_hosts'])

            for host in hosts:
                LOG.info('Configuring {}'.format(host))
                ConfigureRestore(
                    host.database_instance(),
                    SENTINELMASTER=master.address,
                    SENTINELMASTERPORT=master.database_instance().port,
                    MASTERNAME=databaseinfra.name
                ).do()

            for host in hosts:
                return_code, output = use_database_initialization_script(
                    databaseinfra=databaseinfra, host=host, option='start'
                )

                if return_code != 0:
                    raise Exception(str(output))

                LOG.info('Wait 1 minute before start other instance')
                sleep(60)

            driver = databaseinfra.get_driver()
            sentinel_instances = driver.get_non_database_instances()
            for sentinel_instance in sentinel_instances:
                host = sentinel_instance.hostname
                if host not in hosts:
                    LOG.info("Reset sentinel instance on host: {}".format(host))
                    reset_sentinel(
                        host,
                        sentinel_instance.address,
                        sentinel_instance.port,
                        databaseinfra.name
                    )

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0021)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
コード例 #15
0
    def undo(self, workflow_dict):
        LOG.info("Running undo...")
        try:
            databaseinfra = workflow_dict['databaseinfra']

            for host in workflow_dict['stoped_hosts']:
                return_code, output = use_database_initialization_script(
                    databaseinfra=databaseinfra, host=host, option='start')

                if return_code != 0:
                    LOG.warn(str(output))

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0021)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
コード例 #16
0
    def undo(self, workflow_dict):
        LOG.info("Running undo...")
        try:
            databaseinfra = workflow_dict['databaseinfra']
            host = workflow_dict['host']
            return_code, output = use_database_initialization_script(databaseinfra=databaseinfra,
                                                                     host=host,
                                                                     option='stop')

            if return_code != 0:
                raise Exception(str(output))

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0022)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
コード例 #17
0
    def do(self, workflow_dict):
        try:
            databaseinfra = workflow_dict['databaseinfra']
            workflow_dict['host_stoped'] = False
            host = workflow_dict['host']
            LOG.debug("HOSTS: {}".format(host))

            return_code, output = use_database_initialization_script(
                databaseinfra=databaseinfra, host=host, option='stop')
            if return_code != 0:
                raise Exception(str(output))

            workflow_dict['host_stoped'] = True

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0022)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
コード例 #18
0
    def do(self, workflow_dict):
        try:
            databaseinfra = workflow_dict['databaseinfra']
            instance = workflow_dict['instance']
            host = workflow_dict['host']
            cs_host_attr = CsHostAttr.objects.get(host=host)

            output = {}
            command = 'mount /data && chown {engine_name}:{engine_name} /data && rmdir /data2'.format(
                engine_name=databaseinfra.engine_name)
            return_code = exec_remote_command(server=host.address,
                                              username=cs_host_attr.vm_user,
                                              password=cs_host_attr.vm_password,
                                              command=command,
                                              output=output)

            if return_code != 0:
                raise Exception(str(output))

            return_code, output = use_database_initialization_script(databaseinfra=databaseinfra,
                                                                     host=host,
                                                                     option='start')

            if return_code != 0:
                raise Exception(str(output))

            if databaseinfra.plan.is_ha:
                driver = databaseinfra.get_driver()
                driver.start_slave(instance=instance)

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0022)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
コード例 #19
0
    def do(self, workflow_dict):
        try:
            databaseinfra = workflow_dict['databaseinfra']
            instance = workflow_dict['instance']
            host = workflow_dict['host']
            cs_host_attr = CsHostAttr.objects.get(host=host)

            output = {}
            command = 'mount /data && chown {engine_name}:{engine_name} /data && rmdir /data2'.format(
                engine_name=databaseinfra.engine_name)
            return_code = exec_remote_command(
                server=host.address,
                username=cs_host_attr.vm_user,
                password=cs_host_attr.vm_password,
                command=command,
                output=output)

            if return_code != 0:
                raise Exception(str(output))

            return_code, output = use_database_initialization_script(
                databaseinfra=databaseinfra, host=host, option='start')

            if return_code != 0:
                raise Exception(str(output))

            if databaseinfra.plan.is_ha:
                driver = databaseinfra.get_driver()
                driver.start_slave(instance=instance)

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0022)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
コード例 #20
0
    def do(self, workflow_dict):
        try:
            databaseinfra = workflow_dict['databaseinfra']
            workflow_dict['host_stoped'] = False
            host = workflow_dict['host']
            LOG.debug("HOSTS: {}".format(host))

            return_code, output = use_database_initialization_script(databaseinfra=databaseinfra,
                                                                     host=host,
                                                                     option='stop')
            if return_code != 0:
                raise Exception(str(output))

            workflow_dict['host_stoped'] = True

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0022)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
コード例 #21
0
    def do(self, workflow_dict):
        try:
            databaseinfra = workflow_dict["databaseinfra"]
            workflow_dict["host_stoped"] = False
            host = workflow_dict["host"]
            LOG.debug("HOSTS: {}".format(host))

            return_code, output = use_database_initialization_script(
                databaseinfra=databaseinfra, host=host, option="stop"
            )
            if return_code != 0:
                raise Exception(str(output))

            workflow_dict["host_stoped"] = True

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict["exceptions"]["error_codes"].append(DBAAS_0022)
            workflow_dict["exceptions"]["traceback"].append(traceback)

            return False
コード例 #22
0
    def undo(self, workflow_dict):
        LOG.info("Running undo...")
        try:
            databaseinfra = workflow_dict['databaseinfra']

            for host in workflow_dict['stoped_hosts']:
                LOG.info('Starting database on host {}'.format(host))
                return_code, output = use_database_initialization_script(
                    databaseinfra=databaseinfra, host=host, option='start')

                if return_code != 0:
                    LOG.warn(str(output))

                instance = host.instance_set.all()[0]
                start_slave(instance=instance)

            LOG.info('Wainting 30 seconds to setting flipper IPs')
            sleep(30)
            LOG.info('Setting read IP on {}'.format(workflow_dict['host']))
            set_infra_read_ip(slave_host=workflow_dict['host'],
                              infra_name=databaseinfra.name)

            LOG.info('Setting write IP on {}'.format(
                workflow_dict['not_primary_hosts'][0]))
            set_infra_write_ip(
                master_host=workflow_dict['not_primary_hosts'][0],
                infra_name=databaseinfra.name)

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0021)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
コード例 #23
0
    def undo(self, workflow_dict):
        LOG.info("Running undo...")
        try:
            databaseinfra = workflow_dict['databaseinfra']

            for host in workflow_dict['stoped_hosts']:
                LOG.info('Starting database on host {}'.format(host))
                return_code, output = use_database_initialization_script(
                    databaseinfra=databaseinfra, host=host, option='start')

                if return_code != 0:
                    LOG.warn(str(output))

                instance = host.instances.all()[0]
                start_slave(instance=instance)

            LOG.info('Wainting 30 seconds to setting write/read instances')
            sleep(30)
            driver = databaseinfra.get_driver()
            master_host = workflow_dict['host']
            master_instance = Instance.objects.get(hostname=master_host)
            secondary_host = workflow_dict['not_primary_hosts'][0]
            secondary_instance = Instance.objects.get(hostname=secondary_host)
            LOG.info('Setting read on {}'.format(master_instance))
            driver.set_read_ip(instance=master_instance)
            LOG.info('Setting write on {}'.format(secondary_instance))
            driver.set_master(instance=secondary_instance)

            return True
        except Exception:
            traceback = full_stack()

            workflow_dict['exceptions']['error_codes'].append(DBAAS_0021)
            workflow_dict['exceptions']['traceback'].append(traceback)

            return False
コード例 #24
0
 def _execute_init_script(self, command):
     return use_database_initialization_script(
         self.infra, self.instance.hostname, command
     )