Beispiel #1
0
def main():
    '''
    Ansible module to configure DNS on AOS-CX switch
    '''
    module_args = dict(mgmt_nameservers=dict(type='dict', required=False),
                       dns_domain_list=dict(type='dict', required=False),
                       dns_domain_name=dict(type='str', required=False),
                       dns_name_servers=dict(type='dict', required=False),
                       vrf=dict(type='str', required=False),
                       dns_host_v4_address_mapping=dict(type='dict',
                                                        required=False),
                       state=dict(type='str',
                                  default='create',
                                  choices=['create', 'delete', 'update']))

    # Version management
    try:
        from ansible.module_utils.aoscx_pyaoscx import Session
        from pyaoscx.session import Session as Pyaoscx_Session
        from pyaoscx.device import Device

        USE_PYAOSCX_SDK = True

    except ImportError:
        USE_PYAOSCX_SDK = False

    # Use PYAOSCX SDK
    if USE_PYAOSCX_SDK:
        from ansible.module_utils.basic import AnsibleModule

        # ArubaModule
        ansible_module = AnsibleModule(argument_spec=module_args,
                                       supports_check_mode=True)

        # Session
        session = Session(ansible_module)
        # Set Variables
        mgmt_nameservers = ansible_module.params['mgmt_nameservers']
        dns_domain_name = ansible_module.params['dns_domain_name']
        dns_domain_list = ansible_module.params['dns_domain_list']
        vrf_name = ansible_module.params['vrf']
        dns_name_servers = ansible_module.params['dns_name_servers']
        dns_host_v4_address_mapping = ansible_module.params[
            'dns_host_v4_address_mapping']
        state = ansible_module.params['state']

        result = dict(changed=False)

        if ansible_module.check_mode:
            ansible_module.exit_json(**result)

        # Get session serialized information
        session_info = session.get_session()
        # Create pyaoscx.session object
        s = Pyaoscx_Session.from_session(session_info['s'],
                                         session_info['url'])

        # Create a Device Object
        device = Device(s)

        if state == 'delete':
            # Modifed Variables
            modified_op = False
            modified_op2 = False

            # Create DNS object
            dns = device.dns(vrf=vrf_name)

            # Delete MGMT nameservers
            if mgmt_nameservers is not None:
                # Delete it
                modified_op = dns.delete_mgmt_nameservers()

            # Delete DNS
            dns.delete_dns(
                dns_domain_name,
                dns_domain_list,
                dns_name_servers,
                dns_host_v4_address_mapping,
            )
            # Check if dns was modified
            modified_op2 = dns.was_modified()

            # Changed
            result['changed'] = modified_op or modified_op2

        if state == 'create' or state == 'update':
            # Modifed Variables
            modified_op = False
            modified_op2 = False

            # Create DNS object
            dns = device.dns(
                vrf=vrf_name,
                domain_name=dns_domain_name,
                domain_list=dns_domain_list,
                domain_servers=dns_name_servers,
                host_v4_address_mapping=dns_host_v4_address_mapping)

            # Check if dns was modified
            modified_op = dns.was_modified()

            # Set MGMT name servers
            if mgmt_nameservers is not None:
                primary = None
                secondary = None
                # Get Primary and Secondary
                for key, value in mgmt_nameservers.items():
                    if key.lower() == 'primary':
                        primary = value
                    elif key.lower() == 'secondary':
                        secondary = value
                # Set up
                modified_op2 = dns.setup_mgmt_nameservers(primary=primary,
                                                          secondary=secondary)

            # Changed
            result['changed'] = modified_op or modified_op2

        # Exit
        ansible_module.exit_json(**result)

    # Use Older version
    else:

        aruba_ansible_module = ArubaAnsibleModule(module_args)

        mgmt_nameservers = aruba_ansible_module.module.params[
            'mgmt_nameservers']
        dns_domain_name = aruba_ansible_module.module.params['dns_domain_name']
        dns_domain_list = aruba_ansible_module.module.params['dns_domain_list']
        vrf_name = aruba_ansible_module.module.params['vrf']
        dns_name_servers = aruba_ansible_module.module.params[
            'dns_name_servers']
        dns_host_v4_address_mapping = aruba_ansible_module.module.params[
            'dns_host_v4_address_mapping']
        state = aruba_ansible_module.module.params['state']

        vrf = VRF()

        if state == 'create' or state == 'update':
            if mgmt_nameservers is not None:
                if 'mode' in aruba_ansible_module.running_config['System'][
                        'mgmt_intf']:
                    mgmt_if_mode = aruba_ansible_module.running_config[
                        'System']['mgmt_intf']['mode']
                else:
                    mgmt_if_mode = 'dhcp'

                if mgmt_if_mode != 'static':
                    message_part1 = "The management interface must have static"
                    message_part2 = "IP to configure management interface name servers"
                    aruba_ansible_module.module.fail_json(msg=message_part1 +
                                                          message_part2)

                for key, value in mgmt_nameservers.items():
                    if key.lower() == 'primary':
                        aruba_ansible_module.running_config['System'][
                            'mgmt_intf']['dns_server_1'] = value
                    elif key.lower() == 'secondary':
                        aruba_ansible_module.running_config['System'][
                            'mgmt_intf']['dns_server_2'] = value

            if vrf_name is None:
                vrf_name = 'default'

            if not vrf.check_vrf_exists(aruba_ansible_module, vrf_name):
                aruba_ansible_module.module.fail_json(
                    msg="VRF {vrf} is not configured".format(vrf=vrf_name))
                return aruba_ansible_module

            if dns_domain_name is not None:
                aruba_ansible_module = vrf.update_vrf_fields(
                    aruba_ansible_module, vrf_name, "dns_domain_name",
                    dns_domain_name)

            if dns_domain_list is not None:
                aruba_ansible_module = vrf.update_vrf_fields(
                    aruba_ansible_module, vrf_name, "dns_domain_list",
                    dns_domain_list)

            if dns_name_servers is not None:
                aruba_ansible_module = vrf.update_vrf_fields(
                    aruba_ansible_module, vrf_name, "dns_name_servers",
                    dns_name_servers)

            if dns_host_v4_address_mapping is not None:
                aruba_ansible_module = vrf.update_vrf_fields(
                    aruba_ansible_module, vrf_name,
                    "dns_host_v4_address_mapping", dns_host_v4_address_mapping)

        if state == 'delete':

            if vrf_name is None:
                vrf_name = 'default'

            if not vrf.check_vrf_exists(aruba_ansible_module, vrf_name):
                aruba_ansible_module.warnings.append(
                    "VRF {vrf} is not configured"
                    "".format(vrf=vrf_name))
                return aruba_ansible_module

            if mgmt_nameservers is not None:

                for k in mgmt_nameservers.keys():
                    if k.lower() == 'primary':
                        aruba_ansible_module.running_config['System'][
                            'mgmt_intf'].pop('dns_server_1')
                    elif k.lower() == 'secondary':
                        aruba_ansible_module.running_config['System'][
                            'mgmt_intf'].pop('dns_server_2')

            if dns_domain_name is not None:
                aruba_ansible_module = vrf.delete_vrf_field(
                    aruba_ansible_module, vrf_name, "dns_domain_name",
                    dns_domain_name)

            if dns_domain_list is not None:
                aruba_ansible_module = vrf.delete_vrf_field(
                    aruba_ansible_module, vrf_name, "dns_domain_list",
                    dns_domain_list)

            if dns_name_servers is not None:
                aruba_ansible_module = vrf.delete_vrf_field(
                    aruba_ansible_module, vrf_name, "dns_name_servers",
                    dns_name_servers)

            if dns_host_v4_address_mapping is not None:
                aruba_ansible_module = vrf.delete_vrf_field(
                    aruba_ansible_module, vrf_name,
                    "dns_host_v4_address_mapping", dns_host_v4_address_mapping)

        aruba_ansible_module.update_switch_config()
