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') ) spec.update(asa_argument_spec) module = AnsibleModule(argument_spec=spec, supports_check_mode=True) check_args(module) result = {'changed': False} wait_for = module.params['wait_for'] or list() conditionals = [Conditional(c) for c in wait_for] commands = module.params['commands'] retries = module.params['retries'] interval = module.params['interval'] match = module.params['match'] while retries > 0: responses = run_commands(module, commands) for item in list(conditionals): if item(responses): if match == 'any': conditionals = list() break conditionals.remove(item) if not conditionals: break time.sleep(interval) retries -= 1 if conditionals: failed_conditions = [item.raw for item in conditionals] msg = 'One or more conditional statements have not be satisfied' module.fail_json(msg=msg, failed_conditions=failed_conditions) result.update({ 'changed': False, 'stdout': responses, 'stdout_lines': list(to_lines(responses)) }) 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') ) spec.update(asa_argument_spec) module = AnsibleModule(argument_spec=spec, supports_check_mode=True) check_args(module) result = {'changed': False} wait_for = module.params['wait_for'] or list() conditionals = [Conditional(c) for c in wait_for] commands = module.params['commands'] retries = module.params['retries'] interval = module.params['interval'] match = module.params['match'] while retries > 0: responses = run_commands(module, commands) for item in list(conditionals): if item(responses): if match == 'any': conditionals = list() break conditionals.remove(item) if not conditionals: break time.sleep(interval) retries -= 1 if conditionals: failed_conditions = [item.raw for item in conditionals] msg = 'One or more conditional statements have not be satisfied' module.fail_json(msg=msg, failed_conditions=failed_conditions) result.update({ 'changed': False, 'stdout': responses, 'stdout_lines': list(to_lines(responses)) }) module.exit_json(**result)
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']), config=dict(), defaults=dict(type='bool', default=False), passwords=dict(type='bool', default=False), backup=dict(type='bool', default=False), save=dict(type='bool', default=False), ) argument_spec.update(asa_argument_spec) mutually_exclusive = [('lines', 'src'), ('parents', 'src'), ('defaults', 'passwords')] required_if = [('match', 'strict', ['lines']), ('match', 'exact', ['lines']), ('replace', 'block', ['lines'])] module = AnsibleModule(argument_spec=argument_spec, mutually_exclusive=mutually_exclusive, required_if=required_if, supports_check_mode=True) result = {'changed': False} check_args(module) config = None if module.params['backup']: result['__backup__'] = get_config(module) run(module, result) module.exit_json(**result)
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']), config=dict(), defaults=dict(type='bool', default=False), passwords=dict(type='bool', default=False), backup=dict(type='bool', default=False), save=dict(type='bool', default=False), ) argument_spec.update(asa_argument_spec) mutually_exclusive = [('lines', 'src'), ('parents', 'src'), ('defaults', 'passwords')] required_if = [('match', 'strict', ['lines']), ('match', 'exact', ['lines']), ('replace', 'block', ['lines'])] module = AnsibleModule(argument_spec=argument_spec, mutually_exclusive=mutually_exclusive, required_if=required_if, supports_check_mode=True) result = {'changed': False} check_args(module) config = None if module.params['backup']: result['__backup__'] = get_config(module) run(module, result) module.exit_json(**result)
def main(): spec = dict( # { command: <str>, prompt: <str>, response: <str> } inside=dict(type='str', default=''), outside=dict(type='str', default=''), 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')) spec.update(asa_argument_spec) module = AnsibleModule(argument_spec=spec, supports_check_mode=True) check_args(module) result = {'changed': False} wait_for = module.params['wait_for'] or list() conditionals = [Conditional(c) for c in wait_for] inside = module.params['inside'] outside = module.params['outside'] retries = module.params['retries'] interval = module.params['interval'] match = module.params['match'] nats = [] while retries > 0: if inside: inside_nat_command = ['show nat ' + inside] inside_response = run_commands(module, inside_nat_command) responses = inside_response[0].splitlines() for p in responses: if 'No matching NAT policy found' in p: module.exit_json(msg=p) # Split the response to get the zone, and object names if 'Policies' in p or 'translate_hits' in p or len(p) < 6: #module.fail_json(msg=p) continue if p.split()[5] == 'dynamic': zone = p.split()[1][1:-1] source_object = p.split()[6] outside_object = p.split()[8] type = 'dynamic' elif p.split()[5] == 'static': zone = p.split()[1][1:-1] source_object = p.split()[6] outside_object = p.split()[7] type = 'static' # check if outside object is actually an IP address from section 2 try: IPAddress(outside_object).is_unicast() outside_ip = outside_object except core.AddrFormatError: outside_object_command = [ 'show run object id ' + outside_object ] outside_object_response = run_commands( module, outside_object_command) outside_ip = outside_object_response[0].splitlines( )[1].strip() if source_object == 'any': inside_ip = source_object else: inside_object_command = [ 'show run object id ' + source_object ] inside_object_response = run_commands( module, inside_object_command) inside_ip = inside_object_response[0].splitlines( )[1].strip() nats.append({ 'type': type, 'zone': zone, 'source_object': source_object, 'outside_object': outside_object, 'outside_ip': outside_ip, 'inside_ip': inside_ip }) for item in list(conditionals): if item(inside_response): if match == 'any': conditionals = list() break conditionals.remove(item) if not conditionals: break time.sleep(interval) retries -= 1 if outside: outside_nat_command = ['show nat translated ' + outside] outside_response = run_commands(module, outside_nat_command) responses = outside_response[0].splitlines() for p in responses: if 'No matching NAT policy found' in p: module.exit_json(msg=p) # Split the response to get the zone, and object names if 'Policies' in p or 'translate_hits' in p or len(p) < 6: #module.fail_json(msg=p) continue if p.split()[5] == 'dynamic': zone = p.split()[1][1:-1] source_object = p.split()[6] outside_object = p.split()[8] type = 'dynamic' elif p.split()[5] == 'static': zone = p.split()[1][1:-1] source_object = p.split()[6] outside_object = p.split()[7] type = 'static' # check if outside object is actually an IP address from section 2 try: IPAddress(outside_object).is_unicast() outside_ip = outside_object except core.AddrFormatError: outside_object_command = [ 'show run object id ' + outside_object ] outside_object_response = run_commands( module, outside_object_command) outside_ip = outside_object_response[0].splitlines( )[1].strip() if source_object == 'any': inside_ip = source_object else: inside_object_command = [ 'show run object id ' + source_object ] inside_object_response = run_commands( module, inside_object_command) inside_ip = inside_object_response[0].splitlines( )[1].strip() nats.append({ 'type': type, 'zone': zone, 'source_object': source_object, 'outside_object': outside_object, 'outside_ip': outside_ip, 'inside_ip': inside_ip }) for item in list(conditionals): if item(outside_response): if match == 'any': conditionals = list() break conditionals.remove(item) if not conditionals: break time.sleep(interval) retries -= 1 if conditionals: failed_conditions = [item.raw for item in conditionals] msg = 'One or more conditional statements have not be satisfied' module.fail_json(msg=msg, failed_conditions=failed_conditions) result.update({'changed': False, 'results': nats}) module.exit_json(**result)
def main(): spec = dict(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'), gather_subset=dict(default=['!config'], type='list')) spec.update(asa_argument_spec) module = AnsibleModule(argument_spec=spec, supports_check_mode=True) warnings = list() check_args(module) wait_for = module.params['wait_for'] or list() conditionals = [Conditional(c) for c in wait_for] gather_subset = module.params['gather_subset'] retries = module.params['retries'] interval = module.params['interval'] match = module.params['match'] runable_subsets = set() exclude_subsets = set() for subset in gather_subset: if subset == 'all': runable_subsets.update(VALID_SUBSETS) continue if subset.startswith('!'): subset = subset[1:] if subset == 'all': exclude_subsets.update(VALID_SUBSETS) continue exclude = True else: exclude = False if subset not in VALID_SUBSETS: module.fail_json(msg='Bad subset') if exclude: exclude_subsets.add(subset) else: runable_subsets.add(subset) if not runable_subsets: runable_subsets.update(VALID_SUBSETS) runable_subsets.difference_update(exclude_subsets) runable_subsets.add('default') facts = dict() facts['gather_subset'] = list(runable_subsets) instances = list() for key in runable_subsets: instances.append(FACT_SUBSETS[key](module)) for inst in instances: #results = dict() #results['result'] = inst.populate() #module.exit_json(**results) inst.populate() facts.update(inst.facts) warnings.extend(inst.warnings) ansible_facts = dict() for key, value in iteritems(facts): # this is to maintain capability with nxos_facts 2.1 if key.startswith('_'): ansible_facts[key[1:]] = value else: key = 'ansible_net_%s' % key ansible_facts[key] = value module.exit_json(ansible_facts=ansible_facts, warnings=warnings)
def main(): spec = dict( # { command: <str>, prompt: <str>, response: <str> } count=dict(type="int"), size=dict(type="size"), dest=dict(type="str", required=True), interface=dict(type="str"), data=dict(type="str"), timeout=dict(type="str"), validate=dict(type="bool"), state=dict(type="str", choices=["absent", "present"], default="present"), 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')) spec.update(asa_argument_spec) module = AnsibleModule(argument_spec=spec, supports_check_mode=True) check_args(module) result = {'changed': False} wait_for = module.params['wait_for'] or list() conditionals = [Conditional(c) for c in wait_for] count = module.params['count'] dest = module.params['dest'] interface = module.params['interface'] data = module.params['data'] size = module.params['size'] validate = module.params['validate'] timeout = module.params['timeout'] retries = module.params['retries'] interval = module.params['interval'] match = module.params['match'] while retries > 0: cmds = [] try: dest_ping = IPSet([IPNetwork(dest)]) for dst in dest_ping: cmds.append( build_ping(str(dst), count, interface, data, size, timeout, validate)) except core.AddrFormatError: cmds.append( build_ping(dest, count, interface, data, size, timeout, validate)) result["commands"] = cmds ping_results = run_commands(module, commands=result["commands"]) result["results"] = [] for ping_result in ping_results: destination_result = {} ping_results_list = ping_result.splitlines() stats = "" for line in ping_results_list: if line.startswith('Success'): stats = line elif line.startswith('Sending'): destination_result['destination'] = line.split( ',')[1].split('to')[1] if stats: success, rx, tx, rtt = parse_ping(stats) loss = abs(100 - int(success)) destination_result["packet_loss"] = str(loss) + "%" destination_result["packets_rx"] = int(rx) destination_result["packets_tx"] = int(tx) # Convert rtt values to int for k, v in rtt.items(): if rtt[k] is not None: rtt[k] = int(v) destination_result["rtt"] = rtt destination_result["msg"] = validate_results( module, loss, result) result["results"].append(destination_result) for item in list(conditionals): if item(inside_response): if match == 'any': conditionals = list() break conditionals.remove(item) if not conditionals: break time.sleep(interval) retries -= 1 if conditionals: failed_conditions = [item.raw for item in conditionals] msg = 'One or more conditional statements have not be satisfied' module.fail_json(msg=msg, failed_conditions=failed_conditions) module.exit_json(**result)
def main(): spec = dict( # { command: <str>, prompt: <str>, response: <str> } zone=dict(type='str'), ip=dict(type='str'), mac=dict(type='str'), 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')) spec.update(asa_argument_spec) module = AnsibleModule(argument_spec=spec, supports_check_mode=True) check_args(module) result = {'changed': False} wait_for = module.params['wait_for'] or list() conditionals = [Conditional(c) for c in wait_for] zone = module.params['zone'] ip = module.params['ip'] mac = module.params['mac'] retries = module.params['retries'] interval = module.params['interval'] match = module.params['match'] arps = {} zones = [] while retries > 0: command = build_cmd(zone, ip, mac) response = run_commands(module, command) responses = response[0].splitlines() for p in responses: # Split the response to get the zone, ip, and mac address z = p.split()[0] ip = p.split()[1] mac = p.split()[2] if z in zones: arps[z].append({'ip': ip, 'mac_address': mac}) else: zones.append(z) newzone = {z: [{'ip': ip, 'mac_address': mac}]} arps.update(newzone) for item in list(conditionals): if item(inside_response): if match == 'any': conditionals = list() break conditionals.remove(item) if not conditionals: break time.sleep(interval) retries -= 1 if conditionals: failed_conditions = [item.raw for item in conditionals] msg = 'One or more conditional statements have not be satisfied' module.fail_json(msg=msg, failed_conditions=failed_conditions) result.update({'changed': False, 'results': arps}) module.exit_json(**result)