コード例 #1
0
    def update_interface_vrf_details_from_l3(self,
                                             aruba_ansible_module,
                                             vrf_name,
                                             interface_name,
                                             update_type="insert"):
        port = Port()
        vrf = VRF()
        if not port.check_port_exists(aruba_ansible_module, interface_name):
            aruba_ansible_module.module.fail_json(
                msg="Interface {} is not configured".format(interface_name))

        result = port.get_port_field_values(aruba_ansible_module,
                                            interface_name, ['vrf'])
        if 'vrf' in result.keys():
            if result['vrf'] != "" and result['vrf'] != vrf_name:
                aruba_ansible_module.module.fail_json(msg=(
                    "Interface {} is attached to VRF {}. Delete interface and recreate with VRF {}"
                    .format(interface_name, result['vrf'], vrf_name)))

        if not vrf.check_vrf_exists(aruba_ansible_module, vrf_name):
            if vrf_name != "default":
                aruba_ansible_module.module.fail_json(
                    msg="VRF {} does not exist".format(vrf_name))
            aruba_ansible_module = vrf.create_vrf(aruba_ansible_module,
                                                  vrf_name)

        port_field = {"vrf": vrf_name}

        aruba_ansible_module = port.update_port_fields(aruba_ansible_module,
                                                       interface_name,
                                                       port_field)

        return aruba_ansible_module
コード例 #2
0
    def update_interface_ipv6_address(self, aruba_ansible_module,
                                      interface_name, ipv6):
        port = Port()
        port_fields = {}
        ip6_addresses = {}

        if ipv6 == ['']:
            aruba_ansible_module = port.delete_port_fields(
                aruba_ansible_module, interface_name,
                ['ip6_addresses'])  # NOQA
            return aruba_ansible_module

        for item in ipv6:
            ip6_addresses[item] = {
                "node_address": True,
                "preferred_lifetime": 604800,
                "ra_prefix": True,
                "type": "global-unicast",
                "valid_lifetime": 2592000
            }

        port_fields["ip6_addresses"] = ip6_addresses

        aruba_ansible_module = port.update_port_fields(aruba_ansible_module,
                                                       interface_name,
                                                       port_fields)

        return aruba_ansible_module
コード例 #3
0
    def update_interface_vlan_details(self,
                                      aruba_ansible_module,
                                      interface_name,
                                      vlan_details,
                                      update_type='insert'):
        port = Port()
        interface = L2_Interface()

        if not interface.check_if_l2_interface_possible(
                aruba_ansible_module, interface_name):
            aruba_ansible_module.module.fail_json(
                msg="Interface {int} is "
                "configured as an L3 "
                "interface. Delete "
                "interface then "
                "configure as L2."
                "".format(int=interface_name)  # NOQA
            )  # NOQA
        if not port.check_port_exists(aruba_ansible_module, interface_name):
            aruba_ansible_module.module.fail_json(
                msg="Interface {int} is not configured".format(
                    int=interface_name))  # NOQA

        if (update_type == 'insert') or (update_type == 'insert'):
            aruba_ansible_module = port.update_port_fields(
                aruba_ansible_module, interface_name, vlan_details)  # NOQA
        elif update_type == 'delete':
            vlan_fields = []
            for key in vlan_fields:
                vlan_fields.append(key)
            aruba_ansible_module = port.delete_port_fields(
                aruba_ansible_module, interface_name, vlan_fields)  # NOQA

        return aruba_ansible_module
コード例 #4
0
    def create_l3_interface(self, aruba_ansible_module, interface_name):
        if self.check_if_l3_interface_possible(aruba_ansible_module,
                                               interface_name):
            interface = Interface()
            port = Port()
            aruba_ansible_module = interface.create_interface(
                aruba_ansible_module, interface_name, type='l3')  # NOQA
            aruba_ansible_module = port.create_port(aruba_ansible_module,
                                                    interface_name)
            encoded_interface_name = interface_name.replace("/", "%2F")
            interfaces = [encoded_interface_name]
            port_fields = {"interfaces": interfaces, "routing": True}
            aruba_ansible_module = port.update_port_fields(
                aruba_ansible_module, interface_name, port_fields)  # NOQA
        else:
            aruba_ansible_module.module.fail_json(
                msg="Interface {int} is "
                "currently "
                "an L2 interface. "
                "Delete "
                "interface then "
                "configure as"
                " L3."
                "".format(int=interface_name)  # NOQA
            )

        return aruba_ansible_module