Beispiel #2
0
def main():
    '''
    Ansible module to configure DNS on AOS-CX switch
    '''
    module_args = dict(mgmt_nameservers=dict(type='dict', required=False),
                       dns_domain_list=dict(type='dict', required=False),
                       dns_domain_name=dict(type='str', required=False),
                       dns_name_servers=dict(type='dict', required=False),
                       vrf=dict(type='str', required=False),
                       dns_host_v4_address_mapping=dict(type='dict',
                                                        required=False),
                       state=dict(type='str',
                                  default='create',
                                  choices=['create', 'delete', 'update']))

    aruba_ansible_module = ArubaAnsibleModule(module_args)

    mgmt_nameservers = aruba_ansible_module.module.params['mgmt_nameservers']
    dns_domain_name = aruba_ansible_module.module.params['dns_domain_name']
    dns_domain_list = aruba_ansible_module.module.params['dns_domain_list']
    vrf_name = aruba_ansible_module.module.params['vrf']
    dns_name_servers = aruba_ansible_module.module.params['dns_name_servers']
    dns_host_v4_address_mapping = aruba_ansible_module.module.params[
        'dns_host_v4_address_mapping']
    state = aruba_ansible_module.module.params['state']

    vrf = VRF()

    if state == 'create' or state == 'update':
        if mgmt_nameservers is not None:
            if 'mode' in aruba_ansible_module.running_config['System'][
                    'mgmt_intf']:
                mgmt_if_mode = aruba_ansible_module.running_config['System'][
                    'mgmt_intf']['mode']
            else:
                mgmt_if_mode = 'dhcp'

            if mgmt_if_mode != 'static':
                message_part1 = "The management interface must have static"
                message_part2 = "IP to configure management interface name servers"
                aruba_ansible_module.module.fail_json(msg=message_part1 +
                                                      message_part2)

            for key, value in mgmt_nameservers.items():
                if key.lower() == 'primary':
                    aruba_ansible_module.running_config['System']['mgmt_intf'][
                        'dns_server_1'] = value
                elif key.lower() == 'secondary':
                    aruba_ansible_module.running_config['System']['mgmt_intf'][
                        'dns_server_2'] = value

        if vrf_name is None:
            vrf_name = 'default'

        if not vrf.check_vrf_exists(aruba_ansible_module, vrf_name):
            aruba_ansible_module.module.fail_json(
                msg="VRF {vrf} is not configured".format(vrf=vrf_name))
            return aruba_ansible_module

        if dns_domain_name is not None:
            aruba_ansible_module = vrf.update_vrf_fields(
                aruba_ansible_module, vrf_name, "dns_domain_name",
                dns_domain_name)

        if dns_domain_list is not None:
            aruba_ansible_module = vrf.update_vrf_fields(
                aruba_ansible_module, vrf_name, "dns_domain_list",
                dns_domain_list)

        if dns_name_servers is not None:
            aruba_ansible_module = vrf.update_vrf_fields(
                aruba_ansible_module, vrf_name, "dns_name_servers",
                dns_name_servers)

        if dns_host_v4_address_mapping is not None:
            aruba_ansible_module = vrf.update_vrf_fields(
                aruba_ansible_module, vrf_name, "dns_host_v4_address_mapping",
                dns_host_v4_address_mapping)

    if state == 'delete':

        if vrf_name is None:
            vrf_name = 'default'

        if not vrf.check_vrf_exists(aruba_ansible_module, vrf_name):
            aruba_ansible_module.warnings.append("VRF {vrf} is not configured"
                                                 "".format(vrf=vrf_name))
            return aruba_ansible_module

        if mgmt_nameservers is not None:

            for k in mgmt_nameservers.keys():
                if k.lower() == 'primary':
                    aruba_ansible_module.running_config['System'][
                        'mgmt_intf'].pop('dns_server_1')
                elif k.lower() == 'secondary':
                    aruba_ansible_module.running_config['System'][
                        'mgmt_intf'].pop('dns_server_2')

        if dns_domain_name is not None:
            aruba_ansible_module = vrf.delete_vrf_field(
                aruba_ansible_module, vrf_name, "dns_domain_name",
                dns_domain_name)

        if dns_domain_list is not None:
            aruba_ansible_module = vrf.delete_vrf_field(
                aruba_ansible_module, vrf_name, "dns_domain_list",
                dns_domain_list)

        if dns_name_servers is not None:
            aruba_ansible_module = vrf.delete_vrf_field(
                aruba_ansible_module, vrf_name, "dns_name_servers",
                dns_name_servers)

        if dns_host_v4_address_mapping is not None:
            aruba_ansible_module = vrf.delete_vrf_field(
                aruba_ansible_module, vrf_name, "dns_host_v4_address_mapping",
                dns_host_v4_address_mapping)

    aruba_ansible_module.update_switch_config()