def do(self, workflow_dict): try: LOG.info("Getting cloudstack credentials...") cs_credentials = get_credentials_for( environment=workflow_dict['environment'], credential_type=CredentialType.CLOUDSTACK) cs_provider = CloudStackProvider(credentials=cs_credentials) statsd_credentials = get_credentials_for( environment=workflow_dict['environment'], credential_type=CredentialType.STATSD) statsd_host, statsd_port = statsd_credentials.endpoint.split(':') for index, hosts in enumerate(permutations(workflow_dict['hosts'])): LOG.info("Getting vm credentials...") host_csattr = CsHostAttr.objects.get(host=hosts[0]) LOG.info("Cheking host ssh...") host_ready = check_ssh( server=hosts[0].address, username=host_csattr.vm_user, password=host_csattr.vm_password, wait=5, interval=10) if not host_ready: LOG.warn("Host %s is not ready..." % hosts[0]) return False host_nfsattr = HostAttr.objects.get(host=hosts[0]) planattr = PlanAttr.objects.get(plan=workflow_dict['plan']) contextdict = { 'EXPORTPATH': host_nfsattr.nfsaas_path, 'DATABASENAME': workflow_dict['name'], 'DBPASSWORD': get_credentials_for(environment=workflow_dict['environment'], credential_type=CredentialType.MYSQL).password, 'HOST': workflow_dict['hosts'][index].hostname.split('.')[0], 'ENGINE': 'mysql', 'STATSD_HOST': statsd_host, 'STATSD_PORT': statsd_port, } if len(workflow_dict['hosts']) > 1: LOG.info("Updating contexdict for %s" % hosts[0]) contextdict.update({ 'SERVERID': index + 1, 'IPMASTER': hosts[1].address, 'IPWRITE': workflow_dict['databaseinfraattr'][0].ip, 'IPREAD': workflow_dict['databaseinfraattr'][1].ip, 'MASTERPAIRNAME': workflow_dict['databaseinfra'].name, 'HOST01': workflow_dict['hosts'][0], 'HOST02': workflow_dict['hosts'][1], 'INSTANCE01': workflow_dict['instances'][0], 'INSTANCE02': workflow_dict['instances'][1], 'SECOND_SCRIPT_FILE': '/opt/dbaas/scripts/dbaas_second_script.sh' }) LOG.info("Updating userdata for %s" % hosts[0]) cs_provider.update_userdata( vm_id=host_csattr.vm_id, contextdict=contextdict, userdata=planattr.userdata) LOG.info("Executing script on %s" % hosts[0]) return_code = exec_remote_command(server=hosts[0].address, username=host_csattr.vm_user, password=host_csattr.vm_password, command='/opt/dbaas/scripts/dbaas_userdata_script.sh') if return_code != 0: return False if len(workflow_dict['hosts']) > 1: for host in workflow_dict['hosts']: LOG.info("Executing script on %s" % hosts[0]) return_code = exec_remote_command(server=host.address, username=host_csattr.vm_user, password=host_csattr.vm_password, command=contextdict['SECOND_SCRIPT_FILE']) if return_code != 0: return False return True except Exception, e: traceback = full_stack() workflow_dict['exceptions']['error_codes'].append(DBAAS_0013) workflow_dict['exceptions']['traceback'].append(traceback) return False
def do(self, workflow_dict): try: LOG.info("Getting cloudstack credentials...") cs_credentials = get_credentials_for( environment=workflow_dict['environment'], credential_type=CredentialType.CLOUDSTACK) cs_provider = CloudStackProvider(credentials=cs_credentials) statsd_credentials = get_credentials_for( environment=workflow_dict['environment'], credential_type=CredentialType.STATSD) statsd_host, statsd_port = statsd_credentials.endpoint.split(':') for index, hosts in enumerate(permutations( workflow_dict['hosts'])): LOG.info("Getting vm credentials...") host_csattr = CsHostAttr.objects.get(host=hosts[0]) LOG.info("Cheking host ssh...") host_ready = check_ssh(server=hosts[0].address, username=host_csattr.vm_user, password=host_csattr.vm_password, wait=5, interval=10) if not host_ready: LOG.warn("Host %s is not ready..." % hosts[0]) return False host_nfsattr = HostAttr.objects.get(host=hosts[0]) planattr = PlanAttr.objects.get(plan=workflow_dict['plan']) contextdict = { 'EXPORTPATH': host_nfsattr.nfsaas_path, 'DATABASENAME': workflow_dict['name'], 'DBPASSWORD': get_credentials_for( environment=workflow_dict['environment'], credential_type=CredentialType.MYSQL).password, 'HOST': workflow_dict['hosts'][index].hostname.split('.')[0], 'ENGINE': 'mysql', 'STATSD_HOST': statsd_host, 'STATSD_PORT': statsd_port, } if len(workflow_dict['hosts']) > 1: LOG.info("Updating contexdict for %s" % hosts[0]) contextdict.update({ 'SERVERID': index + 1, 'IPMASTER': hosts[1].address, 'IPWRITE': workflow_dict['databaseinfraattr'][0].ip, 'IPREAD': workflow_dict['databaseinfraattr'][1].ip, 'MASTERPAIRNAME': workflow_dict['databaseinfra'].name, 'HOST01': workflow_dict['hosts'][0], 'HOST02': workflow_dict['hosts'][1], 'INSTANCE01': workflow_dict['instances'][0], 'INSTANCE02': workflow_dict['instances'][1], 'SECOND_SCRIPT_FILE': '/opt/dbaas/scripts/dbaas_second_script.sh' }) LOG.info("Updating userdata for %s" % hosts[0]) cs_provider.update_userdata(vm_id=host_csattr.vm_id, contextdict=contextdict, userdata=planattr.userdata) LOG.info("Executing script on %s" % hosts[0]) return_code = exec_remote_command( server=hosts[0].address, username=host_csattr.vm_user, password=host_csattr.vm_password, command='/opt/dbaas/scripts/dbaas_userdata_script.sh') if return_code != 0: return False if len(workflow_dict['hosts']) > 1: for host in workflow_dict['hosts']: LOG.info("Executing script on %s" % hosts[0]) return_code = exec_remote_command( server=host.address, username=host_csattr.vm_user, password=host_csattr.vm_password, command=contextdict['SECOND_SCRIPT_FILE']) if return_code != 0: return False return True except Exception: traceback = full_stack() workflow_dict['exceptions']['error_codes'].append(DBAAS_0013) workflow_dict['exceptions']['traceback'].append(traceback) return False
def do(self, workflow_dict): try: LOG.info("Getting cloudstack credentials...") cs_credentials = get_credentials_for( environment=workflow_dict['environment'], credential_type=CredentialType.CLOUDSTACK) cs_provider = CloudStackProvider(credentials=cs_credentials) mongodbkey = ''.join( random.choice(string.hexdigits) for i in range(50)) workflow_dict['replicasetname'] = 'RepicaSet_' + workflow_dict[ 'databaseinfra'].name statsd_credentials = get_credentials_for( environment=workflow_dict['environment'], credential_type=CredentialType.STATSD) statsd_host, statsd_port = statsd_credentials.endpoint.split(':') for index, instance in enumerate(workflow_dict['instances']): host = instance.hostname LOG.info("Getting vm credentials...") host_csattr = CsHostAttr.objects.get(host=host) LOG.info("Cheking host ssh...") host_ready = check_ssh(server=host.address, username=host_csattr.vm_user, password=host_csattr.vm_password, wait=5, interval=10) if not host_ready: LOG.warn("Host %s is not ready..." % host) return False if instance.is_arbiter: contextdict = { 'HOST': workflow_dict['hosts'][index].hostname.split('.')[0], 'DATABASENAME': workflow_dict['name'], 'ENGINE': 'mongodb', 'STATSD_HOST': statsd_host, 'STATSD_PORT': statsd_port, } databaserule = 'ARBITER' else: host_nfsattr = HostAttr.objects.get(host=host) contextdict = { 'EXPORTPATH': host_nfsattr.nfsaas_path, 'HOST': workflow_dict['hosts'][index].hostname.split('.')[0], 'DATABASENAME': workflow_dict['name'], 'ENGINE': 'mongodb', 'DBPASSWORD': get_credentials_for( environment=workflow_dict['environment'], credential_type=CredentialType.MONGODB).password, 'STATSD_HOST': statsd_host, 'STATSD_PORT': statsd_port, } if index == 0: databaserule = 'PRIMARY' else: databaserule = 'SECONDARY' if len(workflow_dict['hosts']) > 1: LOG.info("Updating contexdict for %s" % host) contextdict.update({ 'REPLICASETNAME': workflow_dict['replicasetname'], 'HOST01': workflow_dict['hosts'][0], 'HOST02': workflow_dict['hosts'][1], 'HOST03': workflow_dict['hosts'][2], 'MONGODBKEY': mongodbkey, 'DATABASERULE': databaserule, 'SECOND_SCRIPT_FILE': '/opt/dbaas/scripts/dbaas_second_script.sh', 'HOST': workflow_dict['hosts'][index].hostname.split('.')[0], }) LOG.info("Updating userdata for %s" % host) planattr = PlanAttr.objects.get(plan=workflow_dict['plan']) cs_provider.update_userdata(vm_id=host_csattr.vm_id, contextdict=contextdict, userdata=planattr.userdata) LOG.info("Executing script on %s" % host) return_code = exec_remote_command( server=host.address, username=host_csattr.vm_user, password=host_csattr.vm_password, command='/opt/dbaas/scripts/dbaas_userdata_script.sh') if return_code != 0: return False if len(workflow_dict['hosts']) > 1: for host in workflow_dict['hosts']: LOG.info("Executing script on %s" % host) return_code = exec_remote_command( server=host.address, username=host_csattr.vm_user, password=host_csattr.vm_password, command=contextdict['SECOND_SCRIPT_FILE']) if return_code != 0: return False return True except Exception, e: traceback = full_stack() workflow_dict['exceptions']['error_codes'].append(DBAAS_0014) workflow_dict['exceptions']['traceback'].append(traceback) return False
def do(self, workflow_dict): try: LOG.info("Getting cloudstack credentials...") cs_credentials = get_credentials_for( environment=workflow_dict['environment'], credential_type=CredentialType.CLOUDSTACK) cs_provider = CloudStackProvider(credentials=cs_credentials) mongodbkey = ''.join(random.choice(string.hexdigits) for i in range(50)) workflow_dict['replicasetname'] = 'RepicaSet_' + workflow_dict['databaseinfra'].name statsd_credentials = get_credentials_for( environment=workflow_dict['environment'], credential_type=CredentialType.STATSD) statsd_host, statsd_port = statsd_credentials.endpoint.split(':') for index, instance in enumerate(workflow_dict['instances']): host = instance.hostname LOG.info("Getting vm credentials...") host_csattr = CsHostAttr.objects.get(host=host) LOG.info("Cheking host ssh...") host_ready = check_ssh( server=host.address, username=host_csattr.vm_user, password=host_csattr.vm_password, wait=5, interval=10) if not host_ready: LOG.warn("Host %s is not ready..." % host) return False if instance.is_arbiter: contextdict = { 'HOST': workflow_dict['hosts'][index].hostname.split('.')[0], 'DATABASENAME': workflow_dict['name'], 'ENGINE': 'mongodb', 'STATSD_HOST': statsd_host, 'STATSD_PORT': statsd_port, } databaserule = 'ARBITER' else: host_nfsattr = HostAttr.objects.get(host=host) contextdict = { 'EXPORTPATH': host_nfsattr.nfsaas_path, 'HOST': workflow_dict['hosts'][index].hostname.split('.')[0], 'DATABASENAME': workflow_dict['name'], 'ENGINE': 'mongodb', 'DBPASSWORD': get_credentials_for(environment=workflow_dict['environment'], credential_type=CredentialType.MONGODB).password, 'STATSD_HOST': statsd_host, 'STATSD_PORT': statsd_port, } if index == 0: databaserule = 'PRIMARY' else: databaserule = 'SECONDARY' if len(workflow_dict['hosts']) > 1: LOG.info("Updating contexdict for %s" % host) contextdict.update({ 'REPLICASETNAME': workflow_dict['replicasetname'], 'HOST01': workflow_dict['hosts'][0], 'HOST02': workflow_dict['hosts'][1], 'HOST03': workflow_dict['hosts'][2], 'MONGODBKEY': mongodbkey, 'DATABASERULE': databaserule, 'SECOND_SCRIPT_FILE': '/opt/dbaas/scripts/dbaas_second_script.sh', 'HOST': workflow_dict['hosts'][index].hostname.split('.')[0], }) LOG.info("Updating userdata for %s" % host) planattr = PlanAttr.objects.get(plan=workflow_dict['plan']) cs_provider.update_userdata( vm_id=host_csattr.vm_id, contextdict=contextdict, userdata=planattr.userdata) LOG.info("Executing script on %s" % host) return_code = exec_remote_command(server=host.address, username=host_csattr.vm_user, password=host_csattr.vm_password, command='/opt/dbaas/scripts/dbaas_userdata_script.sh') if return_code != 0: return False if len(workflow_dict['hosts']) > 1: for host in workflow_dict['hosts']: LOG.info("Executing script on %s" % host) return_code = exec_remote_command(server=host.address, username=host_csattr.vm_user, password=host_csattr.vm_password, command=contextdict['SECOND_SCRIPT_FILE']) if return_code != 0: return False return True except Exception, e: traceback = full_stack() workflow_dict['exceptions']['error_codes'].append(DBAAS_0014) workflow_dict['exceptions']['traceback'].append(traceback) return False