Port Cisco Nexus/UCSM ExtraConfig to AllNodes
authorSteven Hardy <shardy@redhat.com>
Thu, 10 Sep 2015 14:17:16 +0000 (10:17 -0400)
committerSteven Hardy <shardy@redhat.com>
Thu, 17 Sep 2015 14:50:39 +0000 (15:50 +0100)
Switch the implemention from a pre_deploy ExtraConfig to an
AllNodesExtraConfig, so we can collect the mac->hostname mapping
for all nodes, then calculate a NexusConfig based on that and
a provided mapping of switch ports to mac address.
The same conversion is also done to the NetworkUCSMHostList:

The port mappings are provided via parameter_defaults like:

parameter_defaults:
  NetworkNexusConfig: {
    "bxb-tor-1": {
      "username": "admin",
      "ssh_port": 22,
      "password": "lab",
      "ip_address": "10.86.7.204",
      "nve_src_intf": 0,
      "physnet": "datacentre",
      "servers": {
        "fa:16:3e:fa:be:ef": "1/11",
        "fa:16:3e:fa:5e:cf": "1/23",
        "fa:16:3e:fa:12:34": "2/34"
      }
    }
  }
  NetworkUCSMHostList: 'fa:16:3e:fa:be:ef:profile1'

This results in an entry like this appended to
/etc/puppet/hieradata/neutron_cisco_data.yaml:

neutron::plugins::ml2::cisco::nexus::nexus_config:\
 {"bxb-tor-1": {"username": "admin", "nve_src_intf": 0, "ssh_port": 22,
"servers": {"overcloud-compute02": "2/34", "overcloud-compute01": "1/23",
"overcloud-control01": "1/11"}, "password": "lab", "ip_address": "10.86.7.204",
"physnet": "datacentre"}}
neutron::plugins::ml2::cisco::ucsm::ucsm_host_list: overcloud-control01:profile1

Co-Authored-By: Rob Pothier <rpothier@cisco.com>
Co-Authored-By: Tim Swanson <tiswanso@cisco.com>
Change-Id: I372c3ffb6bd85b7239fcb9f3fc4fa51cd4a39332

environments/neutron-ml2-cisco-nexus-ucsm.yaml
puppet/extraconfig/all_nodes/neutron-ml2-cisco-nexus-ucsm.yaml [new file with mode: 0644]
puppet/extraconfig/pre_deploy/controller/network-cisco.yaml [deleted file]

index c291634..5a1a32a 100644 (file)
@@ -1,13 +1,13 @@
 # A Heat environment file which can be used to enable a
 # a Cisco Neutron plugin.
 resource_registry:
-  OS::TripleO::ControllerExtraConfigPre: ../puppet/extraconfig/pre_deploy/controller/network-cisco.yaml
+  OS::TripleO::AllNodesExtraConfig: ../puppet/extraconfig/all_nodes/neutron-ml2-cisco-nexus-ucsm.yaml
 
 parameter_defaults:
   NetworkUCSMIp: '127.0.0.1'
   NetworkUCSMUsername: 'admin'
   NetworkUCSMPassword: 'password'
-  NetworkUCSMHostList: 'host1:profile1, host2:profile2'
+  NetworkUCSMHostList: '12:34:56:78:9a:bc:profile1, 12:34:56:78:9a:de:profile2'
   NetworkUCSMSupportedPciDevs: ''
   NetworkNexusConfig: {}
   NetworkNexusManagedPhysicalNetwork: ''
@@ -23,4 +23,3 @@ parameter_defaults:
   NetworkNexusHostKeyChecks: 'false'
   NetworkNexusVxlanVniRanges: '0:0'
   NetworkNexusVxlanMcastRanges: '0.0.0.0:0.0.0.0'