コード例 #5
0
 def update_interface_qos_profile(self,
                                  aruba_ansible_module,
                                  interface_name,
                                  qos_profile_details,
                                  update_type='insert'):
     port = Port()
     if (update_type == 'insert') or (update_type == 'update'):
         if 'QoS' not in aruba_ansible_module.running_config.keys():
             aruba_ansible_module.module.fail_json(
                 msg="Qos schedule "
                 "profile being "
                 "attached to "
                 "interface {int} is "
                 "not configured"
                 "".format(int=interface_name)  # NOQA
             )  # NOQA
         elif qos_profile_details not in aruba_ansible_module.running_config[
                 'QoS'].keys():  # NOQA
             aruba_ansible_module.module.fail_json(
                 msg="Qos schedule "
                 "profile "
                 "being attached to "
                 "interface {int} "
                 "is not "
                 "configured"
                 "".format(int=interface_name)  # NOQA
             )  # NOQA
         else:
             port_fields = {'qos': qos_profile_details}
             aruba_ansible_module = port.update_port_fields(
                 aruba_ansible_module, interface_name, port_fields)  # NOQA
             return aruba_ansible_module
コード例 #6
0
 def delete_l3_interface(self, aruba_ansible_module, interface_name):
     interface = Interface()
     port = Port()
     aruba_ansible_module = interface.delete_interface(
         aruba_ansible_module, interface_name)
     aruba_ansible_module = port.delete_port(aruba_ansible_module,
                                             interface_name)
     return aruba_ansible_module
コード例 #7
0
 def check_if_l3_interface_possible(self, aruba_ansible_module, interface_name):
     port = Port()
     if port.check_port_exists(aruba_ansible_module, interface_name):
         result = port.get_port_field_values(aruba_ansible_module, interface_name, ['vlan_tag', 'vrf'])
         if result.has_key('vrf'):
             return True
         if result.has_key('vlan_tag'):
             return False
         else:
             return True
     else:
         return True
コード例 #8
0
 def update_interface_qos_profile(self, aruba_ansible_module, interface_name, qos_profile_details, update_type='insert'):
     port = Port()
     if (update_type == 'insert') or (update_type == 'update'):
         if not aruba_ansible_module.running_config.has_key('QoS'):
             aruba_ansible_module.module.fail_json("Qos schedule profile being attached to interface {} is not configured".format(interface_name))
         elif not aruba_ansible_module.running_config['QoS'].has_key(qos_profile_details):
             aruba_ansible_module.module.fail_json("Qos schedule profile being attached to interface {} is not configured".format(interface_name))
         else:
             port_fields = {
                 'qos' : qos_profile_details
             }
             aruba_ansible_module = port.update_port_fields(aruba_ansible_module, interface_name, port_fields)
             return aruba_ansible_module
コード例 #9
0
 def check_if_l2_interface_possible(self, aruba_ansible_module, interface_name):
     port = Port()
     if port.check_port_exists(aruba_ansible_module, interface_name):
         result = port.get_port_field_values(aruba_ansible_module, interface_name, ['vrf'])
         if 'vrf' in result.keys():
             if result['vrf'] != "":
                 return False
             else:
                 return True
         else:
             return True
     else:
         return True
コード例 #10
0
    def update_interface_qos_rate(self, aruba_ansible_module, interface_name, qos_rate):
        port = Port()
        rate_limits = {}
        if qos_rate is not None:
            for k, v in qos_rate.items():
                number, unit = number_unit(v)
                rate_limits[k] = number
                rate_limits[k + '_units'] = unit

            port_fields = {
                "rate_limits" : rate_limits
            }
        aruba_ansible_module = port.update_port_fields(aruba_ansible_module, interface_name, port_fields)
        return aruba_ansible_module
コード例 #11
0
    def create_l3_interface(self, aruba_ansible_module, interface_name):
        if self.check_if_l3_interface_possible(aruba_ansible_module, interface_name):
            interface = Interface()
            port = Port()
            aruba_ansible_module = interface.create_interface(aruba_ansible_module, interface_name)
            aruba_ansible_module = port.create_port(aruba_ansible_module, interface_name)
            encoded_interface_name = interface_name.replace("/", "%2F")
            interfaces = [encoded_interface_name]
            port_fields = {
                "interfaces" : interfaces
            }
            aruba_ansible_module = port.update_port_fields(aruba_ansible_module, interface_name, port_fields)
        else:
            aruba_ansible_module.module.fail_json("Interface {} is currently an L2 interface".format(interface_name))

        return aruba_ansible_module
コード例 #12
0
    def update_interface_ipv4_address(self, aruba_ansible_module, interface_name, ipv4):
        port = Port()
        port_fields = {}
        if ipv4 == ['']:
            aruba_ansible_module = port.delete_port_fields(aruba_ansible_module, interface_name, ['ip4_address'])
            return aruba_ansible_module

        port_fields["ip4_address"] = ipv4[0]
        if len(ipv4) > 2:
            port_fields["ip4_address_secondary"] = []
            for item in ipv4[1:]:
                    port_fields["ip4_address_secondary"].append(item)
        elif len(ipv4) == 2:
                port_fields["ip4_address_secondary"] = ipv4[1]
        aruba_ansible_module = port.update_port_fields(aruba_ansible_module, interface_name, port_fields)

        return aruba_ansible_module
