Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #4
0
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)
Beispiel #5
0
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)
Beispiel #7
0
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)