-
diff --git a/puppet/extraconfig/all_nodes/neutron-ml2-cisco-nexus-ucsm.yaml b/puppet/extraconfig/all_nodes/neutron-ml2-cisco-nexus-ucsm.yaml
new file mode 100644 (file)
index 0000000..c873ef3
--- /dev/null
@@ -0,0 +1,326 @@
+heat_template_version: 2015-04-30
+
+description: Configure hieradata for Network Cisco configuration
+
+parameters:
+  # Parameters passed from the parent template
+  controller_servers:
+    type: json
+  compute_servers:
+    type: json
+  blockstorage_servers:
+    type: json
+  objectstorage_servers:
+    type: json
+  cephstorage_servers:
+    type: json
+
+  # extra parameters passed via parameter_defaults
+  NetworkUCSMIp:
+    type: string
+    description: Cisco UCSM IP
+    default: 127.0.0.1
+  NetworkUCSMUsername:
+    type: string
+    description: Cisco UCSM username
+    default: admin
+  NetworkUCSMPassword:
+    type: string
+    description: Cisco UCSM password
+    default: password
+  NetworkUCSMHostList:
+    type: string
+    description: >
+      Mac address to service profile mapping for UCSM-controlled hosts
+      The format is
+      '<host1-mac>:<profile>, <host2-mac>:<profile>, ...'
+    default: ''
+  NetworkUCSMSupportedPciDevs:
+    type: string
+    description: Cisco UCSM SR-IOV and VM-FEX vendors supported
+    default: ''
+  NetworkNexusConfig:
+    type: json
+    description: Nexus switch configuration
+    default: {}
+  NetworkNexusManagedPhysicalNetwork:
+    type: string
+    description: The name of the physical_network
+    default: ''
+  NetworkNexusVlanNamePrefix:
+    type: string
+    description: A short prefix to prepend to the VLAN name
+    default: 'q-'
+  NetworkNexusSviRoundRobin:
+    type: boolean
+    description: A flag to enable round robin scheduling
+    default: false
+  NetworkNexusProviderVlanNamePrefix:
+    type: string
+    description:  A short prefix to prepend to the VLAN name
+    default: 'p-'
+  NetworkNexusPersistentSwitchConfig:
+    type: string
+    description: To make Nexus device persistent
+    default: false
+  NetworkNexusSwitchHeartbeatTime:
+    type: number
+    description: Time interval to check the state of the Nexus device
+    default: 0
+  NetworkNexusSwitchReplayCount:
+    type: number
+    description: Number of times to attempt config replay
+    default: 3
+  NetworkNexusProviderVlanAutoCreate:
+    type: boolean
+    description: A flag whether to manage the creation and removal of VLANs
+    default: true
+  NetworkNexusProviderVlanAutoTrunk:
+    type: boolean
+    description: A flag whether to manage the trunk ports on the Nexus
+    default: true
+  NetworkNexusVxlanGlobalConfig:
+    type: boolean
+    description: A flag whether to manage the VXLAN global settings
+    default: true
+  NetworkNexusHostKeyChecks:
+    type: boolean
+    description: enable strict host key checks when connecting to Nexus switches
+    default: false
+  NetworkNexusVxlanVniRanges:
+    type: string
+    description: VXLAN Network IDs that are available for tenant network
+    default: ''
+  NetworkNexusVxlanMcastRanges:
+    type: string
+    description: Multicast groups for the VXLAN interface.
+    default: ''
+
+
+resources:
+  # First we lay down the base configuration via the static hieradata mappings
+  NetworkCiscoConfig:
+    type: OS::Heat::StructuredConfig
+    properties:
+      group: os-apply-config
+      config:
+        hiera:
+          datafiles:
+            neutron_cisco_data:
+              mapped_data:
+                neutron::plugins::ml2::cisco::ucsm::ucsm_ip: {get_input: UCSM_ip}
+                neutron::plugins::ml2::cisco::ucsm::ucsm_username: {get_input: UCSM_username}
+                neutron::plugins::ml2::cisco::ucsm::ucsm_password: {get_input: UCSM_password}
+                neutron::plugins::ml2::cisco::ucsm::ucsm_host_list: {get_input: UCSM_host_list}
+                neutron::plugins::ml2::cisco::ucsm::supported_pci_devs:  {get_input: UCSMSupportedPciDevs}
+                neutron::plugins::ml2::cisco::nexus::nexus_config: {get_input: NexusConfig}
+                neutron::plugins::ml2::cisco::nexus::managed_physical_network: {get_input: NexusManagedPhysicalNetwork}
+                neutron::plugins::ml2::cisco::nexus::vlan_name_prefix: {get_input: NexusVlanNamePrefix}
+                neutron::plugins::ml2::cisco::nexus::svi_round_robin: {get_input: NexusSviRoundRobin}
+                neutron::plugins::ml2::cisco::nexus::provider_vlan_name_prefix: {get_input: NexusProviderVlanNamePrefix}
+                neutron::plugins::ml2::cisco::nexus::persistent_switch_config: {get_input: NexusPersistentSwitchConfig}
+                neutron::plugins::ml2::cisco::nexus::switch_heartbeat_time: {get_input: NexusSwitchHeartbeatTime}
+                neutron::plugins::ml2::cisco::nexus::switch_replay_count: {get_input: NexusSwitchReplayCount}
+                neutron::plugins::ml2::cisco::nexus::provider_vlan_auto_create: {get_input: NexusProviderVlanAutoCreate}
+                neutron::plugins::ml2::cisco::nexus::provider_vlan_auto_trunk: {get_input: NexusProviderVlanAutoTrunk}
+                neutron::plugins::ml2::cisco::nexus::vxlan_global_config: {get_input: NexusVxlanGlobalConfig}
+                neutron::plugins::ml2::cisco::nexus::host_key_checks: {get_input: NexusHostKeyChecks}
+                neutron::plugins::ml2::cisco::type_nexus_vxlan::vni_ranges: {get_input: NexusVxlanVniRanges}
+                neutron::plugins::ml2::cisco::type_nexus_vxlan::mcast_ranges: {get_input: NexusVxlanMcastRanges}
+
+  NetworkCiscoDeployment:
+    type: OS::Heat::StructuredDeployments
+    properties:
+      config: {get_resource: NetworkCiscoConfig}
+      servers:  {get_param: controller_servers}
+      input_values:
+        UCSM_ip: {get_param: NetworkUCSMIp}
+        UCSM_username: {get_param: NetworkUCSMUsername}
+        UCSM_password: {get_param: NetworkUCSMPassword}
+        UCSM_host_list: {get_attr: [MappingToUCSMDeploymentsController, deploy_stdout]}
+        UCSMSupportedPciDevs: {get_param: NetworkUCSMSupportedPciDevs}
+        NexusConfig: {get_attr: [MappingToNexusDeploymentsController, deploy_stdout]}
+        NexusManagedPhysicalNetwork: {get_param: NetworkNexusManagedPhysicalNetwork}
+        NexusVlanNamePrefix: {get_param: NetworkNexusVlanNamePrefix}
+        NexusSviRoundRobin: {get_param: NetworkNexusSviRoundRobin}
+        NexusProviderVlanNamePrefix: {get_param: NetworkNexusProviderVlanNamePrefix}
+        NexusPersistentSwitchConfig: {get_param: NetworkNexusPersistentSwitchConfig}
+        NexusSwitchHeartbeatTime: {get_param: NetworkNexusSwitchHeartbeatTime}
+        NexusSwitchReplayCount: {get_param: NetworkNexusSwitchReplayCount}
+        NexusProviderVlanAutoCreate: {get_param: NetworkNexusProviderVlanAutoCreate}
+        NexusProviderVlanAutoTrunk: {get_param: NetworkNexusProviderVlanAutoTrunk}
+        NexusVxlanGlobalConfig: {get_param: NetworkNexusVxlanGlobalConfig}
+        NexusHostKeyChecks: {get_param: NetworkNexusHostKeyChecks}
+        NexusVxlanVniRanges: {get_param: NetworkNexusVxlanVniRanges}
+        NexusVxlanMcastRanges: {get_param: NetworkNexusVxlanMcastRanges}
+
+  # Now we collect the Mac->Hostname mappings for all nodes, which enables
+  # calculation of the neutron::plugins::ml2::cisco::nexus::nexus_config data
+  CollectMacConfig:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      config: |
+        #!/bin/sh
+        MACS=$(ifconfig  | grep ether | awk '{print $2}' | tr "\n" " ")
+        HOSTNAME=$(hostname -f)
+        echo "$HOSTNAME $MACS"
+
+  CollectMacDeploymentsController:
+    type: OS::Heat::SoftwareDeployments
+    properties:
+      servers:  {get_param: controller_servers}
+      config: {get_resource: CollectMacConfig}
+      actions: ['CREATE'] # Only do this on CREATE
+
+  CollectMacDeploymentsCompute:
+    type: OS::Heat::SoftwareDeployments
+    properties:
+      servers:  {get_param: compute_servers}
+      config: {get_resource: CollectMacConfig}
+      actions: ['CREATE'] # Only do this on CREATE
+
+  CollectMacDeploymentsBlockStorage:
+    type: OS::Heat::SoftwareDeployments
+    properties:
+      servers:  {get_param: blockstorage_servers}
+      config: {get_resource: CollectMacConfig}
+      actions: ['CREATE'] # Only do this on CREATE
+
+  CollectMacDeploymentsObjectStorage:
+    type: OS::Heat::SoftwareDeployments
+    properties:
+      servers:  {get_param: objectstorage_servers}
+      config: {get_resource: CollectMacConfig}
+      actions: ['CREATE'] # Only do this on CREATE
+
+  CollectMacDeploymentsCephStorage:
+    type: OS::Heat::SoftwareDeployments
+    properties:
+      servers:  {get_param: cephstorage_servers}
+      config: {get_resource: CollectMacConfig}
+      actions: ['CREATE'] # Only do this on CREATE
+
+  # Now we calculate the additional nexus config based on the mappings
+  MappingToNexusConfig:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      inputs:
+      - name: controller_mappings
+      - name: compute_mappings
+      - name: blockstorage_mappings
+      - name: objectstorage_mappings
+      - name: cephstorage_mappings
+      - name: nexus_config
+      config: |
+        #!/bin/python
+        import ast
+        import json
+        import os
+        from copy import deepcopy
+
+        mappings = ['controller_mappings',
+                    'compute_mappings',
+                    'blockstorage_mappings',
+                    'objectstorage_mappings',
+                    'cephstorage_mappings',
+                    'nexus_config']
+        mapdict_list = []
+        nexus = {}
+        for map_name in mappings:
+          f_name = '/root/' + map_name
+          map_data = os.getenv(map_name, "Nada")
+          with open(f_name, 'a') as f:
+            f.write(map_data)
+          if map_data is not "Nada":
+            if map_name is not 'nexus_config':
+              mapdict_list.append(ast.literal_eval(map_data))
+            else:
+              nexus = ast.literal_eval(map_data)
+
+        mac2host = {}
+        for mapdict in mapdict_list:
+          for (listnum, host2mac_list) in mapdict.iteritems():
+            vals = host2mac_list.rstrip().split()
+            for mac in vals[1:]:
+              mac2host[mac.lower()] = vals[0]
+
+        with open('/root/mac2host', 'a') as f:
+          f.write(str(mac2host))
+
+        # now we have mac to host, map host to switchport in hieradata
+        # nexus = ast.literal_eval(os.getenv('nexus_config', None))
+        nexus_cp = deepcopy(nexus)
+        for nexus_switch in nexus:
+          for (mac,swport) in nexus[nexus_switch]['servers'].iteritems():
+            lmac=mac.lower()
+            if lmac in mac2host:
+              if mac2host[lmac] in nexus_cp[nexus_switch]['servers']:
+                cur_swports = nexus_cp[nexus_switch]['servers'][mac2host[lmac]]
+                nexus_cp[nexus_switch]['servers'][mac2host[lmac]] = cur_swports + ',' + swport
+              else:
+                nexus_cp[nexus_switch]['servers'][mac2host[lmac]] = swport
+            del nexus_cp[nexus_switch]['servers'][mac]
+        # Note this echo means you can view the data via heat deployment-show
+        print json.dumps(nexus_cp)
+
+  MappingToNexusDeploymentsController:
+    type: OS::Heat::SoftwareDeployment
+    properties:
+      server:  {get_param: [controller_servers, '0']}
+      config: {get_resource: MappingToNexusConfig}
+      input_values:
+        # FIXME(shardy): It'd be more convenient if we could join these
+        # items together but because the returned format is a map (not a list)
+        # we can't use list_join or str_replace.  Possible Heat TODO.
+        controller_mappings: {get_attr: [CollectMacDeploymentsController, deploy_stdouts]}
+        compute_mappings: {get_attr: [CollectMacDeploymentsCompute, deploy_stdouts]}
+        blockstorage_mappings: {get_attr: [CollectMacDeploymentsBlockStorage, deploy_stdouts]}
+        objectstorage_mappings: {get_attr: [CollectMacDeploymentsObjectStorage, deploy_stdouts]}
+        cephstorage_mappings: {get_attr: [CollectMacDeploymentsCephStorage, deploy_stdouts]}
+        nexus_config: {get_param: NetworkNexusConfig}
+      actions: ['CREATE'] # Only do this on CREATE
+
+  MappingToUCSMConfig:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      inputs:
+       - name: ucsm_config
+      config: |
+        #!/bin/python
+        import ast
+        import os
+        with open('/root/mac2host', 'r') as f:
+          s=f.read()
+          m2h=ast.literal_eval(s)
+        ucs_config = os.getenv('ucsm_config', "Nada")
+        ucs_data = []
+        lines = ucs_config.split(',')
+        for line in lines:
+          entry=line.rsplit(":",1)
+          mac = entry[0].lower().strip()
+          if mac in m2h:
+            ucs_data.append(m2h[mac] + ":" + entry[1])
+
+        print ", ".join(ucs_data)
+
+
+  MappingToUCSMDeploymentsController:
+    type: OS::Heat::SoftwareDeployment
+    depends_on: MappingToNexusDeploymentsController
+    properties:
+      server:  {get_param: [controller_servers, '0']}
+      config: {get_resource: MappingToUCSMConfig}
+      input_values:
+        ucsm_config: {get_param: NetworkUCSMHostList}
+      actions: ['CREATE'] # Only do this on CREATE
+
+outputs:
+  # The Deployment applying the hieradata outputs the derived config-id, which
+  # changes if the input_values change, so if the stdouts from
+  # NetworkCiscoDeployment change, we need to reapply puppet (which will
+  # happen if we return a different config_identifier)
+  config_identifier:
+    value: {get_attr: [NetworkCiscoDeployment, deploy_stdouts]}
diff --git a/puppet/extraconfig/pre_deploy/controller/network-cisco.yaml b/puppet/extraconfig/pre_deploy/controller/network-cisco.yaml
deleted file mode 100644 (file)
index ed3bf29..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-heat_template_version: 2015-04-30
-
-description: Configure hieradata for Network Cisco configuration
-
-parameters:
-  server:
-    description: ID of the controller node to apply this config to
-    type: string
-
-  NetworkUCSMIp:
-    type: string
-    description: Cisco UCSM IP
-    default: 127.0.0.1
-  NetworkUCSMUsername:
-    type: string
-    description: Cisco UCSM username
-    default: admin
-  NetworkUCSMPassword:
-    type: string
-    description: Cisco UCSM password
-    default: password
-  NetworkUCSMHostList:
-    type: string
-    description: Cisco UCSM hostname
-    default: 127.0.0.1
-  NetworkUCSMSupportedPciDevs:
-    type: string
-    description: Cisco UCSM SR-IOV and VM-FEX vendors supported
-    default: ''
-  NetworkNexusConfig:
-    type: json
-    description: Nexus switch configuration
-    default: {}
-  NetworkNexusManagedPhysicalNetwork:
-    type: string
-    description: The name of the physical_network
-    default: ''
-  NetworkNexusVlanNamePrefix:
-    type: string
-    description: A short prefix to prepend to the VLAN name
-    default: 'q-'
-  NetworkNexusSviRoundRobin:
-    type: boolean
-    description: A flag to enable round robin scheduling
-    default: false
-  NetworkNexusProviderVlanNamePrefix:
-    type: string
-    description:  A short prefix to prepend to the VLAN name
-    default: 'p-'
-  NetworkNexusPersistentSwitchConfig:
-    type: string
-    description: To make Nexus device persistent
-    default: false
-  NetworkNexusSwitchHeartbeatTime:
-    type: number
-    description: Time interval to check the state of the Nexus device
-    default: 0
-  NetworkNexusSwitchReplayCount:
-    type: number
-    description: Number of times to attempt config replay
-    default: 3
-  NetworkNexusProviderVlanAutoCreate:
-    type: boolean
-    description: A flag whether to manage the creation and removal of VLANs
-    default: true
-  NetworkNexusProviderVlanAutoTrunk:
-    type: boolean
-    description: A flag whether to manage the trunk ports on the Nexus
-    default: true
-  NetworkNexusVxlanGlobalConfig:
-    type: boolean
-    description: A flag whether to manage the VXLAN global settings
-    default: true
-  NetworkNexusHostKeyChecks:
-    type: boolean
-    description: enable strict host key checks when connecting to Nexus switches
-    default: false
-  NetworkNexusVxlanVniRanges:
-    type: string
-    description: VXLAN Network IDs that are available for tenant network
-    default: ''
-  NetworkNexusVxlanMcastRanges:
-    type: string
-    description: Multicast groups for the VXLAN interface.
-    default: ''
-
-resources:
-  NetworkCiscoConfig:
-    type: OS::Heat::StructuredConfig
-    properties:
-      group: os-apply-config
-      config:
-        hiera:
-          datafiles:
-            neutron_cisco_data:
-              mapped_data:
-                neutron::plugins::ml2::cisco::ucsm::ucsm_ip: {get_input: UCSM_ip}
-                neutron::plugins::ml2::cisco::ucsm::ucsm_username: {get_input: UCSM_username}
-                neutron::plugins::ml2::cisco::ucsm::ucsm_password: {get_input: UCSM_password}
-                neutron::plugins::ml2::cisco::ucsm::ucsm_host_list: {get_input: UCSM_host_list}
-                neutron::plugins::ml2::cisco::ucsm::supported_pci_devs:  {get_input: UCSMSupportedPciDevs}
-                neutron::plugins::ml2::cisco::nexus::nexus_config: {get_input: NexusConfig}
-                neutron::plugins::ml2::cisco::nexus::managed_physical_network: {get_input: NexusManagedPhysicalNetwork}
-                neutron::plugins::ml2::cisco::nexus::vlan_name_prefix: {get_input: NexusVlanNamePrefix}
-                neutron::plugins::ml2::cisco::nexus::svi_round_robin: {get_input: NexusSviRoundRobin}
-                neutron::plugins::ml2::cisco::nexus::provider_vlan_name_prefix: {get_input: NexusProviderVlanNamePrefix}
-                neutron::plugins::ml2::cisco::nexus::persistent_switch_config: {get_input: NexusPersistentSwitchConfig}
-                neutron::plugins::ml2::cisco::nexus::switch_heartbeat_time: {get_input: NexusSwitchHeartbeatTime}
-                neutron::plugins::ml2::cisco::nexus::switch_replay_count: {get_input: NexusSwitchReplayCount}
-                neutron::plugins::ml2::cisco::nexus::provider_vlan_auto_create: {get_input: NexusProviderVlanAutoCreate}
-                neutron::plugins::ml2::cisco::nexus::provider_vlan_auto_trunk: {get_input: NexusProviderVlanAutoTrunk}
-                neutron::plugins::ml2::cisco::nexus::vxlan_global_config: {get_input: NexusVxlanGlobalConfig}
-                neutron::plugins::ml2::cisco::nexus::host_key_checks: {get_input: NexusHostKeyChecks}
-                neutron::plugins::ml2::cisco::type_nexus_vxlan::vni_ranges: {get_input: NexusVxlanVniRanges}
-                neutron::plugins::ml2::cisco::type_nexus_vxlan::mcast_ranges: {get_input: NexusVxlanMcastRanges}
-
-  NetworkCiscoDeployment:
-    type: OS::Heat::StructuredDeployment
-    properties:
-      config: {get_resource: NetworkCiscoConfig}
-      server: {get_param: server}
-      input_values:
-        UCSM_ip: {get_param: NetworkUCSMIp}
-        UCSM_username: {get_param: NetworkUCSMUsername}
-        UCSM_password: {get_param: NetworkUCSMPassword}
-        UCSM_host_list: {get_param: NetworkUCSMHostList}
-        UCSMSupportedPciDevs: {get_param: NetworkUCSMSupportedPciDevs}
-        NexusConfig: {get_param: NetworkNexusConfig}
-        NexusManagedPhysicalNetwork: {get_param: NetworkNexusManagedPhysicalNetwork}
-        NexusVlanNamePrefix: {get_param: NetworkNexusVlanNamePrefix}
-        NexusSviRoundRobin: {get_param: NetworkNexusSviRoundRobin}
-        NexusProviderVlanNamePrefix: {get_param: NetworkNexusProviderVlanNamePrefix}
-        NexusPersistentSwitchConfig: {get_param: NetworkNexusPersistentSwitchConfig}
-        NexusSwitchHeartbeatTime: {get_param: NetworkNexusSwitchHeartbeatTime}
-        NexusSwitchReplayCount: {get_param: NetworkNexusSwitchReplayCount}
-        NexusProviderVlanAutoCreate: {get_param: NetworkNexusProviderVlanAutoCreate}
-        NexusProviderVlanAutoTrunk: {get_param: NetworkNexusProviderVlanAutoTrunk}
-        NexusVxlanGlobalConfig: {get_param: NetworkNexusVxlanGlobalConfig}
-        NexusHostKeyChecks: {get_param: NetworkNexusHostKeyChecks}
-        NexusVxlanVniRanges: {get_param: NetworkNexusVxlanVniRanges}
-        NexusVxlanMcastRanges: {get_param: NetworkNexusVxlanMcastRanges}