コード例 #13
0
    def update_interface_vrf_details_from_l3(self, aruba_ansible_module, vrf_name, interface_name, update_type="insert"):
        port = Port()
        vrf = VRF()
        if not port.check_port_exists(aruba_ansible_module, interface_name):
            aruba_ansible_module.module.fail_json(msg="Interface {} is not configured".format(interface_name))

        if not vrf.check_vrf_exists(aruba_ansible_module, vrf_name):
            if vrf_name != "default":
                aruba_ansible_module.module.fail_json(msg="VRF {} does not exist".format(vrf_name))
            aruba_ansible_module = vrf.create_vrf(aruba_ansible_module, vrf_name)

        port_field = {
            "vrf" : vrf_name
        }

        aruba_ansible_module = port.update_port_fields(aruba_ansible_module, interface_name, port_field)

        return aruba_ansible_module
コード例 #14
0
    def update_interface_admin_state(self, aruba_ansible_module, interface_name, admin_state):

        port = Port()
        interface = Interface()
        user_config = {
            "admin" : admin_state,
        }
        interface_fields = {
            "user_config": user_config
        }

        port_fields = {
            "admin": admin_state
        }

        aruba_ansible_module = port.update_port_fields(aruba_ansible_module, interface_name,port_fields)
        aruba_ansible_module = interface.update_interface_fields(aruba_ansible_module, interface_name, interface_fields)

        return aruba_ansible_module
コード例 #15
0
    def create_l2_interface(self, aruba_ansible_module, interface_name):
        if self.check_if_l2_interface_possible(aruba_ansible_module,
                                               interface_name):
            interface = Interface()
            port = Port()
            aruba_ansible_module = interface.create_interface(
                aruba_ansible_module, interface_name)
            aruba_ansible_module = port.create_port(aruba_ansible_module,
                                                    interface_name)
            encoded_interface_name = interface_name.replace("/", "%2F")
            interfaces = [encoded_interface_name]
            port_fields = {"interfaces": interfaces, "routing": False}
            aruba_ansible_module = port.update_port_fields(
                aruba_ansible_module, interface_name, port_fields)
        else:
            aruba_ansible_module.module.fail_json(
                msg=
                "Interface {} is currently an L3 interface. Delete interface then configure as L2."
                .format(interface_name))

        return aruba_ansible_module
コード例 #16
0
    def update_interface_acl_details(self, aruba_ansible_module, interface_name, acl_name, acl_type, acl_direction, update_type="insert"):
        port = Port()

        acl_type_prefix = ""
        if acl_type == "ipv4":
            acl_type_prefix = "aclv4"
        elif acl_type == "ipv6":
            acl_type_prefix = "aclv6"
        elif acl_type == "mac":
            acl_type_prefix = "aclmac"

        field1 = '{}_{}_cfg'.format(acl_type_prefix, acl_direction)
        value1 = '{}/{}'.format(acl_name, acl_type)

        field2 = '{}_{}_cfg_version'.format(acl_type_prefix, acl_direction)
        value2 = randint(-900719925474099, 900719925474099)

        port_fields = {
            field1: value1,
            field2: value2
        }

        if (update_type == "insert") or (update_type == "update"):
            exisitng_values = port.get_port_field_values(aruba_ansible_module, interface_name, [field1])

            if exisitng_values.has_key(field1):
                if (exisitng_values[field1] != port_fields[field1]):
                    aruba_ansible_module = port.update_port_fields(aruba_ansible_module, interface_name, port_fields)
            else:
                aruba_ansible_module = port.update_port_fields(aruba_ansible_module, interface_name, port_fields)

        elif (update_type == 'delete'):
            aruba_ansible_module = port.delete_port_fields(aruba_ansible_module, interface_name, [field1, field2])

        return aruba_ansible_module
コード例 #17
0
    def update_interface_vrf_details_from_vrf(self,
                                              aruba_ansible_module,
                                              vrf_name,
                                              interface_name,
                                              update_type="insert"):
        port = Port()
        vrf = VRF()
        if not port.check_port_exists(aruba_ansible_module, interface_name):
            aruba_ansible_module.module.fail_json(
                msg="Interface {int} is not "
                "configured"
                "".format(int=interface_name)  # NOQA
            )

        result = port.get_port_field_values(aruba_ansible_module,
                                            interface_name, ['vrf'])
        if 'vrf' in result.keys():
            if result['vrf'] != "" and result['vrf'] != vrf_name:
                aruba_ansible_module.module.fail_json(
                    msg=("Interface {int} is attached to VRF {vrf}. "
                         "Delete interface"
                         " and recreate with VRF "
                         "{vrf_name}".format(int=interface_name,
                                             vrf=result['vrf'],
                                             vrf_name=vrf_name)))

        if not vrf.check_vrf_exists(aruba_ansible_module, vrf_name):
            if vrf_name != "default":
                aruba_ansible_module.module.fail_json(
                    msg="VRF {vrf} does not "
                    "exist"
                    "".format(vrf=vrf_name))  # NOQA
            aruba_ansible_module = vrf.create_vrf(aruba_ansible_module,
                                                  vrf_name)

        port_field = {"vrf": vrf_name}

        aruba_ansible_module = port.update_port_fields(aruba_ansible_module,
                                                       interface_name,
                                                       port_field)
        try:
            aruba_ansible_module = port.delete_port_fields(
                aruba_ansible_module, interface_name, ['ip4_address'])  # NOQA
            aruba_ansible_module = port.delete_port_fields(
                aruba_ansible_module, interface_name, ['ip6_address'])  # NOQA
        except Exception:
            pass

        return aruba_ansible_module
