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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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()
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()
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()
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()