def run(self, command, env, auto_approve=False): cmd = ['terraform', command] if auto_approve: cmd.append('--auto-approve') if command == self.APPLY_COMMAND or command == self.DESTROY_COMMAND: cmd.append(f'-state={self.working_directory}/terraform.tfstate') cmd.append(self.working_directory) cmd = ' '.join(cmd) self.logger.info(f'Running: "{cmd}"') if Config().debug > 0: env['TF_LOG'] = terraform_verbosity[Config().debug] logpipe = LogPipe(__name__) with subprocess.Popen(cmd, stdout=logpipe, stderr=logpipe, env=env, shell=True) as sp: logpipe.close() if sp.returncode != 0: raise Exception(f'Error running: "{cmd}"') else: self.logger.info(f'Done running "{cmd}"')
def run_task(self, hosts, inventory, module, args=None): cmd = ['ansible'] cmd.extend(["-m", module]) if args is not None and len(args) > 0: cmd.extend(["-a", args]) if inventory is not None and len(inventory) > 0: cmd.extend(["-i", inventory]) cmd.append(hosts) if Config().debug > 0: cmd.append(ansible_verbosity[Config().debug]) self.logger.info('Running: "' + ' '.join(module) + '"') logpipe = LogPipe(__name__) with subprocess.Popen(cmd, stdout=logpipe, stderr=logpipe) as sp: logpipe.close() if sp.returncode != 0: raise Exception('Error running: "' + ' '.join(cmd) + '"') else: self.logger.info('Done running "' + ' '.join(cmd) + '"')
def run(self, spec_output, inventory, user, key, group): self.check_dependencies() env = os.environ.copy() env['spec_output'] = spec_output env['inventory'] = inventory env['user'] = user env['keypath'] = key cmd = f'rake inventory={inventory} user={user} keypath={key} spec_output={spec_output} spec:{group}' self.logger.info(f'Running: "{cmd}"') logpipe = LogPipe(__name__) with Popen(cmd.split(' '), cwd=SPEC_TEST_PATH, env=env, stdout=logpipe, stderr=logpipe) as sp: logpipe.close() if sp.returncode != 0: raise Exception(f'Error running: "{cmd}"') else: self.logger.info(f'Done running: "{cmd}"')
def run_playbook(self, inventory, playbook_path): cmd = ['ansible-playbook'] if inventory is not None and len(inventory) > 0: cmd.extend(["-i", inventory]) cmd.append(playbook_path) self.logger.info('Running: "' + ' '.join(cmd) + '"') logpipe = LogPipe(__name__) with subprocess.Popen(cmd, stdout=logpipe, stderr=logpipe) as sp: logpipe.close() if sp.returncode != 0: raise Exception('Error running: "' + ' '.join(cmd) + '"') else: self.logger.info('Done running "' + ' '.join(cmd) + '"')
def run(self, cmd): self.logger.info('Running: "' + cmd + '"') logpipe = LogPipe(__name__) with Popen(cmd, stdout=PIPE, stderr=logpipe, shell=True) as sp: logpipe.close() try: data = sp.stdout.read().decode('utf-8') data = re.sub(r'\s+', '', data) data = re.sub(r'(\x9B|\x1B\[)[0-?]*[ -\/]*[@-~]', '', data) output = json.loads(data) except: output = {} if sp.returncode != 0: raise Exception(f'Error running: "{cmd}"') else: self.logger.info(f'Done running "{cmd}"') return output
def run(self, command, env, auto_approve=False, auto_retries=1): cmd = ['terraform', command] if auto_approve: cmd.append('--auto-approve') if command == self.APPLY_COMMAND or command == self.DESTROY_COMMAND: cmd.append(f'-state={self.working_directory}/terraform.tfstate') cmd.append('-no-color') cmd.append(self.working_directory) cmd = ' '.join(cmd) self.logger.info(f'Running: "{cmd}"') if Config().debug > 0: env['TF_LOG'] = terraform_verbosity[Config().debug] retries = 1 do_retry = True while ((retries <= auto_retries) and do_retry): logpipe = LogPipe(__name__) with subprocess.Popen(cmd, stdout=logpipe, stderr=logpipe, env=env, shell=True) as sp: logpipe.close() retries = retries + 1 do_retry = next( (True for s in logpipe.stderrstrings if 'RetryableError' in s), False) if do_retry and retries <= auto_retries: self.logger.warning( f'Terraform failed with "RetryableError" error. Retry: ' + str(retries) + '/' + str(auto_retries)) if sp.returncode != 0: raise Exception(f'Error running: "{cmd}"') else: self.logger.info(f'Done running "{cmd}"')
def run(self, command, auto_approve=False): cmd = ['terraform', command] if auto_approve: cmd.append('--auto-approve') if command == self.APPLY_COMMAND: cmd.append('-state=' + self.working_directory + '/terraform.tfstate') cmd.append(self.working_directory) self.logger.info('Running: "' + ' '.join(cmd) + '"') logpipe = LogPipe(__name__) with subprocess.Popen(cmd, stdout=logpipe, stderr=logpipe) as sp: logpipe.close() if sp.returncode != 0: raise Exception('Error running: "' + ' '.join(cmd) + '"') else: self.logger.info('Done running "' + ' '.join(cmd) + '"')
def run_playbook(self, inventory, playbook_path, vault_file=None): cmd = ['ansible-playbook'] if inventory is not None and len(inventory) > 0: cmd.extend(["-i", inventory]) if vault_file is not None: cmd.extend(["--vault-password-file", vault_file]) cmd.append(playbook_path) if Config().debug > 0: cmd.append(ansible_verbosity[Config().debug]) self.logger.info('Running: "' + ' '.join(playbook_path) + '"') logpipe = LogPipe(__name__) with subprocess.Popen(cmd, stdout=logpipe, stderr=logpipe) as sp: logpipe.close() if sp.returncode != 0: raise Exception('Error running: "' + ' '.join(cmd) + '"') else: self.logger.info('Done running "' + ' '.join(cmd) + '"')