def test_print_debug(capsys): util.print_debug("test_title", "test_data") result, _ = capsys.readouterr() title = [ colorama.Back.WHITE, colorama.Style.BRIGHT, colorama.Fore.BLACK, "DEBUG: test_title", colorama.Fore.RESET, colorama.Back.RESET, colorama.Style.RESET_ALL, ] print("".join(title)) data = [ colorama.Fore.BLACK, colorama.Style.BRIGHT, "test_data", colorama.Style.RESET_ALL, colorama.Fore.RESET, ] print("".join(data)) x, _ = capsys.readouterr() assert x == result
def test_print_debug(): expected = "DEBUG: test_title:\ntest_data\n" with console.capture() as capture: util.print_debug("test_title", "test_data") result = strip_ansi_escape(capture.get()) assert result == expected
def print_debug(self): testaid_env = \ {k: v for (k, v) in os.environ.items() if 'TESTVARS_' in k} if testaid_env: print('\n') util.print_debug('TESTVARS ENVIRONMENT', util.safe_dump(testaid_env)) log = self.get_log() if log: if not testaid_env: print('\n') util.print_debug('TESTVARS LOG', log)
def test_print_debug(capsys): util.print_debug('test_title', 'test_data') result_title, _ = capsys.readouterr() print(''.join([ colorama.Back.WHITE, colorama.Style.BRIGHT, colorama.Fore.BLACK, 'DEBUG: ' + 'test_title', colorama.Fore.RESET, colorama.Back.RESET, colorama.Style.RESET_ALL ])) print(''.join([ colorama.Fore.BLACK, colorama.Style.BRIGHT, 'test_data', colorama.Style.RESET_ALL, colorama.Fore.RESET ])) expected_title, _ = capsys.readouterr() assert expected_title == result_title
def test_print_debug(capsys): util.print_debug('test_title', 'test_data') result, _ = capsys.readouterr() title = [ colorama.Back.WHITE, colorama.Style.BRIGHT, colorama.Fore.BLACK, 'DEBUG: test_title', colorama.Fore.RESET, colorama.Back.RESET, colorama.Style.RESET_ALL ] print(''.join(title)) data = [ colorama.Fore.BLACK, colorama.Style.BRIGHT, 'test_data', colorama.Style.RESET_ALL, colorama.Fore.RESET ] print(''.join(data)) x, _ = capsys.readouterr() assert x == result
def main(self): if not os.path.exists(self.config.config['molecule']['molecule_dir']): os.makedirs(self.config.config['molecule']['molecule_dir']) self.state = state.State( state_file=self.config.config.get('molecule').get('state_file')) try: self.driver = self._get_driver() except basedriver.InvalidDriverSpecified: LOG.error("Invalid driver '{}'".format(self._get_driver_name())) # TODO(retr0h): Print valid drivers. util.sysexit() except basedriver.InvalidProviderSpecified: LOG.error("Invalid provider '{}'".format(self.args['provider'])) self.args['provider'] = None self.args['platform'] = None self.driver = self._get_driver() self.print_valid_providers() util.sysexit() except basedriver.InvalidPlatformSpecified: LOG.error("Invalid platform '{}'".format(self.args['platform'])) self.args['provider'] = None self.args['platform'] = None self.driver = self._get_driver() self.print_valid_platforms() util.sysexit() # updates instances config with full machine names self.config.populate_instance_names(self.driver.platform) if self.args.get('debug'): util.print_debug( 'RUNNING CONFIG', yaml.dump(self.config.config, default_flow_style=False, indent=2)) self._add_or_update_vars('group_vars') self._add_or_update_vars('host_vars')
def execute(self, idempotent=False, create_instances=True, create_inventory=True, exit=True, hide_errors=True): """ Execute the actions necessary to perform a `molecule converge` and return a tuple. :param idempotent: An optional flag to perform the converge again, and parse the output for idempotence. :param create_inventory: An optional flag to toggle inventory creation. :param create_instances: An optional flag to toggle instance creation. :return: Return a tuple of (`exit status`, `command output`), otherwise sys.exit on command failure. """ if self.molecule.state.created: create_instances = False if self.molecule.state.converged: create_inventory = False if self.molecule.state.multiple_platforms: self.command_args['platform'] = 'all' else: if ((self.command_args.get('platform') == 'all') and self.molecule.state.created): create_instances = True create_inventory = True if create_instances and not idempotent: c = create.Create(self.command_args, self.args, self.molecule) c.execute() if create_inventory: self.molecule.create_inventory_file() # Install role dependencies only during `molecule converge` if not idempotent and 'requirements_file' in \ self.molecule.config.config['ansible'] and not \ self.molecule.state.installed_deps: galaxy = ansible_galaxy.AnsibleGalaxy(self.molecule.config.config) galaxy.install() self.molecule.state.change_state('installed_deps', True) ansible = ansible_playbook.AnsiblePlaybook( self.molecule.config.config['ansible'], self.molecule.driver.ansible_connection_params) # Target tags passed in via CLI if self.command_args.get('tags'): ansible.add_cli_arg('tags', self.command_args.get('tags')) if idempotent: # Don't log stdout/err ansible.remove_cli_arg('_out') ansible.remove_cli_arg('_err') # Disable color for regexp ansible.add_env_arg('ANSIBLE_NOCOLOR', 'true') ansible.add_env_arg('ANSIBLE_FORCE_COLOR', 'false') ansible.bake() if self.args.get('debug'): ansible_env = { k: v for (k, v) in ansible.env.items() if 'ANSIBLE' in k } other_env = { k: v for (k, v) in ansible.env.items() if 'ANSIBLE' not in k } util.print_debug( 'OTHER ENVIRONMENT', yaml.dump(other_env, default_flow_style=False, indent=2)) util.print_debug( 'ANSIBLE ENVIRONMENT', yaml.dump(ansible_env, default_flow_style=False, indent=2)) util.print_debug('ANSIBLE PLAYBOOK', str(ansible._ansible)) util.print_info('Starting Ansible Run ...') status, output = ansible.execute(hide_errors=hide_errors) if status is not None: if exit: util.sysexit(status) return status, None if not self.molecule.state.converged: self.molecule.state.change_state('converged', True) return None, output
def execute(self, idempotent=False, create_instances=True, create_inventory=True, exit=True, hide_errors=True): """ Execute the actions necessary to perform a `molecule converge` and return a tuple. :param idempotent: An optional flag to perform the converge again, and parse the output for idempotence. :param create_inventory: An optional flag to toggle inventory creation. :param create_instances: An optional flag to toggle instance creation. :return: Return a tuple of (`exit status`, `command output`), otherwise sys.exit on command failure. """ debug = self.args.get('debug') if self.molecule.state.created: create_instances = False if self.molecule.state.converged: create_inventory = False if self.molecule.state.multiple_platforms: self.command_args['platform'] = 'all' else: if ((self.command_args.get('platform') == 'all') and self.molecule.state.created): create_instances = True create_inventory = True if create_instances and not idempotent: c = create.Create(self.args, self.command_args, self.molecule) c.execute() if create_inventory: self.molecule.create_inventory_file() d = dependency.Dependency(self.args, self.command_args, self.molecule) d.execute() ansible = ansible_playbook.AnsiblePlaybook( self.molecule.config.config['ansible'], self.molecule.driver.ansible_connection_params, raw_ansible_args=self.command_args.get('ansible_args'), debug=debug) if idempotent: # Don't log stdout/err ansible.remove_cli_arg('_out') ansible.remove_cli_arg('_err') # Idempotence task regexp cannot handle diff ansible.remove_cli_arg('diff') # Disable color for regexp ansible.add_env_arg('ANSIBLE_NOCOLOR', 'true') ansible.add_env_arg('ANSIBLE_FORCE_COLOR', 'false') if debug: ansible_env = { k: v for (k, v) in ansible.env.items() if 'ANSIBLE' in k } util.print_debug( 'ANSIBLE ENVIRONMENT', yaml.dump(ansible_env, default_flow_style=False, indent=2)) util.print_info('Starting Ansible Run ...') status, output = ansible.execute(hide_errors=hide_errors) if status is not None: if exit: util.sysexit(status) return status, None if not self.molecule.state.converged: self.molecule.state.change_state('converged', True) return None, output