Skip to content

fabric_create.py

Description

Create or update 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_create.yaml
---
config:
  - FABRIC_NAME: MyFabric
    FABRIC_TYPE: VXLAN_EVPN
    BGP_AS: 65002
    REPLICATION_MODE: Ingress
    VRF_VLAN_RANGE: 2000-2299
  - FABRIC_NAME: YourFabric
    FABRIC_TYPE: LAN_CLASSIC

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_create.py --config config/config_fabric_create.yaml
# output not shown

Example output

Fabrics created successfully

Fabrics create success
(.venv) AROBEL-M-G793% ./fabric_create.py --config prod/config_fabric_create.yaml
{
    "changed": true,
    "diff": [
        {
            "BGP_AS": 65002,
            "FABRIC_NAME": "MyFabric",
            "REPLICATION_MODE": "Ingress",
            "VRF_VLAN_RANGE": "2000-2299",
            "sequence_number": 1
        },
        {
            "FABRIC_NAME": "YourFabric",
            "sequence_number": 2
        }
    ],
    "failed": false,
    "metadata": [
        {
            "action": "fabric_create",
            "check_mode": false,
            "sequence_number": 1,
            "state": "merged"
        },
        {
            "action": "fabric_create",
            "check_mode": false,
            "sequence_number": 2,
            "state": "merged"
        }
    ],
    "response": [
        {
            "DATA": {
                "removed": "for brevity"
            },
            "MESSAGE": "OK",
            "METHOD": "POST",
            "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": "POST",
            "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
        }
    ],
    "result": [
        {
            "changed": true,
            "sequence_number": 1,
            "success": true
        },
        {
            "changed": true,
            "sequence_number": 2,
            "success": true
        }
    ]
}
(.venv) AROBEL-M-G793%

Fabrics already exist, and no changes are required

Fabrics do not require changes
(.venv) AROBEL-M-G793% ./fabric_create.py --ansible-vault $HOME/.ansible/vault --config prod/config_fabric_create.yaml
Vault password:
{
    "changed": false,
    "diff": [
        {
            "sequence_number": 1
        }
    ],
    "failed": false,
    "metadata": [
        {
            "action": "fabric_update",
            "check_mode": false,
            "sequence_number": 1,
            "state": "merged"
        }
    ],
    "response": [
        {
            "MESSAGE": "No fabrics to update for merged state.",
            "RETURN_CODE": 200,
            "sequence_number": 1
        }
    ],
    "result": [
        {
            "changed": false,
            "sequence_number": 1,
            "success": true
        }
    ]
}
(.venv) AROBEL-M-G793%

Fabric already exists, but requires changes to align with user's config

Below, we have changed REPLICATION_MODE and BGP_AS for fabric MyFabric Since SITE_ID, by default, is assigned the value of BGP_AS, we need to change it as well if we want it to be in sync with BGP_AS

config/config_fabric_create.yaml
---
config:
  - FABRIC_NAME: MyFabric
    FABRIC_TYPE: VXLAN_EVPN
    BGP_AS: 65004
    SITE_ID: 65004
    REPLICATION_MODE: Multicast
    VRF_VLAN_RANGE: 2000-2299
  - FABRIC_NAME: YourFabric
    FABRIC_TYPE: LAN_CLASSIC
User config changed some MyFabric parameters
{
    "changed": true,
    "diff": [
        {
            "BGP_AS": "65004",
            "FABRIC_NAME": "MyFabric",
            "REPLICATION_MODE": "Multicast",
            "SITE_ID": "65004",
            "sequence_number": 1
        },
        {
            "sequence_number": 2
        },
        {
            "sequence_number": 3
        }
    ],
    "failed": false,
    "metadata": [
        {
            "action": "fabric_update",
            "check_mode": false,
            "sequence_number": 1,
            "state": "merged"
        },
        {
            "action": "config_save",
            "check_mode": false,
            "sequence_number": 2,
            "state": "merged"
        },
        {
            "action": "config_deploy",
            "check_mode": false,
            "sequence_number": 3,
            "state": "merged"
        }
    ],
    "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
        },
        {
            "MESSAGE": "Fabric MyFabric DEPLOY is False or None. Skipping config-save.",
            "RETURN_CODE": 200,
            "sequence_number": 2
        },
        {
            "MESSAGE": "FabricConfigDeploy._can_fabric_be_deployed: Fabric MyFabric DEPLOY is False or None. Skipping config-deploy.",
            "RETURN_CODE": 200,
            "sequence_number": 3
        }
    ],
    "result": [
        {
            "changed": true,
            "sequence_number": 1,
            "success": true
        },
        {
            "changed": true,
            "sequence_number": 2,
            "success": true
        },
        {
            "changed": true,
            "sequence_number": 3,
            "success": true
        }
    ]
}