コード例 #18
0
    def delete_vlan(self, aruba_ansible_module, vlan_id):

        port = Port()
        interface = Interface()

        interface_vlan_id = "vlan{id}".format(id=vlan_id)

        if not self.check_vlan_exist(aruba_ansible_module, vlan_id):
            aruba_ansible_module.warnings.append("VLAN ID {id} is not "
                                                 "configured"
                                                 "".format(id=vlan_id))
            return aruba_ansible_module

        if interface.check_interface_exists(aruba_ansible_module,
                                            interface_vlan_id):
            aruba_ansible_module.module.fail_json(msg="VLAN ID {id} is "
                                                  "configured as interface"
                                                  " VLAN"
                                                  "".format(id=vlan_id))
            return aruba_ansible_module

        port_list = port.get_configured_port_list(aruba_ansible_module)

        vlan_port_fields = [
            "vlan_tag", "vlan_mode", "vlans_per_protocol", "vlan_trunks"
        ]

        vlan_id_str = str(vlan_id)

        for port_name in port_list:

            vlan_field_values = port.get_port_field_values(
                aruba_ansible_module, port_name, vlan_port_fields)  # NOQA

            if vlan_field_values["vlan_tag"] == vlan_id_str:
                aruba_ansible_module = port.update_port_fields(
                    aruba_ansible_module, port_name, {"vlan_tag": "1"})  # NOQA

            if vlan_id_str in vlan_field_values["vlan_trunks"] and type(
                    vlan_field_values["vlan_trunks"]) is list:  # NOQA
                vlan_field_values["vlan_trunks"].remove(vlan_id_str)
                aruba_ansible_module = port.update_port_fields(
                    aruba_ansible_module, port_name,
                    {"vlan_trunks": vlan_field_values["vlan_trunks"]})  # NOQA

        aruba_ansible_module.running_config["VLAN"].pop(vlan_id_str)

        return aruba_ansible_module
コード例 #19
0
    def update_interface_acl_details(self,
                                     aruba_ansible_module,
                                     interface_name,
                                     acl_name,
                                     acl_type,
                                     acl_direction,
                                     update_type="insert"):
        port = Port()

        acl_type_prefix = ""
        if acl_type == "ipv4":
            acl_type_prefix = "aclv4"
        elif acl_type == "ipv6":
            acl_type_prefix = "aclv6"
        elif acl_type == "mac":
            acl_type_prefix = "aclmac"

        field1 = '{type}_{dir}_cfg'.format(type=acl_type_prefix,
                                           dir=acl_direction)
        value1 = '{name}/{type}'.format(name=acl_name, type=acl_type)

        field2 = '{type}_{dir}_cfg_version'.format(type=acl_type_prefix,
                                                   dir=acl_direction)
        value2 = randint(-900719925474099, 900719925474099)

        port_fields = {field1: value1, field2: value2}

        if (update_type == "insert") or (update_type == "update"):
            exisitng_values = port.get_port_field_values(
                aruba_ansible_module, interface_name, [field1])

            if field1 in exisitng_values.keys():
                if exisitng_values[field1] != port_fields[field1]:
                    aruba_ansible_module = port.update_port_fields(
                        aruba_ansible_module, interface_name,
                        port_fields)  # NOQA
            else:
                aruba_ansible_module = port.update_port_fields(
                    aruba_ansible_module, interface_name, port_fields)  # NOQA

        elif update_type == 'delete':
            aruba_ansible_module = port.delete_port_fields(
                aruba_ansible_module, interface_name, [field1, field2])  # NOQA

        return aruba_ansible_module
