def main(): """ main entry point for module execution """ argument_spec = dict( src=dict(type='path'), lines=dict(aliases=['commands'], type='list'), parents=dict(type='list'), before=dict(type='list'), after=dict(type='list'), match=dict(default='line', choices=['line', 'strict', 'exact', 'none']), replace=dict(default='line', choices=['line', 'block']), multiline_delimiter=dict(default='@'), config=dict(), defaults=dict(type='bool', default=False), backup=dict(type='bool', default=False), save=dict(default=False, type='bool'), ) mutually_exclusive = [('lines', 'src')] required_if = [('match', 'strict', ['lines']), ('match', 'exact', ['lines']), ('replace', 'block', ['lines'])] module = NetworkModule(argument_spec=argument_spec, connect_on_load=False, mutually_exclusive=mutually_exclusive, required_if=required_if, supports_check_mode=True) if module.params['force'] is True: module.params['match'] = 'none' warnings = list() check_args(module, warnings) result = dict(changed=False, warnings=warnings) if module.params['backup']: result['__backup__'] = module.config.get_config() try: run(module, result) except NetworkError: exc = get_exception() module.disconnect() module.fail_json(msg=str(exc)) module.disconnect() 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=['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)
def main(): spec = dict( # { command: <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, connect_on_load=False, 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='ios_command does not support running ' 'config mode commands. Please use ' 'ios_config instead') try: runner.add_command(**cmd) except AddCommandError: exc = get_exception() warnings.append('duplicate command detected: %s' % cmd) for item in conditionals: runner.add_conditional(item) 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 NetworkError: exc = get_exception() module.disconnect() module.fail_json(msg=str(exc), stdout=exc.kwargs.get('stdout')) result = dict(changed=False, stdout=list()) for cmd in commands: try: output = runner.get_command(cmd['command']) except ValueError: output = 'command not executed due to check_mode, see warnings' result['stdout'].append(output) result['warnings'] = warnings module.exit_json(**result)