def excute_command(self, commands): """ excute_command""" runner = CommandRunner(self.module) for cmd in commands: try: runner.add_command(**cmd) except AddCommandError: exc = get_exception() self.module.fail_json( msg='duplicate command detected: %s' % cmd) runner.retries = self.module.params['retries'] runner.interval = self.module.params['interval'] runner.match = self.module.params['match'] try: runner.run() except FailedConditionsError: exc = get_exception() self.module.fail_json( msg=str(exc), failed_conditions=exc.failed_conditions) except FailedConditionalError: exc = get_exception() self.module.fail_json( msg=str(exc), failed_conditional=exc.failed_conditional) except NetworkError: exc = get_exception() self.module.fail_json(msg=str(exc), **exc.kwargs) for cmd in commands: try: output = runner.get_command(cmd['command'], cmd.get('output')) except ValueError: self.module.fail_json( msg='command not executed due to check_mode, see warnings') return output
def main(): """main entry point for Ansible module """ spec = dict( commands=dict(type='list'), rpcs=dict(type='list'), display=dict(default='xml', choices=['text', 'xml'], aliases=['format', 'output']), wait_for=dict(type='list', aliases=['waitfor']), match=dict(default='all', choices=['all', 'any']), retries=dict(default=10, type='int'), interval=dict(default=1, type='int'), transport=dict(default='netconf', choices=['netconf']) ) mutually_exclusive = [('commands', 'rpcs')] module = NetworkModule(argument_spec=spec, mutually_exclusive=mutually_exclusive, supports_check_mode=True) commands = list() for key in VALID_KEYS.keys(): commands.extend(list(parse(module, key))) conditionals = module.params['wait_for'] or list() warnings = list() runner = CommandRunner(module) for cmd in commands: if module.check_mode and not cmd['command'].startswith('show'): warnings.append('only show commands are supported when using ' 'check mode, not executing `%s`' % cmd['command']) else: if cmd['command'].startswith('co'): module.fail_json(msg='junos_command does not support running ' 'config mode commands. Please use ' 'junos_config instead') try: runner.add_command(**cmd) except AddCommandError: exc = get_exception() warnings.append('duplicate command detected: %s' % cmd) try: for item in conditionals: runner.add_conditional(item) except (ValueError, AddConditionError): exc = get_exception() module.fail_json(msg=str(exc), condition=exc.condition) runner.retries = module.params['retries'] runner.interval = module.params['interval'] runner.match = module.params['match'] try: runner.run() except FailedConditionsError: exc = get_exception() module.fail_json(msg=str(exc), failed_conditions=exc.failed_conditions) except FailedConditionalError: exc = get_exception() module.fail_json(msg=str(exc), failed_conditional=exc.failed_conditional) except NetworkError: exc = get_exception() module.fail_json(msg=str(exc)) result = dict(changed=False, stdout=list()) for cmd in commands: try: output = runner.get_command(cmd['command'], cmd.get('output')) except ValueError: output = 'command not executed due to check_mode, see warnings' result['stdout'].append(output) result['warnings'] = warnings result['stdout_lines'] = list(to_lines(result['stdout'])) module.exit_json(**result)
def main(): spec = dict( # { command: <str>, output: <str>, prompt: <str>, response: <str> } commands=dict(type='list', required=True), wait_for=dict(type='list', aliases=['waitfor']), match=dict(default='all', choices=['any', 'all']), retries=dict(default=10, type='int'), interval=dict(default=1, type='int') ) module = NetworkModule(argument_spec=spec, supports_check_mode=True) commands = list(parse_commands(module)) conditionals = module.params['wait_for'] or list() warnings = list() runner = CommandRunner(module) try: # This tries to detect command mode. runner.add_command('tmsh') runner.run() shell = "bash" except NetworkError: shell = "tmsh" # Resets the runner because raised exceptions do not remove the # erroneous commands module.disconnect() runner.commands = [] runner.module.cli._commands = [] for cmd in commands: cmd = strip_tmsh_prefix(cmd) if module.check_mode and not is_config_mode_command(cmd): warnings.append('only show or list commands are supported when ' 'using check mode, not executing `%s`' % cmd['command']) else: if is_config_mode_command(cmd): module.fail_json(msg='bigip_command does not support running ' 'config mode commands. Please use ' 'bigip_config instead') try: if shell == 'tmsh': disable_pager = dict( output=None, command='modify cli preference pager disabled' ) runner.add_command(**disable_pager) runner.add_command(**cmd) else: disable_pager = dict( output=None, command='tmsh modify cli preference pager disabled' ) cmd['command'] = 'tmsh ' + cmd['command'] runner.add_command(**disable_pager) runner.add_command(**cmd) except AddCommandError: warnings.append('Duplicate command detected: %s' % cmd) try: for item in conditionals: runner.add_conditional(item) except AddConditionError: exc = get_exception() module.fail_json(msg=str(exc), condition=exc.condition) runner.retries = module.params['retries'] runner.interval = module.params['interval'] runner.match = module.params['match'] try: runner.run() except FailedConditionsError: exc = get_exception() module.fail_json(msg=str(exc), failed_conditions=exc.failed_conditions) except FailedConditionalError: exc = get_exception() module.fail_json(msg=str(exc), failed_conditional=exc.failed_conditional) except NetworkError: exc = get_exception() module.fail_json(msg=str(exc), **exc.kwargs) result = dict(changed=False) result['stdout'] = list() for cmd in commands: try: output = runner.get_command(cmd['command'], cmd.get('output')) except ValueError: output = 'command not executed due to check_mode, see warnings' result['stdout'].append(output) result['warnings'] = warnings result['stdout_lines'] = list(to_lines(result['stdout'])) module.exit_json(**result)
def main(): spec = dict( # { command: <str>, output: <str>, prompt: <str>, response: <str> } commands=dict(type='list', required=True), wait_for=dict(type='list', aliases=['waitfor']), match=dict(default='all', choices=['all', 'any']), retries=dict(default=10, type='int'), interval=dict(default=1, type='int') ) module = NetworkModule(argument_spec=spec, supports_check_mode=True) commands = list(parse_commands(module)) conditionals = module.params['wait_for'] or list() warnings = list() runner = CommandRunner(module) for cmd in commands: if module.check_mode and not cmd['command'].startswith('show'): warnings.append('only show commands are supported when using ' 'check mode, not executing `%s`' % cmd['command']) else: if cmd['command'].startswith('conf'): module.fail_json(msg='eos_command does not support running ' 'config mode commands. Please use ' 'eos_config instead') try: runner.add_command(**cmd) except AddCommandError: exc = get_exception() warnings.append('duplicate command detected: %s' % cmd) try: for item in conditionals: runner.add_conditional(item) except AddConditionError: exc = get_exception() module.fail_json(msg=str(exc), condition=exc.condition) runner.retries = module.params['retries'] runner.interval = module.params['interval'] runner.match = module.params['match'] try: runner.run() except FailedConditionsError: exc = get_exception() module.fail_json(msg=str(exc), failed_conditions=exc.failed_conditions) except FailedConditionalError: exc = get_exception() module.fail_json(msg=str(exc), failed_conditional=exc.failed_conditional) except NetworkError: exc = get_exception() module.fail_json(msg=str(exc), **exc.kwargs) result = dict(changed=False, stdout=list()) for cmd in commands: try: output = runner.get_command(cmd['command'], cmd.get('output')) except ValueError: output = 'command not executed due to check_mode, see warnings' result['stdout'].append(output) result['warnings'] = warnings result['stdout_lines'] = list(to_lines(result['stdout'])) module.exit_json(**result)
def main(): """main entry point for Ansible module """ spec = dict( commands=dict(type="list"), rpcs=dict(type="list"), display=dict(default="xml", choices=["text", "xml"], aliases=["format", "output"]), wait_for=dict(type="list", aliases=["waitfor"]), match=dict(default="all", choices=["all", "any"]), retries=dict(default=10, type="int"), interval=dict(default=1, type="int"), transport=dict(default="netconf", choices=["netconf"]), ) mutually_exclusive = [("commands", "rpcs")] module = NetworkModule(argument_spec=spec, mutually_exclusive=mutually_exclusive, supports_check_mode=True) commands = list() for key in VALID_KEYS.keys(): commands.extend(list(parse(module, key))) conditionals = module.params["wait_for"] or list() warnings = list() runner = CommandRunner(module) for cmd in commands: if module.check_mode and not cmd["command"].startswith("show"): warnings.append( "only show commands are supported when using " "check mode, not executing `%s`" % cmd["command"] ) else: if cmd["command"].startswith("co"): module.fail_json( msg="junos_command does not support running " "config mode commands. Please use " "junos_config instead" ) try: runner.add_command(**cmd) except AddCommandError: exc = get_exception() warnings.append("duplicate command detected: %s" % cmd) try: for item in conditionals: runner.add_conditional(item) except (ValueError, AddConditionError): exc = get_exception() module.fail_json(msg=str(exc), condition=exc.condition) runner.retries = module.params["retries"] runner.interval = module.params["interval"] runner.match = module.params["match"] try: runner.run() except FailedConditionsError: exc = get_exception() module.fail_json(msg=str(exc), failed_conditions=exc.failed_conditions) except FailedConditionalError: exc = get_exception() module.fail_json(msg=str(exc), failed_conditional=exc.failed_conditional) except NetworkError: exc = get_exception() module.fail_json(msg=str(exc)) result = dict(changed=False, stdout=list()) for cmd in commands: try: output = runner.get_command(cmd["command"], cmd.get("output")) except ValueError: output = "command not executed due to check_mode, see warnings" result["stdout"].append(output) result["warnings"] = warnings result["stdout_lines"] = list(to_lines(result["stdout"])) module.exit_json(**result)
def main(): spec = dict( # { command: <str>, output: <str>, prompt: <str>, response: <str> } commands=dict(type='list', required=True), wait_for=dict(type='list', aliases=['waitfor']), match=dict(default='all', choices=['any', 'all']), retries=dict(default=10, type='int'), interval=dict(default=1, type='int') ) module = NetworkModule(argument_spec=spec, supports_check_mode=True) commands = list(parse_commands(module)) conditionals = module.params['wait_for'] or list() warnings = list() runner = CommandRunner(module) try: # This tries to detect command mode. runner.add_command('tmsh') runner.run() shell = "bash" except NetworkError: shell = "tmsh" # Resets the runner because raised exceptions do not remove the # erroneous commands module.disconnect() runner.commands = [] runner.module.cli._commands = [] for cmd in commands: cmd = strip_tmsh_prefix(cmd) if module.check_mode and not is_config_mode_command(cmd): warnings.append('only show or list commands are supported when ' 'using check mode, not executing `%s`' % cmd['command']) else: if is_config_mode_command(cmd): module.fail_json(msg='bigip_command does not support running ' 'config mode commands. Please use ' 'bigip_config instead') try: if shell == 'tmsh': disable_pager = dict( output=None, command='modify cli preference pager disabled' ) runner.add_command(**disable_pager) runner.add_command(**cmd) else: disable_pager = dict( output=None, command='tmsh modify cli preference pager disabled' ) cmd['command'] = 'tmsh ' + cmd['command'] runner.add_command(**disable_pager) runner.add_command(**cmd) except AddCommandError: exc = get_exception() warnings.append('duplicate command detected: %s' % cmd) try: for item in conditionals: runner.add_conditional(item) except AddConditionError: exc = get_exception() module.fail_json(msg=str(exc), condition=exc.condition) runner.retries = module.params['retries'] runner.interval = module.params['interval'] runner.match = module.params['match'] try: runner.run() except FailedConditionsError: exc = get_exception() module.fail_json(msg=str(exc), failed_conditions=exc.failed_conditions) except FailedConditionalError: exc = get_exception() module.fail_json(msg=str(exc), failed_conditional=exc.failed_conditional) except NetworkError: exc = get_exception() module.fail_json(msg=str(exc), **exc.kwargs) result = dict(changed=False) result['stdout'] = list() for cmd in commands: try: output = runner.get_command(cmd['command'], cmd.get('output')) except ValueError: output = 'command not executed due to check_mode, see warnings' result['stdout'].append(output) result['warnings'] = warnings result['stdout_lines'] = list(to_lines(result['stdout'])) module.exit_json(**result)