コード例 #20
0
def main():
    module_args = dict(acl_name=dict(type='str', required=True),
                       acl_type=dict(type='str',
                                     required=True,
                                     choices=['ipv4', 'ipv6', 'mac']),
                       acl_interface_list=dict(type='list', required=True),
                       acl_direction=dict(type='str',
                                          default='in',
                                          choices=['in', 'out']),
                       state=dict(type='str',
                                  default='create',
                                  choices=['create', 'delete']))

    aruba_ansible_module = ArubaAnsibleModule(module_args)

    acl_name = aruba_ansible_module.module.params['acl_name']
    acl_interface_list = aruba_ansible_module.module.params[
        'acl_interface_list']  # NOQA
    acl_type = aruba_ansible_module.module.params['acl_type']
    acl_direction = aruba_ansible_module.module.params['acl_direction']
    state = aruba_ansible_module.module.params['state']

    interface = Interface()
    port = Port()

    for interface_name in acl_interface_list:
        if not port.check_port_exists(aruba_ansible_module, interface_name):
            aruba_ansible_module.module.fail_json(
                msg="Interface {int} is not configured".format(
                    int=interface_name))

        if (state == 'create') or (state == 'update'):
            update_type = 'insert'
        elif (state == 'delete'):
            update_type = 'delete'
        aruba_ansible_module = interface.update_interface_acl_details(
            aruba_ansible_module, interface_name, acl_name, acl_type,
            acl_direction, update_type)

        if update_type == 'insert':
            aruba_ansible_module.module.log(
                msg="Attached ACL {acl} of type "
                "{type} to interface {int}"
                "".format(acl=acl_name, type=acl_type, int=interface_name))

        if update_type == 'update':
            aruba_ansible_module.module.log(msg="Updated ACL {acl} of type "
                                            "{type} attached to interface"
                                            " {int}"
                                            "".format(
                                                acl=acl_name,
                                                type=acl_type,
                                                int=interface_name))  # NOQA

        if (update_type == 'absent') or (update_type == 'delete'):
            aruba_ansible_module.module.log(
                msg="Removed ACL {acl} of type"
                " {type} from interface"
                " {int}"
                "".format(acl=acl_name, type=acl_type, int=interface_name))

    aruba_ansible_module.update_switch_config()
