Skip to content

Commit e1bb4bf

Browse files
mtarkingmikewiebe
andauthored
Rework MultiSite DiffRun (#519)
* fix and rework msd diffrun * Fix remove with diff_run enabled and disabled * Fix ansible sanity issue * Fix typos * Add display message for msd vrf and network removal * adjust booleans * adjust c date to single year --------- Co-authored-by: mwiebe <mwiebe@cisco.com>
1 parent 48af87b commit e1bb4bf

File tree

13 files changed

+82
-76
lines changed

13 files changed

+82
-76
lines changed

plugins/action/common/read_run_map.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ def run(self, tmp=None, task_vars=None):
4040
results['diff_run'] = True
4141

4242
model_data = self._task.args.get('model_data')
43+
play_tags = self._task.args.get('play_tags')
4344
fabric_name = model_data['vxlan']['fabric']['name']
4445

4546
if 'dtc' in task_vars['role_path']:
@@ -60,9 +61,22 @@ def run(self, tmp=None, task_vars=None):
6061

6162
# Check run map flags and if any of then is false set diff_run to false
6263
# to force all sections to run.
64+
# Set diff_run to false for any of the following conditions:
65+
# - Any of the runmap flags is false
66+
# - play_tags (ansible_run_tags) is something other then 'all'
67+
#
6368
for role in ['role_validate_completed', 'role_create_completed', 'role_deploy_completed', 'role_remove_completed']:
6469
if not previous_run_map.get(role):
6570
results['diff_run'] = False
6671
break
72+
if play_tags and 'all' not in play_tags:
73+
results['diff_run'] = False
74+
75+
# If diff_run is false display an ansible warning message
76+
if not results['diff_run']:
77+
display.warning(
78+
f"Diff Run Feature is Disabled on this run for Fabric {fabric_name} "
79+
f"as one or more run map flags are `false` or `ansible_run_tags` is not 'all'."
80+
)
6781

6882
return results

plugins/action/dtc/fabrics_deploy.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,16 @@ def run(self, tmp=None, task_vars=None):
103103
# "_ansible_parsed": true
104104
# }
105105
if ndfc_deploy.get('msg'):
106-
if ndfc_deploy['msg']['RETURN_CODE'] != 200:
106+
# Handle case where msg is a string (simple error message)
107+
if isinstance(ndfc_deploy['msg'], str):
107108
results['failed'] = True
108-
results['msg'] = f"For fabric {fabric}; {ndfc_deploy['msg']['DATA']['message']}"
109+
results['msg'] = f"For fabric {fabric}; {ndfc_deploy['msg']}"
110+
# Handle case where msg is a dict with structured error info
111+
elif isinstance(ndfc_deploy['msg'], dict):
112+
if ndfc_deploy['msg'].get('RETURN_CODE', 0) != 200:
113+
results['failed'] = True
114+
# Safely access nested message
115+
error_message = ndfc_deploy['msg'].get('DATA', {}).get('message', 'Unknown error')
116+
results['msg'] = f"For fabric {fabric}; {error_message}"
109117

110118
return results

plugins/action/dtc/unmanaged_child_fabric_networks.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ def run(self, tmp=None, task_vars=None):
157157
# If the network is in NDFC but not in the data model, delete it
158158
diff_ndfc_network_names = [ndfc_network_name for ndfc_network_name in ndfc_network_names if ndfc_network_name not in network_names]
159159

160+
display.warning(f"Removing network_names: {diff_ndfc_network_names} from fabric: {fabric}")
160161
if diff_ndfc_network_names:
161162
config = []
162163
for ndfc_network_name in diff_ndfc_network_names:

plugins/action/dtc/unmanaged_child_fabric_vrfs.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ def run(self, tmp=None, task_vars=None):
154154
# If the vrf is in NDFC but not in the data model, delete it
155155
diff_ndfc_vrf_names = [ndfc_vrf_name for ndfc_vrf_name in ndfc_vrf_names if ndfc_vrf_name not in vrf_names]
156156

157+
display.warning(f"Removing vrf_names: {diff_ndfc_vrf_names} from fabric: {fabric}")
157158
if diff_ndfc_vrf_names:
158159
config = []
159160
for ndfc_vrf_name in diff_ndfc_vrf_names:

roles/dtc/common/tasks/sub_main_msd.yml

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,13 @@
8383
vars_common_msd:
8484
changes_detected_fabric: "{{ changes_detected_fabric }}"
8585
changes_detected_bgw_anycast_vip: "{{ changes_detected_bgw_anycast_vip }}"
86-
# changes_detected_vrfs: "{{ changes_detected_vrfs }}"
87-
# changes_detected_networks: "{{ changes_detected_networks }}"
86+
# changes_detected_vrfs and changes_detected_networks must be defaulted back to false
87+
# because ansible.builtin.set_fact copmletely rewrites vars_common_msd and we need
88+
# to keep alignment with the initialzed false state in common/main.yml.
89+
# The proper state will update in create/sub_main_msd.yml as that is where vrfs and networks
90+
# data is processed as we must process the vrfs and networks data only after multsite data is prepared.
91+
changes_detected_vrfs: false
92+
changes_detected_networks: false
8893
fabric_config: "{{ fabric_config }}"
8994
bgw_anycast_vip: "{{ bgw_anycast_vip }}"
9095
# vrf_config: "{{ vrf_config }}"
@@ -98,8 +103,10 @@
98103
- "----------------------------------------------------------------"
99104
- "+ Fabric Changes Detected - [ {{ vars_common_msd.changes_detected_fabric }} ]"
100105
- "+ BGW Anycast VIP Changes Detected - [ {{ vars_common_msd.changes_detected_bgw_anycast_vip }} ]"
101-
# - "+ VRFs Changes Detected - [ {{ vars_common_msd.changes_detected_vrfs }} ]"
102-
# - "+ Networks Changes Detected - [ {{ vars_common_msd.changes_detected_networks }} ]"
106+
- "+ VRFs Changes Detected - [ {{ vars_common_msd.changes_detected_vrfs }} ]"
107+
- "+ VRFs Changes Detected - [ Known Later, Initialized to False for MSD ]"
108+
- "+ Networks Changes Detected - [ {{ vars_common_msd.changes_detected_networks }} ]"
109+
- "+ Networks Changes Detected - [ Known Later, Initialized to False for MSD ]"
103110
- "+ ----- Run Map -----"
104111
- "+ Run Map Diff Run - [ {{ run_map_read_result.diff_run }} ]"
105112
- "+ Force Run Flag - [ {{ force_run_all }} ]"

roles/dtc/create/tasks/main.yml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,7 @@
5252
- name: Import MSD Fabric Role Tasks
5353
ansible.builtin.import_tasks: sub_main_msd.yml
5454
when: >
55-
(MD_Extended.vxlan.fabric.type == 'MSD') and
56-
(vars_common_msd.changes_detected_fabric) or
57-
(vars_common_msd.changes_detected_bgw_anycast_vip) or
58-
(vars_common_msd.changes_detected_vrfs) or
59-
(vars_common_msd.changes_detected_networks)
55+
(MD_Extended.vxlan.fabric.type == 'MSD')
6056
6157
# Check with Matt and Pete on External Fabrics
6258
- name: Import External Fabric Role Tasks

roles/dtc/create/tasks/msd/vrfs_networks.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@
5151
# name: dtc.common
5252
# tasks_from: msd/ndfc_networks.yml
5353

54+
- name: Set path_name Var
55+
ansible.builtin.set_fact:
56+
path_name: "{{ role_path }}/../common/files/msd/{{ MD_Extended.vxlan.fabric.name }}/"
57+
delegate_to: localhost
58+
5459
- name: Run dtc.common.tasks.msd.ndfc_vrfs.yml
5560
ansible.builtin.import_tasks: "{{ role_path }}/../common/tasks/msd/ndfc_vrfs.yml"
5661

@@ -65,6 +70,8 @@
6570
vars_common_msd: "{{ vars_common_msd | ansible.builtin.combine(update_data) }}"
6671
vars:
6772
update_data:
73+
# changes_detected_vrfs and changes_detected_networks are set in the
74+
# dtc.common.tasks.msd.ndfc_vrfs.yml and dtc.common.tasks.msd.ndfc_networks.yml tasks
6875
changes_detected_vrfs: "{{ changes_detected_vrfs }}"
6976
changes_detected_networks: "{{ changes_detected_networks }}"
7077
vrf_config: "{{ vrf_config }}"

roles/dtc/create/tasks/sub_main_msd.yml

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -59,21 +59,21 @@
5959
state: merged
6060
fabric: "{{ MD_Extended.vxlan.fabric.name }}"
6161
config: "{{ vars_common_msd.bgw_anycast_vip }}"
62-
when: >
63-
(MD_Multisite.child_fabrics_data
64-
| dict2items
65-
| selectattr('value.attributes', 'defined')
66-
| selectattr('value.attributes.STATIC_UNDERLAY_IP_ALLOC', 'defined')
67-
| selectattr('value.attributes.STATIC_UNDERLAY_IP_ALLOC', 'in', ["true", true])
68-
| map(attribute='key')
69-
| list
70-
| length > 0) and
71-
(vars_common_msd.bgw_anycast_vip | length > 0)
62+
when:
63+
- (MD_Multisite.child_fabrics_data
64+
| dict2items
65+
| selectattr('value.attributes', 'defined')
66+
| selectattr('value.attributes.STATIC_UNDERLAY_IP_ALLOC', 'defined')
67+
| selectattr('value.attributes.STATIC_UNDERLAY_IP_ALLOC', 'in', ["true", true])
68+
| map(attribute='key')
69+
| list
70+
| length > 0)
71+
- vars_common_msd.bgw_anycast_vip | length > 0
72+
- vars_common_msd.changes_detected_bgw_anycast_vip
7273

7374
- name: Manage MSD Fabric VRFs and Networks in Nexus Dashboard
7475
ansible.builtin.import_tasks: msd/vrfs_networks.yml
7576
when:
7677
- MD_Extended.vxlan.multisite.overlay is defined
7778
- MD_Extended.vxlan.multisite.overlay
78-
# - (vars_common_msd.changes_detected_vrfs or vars_common_msd.changes_detected_networks)
7979
tags: "{{ nac_tags.create_vrfs_networks }}"

roles/dtc/deploy/tasks/main.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@
5252
(MD_Extended.vxlan.fabric.type == 'MSD') and
5353
(vars_common_msd.changes_detected_fabric or
5454
vars_common_msd.changes_detected_vrfs or
55-
vars_common_msd.changes_detected_networks)
55+
vars_common_msd.changes_detected_networks or
56+
vars_common_msd.changes_detected_bgw_anycast_vip)
5657
5758
- name: Import ISN Fabric Role Tasks
5859
ansible.builtin.import_tasks: sub_main_isn.yml

roles/dtc/deploy/tasks/sub_main_msd.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@
6969
- name: Deploy For MSD Child Fabrics
7070
cisco.nac_dc_vxlan.dtc.fabrics_deploy:
7171
fabrics: "{{ child_fabrics_vrfs_networks_changed }}"
72+
vars:
73+
ansible_command_timeout: 3000
74+
ansible_connect_timeout: 3000
7275
when: >
7376
MD_Extended.vxlan.fabric.type == 'MSD' and
7477
(child_fabrics_vrfs_networks_changed is defined and child_fabrics_vrfs_networks_changed | length > 0)

0 commit comments

Comments
 (0)