Skip to content

Commit

Permalink
Fixed issues sda_layer3_virtual_networks_v1 PUT instead of POST #221
Browse files Browse the repository at this point in the history
  • Loading branch information
JosePabloOcampo1212 committed Jan 8, 2025
1 parent 8e8244f commit d89b8ee
Show file tree
Hide file tree
Showing 6 changed files with 120 additions and 23 deletions.
8 changes: 8 additions & 0 deletions changelogs/changelog.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1412,3 +1412,11 @@ releases:
- wireless_settings_power_profiles_v1_info - new module
- wireless_settings_power_profiles_v1 - new module
- wireless_settings_ssids_override_at_sites_v1_info - new module

6.28.0:
release_date: "2025-01-08"
changes:
release_summary: Fixed issues
minor_changes:
- Fixed issues in module sda_anycast_gateways_v1
- Fixed issues in module sda_layer3_virtual_networks_v1
2 changes: 1 addition & 1 deletion galaxy.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
namespace: cisco
name: dnac
version: 6.27.0
version: 6.28.0
readme: README.md
authors:
- Rafael Campos <[email protected]>
Expand Down
40 changes: 40 additions & 0 deletions playbooks/sda_anycast_gateways.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
- hosts: dnac_servers
vars_files:
- credentials.yml
gather_facts: false
tasks:
- name: Create sda anycast gateways v1
cisco.dnac.sda_anycast_gateways_v1:
dnac_host: "{{ dnac_host }}"
dnac_port: "{{ dnac_port }}"
dnac_username: "{{ dnac_username }}"
dnac_password: "{{ dnac_password }}"
dnac_verify: "{{ dnac_verify }}"
dnac_debug: "{{ dnac_debug }}"
state: present
payload:
- fabricId: "b6af9074-b1d8-4b40-82f9-776d34adb0fc"
virtualNetworkName: "INFRA_VN"
vlanId: 100
vlanName: "VLAN_100"
ipPoolName: "IP_POOL_100"
isCriticalPool: true
isGroupBasedPolicyEnforcementEnabled: true
isIntraSubnetRoutingEnabled: true
isIpDirectedBroadcast: true
isLayer2FloodingEnabled: true
isMultipleIpToMacAddresses: true
isSupplicantBasedExtendedNodeOnboarding: true
isWirelessPool: true
poolType: "EXTENDED_NODE"
securityGroupName: "SG_DEFAULT"
tcpMssAdjustment: 1400
trafficType: "DATA"
anchoredSiteId: "7087c88f-ec73-4df1-8f6b-136d7e2ed9e2"

register: result

- name: Show result
debug:
var: result
39 changes: 39 additions & 0 deletions playbooks/sda_layer3_virtual_networks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
---
- hosts: dnac_servers
vars_files:
- credentials.yml
gather_facts: false
tasks:
- name: Update layer 3 virtual networks v1
cisco.dnac.sda_layer3_virtual_networks_v1:
dnac_host: "{{ dnac_host }}"
dnac_port: "{{ dnac_port }}"
dnac_username: "{{ dnac_username }}"
dnac_password: "{{ dnac_password }}"
dnac_verify: "{{ dnac_verify }}"
dnac_debug: "{{ dnac_debug }}"
state: present
payload:
- virtualNetworkName: "DEFAULT_VN"
id: "1cc6dab4-d4e8-4523-bbc5-7f7bb4eb4c7c"
register: result

- name: Create layer 3 virtual networks v1
cisco.dnac.sda_layer3_virtual_networks_v1:
dnac_host: "{{ dnac_host }}"
dnac_port: "{{ dnac_port }}"
dnac_username: "{{ dnac_username }}"
dnac_password: "{{ dnac_password }}"
dnac_verify: "{{ dnac_verify }}"
dnac_debug: "{{ dnac_debug }}"
state: present
payload:
- virtualNetworkName: "DEFAULT_VNee"
fabricIds:
- "e3327bd5-e30b-40be-92ac-d6235f35a29b"
anchoredSiteId: "7087c88f-ec73-4df1-8f6b-136d7e2ed9e2"
register: result

- name: Show result
debug:
var: result
33 changes: 19 additions & 14 deletions plugins/action/sda_anycast_gateways_v1.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,8 @@
))

required_if = [
("state", "present", ["id"], True),
("state", "present", ["payload"], True),
("state", "absent", ["id"], True),
("state", "absent", ["payload"], True),
]
required_one_of = []
mutually_exclusive = []
Expand All @@ -56,17 +54,24 @@ def __init__(self, params, dnac):