コード例 #21
0
def main():
    module_args = dict(
        vlan_id=dict(type='str', required=True),
        admin_state=dict(type='str', required=False, choices=['up', 'down']),
        state=dict(default='create', choices=['create', 'delete', 'update']),
        ipv4=dict(type='list', default=None),
        description=dict(type='str', default=None),
        ipv6=dict(type='list', default=None),
        vrf=dict(type='str', default=None),
        ip_helper_address=dict(type='list', default=None),
        active_gateway_ip=dict(type='str', default=None),
        active_gateway_mac_v4=dict(type='str', default=None),
    )

    # 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

    if USE_PYAOSCX_SDK:
        from ansible.module_utils.basic import AnsibleModule

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

        vlan_id = ansible_module.params['vlan_id']
        admin_state = ansible_module.params['admin_state']
        ipv4 = ansible_module.params['ipv4']
        ipv6 = ansible_module.params['ipv6']
        vrf = ansible_module.params['vrf']
        description = ansible_module.params['description']
        ip_helper_address = ansible_module.params['ip_helper_address']  # NOQA
        active_gateway_ip = ansible_module.params['active_gateway_ip']
        active_gateway_mac_v4 = ansible_module.params['active_gateway_mac_v4']
        state = ansible_module.params['state']

        # Set IP variable as empty arrays
        if ipv4 == ['']:
            ipv4 = []
        if ipv6 == ['']:
            ipv6 = []

        # Session
        session = Session(ansible_module)

        # Set variables
        vlan_interface_id = "vlan" + vlan_id
        if admin_state is None:
            admin_state = 'up'
        if vrf is not None:
            vrf_name = vrf
        else:
            vrf_name = "default"

        # Set result var
        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':
            # Create Interface Object
            vlan_interface = device.interface(vlan_interface_id)
            # Delete it
            vlan_interface.delete()
            # Changed
            result['changed'] = True

        if state == 'create' or state == 'update':
            # Create Interface with incoming attributes
            vlan_interface = device.interface(vlan_interface_id)
            # Verify if interface was create
            if vlan_interface.was_modified():
                # Changed
                result['changed'] = True

            # Configure SVI
            # Verify if object was changed
            modified_op = vlan_interface.configure_svi(vlan=int(vlan_id),
                                                       ipv4=ipv4,
                                                       ipv6=ipv6,
                                                       vrf=vrf,
                                                       description=description,
                                                       user_config=admin_state)

            if active_gateway_ip is not None and active_gateway_mac_v4 is not None:
                modified_op2 = vlan_interface.set_active_gateaway(
                    active_gateway_ip, active_gateway_mac_v4)
                modified_op = modified_op2 or modified_op

            if ip_helper_address is not None:
                # Create DHCP_Relay object
                dhcp_relay = device.dhcp_relay(vrf=vrf, port=vlan_interface_id)
                # Add helper addresses
                modified_dhcp_relay = dhcp_relay.add_ipv4_addresses(
                    ip_helper_address)
                modified_op = modified_op or modified_dhcp_relay

            if modified_op:
                # Changed
                result['changed'] = True

        # Exit
        ansible_module.exit_json(**result)

    # Use Older version
    else:
        aruba_ansible_module = ArubaAnsibleModule(module_args)

        vlan_id = aruba_ansible_module.module.params['vlan_id']
        admin_state = aruba_ansible_module.module.params['admin_state']
        ipv4 = aruba_ansible_module.module.params['ipv4']
        ipv6 = aruba_ansible_module.module.params['ipv6']
        vrf = aruba_ansible_module.module.params['vrf']
        description = aruba_ansible_module.module.params['description']
        ip_helper_address = aruba_ansible_module.module.params[
            'ip_helper_address']
        active_gateway_ip = aruba_ansible_module.module.params[
            'active_gateway_ip']
        active_gateway_mac_v4 = aruba_ansible_module.module.params[
            'active_gateway_mac_v4']  # NOQA
        state = aruba_ansible_module.module.params['state']

        vlan = VLAN()
        port = Port()
        interface = Interface()
        vlan_interface_id = "vlan" + vlan_id
        if not vlan.check_vlan_exist(aruba_ansible_module, vlan_id):
            aruba_ansible_module.module.fail_json(
                msg="VLAN {id} does not exist. "
                "VLAN needs to be created "
                "before adding or deleting "
                "interfaces"
                "".format(id=vlan_id))

        if state == 'create':
            aruba_ansible_module = port.create_port(aruba_ansible_module,
                                                    vlan_interface_id)
            aruba_ansible_module = interface.create_interface(
                aruba_ansible_module, vlan_interface_id, type='vlan')

            if admin_state is None:
                admin_state = 'up'

            user_config = {
                "admin": admin_state,
            }

            interface_fields = {
                "name": vlan_interface_id,
                "type": "vlan",
                "user_config": user_config
            }
            aruba_ansible_module = interface.update_interface_fields(
                aruba_ansible_module, vlan_interface_id,
                interface_fields)  # NOQA

            if vrf is not None:
                vrf_name = vrf
            else:
                vrf_name = "default"

            port_fields = {
                "interfaces": [vlan_interface_id],
                "vlan_tag": vlan_id,
                "vrf": vrf_name,
                "admin": admin_state
            }
            aruba_ansible_module = port.update_port_fields(
                aruba_ansible_module, vlan_interface_id, port_fields)

        if (state == 'create') or (state == 'update'):

            if not port.check_port_exists(aruba_ansible_module,
                                          vlan_interface_id):
                aruba_ansible_module.module.fail_json(
                    msg="VLAN interface does not"
                    " exist")

            if admin_state is not None:
                port_fields = {"admin": admin_state}
                user_config = {"admin": admin_state}
                interface_fields = {"user_config": user_config}

            aruba_ansible_module = port.update_port_fields(
                aruba_ansible_module, vlan_interface_id, port_fields)
            aruba_ansible_module = interface.update_interface_fields(
                aruba_ansible_module, vlan_interface_id,
                interface_fields)  # NOQA

            if description is not None:
                port_fields = {"description": description}

                aruba_ansible_module = port.update_port_fields(
                    aruba_ansible_module, vlan_interface_id,
                    port_fields)  # NOQA

            if ipv4 is not None:
                l3_interface = L3_Interface()
                aruba_ansible_module = l3_interface.update_interface_ipv4_address(
                    aruba_ansible_module, vlan_interface_id, ipv4)  # NOQA

            if ipv6 is not None:
                l3_interface = L3_Interface()
                aruba_ansible_module = l3_interface.update_interface_ipv6_address(
                    aruba_ansible_module, vlan_interface_id, ipv6)  # NOQA

            if ip_helper_address is not None:
                l3_interface = L3_Interface()
                if vrf is None:
                    vrf = "default"
                aruba_ansible_module = l3_interface.update_interface_ip_helper_address(
                    aruba_ansible_module, vrf, vlan_interface_id,
                    ip_helper_address)  # NOQA

            if vrf is not None:
                l3_interface = L3_Interface()
                aruba_ansible_module = l3_interface.update_interface_vrf_details_from_l3(
                    aruba_ansible_module,
                    vrf,
                    vlan_interface_id,
                    update_type="insert")  # NOQA

            if (active_gateway_ip
                    is not None) and (active_gateway_mac_v4 is None):
                aruba_ansible_module.module.fail_json(
                    msg=
                    " Both active_gateway_ip and active_gateway_mac_v4 are required for configure active gateway."
                )  # NOQA
            elif (active_gateway_ip is None) and (active_gateway_mac_v4
                                                  is not None):  # NOQA
                aruba_ansible_module.module.fail_json(
                    msg=
                    " Both active_gateway_ip and active_gateway_mac_v4 are required for configure active gateway."
                )  # NOQA
            elif (active_gateway_ip is not None) and (active_gateway_mac_v4
                                                      is not None):  # NOQA
                port_fields = {
                    "vsx_virtual_ip4": active_gateway_ip,
                    "vsx_virtual_gw_mac_v4": active_gateway_mac_v4
                }
                aruba_ansible_module = port.update_port_fields(
                    aruba_ansible_module, vlan_interface_id,
                    port_fields)  # NOQA

        if state == 'delete':
            aruba_ansible_module = port.delete_port(aruba_ansible_module,
                                                    vlan_interface_id)
            aruba_ansible_module = interface.delete_interface(
                aruba_ansible_module, vlan_interface_id, type='vlan')

        aruba_ansible_module.update_switch_config()
