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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
def _execute_init_script(self, command): return use_database_initialization_script( self.infra, self.instance.hostname, command )