fabric_replace.py¶
Description¶
Replace the configuration for one or more fabrics.
Example configuration file¶
Note, for a description of all configuration parameters for all fabric types see dcnm_fabric.
config/config_fabric_replace.yaml
---
config:
- FABRIC_NAME: MyFabric
FABRIC_TYPE: VXLAN_EVPN
BGP_AS: 65002
REPLICATION_MODE: Ingress
- FABRIC_NAME: YourFabric
FABRIC_TYPE: LAN_CLASSIC
IS_READ_ONLY: False
Example Usage¶
The example below uses environment variables for credentials, so requires
only the --config
argument. See Running the Example Scripts
for details around specifying credentials from the command line, from
environment variables, from Ansible Vault, or a combination of these
credentials sources.
export ND_DOMAIN=local
export ND_IP4=10.1.1.1
export ND_PASSWORD=MySecret
export ND_USERNAME=admin
./fabric_replace.py --config config/config_fabric_replace.yaml
# output not shown
Example output¶
Fabric configurations replaced successfully¶
config/config_fabric_replace.yaml
---
config:
- FABRIC_NAME: MyFabric
FABRIC_TYPE: VXLAN_EVPN
BGP_AS: 65002
REPLICATION_MODE: Multicast
- FABRIC_NAME: YourFabric
FABRIC_TYPE: LAN_CLASSIC
IS_READ_ONLY: False
Fabric configuration replace success
(.venv) AROBEL-M-G793% ./fabric_replace.py --ansible-vault $HOME/.ansible/vault --config prod/config_fabric_create.yaml
Vault password:
{
"changed": true,
"diff": [
{
"FABRIC_NAME": "MyFabric",
"REPLICATION_MODE": "Multicast",
"sequence_number": 1
},
{
"FABRIC_NAME": "YourFabric",
"IS_READ_ONLY": "false",
"sequence_number": 2
},
{
"sequence_number": 3
},
{
"sequence_number": 4
},
{
"sequence_number": 5
},
{
"sequence_number": 6
}
],
"failed": false,
"metadata": [
{
"action": "fabric_replace",
"check_mode": false,
"sequence_number": 1,
"state": "replaced"
},
{
"action": "fabric_replace",
"check_mode": false,
"sequence_number": 2,
"state": "replaced"
},
{
"action": "config_save",
"check_mode": false,
"sequence_number": 3,
"state": "replaced"
},
{
"action": "config_save",
"check_mode": false,
"sequence_number": 4,
"state": "replaced"
},
{
"action": "config_deploy",
"check_mode": false,
"sequence_number": 5,
"state": "replaced"
},
{
"action": "config_deploy",
"check_mode": false,
"sequence_number": 6,
"state": "replaced"
}
],
"response": [
{
"DATA": {
"removed": "for brevity"
},
"MESSAGE": "OK",
"METHOD": "PUT",
"REQUEST_PATH": "https://10.1.1.1/appcenter/cisco/ndfc/api/v1/lan-fabric/rest/control/fabrics/MyFabric/Easy_Fabric",
"RETURN_CODE": 200,
"sequence_number": 1
},
{
"DATA": {
"removed": "for brevity"
},
"MESSAGE": "OK",
"METHOD": "PUT",
"REQUEST_PATH": "https://10.1.1.1/appcenter/cisco/ndfc/api/v1/lan-fabric/rest/control/fabrics/YourFabric/LAN_Classic",
"RETURN_CODE": 200,
"sequence_number": 2
},
{
"MESSAGE": "Fabric MyFabric DEPLOY is False or None. Skipping config-save.",
"RETURN_CODE": 200,
"sequence_number": 3
},
{
"MESSAGE": "Fabric YourFabric DEPLOY is False or None. Skipping config-save.",
"RETURN_CODE": 200,
"sequence_number": 4
},
{
"MESSAGE": "FabricConfigDeploy._can_fabric_be_deployed: Fabric MyFabric DEPLOY is False or None. Skipping config-deploy.",
"RETURN_CODE": 200,
"sequence_number": 5
},
{
"MESSAGE": "FabricConfigDeploy._can_fabric_be_deployed: Fabric YourFabric DEPLOY is False or None. Skipping config-deploy.",
"RETURN_CODE": 200,
"sequence_number": 6
}
],
"result": [
{
"changed": true,
"sequence_number": 1,
"success": true
},
{
"changed": true,
"sequence_number": 2,
"success": true
},
{
"changed": true,
"sequence_number": 3,
"success": true
},
{
"changed": true,
"sequence_number": 4,
"success": true
},
{
"changed": true,
"sequence_number": 5,
"success": true
},
{
"changed": true,
"sequence_number": 6,
"success": true
}
]
}
No changes are required¶
Fabrics do not require changes
(.venv) AROBEL-M-G793% ./fabric_replace.py --ansible-vault $HOME/.ansible/vault --config prod/config_fabric_replace.yaml
{
"changed": false,
"diff": [
{
"sequence_number": 1
}
],
"failed": false,
"metadata": [
{
"action": "fabric_replace",
"check_mode": false,
"sequence_number": 1,
"state": "replaced"
}
],
"response": [
{
"MESSAGE": "No fabrics to update for replaced state.",
"RETURN_CODE": 200,
"sequence_number": 1
}
],
"result": [
{
"changed": false,
"sequence_number": 1,
"success": true
}
]
}
(.venv) AROBEL-M-G793%
Fabric requires changes to align with user's config¶
Below, we have changed REPLICATION_MODE
for MyFabric
and
IS_READ_ONLY
for YourFabric
config/config_fabric_replace.yaml
---
config:
- FABRIC_NAME: MyFabric
REPLICATION_MODE: Multicast
FABRIC_TYPE: VXLAN_EVPN
BGP_AS: 65002
DEPLOY: False
- FABRIC_NAME: YourFabric
FABRIC_TYPE: LAN_CLASSIC
IS_READ_ONLY: True
DEPLOY: False
User config changed some MyFabric parameters
{
"changed": true,
"diff": [
{
"FABRIC_NAME": "MyFabric",
"REPLICATION_MODE": "Multicast",
"sequence_number": 1
},
{
"FABRIC_NAME": "YourFabric",
"IS_READ_ONLY": "true",
"sequence_number": 2
},
{
"sequence_number": 3
},
{
"sequence_number": 4
},
{
"sequence_number": 5
},
{
"sequence_number": 6
}
],
"failed": false,
"metadata": [
{
"action": "fabric_replace",
"check_mode": false,
"sequence_number": 1,
"state": "replaced"
},
{
"action": "fabric_replace",
"check_mode": false,
"sequence_number": 2,
"state": "replaced"
},
{
"action": "config_save",
"check_mode": false,
"sequence_number": 3,
"state": "replaced"
},
{
"action": "config_save",
"check_mode": false,
"sequence_number": 4,
"state": "replaced"
},
{
"action": "config_deploy",
"check_mode": false,
"sequence_number": 5,
"state": "replaced"
},
{
"action": "config_deploy",
"check_mode": false,
"sequence_number": 6,
"state": "replaced"
}
],
"response": [
{
"DATA": {
"removed": "for brevity"
},
"MESSAGE": "OK",
"METHOD": "PUT",
"REQUEST_PATH": "https://10.1.1.1/appcenter/cisco/ndfc/api/v1/lan-fabric/rest/control/fabrics/MyFabric/Easy_Fabric",
"RETURN_CODE": 200,
"sequence_number": 1
},
{
"DATA": {
"removed": "for brevity"
},
"MESSAGE": "OK",
"METHOD": "PUT",
"REQUEST_PATH": "https://10.1.1.1/appcenter/cisco/ndfc/api/v1/lan-fabric/rest/control/fabrics/YourFabric/LAN_Classic",
"RETURN_CODE": 200,
"sequence_number": 2
},
{
"MESSAGE": "Fabric MyFabric DEPLOY is False or None. Skipping config-save.",
"RETURN_CODE": 200,
"sequence_number": 3
},
{
"MESSAGE": "Fabric YourFabric DEPLOY is False or None. Skipping config-save.",
"RETURN_CODE": 200,
"sequence_number": 4
},
{
"MESSAGE": "FabricConfigDeploy._can_fabric_be_deployed: Fabric MyFabric DEPLOY is False or None. Skipping config-deploy.",
"RETURN_CODE": 200,
"sequence_number": 5
},
{
"MESSAGE": "FabricConfigDeploy._can_fabric_be_deployed: Fabric YourFabric DEPLOY is False or None. Skipping config-deploy.",
"RETURN_CODE": 200,
"sequence_number": 6
}
],
"result": [
{
"changed": true,
"sequence_number": 1,
"success": true
},
{
"changed": true,
"sequence_number": 2,
"success": true
},
{
"changed": true,
"sequence_number": 3,
"success": true
},
{
"changed": true,
"sequence_number": 4,
"success": true
},
{
"changed": true,
"sequence_number": 5,
"success": true
},
{
"changed": true,
"sequence_number": 6,
"success": true
}
]
}
(.venv) AROBEL-M-G793%