コード例 #22
0
def main():
    module_args = dict(acl_name=dict(type='str', required=True),
                       acl_type=dict(type='str',
                                     required=True,
                                     choices=['ipv4', 'ipv6', 'mac']),
                       acl_interface_list=dict(type='list', required=True),
                       acl_direction=dict(type='str',
                                          default='in',
                                          choices=['in', 'out']),
                       state=dict(type='str',
                                  default='create',
                                  choices=['create', 'delete']))

    # 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
        acl_name = ansible_module.params['acl_name']
        acl_interface_list = ansible_module.params[
            'acl_interface_list']  # NOQA
        acl_type = ansible_module.params['acl_type']
        acl_direction = ansible_module.params['acl_direction']
        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)

        for interface_name in acl_interface_list:
            if state == 'delete':
                # Create ACL Object
                interface = device.interface(interface_name)
                # Delete it
                interface.clear_acl(acl_type)
                # Changed
                result['changed'] = True

            if state == 'create' or state == 'update':
                # Create ACL Object
                interface = device.interface(interface_name)
                # Verify if interface was create
                if interface.was_modified():
                    # Changed
                    result['changed'] = True

                # Modified variables
                modified_op1 = False
                modified_op2 = False
                # Update ACL inside Interface
                if acl_direction == 'in':
                    modified_op1 = interface.update_acl_in(acl_name, acl_type)
                if acl_direction == 'out':
                    modified_op2 = interface.update_acl_out(acl_name, acl_type)
                if modified_op1 or modified_op2:
                    # Changed
                    result['changed'] = True

        # Exit
        ansible_module.exit_json(**result)

    # Use Older version
    else:

        aruba_ansible_module = ArubaAnsibleModule(module_args)

        acl_name = aruba_ansible_module.module.params['acl_name']
        acl_interface_list = aruba_ansible_module.module.params[
            'acl_interface_list']  # NOQA
        acl_type = aruba_ansible_module.module.params['acl_type']
        acl_direction = aruba_ansible_module.module.params['acl_direction']
        state = aruba_ansible_module.module.params['state']

        interface = Interface()
        port = Port()

        for interface_name in acl_interface_list:
            if not port.check_port_exists(aruba_ansible_module,
                                          interface_name):
                aruba_ansible_module.module.fail_json(
                    msg="Interface {int} is not configured".format(
                        int=interface_name))

            if (state == 'create') or (state == 'update'):
                update_type = 'insert'
            elif (state == 'delete'):
                update_type = 'delete'
            aruba_ansible_module = interface.update_interface_acl_details(
                aruba_ansible_module, interface_name, acl_name, acl_type,
                acl_direction, update_type)

            if update_type == 'insert':
                aruba_ansible_module.module.log(
                    msg="Attached ACL {acl} of type "
                    "{type} to interface {int}"
                    "".format(acl=acl_name, type=acl_type, int=interface_name))

            if update_type == 'update':
                aruba_ansible_module.module.log(
                    msg="Updated ACL {acl} of type "
                    "{type} attached to interface"
                    " {int}"
                    "".format(acl=acl_name, type=acl_type,
                              int=interface_name))  # NOQA

            if (update_type == 'absent') or (update_type == 'delete'):
                aruba_ansible_module.module.log(
                    msg="Removed ACL {acl} of type"
                    " {type} from interface"
                    " {int}"
                    "".format(acl=acl_name, type=acl_type, int=interface_name))

        aruba_ansible_module.update_switch_config()
