From 7bc101f9a8de5dcf5a7e44f1b4742f3c3b5af65e Mon Sep 17 00:00:00 2001
From: mmudigon <62759545+mmudigon@users.noreply.github.com>
Date: Tue, 27 Sep 2022 19:01:44 +0530
Subject: [PATCH 1/7] DCNM Links module initial checkin (#158)
* DCNM Links module initial checkin
* Update after running black and generating documentation
* Update after fixing yaml lint issues
* updates to unit test code to fix sanity errors
* Fixing Lint errors
* Fixing more linit errors
* Update after addressing review comments
---
README.md | 1 +
docs/cisco.dcnm.dcnm_links_module.rst | 1284 ++++
plugins/modules/dcnm_links.py | 3326 ++++++++++
.../targets/dcnm_links/defaults/main.yaml | 2 +
.../targets/dcnm_links/meta/main.yaml | 1 +
.../targets/dcnm_links/tasks/dcnm.yaml | 20 +
.../targets/dcnm_links/tasks/main.yaml | 2 +
.../dcnm/dcnm_links_inter_ipv6_delete.yaml | 266 +
.../dcnm/dcnm_links_inter_ipv6_merge.yaml | 432 ++
.../dcnm/dcnm_links_inter_ipv6_modify.yaml | 311 +
.../dcnm/dcnm_links_inter_ipv6_replace.yaml | 361 +
.../dcnm/dcnm_links_inter_missing_params.yaml | 314 +
.../dcnm_links_inter_numbered_delete.yaml | 364 ++
.../dcnm/dcnm_links_inter_numbered_merge.yaml | 574 ++
.../dcnm_links_inter_numbered_modify.yaml | 479 ++
.../dcnm_links_inter_numbered_replace.yaml | 531 ++
.../tests/dcnm/dcnm_links_inter_query.yaml | 426 ++
.../dcnm_links_inter_template_change.yaml | 198 +
.../dcnm/dcnm_links_intra_ipv6_delete.yaml | 182 +
.../dcnm/dcnm_links_intra_ipv6_merge.yaml | 284 +
.../dcnm/dcnm_links_intra_ipv6_modify.yaml | 249 +
.../dcnm/dcnm_links_intra_ipv6_query.yaml | 263 +
.../dcnm/dcnm_links_intra_ipv6_replace.yaml | 261 +
.../dcnm/dcnm_links_intra_missing_params.yaml | 366 ++
.../dcnm_links_intra_numbered_delete.yaml | 164 +
.../dcnm/dcnm_links_intra_numbered_merge.yaml | 301 +
.../dcnm_links_intra_numbered_modify.yaml | 190 +
.../dcnm/dcnm_links_intra_numbered_query.yaml | 235 +
.../dcnm_links_intra_numbered_replace.yaml | 207 +
..._links_intra_numbered_template_change.yaml | 147 +
.../dcnm_links_intra_unnumbered_delete.yaml | 167 +
.../dcnm_links_intra_unnumbered_merge.yaml | 233 +
.../dcnm_links_intra_unnumbered_modify.yaml | 167 +
.../dcnm_links_intra_unnumbered_query.yaml | 235 +
.../dcnm_links_intra_unnumbered_replace.yaml | 201 +
...inks_intra_unnumbered_template_change.yaml | 144 +
.../dcnm/dcnm_links_intra_vpc_delete.yaml | 163 +
.../dcnm/dcnm_links_intra_vpc_merge.yaml | 221 +
.../dcnm/dcnm_links_intra_vpc_modify.yaml | 173 +
.../dcnm/dcnm_links_intra_vpc_query.yaml | 218 +
.../dcnm/dcnm_links_intra_vpc_replace.yaml | 195 +
.../dcnm_links_intra_xe_delete.yaml | 154 +
.../dcnm_links_intra_xe_merge.yaml | 220 +
.../dcnm_links_intra_xe_modify.yaml | 175 +
.../dcnm_links_intra_xe_query.yaml | 216 +
.../dcnm_links_intra_xe_replace.yaml | 197 +
.../prepare_dcnm_links/tasks/main.yaml | 81 +
tests/sanity/ignore-2.10.txt | 1 +
tests/sanity/ignore-2.11.txt | 1 +
tests/sanity/ignore-2.12.txt | 1 +
tests/sanity/ignore-2.9.txt | 1 +
.../dcnm/fixtures/dcnm_links_configs.json | 2203 +++++++
.../dcnm/fixtures/dcnm_links_payloads.json | 1353 ++++
tests/unit/modules/dcnm/test_dcnm_links.py | 5783 +++++++++++++++++
54 files changed, 24244 insertions(+)
create mode 100644 docs/cisco.dcnm.dcnm_links_module.rst
create mode 100644 plugins/modules/dcnm_links.py
create mode 100644 tests/integration/targets/dcnm_links/defaults/main.yaml
create mode 100644 tests/integration/targets/dcnm_links/meta/main.yaml
create mode 100644 tests/integration/targets/dcnm_links/tasks/dcnm.yaml
create mode 100644 tests/integration/targets/dcnm_links/tasks/main.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_inter_ipv6_delete.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_inter_ipv6_merge.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_inter_ipv6_modify.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_inter_ipv6_replace.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_inter_missing_params.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_inter_numbered_delete.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_inter_numbered_merge.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_inter_numbered_modify.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_inter_numbered_replace.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_inter_query.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_inter_template_change.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_ipv6_delete.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_ipv6_merge.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_ipv6_modify.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_ipv6_query.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_ipv6_replace.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_missing_params.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_numbered_delete.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_numbered_merge.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_numbered_modify.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_numbered_query.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_numbered_replace.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_numbered_template_change.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_unnumbered_delete.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_unnumbered_merge.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_unnumbered_modify.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_unnumbered_query.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_unnumbered_replace.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_unnumbered_template_change.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_vpc_delete.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_vpc_merge.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_vpc_modify.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_vpc_query.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/dcnm_links_intra_vpc_replace.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/xe-test-cases/dcnm_links_intra_xe_delete.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/xe-test-cases/dcnm_links_intra_xe_merge.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/xe-test-cases/dcnm_links_intra_xe_modify.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/xe-test-cases/dcnm_links_intra_xe_query.yaml
create mode 100644 tests/integration/targets/dcnm_links/tests/dcnm/xe-test-cases/dcnm_links_intra_xe_replace.yaml
create mode 100644 tests/integration/targets/prepare_dcnm_links/tasks/main.yaml
create mode 100644 tests/unit/modules/dcnm/fixtures/dcnm_links_configs.json
create mode 100644 tests/unit/modules/dcnm/fixtures/dcnm_links_payloads.json
create mode 100644 tests/unit/modules/dcnm/test_dcnm_links.py
diff --git a/README.md b/README.md
index 63a8874c2..f88bce05d 100644
--- a/README.md
+++ b/README.md
@@ -34,6 +34,7 @@ Name | Description
--- | ---
[cisco.dcnm.dcnm_interface](https://github.com/CiscoDevNet/ansible-dcnm/blob/main/docs/cisco.dcnm.dcnm_interface_module.rst)|DCNM Ansible Module for managing interfaces.
[cisco.dcnm.dcnm_inventory](https://github.com/CiscoDevNet/ansible-dcnm/blob/main/docs/cisco.dcnm.dcnm_inventory_module.rst)|Add and remove Switches from a DCNM managed VXLAN fabric.
+[cisco.dcnm.dcnm_links](https://github.com/CiscoDevNet/ansible-dcnm/blob/main/docs/cisco.dcnm.dcnm_links_module.rst)|DCNM ansible module for managing Links.
[cisco.dcnm.dcnm_network](https://github.com/CiscoDevNet/ansible-dcnm/blob/main/docs/cisco.dcnm.dcnm_network_module.rst)|Add and remove Networks from a DCNM managed VXLAN fabric.
[cisco.dcnm.dcnm_policy](https://github.com/CiscoDevNet/ansible-dcnm/blob/main/docs/cisco.dcnm.dcnm_policy_module.rst)|DCNM Ansible Module for managing policies.
[cisco.dcnm.dcnm_resource_manager](https://github.com/CiscoDevNet/ansible-dcnm/blob/main/docs/cisco.dcnm.dcnm_resource_manager_module.rst)|DCNM ansible module for managing resources.
diff --git a/docs/cisco.dcnm.dcnm_links_module.rst b/docs/cisco.dcnm.dcnm_links_module.rst
new file mode 100644
index 000000000..634cacb3e
--- /dev/null
+++ b/docs/cisco.dcnm.dcnm_links_module.rst
@@ -0,0 +1,1284 @@
+.. _cisco.dcnm.dcnm_links_module:
+
+
+*********************
+cisco.dcnm.dcnm_links
+*********************
+
+**DCNM ansible module for managing Links.**
+
+
+Version added: 2.1.0
+
+.. contents::
+ :local:
+ :depth: 1
+
+
+Synopsis
+--------
+- DCNM ansible module for creating, modifying, deleting and querying Links
+
+
+
+
+Parameters
+----------
+
+.. raw:: html
+
+
+
+ Parameter |
+ Choices/Defaults |
+ Comments |
+
+
+
+
+ config
+
+
+ list
+ / elements=dictionary
+
+ |
+
+ |
+
+ A list of dictionaries containing Links information.
+ |
+
+
+ |
+
+
+ dst_device
+
+
+ string
+ / required
+
+ |
+
+ |
+
+ IP address or DNS name of the destination switch which is part of the link being configured.
+ |
+
+
+ |
+
+
+ dst_fabric
+
+
+ string
+ / required
+
+ |
+
+ |
+
+ Name of the destination fabric. If this is same as 'src_fabric' then the link is considered intra-fabric link. If this parameter is different from 'src_fabric', then the link is considered inter-fabric link.
+ |
+
+
+ |
+
+
+ dst_interface
+
+
+ string
+ / required
+
+ |
+
+ |
+
+ Interface on the destination device which is part of the link being configured.
+ |
+
+
+ |
+
+
+ profile
+
+
+ -
+
+ |
+
+ |
+
+ Additional link related parameters that must be included while creating links.
+ |
+
+
+ |
+ |
+
+
+ admin_state
+
+
+ boolean
+ / required
+
+ |
+
+
+ |
+
+ Admin state of the link.
+ This parameter is not required if template is 'ext_evpn_multisite_overlay_setup', 'ext_multisite_underlay_setup', and 'ext_fabric_setup'.
+ |
+
+
+ |
+ |
+
+
+ auto_deploy
+
+
+ string
+ / required
+
+ |
+
+ |
+
+ Flag that controls auto generation of neighbor VRF Lite configuration for managed neighbor devices.
+ This parameter is required only if template is 'ext_fabric_setup'.
+ |
+
+
+ |
+ |
+
+
+ bgp_multihop
+
+
+ integer
+
+ |
+
+ Default:
5
+ |
+
+ eBGP Time-To-Live Value for Remote Peer.
+ This parameter is required only if template is 'ext_evpn_multisite_overlay_setup'.
+ |
+
+
+ |
+ |
+
+
+ deploy_dci_tracking
+
+
+ boolean
+
+ |
+
+
+ |
+
+ Flag to enable deploy DCI tracking.
+ This parameter is required only if template is 'ext_multisite_underlay_setup'.
+ This parameter MUST be included only if the fabrics are part of multisite.
+ |
+
+
+ |
+ |
+
+
+ dst_asn
+
+
+ string
+ / required
+
+ |
+
+ |
+
+ BGP ASN number on the destination fabric.
+ This parameter is required only if template is 'ext_fabric_setup' or 'ext_multisite_underlay_setup'. or "ext_evpn_multisite_overlay_setup"
+ |
+
+
+ |
+ |
+
+
+ ebgp_auth_key_type
+
+
+ integer
+ / required
+
+ |
+
+ Choices:
+ - 3 (3DES)
+ - 7 (Cisco)
+
+ |
+
+ BGP Key Encryption Type.
+ This parameter is required only if template is 'ext_multisite_underlay_setup' or 'ext_evpn_multisite_overlay_setup'.
+ This parameter is required only if inherit_from_msd is false.
+ |
+
+
+ |
+ |
+
+
+ ebgp_password
+
+
+ string
+ / required
+
+ |
+
+ |
+
+ Encrypted eBGP Password Hex String.
+ This parameter is required only if template is 'ext_multisite_underlay_setup' or 'ext_evpn_multisite_overlay_setup'.
+ This parameter is required only if inherit_from_msd is false.
+ |
+
+
+ |
+ |
+
+
+ ebgp_password_enable
+
+
+ boolean
+
+ |
+
+
+ |
+
+ Flag to enable eBGP password.
+ This parameter is required only if template is 'ext_multisite_underlay_setup' or 'ext_evpn_multisite_overlay_setup'.
+ |
+
+
+ |
+ |
+
+
+ enable_macsec
+
+
+ boolean
+
+ |
+
+
+ |
+
+ Enable MACsec on the link.
+ This parameter is applicable only if MACsec feature is enabled on the fabric.
+ This parameter is applicable only if template is 'int_intra_fabric_ipv6_link_local' or 'int_intra_fabric_num_link' or 'int_intra_fabric_unnum_link'.
+ |
+
+
+ |
+ |
+
+
+ inherit_from_msd
+
+
+ boolean
+
+ |
+
+
+ |
+
+ Flag indicating whether to inherit BGP password from MSD information.
+ Applicable only when source and destination fabric are in the same MSD fabric.
+ This parameter is required only if template is 'ext_multisite_underlay_setup' or 'ext_evpn_multisite_overlay_setup'
+ |
+
+
+ |
+ |
+
+
+ intf_vrf
+
+
+ string
+
+ |
+
+ Default:
""
+ |
+
+ Name of the non-default VRF for the link.
+ Make sure to configure the VRF before using it here.
+ This parameter is applicable only if template is 'int_intra_vpc_peer_keep_alive_link'.
+ |
+
+
+ |
+ |
+
+
+ ipv4_address
+
+
+ string
+ / required
+
+ |
+
+ |
+
+ IPV4 address of the source interface without mask.
+ This parameter is required only if template is 'ext_evpn_multisite_overlay_setup'.
+ |
+
+
+ |
+ |
+
+
+ ipv4_subnet
+
+
+ string
+ / required
+
+ |
+
+ |
+
+ IPV4 address of the source interface with mask.
+ This parameter is required only if template is 'ext_fabric_setup' or 'ext_multisite_underlay_setup'.
+ |
+
+
+ |
+ |
+
+
+ max_paths
+
+
+ integer
+
+ |
+
+ Default:
1
+ |
+
+ Maximum number of iBGP/eBGP paths.
+ This parameter is required only if template is 'ext_multisite_underlay_setup'.
+ |
+
+
+ |
+ |
+
+
+ mtu
+
+
+ integer
+ / required
+
+ |
+
+ |
+
+ MTU of the link.
+ This parameter is optional if template is 'ios_xe_int_intra_fabric_num_link'. The default value in this case will be 1500.
+ This parameter is not required if template is 'ext_evpn_multisite_overlay_setup'.
+ |
+
+
+ |
+ |
+
+
+ neighbor_ip
+
+
+ string
+ / required
+
+ |
+
+ |
+
+ IPV4 address of the neighbor switch on the destination fabric.
+ This parameter is required only if template is 'ext_fabric_setup' or 'ext_multisite_underlay_setup' or "ext_evpn_multisite_overlay_setup"
+ |
+
+
+ |
+ |
+
+
+ peer1_bfd_echo_disable
+
+
+ boolean
+
+ |
+
+
+ |
+
+ Enable BFD echo on the source interface. Only applicable if BFD is enabled on the fabric.
+ This parameter is applicable only if template is 'int_intra_fabric_num_link'.
+ |
+
+
+ |
+ |
+
+
+ peer1_cmds
+
+
+ list
+
+ |
+
+ Default:
[]
+ |
+
+ Commands to be included in the configuration under the source interface.
+ This parameter is not required if template is 'ext_evpn_multisite_overlay_setup'.
+ |
+
+
+ |
+ |
+
+
+ peer1_description
+
+
+ string
+
+ |
+
+ Default:
""
+ |
+
+ Description of the source interface.
+ This parameter is not required if template is 'ext_evpn_multisite_overlay_setup'.
+ |
+
+
+ |
+ |
+
+
+ peer1_ipv4_address
+
+
+ string
+ / required
+
+ |
+
+ |
+
+ IPV4 address of the source interface.
+ This parameter is optional if the underlying fabric is ipv6 enabled.
+ This parameter is required only if template is 'int_intra_fabric_num_link' or 'ios_xe_int_intra_fabric_num_link' or 'int_intra_vpc_peer_keep_alive_link'.
+ |
+
+
+ |
+ |
+
+
+ peer1_ipv6_address
+
+
+ string
+
+ |
+
+ Default:
""
+ |
+
+ IPV6 address of the source interface.
+ This parameter is required only if the underlying fabric is ipv6 enabled.
+ This parameter is required only if template is 'int_intra_fabric_num_link' or 'ios_xe_int_intra_fabric_num_link' or 'int_intra_vpc_peer_keep_alive_link'.
+ |
+
+
+ |
+ |
+
+
+ peer2_bfd_echo_disable
+
+
+ boolean
+
+ |
+
+
+ |
+
+ Enable BFD echo on the destination interface. Only applicable if BFD is enabled on the fabric.
+ This parameter is applicable only if template is 'int_intra_fabric_num_link'.
+ |
+
+
+ |
+ |
+
+
+ peer2_cmds
+
+
+ list
+
+ |
+
+ Default:
[]
+ |
+
+ Commands to be included in the configuration under the destination interface.
+ This parameter is not required if template is 'ext_evpn_multisite_overlay_setup'.
+ |
+
+
+ |
+ |
+
+
+ peer2_description
+
+
+ string
+
+ |
+
+ Default:
""
+ |
+
+ Description of the destination interface.
+ This parameter is not required if template is 'ext_evpn_multisite_overlay_setup'.
+ |
+
+
+ |
+ |
+
+
+ peer2_ipv4_address
+
+
+ string
+ / required
+
+ |
+
+ |
+
+ IPV4 address of the destination interface.
+ This parameter is optional if the underlying fabric is ipv6 enabled.
+ This parameter is required only if template is 'int_intra_fabric_num_link' or 'ios_xe_int_intra_fabric_num_link' or 'int_intra_vpc_peer_keep_alive_link'.
+ |
+
+
+ |
+ |
+
+
+ peer2_ipv6_address
+
+
+ string
+
+ |
+
+ Default:
""
+ |
+
+ IPV6 address of the destination interface.
+ This parameter is required only if the underlying fabric is ipv6 enabled.
+ This parameter is required only if template is 'int_intra_fabric_num_link' or 'ios_xe_int_intra_fabric_num_link' or 'int_intra_vpc_peer_keep_alive_link'.
+ |
+
+
+ |
+ |
+
+
+ route_tag
+
+
+ string
+
+ |
+
+ Default:
""
+ |
+
+ Routing tag associated with interface IP.
+ This parameter is required only if template is 'ext_multisite_underlay_setup'
+ |
+
+
+ |
+ |
+
+
+ src_asn
+
+
+ string
+ / required
+
+ |
+
+ |
+
+ BGP ASN number on the source fabric.
+ This parameter is required only if template is 'ext_fabric_setup' or 'ext_multisite_underlay_setup' or "ext_evpn_multisite_overlay_setup"
+ |
+
+
+ |
+ |
+
+
+ trm_enabled
+
+
+ boolean
+
+ |
+
+
+ |
+
+ Flag to enable Tenant Routed Multicast.
+ This parameter is required only if template is 'ext_evpn_multisite_overlay_setup'.
+ |
+
+
+
+ |
+
+
+ src_device
+
+
+ list
+ / required
+
+ |
+
+ |
+
+ IP address or DNS name of the source switch which is part of the link being configured.
+ |
+
+
+ |
+
+
+ src_interface
+
+
+ string
+ / required
+
+ |
+
+ |
+
+ Interface on the source device which is part of the link being configured.
+ |
+
+
+ |
+
+
+ template
+
+
+ string
+ / required
+
+ |
+
+ Choices:
+ - int_intra_fabric_ipv6_link_local(intra-fabric)
+ - int_intra_fabric_num_link (intra-fabric)
+ - int_intra_fabric_unnum_link (intra-fabric)
+ - int_intra_vpc_peer_keep_alive_link (intra-fabric)
+ - int_pre_provision_intra_fabric_link (intra-fabric)
+ - ios_xe_int_intra_fabric_num_link (intra-fabric)
+ - ext_fabric_setup (inter-fabric)
+ - ext_multisite_underlay_setup (inter-fabric)
+ - ext_evpn_multisite_overlay_setup (inter-fabric)
+
+ |
+
+ Name of the template that is applied on the link being configured.
+ The last 3 template choices are applicable for inter-fabric links and the others are applicable for intra-fabric links.
+ This parameter is required only for 'merged' and 'replaced' states. It is
+ optional for other states.
+ |
+
+
+
+
+
+ deploy
+
+
+ boolean
+
+ |
+
+
+ |
+
+ Flag to control deployment of links. If set to 'true' then the links included will be deployed to specified switches. If set to 'false', the links will be created but not deployed.
+ Setting this flag to 'true' will result in all pending configurations on the source and destination devices to be deployed.
+ |
+
+
+
+
+ src_fabric
+
+
+ string
+ / required
+
+ |
+
+ |
+
+ Name of the source fabric for links operations.
+ |
+
+
+
+
+ state
+
+
+ string
+
+ |
+
+ Choices:
+ merged ←
+ - replaced
+ - deleted
+ - query
+
+ |
+
+ The required state of the configuration after module completion.
+ |
+
+
+