def get_all_params(self, name=None, id=None):
new_object_params = {}
new_object_params['id'] = id or self.new_object.get('id')
new_object_params['fabric_id'] = self.new_object.get('fabricId') or \
self.new_object.get('fabric_id')
new_object_params['virtual_network_name'] = self.new_object.get('virtualNetworkName') or \
self.new_object.get('virtual_network_name')
new_object_params['ip_pool_name'] = self.new_object.get('ipPoolName') or \
self.new_object.get('ip_pool_name')
new_object_params['vlan_name'] = self.new_object.get('vlanName') or \
self.new_object.get('vlan_name')
new_object_params['vlan_id'] = self.new_object.get('vlanId') or \
self.new_object.get('vlan_id')
if isinstance(self.new_object.get("payload"), list):
if "id" in self.new_object.get("payload")[0]:
new_object_params['id'] = id or self.new_object.get('id') or self.new_object.get('payload')[0]['id']
if "fabricId" in self.new_object.get("payload")[0]:
new_object_params['fabric_id'] = self.new_object.get('fabricId') or \
self.new_object.get('fabric_id') or self.new_object.get('payload')[0]['fabricId']
if "virtualNetworkName" in self.new_object.get("payload")[0]:
new_object_params['virtual_network_name'] = self.new_object.get('virtualNetworkName') or \
self.new_object.get('virtual_network_name') or self.new_object.get('payload')[0]['virtualNetworkName']
if "ipPoolName" in self.new_object.get("payload")[0]:
new_object_params['ip_pool_name'] = self.new_object.get('ipPoolName') or \
self.new_object.get('ip_pool_name') or self.new_object.get('payload')[0]['ipPoolName']
if "vlanName" in self.new_object.get("payload")[0]:
new_object_params['vlan_name'] = self.new_object.get('vlanName') or \
self.new_object.get('vlan_name') or self.new_object.get('payload')[0]['vlanName']
if "vlanId" in self.new_object.get("payload")[0]:
new_object_params['vlan_id'] = self.new_object.get('vlanId') or \
self.new_object.get('vlan_id') or self.new_object.get('payload')[0]['vlanId']
new_object_params['offset'] = self.new_object.get('offset')
new_object_params['limit'] = self.new_object.get('limit')
return new_object_params
Expand All @@ -89,6 +94,7 @@ def update_all_params(self):
def get_object_by_name(self, name, is_absent=False):
result = None
# NOTE: Does not have a get by name method or it is in another action
print(self.get_all_params(name=name))
try:
items = self.dnac.exec(
family="sda",
Expand Down Expand Up @@ -157,7 +163,6 @@ def requires_update(self, current_obj):
("isMultipleIpToMacAddresses", "isMultipleIpToMacAddresses"),
("isSupplicantBasedExtendedNodeOnboarding", "isSupplicantBasedExtendedNodeOnboarding"),
("isGroupBasedPolicyEnforcementEnabled", "isGroupBasedPolicyEnforcementEnabled"),
("id", "id"),
]
# Method 1. Params present in request (Ansible) obj are the same as the current (DNAC) params
# If any does not have eq params, it requires update
Expand Down
21 changes: 13 additions & 8 deletions plugins/action/sda_layer3_virtual_networks_v1.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,19 @@ def __init__(self, params, dnac):

def get_all_params(self, name=None, id=None):
new_object_params = {}
new_object_params['virtual_network_name'] = self.new_object.get('virtualNetworkName') or \
self.new_object.get('virtual_network_name')
new_object_params['fabric_id'] = self.new_object.get('fabricId') or \
self.new_object.get('fabric_id')
new_object_params['anchored_site_id'] = self.new_object.get('anchoredSiteId') or \
self.new_object.get('anchored_site_id')
new_object_params['offset'] = self.new_object.get('offset')
new_object_params['limit'] = self.new_object.get('limit')
if isinstance(self.new_object.get("payload"), list):
if "virtualNetworkName" in self.new_object.get("payload")[0]:
new_object_params['virtual_network_name'] = self.new_object.get('virtualNetworkName') or \
self.new_object.get('virtual_network_name') or self.new_object.get('payload')[0]['virtualNetworkName']
if "fabricIds" in self.new_object.get("payload")[0]:
new_object_params['fabric_id'] = self.new_object.get('fabricId') or \
self.new_object.get('fabric_id') or self.new_object.get('payload')[0]['fabricIds'][0]
if "anchoredSiteId" in self.new_object.get("payload")[0]:
new_object_params['anchored_site_id'] = self.new_object.get('anchoredSiteId') or \
self.new_object.get('anchored_site_id') or self.new_object.get('payload')[0]['anchoredSiteId']
new_object_params['offset'] = self.new_object.get('offset')
new_object_params['limit'] = self.new_object.get('limit')
print(new_object_params)
return new_object_params

def create_params(self):
Expand Down

0 comments on commit d89b8ee

Please sign in to comment.