コード例 #23
0
def main():
    module_args = dict(
        vlan_id=dict(type='str', required=True),
        admin_state=dict(type='str', required=False, choices=['up', 'down']),
        state=dict(default='create', choices=['create', 'delete', 'update']),
        ipv4=dict(type='list', default=None),
        description=dict(type='str', default=None),
        ipv6=dict(type='list', default=None),
        vrf=dict(type='str', default=None),
        ip_helper_address=dict(type='list', default=None),
        active_gateway_ip=dict(type='str', default=None),
        active_gateway_mac_v4=dict(type='str', default=None),
    )

    aruba_ansible_module = ArubaAnsibleModule(module_args)

    vlan_id = aruba_ansible_module.module.params['vlan_id']
    admin_state = aruba_ansible_module.module.params['admin_state']
    ipv4 = aruba_ansible_module.module.params['ipv4']
    ipv6 = aruba_ansible_module.module.params['ipv6']
    vrf = aruba_ansible_module.module.params['vrf']
    description = aruba_ansible_module.module.params['description']
    ip_helper_address = aruba_ansible_module.module.params['ip_helper_address']
    active_gateway_ip = aruba_ansible_module.module.params['active_gateway_ip']
    active_gateway_mac_v4 = aruba_ansible_module.module.params[
        'active_gateway_mac_v4']  # NOQA
    state = aruba_ansible_module.module.params['state']

    vlan = VLAN()
    port = Port()
    interface = Interface()
    vlan_interface_id = "vlan" + vlan_id
    if not vlan.check_vlan_exist(aruba_ansible_module, vlan_id):
        aruba_ansible_module.module.fail_json(msg="VLAN {} does not exist. "
                                              "VLAN needs to be created "
                                              "before adding or deleting "
                                              "interfaces".format(vlan_id))

    if state == 'create':
        aruba_ansible_module = port.create_port(aruba_ansible_module,
                                                vlan_interface_id)
        aruba_ansible_module = interface.create_interface(
            aruba_ansible_module, vlan_interface_id)

        if admin_state is None:
            admin_state = 'up'

        user_config = {
            "admin": admin_state,
        }

        interface_fields = {
            "name": vlan_interface_id,
            "type": "vlan",
            "user_config": user_config
        }
        aruba_ansible_module = interface.update_interface_fields(
            aruba_ansible_module, vlan_interface_id, interface_fields)  # NOQA

        if vrf is not None:
            vrf_name = vrf
        else:
            vrf_name = "default"

        port_fields = {
            "interfaces": [vlan_interface_id],
            "vlan_tag": vlan_id,
            "vrf": vrf_name,
            "admin": admin_state
        }
        aruba_ansible_module = port.update_port_fields(aruba_ansible_module,
                                                       vlan_interface_id,
                                                       port_fields)

    if (state == 'create') or (state == 'update'):

        if not port.check_port_exists(aruba_ansible_module, vlan_interface_id):
            aruba_ansible_module.module.fail_json(msg="VLAN interface does not"
                                                  " exist")

        if admin_state is not None:
            port_fields = {"admin": admin_state}
            user_config = {"admin": admin_state}
            interface_fields = {"user_config": user_config}

        aruba_ansible_module = port.update_port_fields(aruba_ansible_module,
                                                       vlan_interface_id,
                                                       port_fields)
        aruba_ansible_module = interface.update_interface_fields(
            aruba_ansible_module, vlan_interface_id, interface_fields)  # NOQA

        if description is not None:
            port_fields = {"description": description}

            aruba_ansible_module = port.update_port_fields(
                aruba_ansible_module, vlan_interface_id, port_fields)  # NOQA

        if ipv4 is not None:
            l3_interface = L3_Interface()
            aruba_ansible_module = l3_interface.update_interface_ipv4_address(
                aruba_ansible_module, vlan_interface_id, ipv4)  # NOQA

        if ipv6 is not None:
            l3_interface = L3_Interface()
            aruba_ansible_module = l3_interface.update_interface_ipv6_address(
                aruba_ansible_module, vlan_interface_id, ipv6)  # NOQA

        if ip_helper_address is not None:
            l3_interface = L3_Interface()
            if vrf is None:
                vrf = "default"
            aruba_ansible_module = l3_interface.update_interface_ip_helper_address(
                aruba_ansible_module, vrf, vlan_interface_id,
                ip_helper_address)  # NOQA

        if vrf is not None:
            l3_interface = L3_Interface()
            aruba_ansible_module = l3_interface.update_interface_vrf_details_from_l3(
                aruba_ansible_module,
                vrf,
                vlan_interface_id,
                update_type="insert")  # NOQA

        if (active_gateway_ip is not None) and (active_gateway_mac_v4 is None):
            aruba_ansible_module.module.fail_json(
                msg=
                " Both active_gateway_ip and active_gateway_mac_v4 are required for configure active gateway."
            )  # NOQA
        elif (active_gateway_ip is None) and (active_gateway_mac_v4
                                              is not None):  # NOQA
            aruba_ansible_module.module.fail_json(
                msg=
                " Both active_gateway_ip and active_gateway_mac_v4 are required for configure active gateway."
            )  # NOQA
        elif (active_gateway_ip is not None) and (active_gateway_mac_v4
                                                  is not None):  # NOQA
            port_fields = {
                "vsx_virtual_ip4": active_gateway_ip,
                "vsx_virtual_gw_mac_v4": active_gateway_mac_v4
            }
            aruba_ansible_module = port.update_port_fields(
                aruba_ansible_module, vlan_interface_id, port_fields)  # NOQA

    if state == 'delete':
        aruba_ansible_module = port.delete_port(aruba_ansible_module,
                                                vlan_interface_id)
        aruba_ansible_module = interface.delete_interface(
            aruba_ansible_module, vlan_interface_id)

    aruba_ansible_module.update_switch_config()