Bug 1738286 - Deploying OC with multiple subnets under default networks fails: "Multiple subnet matches found for name '<subnet name>', use an ID to be mo re specific"
Summary: Deploying OC with multiple subnets under default networks fails: "Multiple su...
Keywords:
Status: CLOSED EOL
Alias: None
Product: Red Hat OpenStack
Classification: Red Hat
Component: documentation
Version: 15.0 (Stein)
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
: ---
Assignee: RHOS Documentation Team
QA Contact: RHOS Documentation Team
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2019-08-06 17:06 UTC by Alexander Chuzhoy
Modified: 2021-07-07 09:21 UTC (History)
5 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2021-07-07 09:21:13 UTC
Target Upstream Version:


Attachments (Terms of Use)

Description Alexander Chuzhoy 2019-08-06 17:06:26 UTC
Deploying OC with multiple subnets under default networks fails: "Multiple subnet matches found for name '<subnet name>', use an ID to be mo re specific"


Environment:
openstack-tripleo-heat-templates-10.6.1-0.20190801110459.7fbedf0.el8ost.noarch

Steps to reproduce:
1. Configure networks with multiple subnets like below:
########################################################################
#############################Deploy command ############################
########################################################################
openstack overcloud deploy --templates \
--libvirt-type kvm \
-e /home/stack/templates/nodes_data.yaml \
-r /home/stack/templates/roles_data.yaml \
-n /home/stack/templates/network_data.yaml \
-e /home/stack/templates/extraconfig.yaml \
-e  /usr/share/openstack-tripleo-heat-templates/environments/ceph-ansible/ceph-ansible.yaml \
-e /home/stack/virt/internal.yaml \
-e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \
-e /home/stack/virt/network/network-environment.yaml \
-e /home/stack/virt/network/dvr-override.yaml \
-e /usr/share/openstack-tripleo-heat-templates/environments/low-memory-usage.yaml \
-e /usr/share/openstack-tripleo-heat-templates/environments/ssl/tls-endpoints-public-ip.yaml \
-e /home/stack/virt/enable-tls.yaml \
-e /home/stack/virt/public_vip.yaml \
-e /home/stack/virt/inject-trust-anchor.yaml \
-e /home/stack/containers-prepare-parameter.yaml 


########################################################################
#############################roles_data.yaml############################
########################################################################


[stack@undercloud-0 ~]$ cat /home/stack/templates/roles_data.yaml 
###############################################################################
# File generated by TripleO
###############################################################################
###############################################################################
# Role: Controller                                                            #
###############################################################################
- name: Controller
  description: |
    Controller role that has all the controler services loaded and handles
    Database, Messaging and Network functions.
  CountDefault: 1
  tags:
    - primary
    - controller
  networks:
    External:
      subnet: external_subnet
    InternalApi:
      subnet: internal_api_subnet
    Storage:
      subnet: storage_subnet
    StorageMgmt:
      subnet: storage_mgmt_subnet
    Tenant:
      subnet: tenant_subnet
  # For systems with both IPv4 and IPv6, you may specify a gateway network for
  # each, such as ['ControlPlane', 'External']
  default_route_networks: ['External']
  HostnameFormatDefault: '%stackname%-controller-%index%'
  # Deprecated & backward-compatible values (FIXME: Make parameters consistent)
  # Set uses_deprecated_params to True if any deprecated params are used.
  uses_deprecated_params: True
  deprecated_param_extraconfig: 'controllerExtraConfig'
  deprecated_param_flavor: 'OvercloudControlFlavor'
  deprecated_param_image: 'controllerImage'
  deprecated_nic_config_name: 'controller.yaml'
  update_serial: 1
  ServicesDefault:
    - OS::TripleO::Services::Aide
    - OS::TripleO::Services::AodhApi
    - OS::TripleO::Services::AodhEvaluator
    - OS::TripleO::Services::AodhListener
    - OS::TripleO::Services::AodhNotifier
    - OS::TripleO::Services::AuditD
    - OS::TripleO::Services::BarbicanApi
    - OS::TripleO::Services::BarbicanBackendSimpleCrypto
    - OS::TripleO::Services::BarbicanBackendDogtag
    - OS::TripleO::Services::BarbicanBackendKmip
    - OS::TripleO::Services::BarbicanBackendPkcs11Crypto
    - OS::TripleO::Services::BootParams
    - OS::TripleO::Services::CACerts
    - OS::TripleO::Services::CeilometerAgentCentral
    - OS::TripleO::Services::CeilometerAgentNotification
    - OS::TripleO::Services::CephExternal
    - OS::TripleO::Services::CephMds
    - OS::TripleO::Services::CephMgr
    - OS::TripleO::Services::CephMon
    - OS::TripleO::Services::CephRbdMirror
    - OS::TripleO::Services::CephRgw
    - OS::TripleO::Services::CertmongerUser
    - OS::TripleO::Services::CinderApi
    - OS::TripleO::Services::CinderBackendDellPs
    - OS::TripleO::Services::CinderBackendDellSc
    - OS::TripleO::Services::CinderBackendDellEMCUnity
    - OS::TripleO::Services::CinderBackendDellEMCVMAXISCSI
    - OS::TripleO::Services::CinderBackendDellEMCVNX
    - OS::TripleO::Services::CinderBackendDellEMCXTREMIOISCSI
    - OS::TripleO::Services::CinderBackendNetApp
    - OS::TripleO::Services::CinderBackendPure
    - OS::TripleO::Services::CinderBackendScaleIO
    - OS::TripleO::Services::CinderBackendVRTSHyperScale
    - OS::TripleO::Services::CinderBackendNVMeOF
    - OS::TripleO::Services::CinderBackup
    - OS::TripleO::Services::CinderHPELeftHandISCSI
    - OS::TripleO::Services::CinderScheduler
    - OS::TripleO::Services::CinderVolume
    - OS::TripleO::Services::Clustercheck
    - OS::TripleO::Services::Collectd
    - OS::TripleO::Services::ContainerImagePrepare
    - OS::TripleO::Services::DesignateApi
    - OS::TripleO::Services::DesignateCentral
    - OS::TripleO::Services::DesignateProducer
    - OS::TripleO::Services::DesignateWorker
    - OS::TripleO::Services::DesignateMDNS
    - OS::TripleO::Services::DesignateSink
    - OS::TripleO::Services::Docker
    - OS::TripleO::Services::Ec2Api
    - OS::TripleO::Services::Etcd
    - OS::TripleO::Services::ExternalSwiftProxy
    - OS::TripleO::Services::Fluentd
    - OS::TripleO::Services::GlanceApi
    - OS::TripleO::Services::GnocchiApi
    - OS::TripleO::Services::GnocchiMetricd
    - OS::TripleO::Services::GnocchiStatsd
    - OS::TripleO::Services::HAproxy
    - OS::TripleO::Services::HeatApi
    - OS::TripleO::Services::HeatApiCloudwatch
    - OS::TripleO::Services::HeatApiCfn
    - OS::TripleO::Services::HeatEngine
    - OS::TripleO::Services::Horizon
    - OS::TripleO::Services::IpaClient
    - OS::TripleO::Services::Ipsec
    - OS::TripleO::Services::IronicApi
    - OS::TripleO::Services::IronicConductor
    - OS::TripleO::Services::IronicInspector
    - OS::TripleO::Services::IronicPxe
    - OS::TripleO::Services::IronicNeutronAgent
    - OS::TripleO::Services::Iscsid
    - OS::TripleO::Services::Keepalived
    - OS::TripleO::Services::Kernel
    - OS::TripleO::Services::Keystone
    - OS::TripleO::Services::LoginDefs
    - OS::TripleO::Services::ManilaApi
    - OS::TripleO::Services::ManilaBackendCephFs
    - OS::TripleO::Services::ManilaBackendIsilon
    - OS::TripleO::Services::ManilaBackendNetapp
    - OS::TripleO::Services::ManilaBackendUnity
    - OS::TripleO::Services::ManilaBackendVNX
    - OS::TripleO::Services::ManilaBackendVMAX
    - OS::TripleO::Services::ManilaScheduler
    - OS::TripleO::Services::ManilaShare
    - OS::TripleO::Services::Memcached
    - OS::TripleO::Services::MetricsQdr
    - OS::TripleO::Services::MistralApi
    - OS::TripleO::Services::MistralEngine
    - OS::TripleO::Services::MistralExecutor
    - OS::TripleO::Services::MistralEventEngine
    - OS::TripleO::Services::MySQL
    - OS::TripleO::Services::MySQLClient
    - OS::TripleO::Services::NeutronApi
    - OS::TripleO::Services::NeutronBgpVpnApi
    - OS::TripleO::Services::NeutronSfcApi
    - OS::TripleO::Services::NeutronCorePlugin
    - OS::TripleO::Services::NeutronDhcpAgent
    - OS::TripleO::Services::NeutronL2gwAgent
    - OS::TripleO::Services::NeutronL2gwApi
    - OS::TripleO::Services::NeutronL3Agent
    - OS::TripleO::Services::NeutronLbaasv2Agent
    - OS::TripleO::Services::NeutronLbaasv2Api
    - OS::TripleO::Services::NeutronLinuxbridgeAgent
    - OS::TripleO::Services::NeutronMetadataAgent
    - OS::TripleO::Services::NeutronML2FujitsuCfab
    - OS::TripleO::Services::NeutronML2FujitsuFossw
    - OS::TripleO::Services::NeutronOvsAgent
    - OS::TripleO::Services::NeutronVppAgent
    - OS::TripleO::Services::NovaApi
    - OS::TripleO::Services::NovaConductor
    - OS::TripleO::Services::NovaConsoleauth
    - OS::TripleO::Services::NovaIronic
    - OS::TripleO::Services::NovaMetadata
    - OS::TripleO::Services::NovaPlacement
    - OS::TripleO::Services::NovaScheduler
    - OS::TripleO::Services::NovaVncProxy
    - OS::TripleO::Services::ContainersLogrotateCrond
    - OS::TripleO::Services::OctaviaApi
    - OS::TripleO::Services::OctaviaDeploymentConfig
    - OS::TripleO::Services::OctaviaHealthManager
    - OS::TripleO::Services::OctaviaHousekeeping
    - OS::TripleO::Services::OctaviaWorker
    - OS::TripleO::Services::OpenDaylightApi
    - OS::TripleO::Services::OpenDaylightOvs
    - OS::TripleO::Services::OpenStackClients
    - OS::TripleO::Services::OVNDBs
    - OS::TripleO::Services::OVNController
    - OS::TripleO::Services::Pacemaker
    - OS::TripleO::Services::PankoApi
    - OS::TripleO::Services::OsloMessagingRpc
    - OS::TripleO::Services::OsloMessagingNotify
    - OS::TripleO::Services::Podman
    - OS::TripleO::Services::Redis
    - OS::TripleO::Services::Rhsm
    - OS::TripleO::Services::RsyslogSidecar
    - OS::TripleO::Services::SaharaApi
    - OS::TripleO::Services::SaharaEngine
    - OS::TripleO::Services::Securetty
    - OS::TripleO::Services::SensuClient
    - OS::TripleO::Services::SkydiveAgent
    - OS::TripleO::Services::SkydiveAnalyzer
    - OS::TripleO::Services::Snmp
    - OS::TripleO::Services::Sshd
    - OS::TripleO::Services::SwiftProxy
    - OS::TripleO::Services::SwiftDispersion
    - OS::TripleO::Services::SwiftRingBuilder
    - OS::TripleO::Services::SwiftStorage
    - OS::TripleO::Services::Tacker
    - OS::TripleO::Services::Timesync
    - OS::TripleO::Services::Timezone
    - OS::TripleO::Services::TripleoFirewall
    - OS::TripleO::Services::TripleoPackages
    - OS::TripleO::Services::Tuned
    - OS::TripleO::Services::Vpp
    - OS::TripleO::Services::Zaqar
###############################################################################
# Role: Compute1                                                              #
###############################################################################
- name: Compute1
  description: |
    Basic Compute1 Node role
  CountDefault: 1
  # Create external Neutron bridge (unset if using ML2/OVS without DVR)
  tags:
    - external_bridge
  networks:
    InternalApi:
      subnet: internal_api1_subnet
    Tenant:
      subnet: tenant1_subnet
    Storage:
      subnet: storage1_subnet
  HostnameFormatDefault: '%stackname%-novacompute1-%index%'
  RoleParametersDefault:
    TunedProfileName: "virtual-host"
  # Deprecated & backward-compatible values (FIXME: Make parameters consistent)
  # Set uses_deprecated_params to True if any deprecated params are used.
  # These deprecated_params only need to be used for existing roles and not for
  # composable roles.
  uses_deprecated_params: True
  deprecated_param_image: 'NovaImage'
  deprecated_param_extraconfig: 'NovaComputeExtraConfig'
  deprecated_param_metadata: 'NovaComputeServerMetadata'
  deprecated_param_scheduler_hints: 'NovaComputeSchedulerHints'
  deprecated_param_ips: 'NovaComputeIPs'
  deprecated_server_resource_name: 'NovaCompute'
  deprecated_nic_config_name: 'compute.yaml'
  update_serial: 25
  ServicesDefault:
    - OS::TripleO::Services::Aide
    - OS::TripleO::Services::AuditD
    - OS::TripleO::Services::BootParams
    - OS::TripleO::Services::CACerts
    - OS::TripleO::Services::CephClient
    - OS::TripleO::Services::CephExternal
    - OS::TripleO::Services::CertmongerUser
    - OS::TripleO::Services::Collectd
    - OS::TripleO::Services::ComputeCeilometerAgent
    - OS::TripleO::Services::ComputeNeutronCorePlugin
    - OS::TripleO::Services::ComputeNeutronL3Agent
    - OS::TripleO::Services::ComputeNeutronMetadataAgent
    - OS::TripleO::Services::ComputeNeutronOvsAgent
    - OS::TripleO::Services::Docker
    - OS::TripleO::Services::Fluentd
    - OS::TripleO::Services::IpaClient
    - OS::TripleO::Services::Ipsec
    - OS::TripleO::Services::Iscsid
    - OS::TripleO::Services::Kernel
    - OS::TripleO::Services::LoginDefs
    - OS::TripleO::Services::MetricsQdr
    - OS::TripleO::Services::MySQLClient
    - OS::TripleO::Services::NeutronBgpVpnBagpipe
    - OS::TripleO::Services::NeutronLinuxbridgeAgent
    - OS::TripleO::Services::NeutronVppAgent
    - OS::TripleO::Services::NovaCompute
    - OS::TripleO::Services::NovaLibvirt
    - OS::TripleO::Services::NovaLibvirtGuests
    - OS::TripleO::Services::NovaMigrationTarget
    - OS::TripleO::Services::ContainersLogrotateCrond
    - OS::TripleO::Services::OpenDaylightOvs
    - OS::TripleO::Services::Podman
    - OS::TripleO::Services::Rhsm
    - OS::TripleO::Services::RsyslogSidecar
    - OS::TripleO::Services::Securetty
    - OS::TripleO::Services::SensuClient
    - OS::TripleO::Services::SkydiveAgent
    - OS::TripleO::Services::Snmp
    - OS::TripleO::Services::Sshd
    - OS::TripleO::Services::Timesync
    - OS::TripleO::Services::Timezone
    - OS::TripleO::Services::TripleoFirewall
    - OS::TripleO::Services::TripleoPackages
    - OS::TripleO::Services::Tuned
    - OS::TripleO::Services::Vpp
    - OS::TripleO::Services::OVNController
    - OS::TripleO::Services::OVNMetadataAgent
###############################################################################
# Role: Compute2                                                              #
###############################################################################
- name: Compute2
  description: |
    Basic Compute2 Node role
  CountDefault: 1
  # Create external Neutron bridge (unset if using ML2/OVS without DVR)
  tags:
    - external_bridge
  networks:
    InternalApi:
      subnet: internal_api2_subnet
    Tenant:
      subnet: tenant2_subnet
    Storage:
      subnet: storage2_subnet
  HostnameFormatDefault: '%stackname%-novacompute2-%index%'
  RoleParametersDefault:
    TunedProfileName: "virtual-host"
  # Deprecated & backward-compatible values (FIXME: Make parameters consistent)
  # Set uses_deprecated_params to True if any deprecated params are used.
  # These deprecated_params only need to be used for existing roles and not for
  # composable roles.
  uses_deprecated_params: True
  deprecated_param_image: 'NovaImage'
  deprecated_param_extraconfig: 'NovaComputeExtraConfig'
  deprecated_param_metadata: 'NovaComputeServerMetadata'
  deprecated_param_scheduler_hints: 'NovaComputeSchedulerHints'
  deprecated_param_ips: 'NovaComputeIPs'
  deprecated_server_resource_name: 'NovaCompute'
  deprecated_nic_config_name: 'compute.yaml'
  update_serial: 25
  ServicesDefault:
    - OS::TripleO::Services::Aide
    - OS::TripleO::Services::AuditD
    - OS::TripleO::Services::BootParams
    - OS::TripleO::Services::CACerts
    - OS::TripleO::Services::CephClient
    - OS::TripleO::Services::CephExternal
    - OS::TripleO::Services::CertmongerUser
    - OS::TripleO::Services::Collectd
    - OS::TripleO::Services::ComputeCeilometerAgent
    - OS::TripleO::Services::ComputeNeutronCorePlugin
    - OS::TripleO::Services::ComputeNeutronL3Agent
    - OS::TripleO::Services::ComputeNeutronMetadataAgent
    - OS::TripleO::Services::ComputeNeutronOvsAgent
    - OS::TripleO::Services::Docker
    - OS::TripleO::Services::Fluentd
    - OS::TripleO::Services::IpaClient
    - OS::TripleO::Services::Ipsec
    - OS::TripleO::Services::Iscsid
    - OS::TripleO::Services::Kernel
    - OS::TripleO::Services::LoginDefs
    - OS::TripleO::Services::MetricsQdr
    - OS::TripleO::Services::MySQLClient
    - OS::TripleO::Services::NeutronBgpVpnBagpipe
    - OS::TripleO::Services::NeutronLinuxbridgeAgent
    - OS::TripleO::Services::NeutronVppAgent
    - OS::TripleO::Services::NovaCompute
    - OS::TripleO::Services::NovaLibvirt
    - OS::TripleO::Services::NovaLibvirtGuests
    - OS::TripleO::Services::NovaMigrationTarget
    - OS::TripleO::Services::ContainersLogrotateCrond
    - OS::TripleO::Services::OpenDaylightOvs
    - OS::TripleO::Services::Podman
    - OS::TripleO::Services::Rhsm
    - OS::TripleO::Services::RsyslogSidecar
    - OS::TripleO::Services::Securetty
    - OS::TripleO::Services::SensuClient
    - OS::TripleO::Services::SkydiveAgent
    - OS::TripleO::Services::Snmp
    - OS::TripleO::Services::Sshd
    - OS::TripleO::Services::Timesync
    - OS::TripleO::Services::Timezone
    - OS::TripleO::Services::TripleoFirewall
    - OS::TripleO::Services::TripleoPackages
    - OS::TripleO::Services::Tuned
    - OS::TripleO::Services::Vpp
    - OS::TripleO::Services::OVNController
    - OS::TripleO::Services::OVNMetadataAgent
###############################################################################
# Role: Compute3                                                              #
###############################################################################
- name: Compute3
  description: |
    Basic Compute3 Node role
  CountDefault: 1
  # Create external Neutron bridge (unset if using ML2/OVS without DVR)
  tags:
    - external_bridge
  networks:
    InternalApi:
      subnet: internal_api3_subnet
    Tenant:
      subnet: tenant3_subnet
    Storage:
      subnet: storage3_subnet
  HostnameFormatDefault: '%stackname%-novacompute3-%index%'
  RoleParametersDefault:
    TunedProfileName: "virtual-host"
  # Deprecated & backward-compatible values (FIXME: Make parameters consistent)
  # Set uses_deprecated_params to True if any deprecated params are used.
  # These deprecated_params only need to be used for existing roles and not for
  # composable roles.
  uses_deprecated_params: True
  deprecated_param_image: 'NovaImage'
  deprecated_param_extraconfig: 'NovaComputeExtraConfig'
  deprecated_param_metadata: 'NovaComputeServerMetadata'
  deprecated_param_scheduler_hints: 'NovaComputeSchedulerHints'
  deprecated_param_ips: 'NovaComputeIPs'
  deprecated_server_resource_name: 'NovaCompute'
  deprecated_nic_config_name: 'compute.yaml'
  update_serial: 25
  ServicesDefault:
    - OS::TripleO::Services::Aide
    - OS::TripleO::Services::AuditD
    - OS::TripleO::Services::BootParams
    - OS::TripleO::Services::CACerts
    - OS::TripleO::Services::CephClient
    - OS::TripleO::Services::CephExternal
    - OS::TripleO::Services::CertmongerUser
    - OS::TripleO::Services::Collectd
    - OS::TripleO::Services::ComputeCeilometerAgent
    - OS::TripleO::Services::ComputeNeutronCorePlugin
    - OS::TripleO::Services::ComputeNeutronL3Agent
    - OS::TripleO::Services::ComputeNeutronMetadataAgent
    - OS::TripleO::Services::ComputeNeutronOvsAgent
    - OS::TripleO::Services::Docker
    - OS::TripleO::Services::Fluentd
    - OS::TripleO::Services::IpaClient
    - OS::TripleO::Services::Ipsec
    - OS::TripleO::Services::Iscsid
    - OS::TripleO::Services::Kernel
    - OS::TripleO::Services::LoginDefs
    - OS::TripleO::Services::MetricsQdr
    - OS::TripleO::Services::MySQLClient
    - OS::TripleO::Services::NeutronBgpVpnBagpipe
    - OS::TripleO::Services::NeutronLinuxbridgeAgent
    - OS::TripleO::Services::NeutronVppAgent
    - OS::TripleO::Services::NovaCompute
    - OS::TripleO::Services::NovaLibvirt
    - OS::TripleO::Services::NovaLibvirtGuests
    - OS::TripleO::Services::NovaMigrationTarget
    - OS::TripleO::Services::ContainersLogrotateCrond
    - OS::TripleO::Services::OpenDaylightOvs
    - OS::TripleO::Services::Podman
    - OS::TripleO::Services::Rhsm
    - OS::TripleO::Services::RsyslogSidecar
    - OS::TripleO::Services::Securetty
    - OS::TripleO::Services::SensuClient
    - OS::TripleO::Services::SkydiveAgent
    - OS::TripleO::Services::Snmp
    - OS::TripleO::Services::Sshd
    - OS::TripleO::Services::Timesync
    - OS::TripleO::Services::Timezone
    - OS::TripleO::Services::TripleoFirewall
    - OS::TripleO::Services::TripleoPackages
    - OS::TripleO::Services::Tuned
    - OS::TripleO::Services::Vpp
    - OS::TripleO::Services::OVNController
    - OS::TripleO::Services::OVNMetadataAgent
###############################################################################
# Role: CephStorage1                                                          #
###############################################################################
- name: CephStorage1
  description: |
    Ceph OSD Storage node role
  networks:
    Storage:
      subnet: storage1_subnet
    StorageMgmt:
      subnet: storage_mgmt1_subnet
  uses_deprecated_params: False
  deprecated_nic_config_name: 'ceph-storage.yaml'
  # CephOSD present so serial has to be 1
  update_serial: 1
  ServicesDefault:
    - OS::TripleO::Services::Aide
    - OS::TripleO::Services::AuditD
    - OS::TripleO::Services::BootParams
    - OS::TripleO::Services::CACerts
    - OS::TripleO::Services::CephOSD
    - OS::TripleO::Services::CertmongerUser
    - OS::TripleO::Services::Collectd
    - OS::TripleO::Services::Docker
    - OS::TripleO::Services::Fluentd
    - OS::TripleO::Services::IpaClient
    - OS::TripleO::Services::Ipsec
    - OS::TripleO::Services::Kernel
    - OS::TripleO::Services::LoginDefs
    - OS::TripleO::Services::MetricsQdr
    - OS::TripleO::Services::MySQLClient
    - OS::TripleO::Services::ContainersLogrotateCrond
    - OS::TripleO::Services::Podman
    - OS::TripleO::Services::Rhsm
    - OS::TripleO::Services::RsyslogSidecar
    - OS::TripleO::Services::Securetty
    - OS::TripleO::Services::SensuClient
    - OS::TripleO::Services::Snmp
    - OS::TripleO::Services::Sshd
    - OS::TripleO::Services::Timesync
    - OS::TripleO::Services::Timezone
    - OS::TripleO::Services::TripleoFirewall
    - OS::TripleO::Services::TripleoPackages
    - OS::TripleO::Services::Tuned
###############################################################################
# Role: CephStorage2                                                          #
###############################################################################
- name: CephStorage2
  description: |
    Ceph OSD Storage node role
  networks:
    Storage:
      subnet: storage2_subnet
    StorageMgmt:
      subnet: storage_mgmt2_subnet
  uses_deprecated_params: False
  deprecated_nic_config_name: 'ceph-storage.yaml'
  # CephOSD present so serial has to be 1
  update_serial: 1
  ServicesDefault:
    - OS::TripleO::Services::Aide
    - OS::TripleO::Services::AuditD
    - OS::TripleO::Services::BootParams
    - OS::TripleO::Services::CACerts
    - OS::TripleO::Services::CephOSD
    - OS::TripleO::Services::CertmongerUser
    - OS::TripleO::Services::Collectd
    - OS::TripleO::Services::Docker
    - OS::TripleO::Services::Fluentd
    - OS::TripleO::Services::IpaClient
    - OS::TripleO::Services::Ipsec
    - OS::TripleO::Services::Kernel
    - OS::TripleO::Services::LoginDefs
    - OS::TripleO::Services::MetricsQdr
    - OS::TripleO::Services::MySQLClient
    - OS::TripleO::Services::ContainersLogrotateCrond
    - OS::TripleO::Services::Podman
    - OS::TripleO::Services::Rhsm
    - OS::TripleO::Services::RsyslogSidecar
    - OS::TripleO::Services::Securetty
    - OS::TripleO::Services::SensuClient
    - OS::TripleO::Services::Snmp
    - OS::TripleO::Services::Sshd
    - OS::TripleO::Services::Timesync
    - OS::TripleO::Services::Timezone
    - OS::TripleO::Services::TripleoFirewall
    - OS::TripleO::Services::TripleoPackages
    - OS::TripleO::Services::Tuned
###############################################################################
# Role: CephStorage3                                                          #
###############################################################################
- name: CephStorage3
  description: |
    Ceph OSD Storage node role
  networks:
    Storage:
      subnet: storage3_subnet
    StorageMgmt:
      subnet: storage_mgmt3_subnet
  uses_deprecated_params: False
  deprecated_nic_config_name: 'ceph-storage.yaml'
  # CephOSD present so serial has to be 1
  update_serial: 1
  ServicesDefault:
    - OS::TripleO::Services::Aide
    - OS::TripleO::Services::AuditD
    - OS::TripleO::Services::BootParams
    - OS::TripleO::Services::CACerts
    - OS::TripleO::Services::CephOSD
    - OS::TripleO::Services::CertmongerUser
    - OS::TripleO::Services::Collectd
    - OS::TripleO::Services::Docker
    - OS::TripleO::Services::Fluentd
    - OS::TripleO::Services::IpaClient
    - OS::TripleO::Services::Ipsec
    - OS::TripleO::Services::Kernel
    - OS::TripleO::Services::LoginDefs
    - OS::TripleO::Services::MetricsQdr
    - OS::TripleO::Services::MySQLClient
    - OS::TripleO::Services::ContainersLogrotateCrond
    - OS::TripleO::Services::Podman
    - OS::TripleO::Services::Rhsm
    - OS::TripleO::Services::RsyslogSidecar
    - OS::TripleO::Services::Securetty
    - OS::TripleO::Services::SensuClient
    - OS::TripleO::Services::Snmp
    - OS::TripleO::Services::Sshd
    - OS::TripleO::Services::Timesync
    - OS::TripleO::Services::Timezone
    - OS::TripleO::Services::TripleoFirewall
    - OS::TripleO::Services::TripleoPackages
    - OS::TripleO::Services::Tuned

########################################################################
#############################network_data.yaml##########################
########################################################################

[stack@undercloud-0 ~]$ cat /home/stack/templates/network_data.yaml 
# List of networks, used for j2 templating of enabled networks
#
# Supported values:
#
# name: Name of the network (mandatory)
# name_lower: lowercase version of name used for filenames
#             (optional, defaults to name.lower())
# enabled: Is the network enabled (optional, defaults to true)
# vlan: vlan for the network (optional)
# vip: Enable creation of a virtual IP on this network
# ip_subnet: IP/CIDR, e.g. '192.168.24.0/24' or '2001:db8:fd00:1000::/64'
#            (optional, may use parameter defaults instead)
# allocation_pools: IP range list e.g. [{'start':'10.0.0.4', 'end':'10.0.0.250'}]
# gateway_ip: gateway for the network (optional, may use parameter defaults)
# ipv6_subnet: Optional, sets default IPv6 subnet if IPv4 is already defined.
# ipv6_allocation_pools: Set default IPv6 allocation pools if IPv4 allocation pools
#                        are already defined.
# ipv6_gateway: Set an IPv6 gateway if IPv4 gateway already defined.
# ipv6: If ip_subnet not defined, this specifies that the network is IPv6-only.
# NOTE: IP-related values set parameter defaults in templates, may be overridden,
# either by operators, or e.g in environments/network-isolation-v6.yaml where we
# set some default IPv6 addresses.
# compat_name: for existing stack you may need to override the default
#              transformation for the resource's name.
#
# Example:
# - name Example
#   vip: false
#   ip_subnet: '10.0.2.0/24'
#   allocation_pools: [{'start': '10.0.2.4', 'end': '10.0.2.250'}]
#   gateway_ip: '10.0.2.254'
#
# To support backward compatility, two versions of the network definitions will
# be created, network/<network>.yaml and network/<network>_v6.yaml. Only
# one of these files may be used in the deployment at a time, since the
# parameters used for configuration are the same in both files. In the
# future, this behavior may be changed to create only one file for custom
# networks. You may specify IPv6 addresses for ip_subnet, allocation_pools,
# and gateway_ip if no IPv4 addresses are used for a custom network, or set
# ipv6: true, and the network/<network>.yaml file will be configured as IPv6.
#
# For configuring both IPv4 and IPv6 on the same interface, use two separate
# networks, and then assign both IPs in the custom NIC configuration templates.

- name: External
  vip: true
  name_lower: external
  vlan: 10
  ip_subnet: '10.0.0.0/24'
  allocation_pools: [{'start': '10.0.0.4', 'end': '10.0.0.250'}]
  gateway_ip: '10.0.0.1'
  ipv6_subnet: '2001:db8:fd00:1100::/64'
  ipv6_allocation_pools: [{'start': '2001:db8:fd00:1100::10', 'end': '2001:db8:fd00:1100:ffff:ffff:ffff:fffe'}]
  gateway_ipv6: '2001:db8:fd00:1000::1'
- name: InternalApi
  name_lower: internal_api
  vip: true
  vlan: 24
  ip_subnet: '172.121.1.0/24'
  allocation_pools: [{'start': '172.121.1.10', 'end': '172.121.1.200'}]
  gateway_ip: '172.121.1.1'
  ipv6_subnet: 'fd00:fd00:fd00:1004::/64'
  ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:1004::10', 'end': 'fd00:fd00:fd00:1004:ffff:ffff:ffff:fffe'}]
  subnets:
    internal_api_subnet:
      vlan: 23
      ip_subnet: '172.120.1.0/24'
      allocation_pools: [{'start': '172.120.1.10', 'end': '172.120.1.200'}]
      gateway_ip: '172.120.1.1'
      ipv6_subnet: 'fd00:fd00:fd00:1001::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:1000::10', 'end': 'fd00:fd00:fd00:1000:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:1000::1'
    internal_api1_subnet:
      vlan: 20
      ip_subnet: '172.117.1.0/24'
      allocation_pools: [{'start': '172.117.1.10', 'end': '172.117.1.200'}]
      gateway_ip: '172.117.1.1'
      ipv6_subnet: 'fd00:fd00:fd00:1001::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:1001::10', 'end': 'fd00:fd00:fd00:1001:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:1001::1'
    internal_api2_subnet:
      vlan: 21
      ip_subnet: '172.118.1.0/24'
      allocation_pools: [{'start': '172.118.1.10', 'end': '172.118.1.200'}]
      gateway_ip: '172.118.1.1'
      ipv6_subnet: 'fd00:fd00:fd00:1002::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:1002::10', 'end': 'fd00:fd00:fd00:1002:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:1002::1'
    internal_api3_subnet:
      vlan: 22
      ip_subnet: '172.119.1.0/24'
      allocation_pools: [{'start': '172.119.1.10', 'end': '172.119.1.200'}]
      gateway_ip: '172.119.1.1'
      ipv6_subnet: 'fd00:fd00:fd00:1003::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:1003::10', 'end': 'fd00:fd00:fd00:1003:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:1003::1'
- name: Storage
  vip: true
  vlan: 34
  name_lower: storage
  ip_subnet: '172.121.4.0/24'
  allocation_pools: [{'start': '172.121.4.10', 'end': '172.121.4.200'}]
  gateway_ip: '172.121.4.1'
  ipv6_subnet: 'fd00:fd00:fd00:2004::/64'
  ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:2004::10', 'end': 'fd00:fd00:fd00:2004:ffff:ffff:ffff:fffe'}]
  subnets:
    storage_subnet:
      vlan: 33
      ip_subnet: '172.120.3.0/24'
      allocation_pools: [{'start': '172.120.3.10', 'end': '172.120.3.200'}]
      gateway_ip: '172.120.3.1'
      ipv6_subnet: 'fd00:fd00:fd00:2000::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:2000::10', 'end': 'fd00:fd00:fd00:2000:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:2000::1'
    storage1_subnet:
      vlan: 30
      ip_subnet: '172.117.3.0/24'
      allocation_pools: [{'start': '172.117.3.10', 'end': '172.117.3.200'}]
      gateway_ip: '172.117.3.1'
      ipv6_subnet: 'fd00:fd00:fd00:2001::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:2001::10', 'end': 'fd00:fd00:fd00:2001:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:2001::1'
    storage2_subnet:
      vlan: 31
      ip_subnet: '172.118.3.0/24'
      allocation_pools: [{'start': '172.118.3.10', 'end': '172.118.3.200'}]
      gateway_ip: '172.118.3.1'
      ipv6_subnet: 'fd00:fd00:fd00:2002::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:2002::10', 'end': 'fd00:fd00:fd00:2002:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:2002::1'
    storage3_subnet:
      vlan: 32
      ip_subnet: '172.119.3.0/24'
      allocation_pools: [{'start': '172.119.3.10', 'end': '172.119.3.200'}]
      gateway_ip: '172.119.3.1'
      ipv6_subnet: 'fd00:fd00:fd00:2003::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:2003::10', 'end': 'fd00:fd00:fd00:2003:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:2003::1'
- name: StorageMgmt
  vlan: 44
  name_lower: storage_mgmt
  vip: true
  ip_subnet: '172.121.4.0/24'
  allocation_pools: [{'start': '172.121.4.10', 'end': '172.121.4.200'}]
  gateway_ip: '172.121.4.1'
  ipv6_subnet: 'fd00:fd00:fd00:3004::/64'
  ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:3004::10', 'end': 'fd00:fd00:fd00:3004:ffff:ffff:ffff:fffe'}]
  subnets:
    storage_mgmt_subnet:
      vlan: 43
      ip_subnet: '172.120.4.0/24'
      allocation_pools: [{'start': '172.120.4.10', 'end': '172.120.4.200'}]
      gateway_ip: '172.120.4.1'
      ipv6_subnet: 'fd00:fd00:fd00:3000::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:3000::10', 'end': 'fd00:fd00:fd00:3000:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:3000::1'
    storage_mgmt1_subnet:
      vlan: 40
      ip_subnet: '172.117.4.0/24'
      allocation_pools: [{'start': '172.117.4.10', 'end': '172.117.4.200'}]
      gateway_ip: '172.117.4.1'
      ipv6_subnet: 'fd00:fd00:fd00:3001::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:3001::10', 'end': 'fd00:fd00:fd00:3001:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:3001::1'
    storage_mgmt2_subnet:
      vlan: 41
      ip_subnet: '172.118.4.0/24'
      allocation_pools: [{'start': '172.118.4.10', 'end': '172.118.4.200'}]
      gateway_ip: '172.118.4.1'
      ipv6_subnet: 'fd00:fd00:fd00:3002::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:3002::10', 'end': 'fd00:fd00:fd00:3002:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:3002::1'
    storage_mgmt3_subnet:
      vlan: 42
      ip_subnet: '172.119.4.0/24'
      allocation_pools: [{'start': '172.119.4.10', 'end': '172.119.4.200'}]
      gateway_ip: '172.119.4.1'
      ipv6_subnet: 'fd00:fd00:fd00:3003::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:3003::10', 'end': 'fd00:fd00:fd00:3003:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:3003::1'
- name: Tenant
  vip: false  # Tenant network does not use VIPs
  name_lower: tenant
  vlan: 54
  ip_subnet: '172.121.2.0/24'
  allocation_pools: [{'start': '172.121.2.10', 'end': '172.121.2.200'}]
  gateway_ip: '172.121.2.1'
  ipv6_subnet: 'fd00:fd00:fd00:4000::/64'
  ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:4000::10', 'end': 'fd00:fd00:fd00:4000:ffff:ffff:ffff:fffe'}]
  subnets:
    tenant_subnet:
      vlan: 53
      ip_subnet: '172.120.2.0/24'
      allocation_pools: [{'start': '172.120.2.10', 'end': '172.120.2.200'}]
      gateway_ip: '172.120.2.1'
      ipv6_subnet: 'fd00:fd00:fd00:4000::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:4000::10', 'end': 'fd00:fd00:fd00:4000:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:4000::1'
    tenant1_subnet:
      vlan: 50
      ip_subnet: '172.117.2.0/24'
      allocation_pools: [{'start': '172.117.2.10', 'end': '172.117.2.200'}]
      gateway_ip: '172.117.2.1'
      ipv6_subnet: 'fd00:fd00:fd00:4001::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:4001::10', 'end': 'fd00:fd00:fd00:4001:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:4001::1'
    tenant2_subnet:
      vlan: 51
      ip_subnet: '172.118.2.0/24'
      allocation_pools: [{'start': '172.118.2.10', 'end': '172.118.2.200'}]
      gateway_ip: '172.118.2.1'
      ipv6_subnet: 'fd00:fd00:fd00:4002::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:4002::10', 'end': 'fd00:fd00:fd00:4002:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:4002::1'
    tenant3_subnet:
      vlan: 52
      ip_subnet: '172.119.2.0/24'
      allocation_pools: [{'start': '172.119.2.10', 'end': '172.119.2.200'}]
      gateway_ip: '172.119.2.1'
      ipv6_subnet: 'fd00:fd00:fd00:4003::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:4003::10', 'end': 'fd00:fd00:fd00:4003:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:4003::1'
- name: Management
  # Management network is enabled by default for backwards-compatibility, but
  # is not included in any roles by default. Add to role definitions to use.
  enabled: true
  vip: false  # Management network does not use VIPs
  name_lower: management
  vlan: 60
  ip_subnet: '172.20.0.0/24'
  allocation_pools: [{'start': '172.20.0.10', 'end': '172.20.0.250'}]
  gateway_ip: '172.20.0.254'
  ipv6_subnet: 'fd00:fd00:fd00:5000::/64'
  ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:5000::10', 'end': 'fd00:fd00:fd00:5000:ffff:ffff:ffff:fffe'}]
  gateway_ipv6: 'fd00:fd00:fd00:5000::1'
  subnets:
    management_leaf1:
      enabled: true
      vlan: 61
      ip_subnet: '172.20.1.0/24'
      allocation_pools: [{'start': '172.20.1.10', 'end': '172.20.1.250'}]
      gateway_ip: '172.20.1.254'
      ipv6_subnet: 'fd00:fd00:fd00:5001::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:5001::10', 'end': 'fd00:fd00:fd00:5001:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:5001::1'


########################################################################
#############################network-environment.yaml###################
########################################################################

[stack@undercloud-0 ~]$ cat /home/stack/virt/network/network-environment.yaml
parameter_defaults:
    DnsServers:
    - 10.0.0.1
    NeutronBridgeMappings: datacentre:br-ex,tenant:br-isolated
    NeutronExternalNetworkBridge: br-ex
    NeutronNetworkType: geneve
    NeutronTunnelTypes: geneve
    NeutronNetworkVLANRanges: tenant:1000:2000
resource_registry:
    OS::TripleO::CephStorage1::Net::SoftwareConfig: three-nics-vlans/ceph-storage1.yaml
    OS::TripleO::Compute1::Net::SoftwareConfig: three-nics-vlans/compute1.yaml
    OS::TripleO::Controller::Net::SoftwareConfig: three-nics-vlans/controller.yaml
    OS::TripleO::CephStorage2::Net::SoftwareConfig: three-nics-vlans/ceph-storage1.yaml
    OS::TripleO::Compute2::Net::SoftwareConfig: three-nics-vlans/compute1.yaml
    OS::TripleO::CephStorage3::Net::SoftwareConfig: three-nics-vlans/ceph-storage1.yaml
    OS::TripleO::Compute3::Net::SoftwareConfig: three-nics-vlans/compute1.yaml




########################################################################
#############################compute nic-config#########################
########################################################################
[stack@undercloud-0 ~]$ cat virt/network/three-nics-vlans/compute1.yaml
heat_template_version: rocky
description: >
  Software Config to drive os-net-config to configure multiple interfaces for the compute role.
parameters:
  ControlPlaneStaticRoutes:
    default: []
    description: 'Routes for the ctlplane network traffic. JSON route e.g. [{''destination'':''10.0.0.0/16'', ''nexthop'':''10.0.0.1''}]
      Unless the default is changed, the parameter is automatically resolved from the subnet host_routes attribute.'
    type: json
  ControlPlaneMtu:
    default: 1500
    description: The maximum transmission unit (MTU) size(in bytes) that is guaranteed to pass through the data path of the
      segments in the network. (The parameter is automatically resolved from the ctlplane network's mtu attribute.)
    type: number
  StorageMtu:
    default: 1500
    description: The maximum transmission unit (MTU) size(in bytes) that is guaranteed to pass through the data path of the
      segments in the Storage network.
    type: number
  StorageMgmtMtu:
    default: 1500
    description: The maximum transmission unit (MTU) size(in bytes) that is guaranteed to pass through the data path of the
      segments in the StorageMgmt network.
    type: number
  InternalApiMtu:
    default: 1500
    description: The maximum transmission unit (MTU) size(in bytes) that is guaranteed to pass through the data path of the
      segments in the InternalApi network.
    type: number
  TenantMtu:
    default: 1500
    description: The maximum transmission unit (MTU) size(in bytes) that is guaranteed to pass through the data path of the
      segments in the Tenant network.
    type: number
  ExternalMtu:
    default: 1500
    description: The maximum transmission unit (MTU) size(in bytes) that is guaranteed to pass through the data path of the
      segments in the External network.
    type: number
  ManagementMtu:
    default: 1500
    description: The maximum transmission unit (MTU) size(in bytes) that is guaranteed to pass through the data path of the
      segments in the Management network.
    type: number
  InternalApiInterfaceDefaultRoute: # Override this via parameter_defaults
    description: Default route for the specific network.
    type: string
  TenantInterfaceDefaultRoute: # Override this via parameter_defaults
    description: Default route for the specific network.
    type: string
  StorageInterfaceDefaultRoute: # Override this via parameter_defaults
    description: Default route for the specific network.
    type: string
  StorageMgmtInterfaceDefaultRoute: # Override this via parameter_defaults
    description: Default route for the specific network.
    type: string
  ControlPlaneIp:
    default: ''
    description: IP address/subnet on the ctlplane network
    type: string
  ExternalIpSubnet:
    default: ''
    description: IP address/subnet on the external network
    type: string
  InternalApiIpSubnet:
    default: ''
    description: IP address/subnet on the internal API network
    type: string
  StorageIpSubnet:
    default: ''
    description: IP address/subnet on the storage network
    type: string
  StorageMgmtIpSubnet:
    default: ''
    description: IP address/subnet on the storage mgmt network
    type: string
  TenantIpSubnet:
    default: ''
    description: IP address/subnet on the tenant network
    type: string
  ManagementIpSubnet: # Only populated when including environments/network-management.yaml
    default: ''
    description: IP address/subnet on the management network
    type: string
  ExternalNetworkVlanID:
    default: 10
    description: Vlan ID for the external network traffic.
    type: number
  InternalApiNetworkVlanID:
    default: 20
    description: Vlan ID for the internal_api network traffic.
    type: number
  StorageNetworkVlanID:
    default: 30
    description: Vlan ID for the storage network traffic.
    type: number
  StorageMgmtNetworkVlanID:
    default: 40
    description: Vlan ID for the storage mgmt network traffic.
    type: number
  TenantNetworkVlanID:
    default: 50
    description: Vlan ID for the tenant network traffic.
    type: number
  ExternalInterfaceDefaultRoute:
    default: 10.0.0.1
    description: default route for the external network
    type: string
  ControlPlaneSubnetCidr: # Override this via parameter_defaults
    default: '24'
    description: The subnet CIDR of the control plane network.
    type: string
  ControlPlaneDefaultRoute: # Override this via parameter_defaults
    description: The subnet CIDR of the control plane network.
    type: string
  DnsServers: # Override this via parameter_defaults
    default: []
    description: A list of DNS servers (2 max for some implementations) that will be added to resolv.conf.
    type: json
  EC2MetadataIp: # Override this via parameter_defaults
    description: The IP address of the EC2 metadata server.
    type: string
  StorageInterfaceRoutes:
    default: []
    description: 'Routes for the storage network traffic. JSON route e.g. [{''destination'':''10.0.0.0/16'', ''nexthop'':''10.0.0.1''}]
      Unless the default is changed, the parameter is automatically resolved from the subnet host_routes attribute.      '
    type: json
  StorageMgmtInterfaceRoutes:
    default: []
    description: 'Routes for the storage_mgmt network traffic. JSON route e.g. [{''destination'':''10.0.0.0/16'', ''nexthop'':''10.0.0.1''}]
      Unless the default is changed, the parameter is automatically resolved from the subnet host_routes attribute.      '
    type: json
  InternalApiInterfaceRoutes:
    default: []
    description: 'Routes for the internal_api network traffic. JSON route e.g. [{''destination'':''10.0.0.0/16'', ''nexthop'':''10.0.0.1''}]
      Unless the default is changed, the parameter is automatically resolved from the subnet host_routes attribute.      '
    type: json
  TenantInterfaceRoutes:
    default: []
    description: 'Routes for the tenant network traffic. JSON route e.g. [{''destination'':''10.0.0.0/16'', ''nexthop'':''10.0.0.1''}]
      Unless the default is changed, the parameter is automatically resolved from the subnet host_routes attribute.      '
    type: json
  ExternalInterfaceRoutes:
    default: []
    description: 'Routes for the external network traffic. JSON route e.g. [{''destination'':''10.0.0.0/16'', ''nexthop'':''10.0.0.1''}]
      Unless the default is changed, the parameter is automatically resolved from the subnet host_routes attribute.      '
    type: json
  ManagementInterfaceRoutes:
    default: []
    description: 'Routes for the management network traffic. JSON route e.g. [{''destination'':''10.0.0.0/16'', ''nexthop'':''10.0.0.1''}]
      Unless the default is changed, the parameter is automatically resolved from the subnet host_routes attribute.      '
    type: json
resources:
  OsNetConfigImpl:
    type: OS::Heat::SoftwareConfig
    properties:
      group: script
      config:
        str_replace:
          template:
            get_file: /usr/share/openstack-tripleo-heat-templates/network/scripts/run-os-net-config.sh
          params:
            $network_config:
              network_config:
              - type: interface
                name: nic1
                use_dhcp: false
                dns_servers:
                  get_param: DnsServers
                addresses:
                - ip_netmask:
                    list_join:
                    - /
                    - - get_param: ControlPlaneIp
                      - get_param: ControlPlaneSubnetCidr
                routes:
                - ip_netmask: 0.0.0.0/0
                  next_hop:
                    get_param: ControlPlaneDefaultRoute
                  # Optionally have this interface as default route
                  default: true
                - ip_netmask: 169.254.169.254/32
                  next_hop:
                    get_param: EC2MetadataIp
              - type: ovs_bridge
                name: br-isolated
                use_dhcp: false
                members:
                - type: interface
                  name: nic2
                  # force the MAC address of the bridge to this interface
                  primary: true
                - type: vlan
                  vlan_id:
                    get_param: InternalApiNetworkVlanID
                  addresses:
                  - ip_netmask:
                      get_param: InternalApiIpSubnet
                - type: vlan
                  vlan_id:
                    get_param: StorageNetworkVlanID
                  addresses:
                  - ip_netmask:
                      get_param: StorageIpSubnet
                - type: vlan
                  vlan_id:
                    get_param: TenantNetworkVlanID
                  addresses:
                  - ip_netmask:
                      get_param: TenantIpSubnet
              - type: ovs_bridge
              # This will default to br-ex, anything else requires specific
              # brige mapping entries for it to be used.
                name: bridge_name
                use_dhcp: false
                members:
                - type: interface
                  name: nic3
                  # force the MAC address of the bridge to this interface
                  primary: true
outputs:
  OS::stack_id:
    description: The OsNetConfigImpl resource.
    value:
      get_resource: OsNetConfigImpl


2.
Attempt to deploy OC with multiple subnets under default networks.



Result:
OC deployment fails with:

[overcloud.Networks.StorageMgmtNetwork.StorageMgmtSubnet_storage_mgmt1_subnet]: CREATE_COMPLETE  state changed
2019-08-06 16:33:04Z [overcloud.Networks.StorageMgmtNetwork]: CREATE_COMPLETE  Stack CREATE completed successfully
2019-08-06 16:33:04Z [overcloud.Networks.StorageMgmtNetwork]: CREATE_COMPLETE  state changed
2019-08-06 16:33:04Z [overcloud.Networks]: CREATE_COMPLETE  Stack CREATE completed successfully
2019-08-06 16:33:05Z [overcloud.Networks]: CREATE_COMPLETE  state changed
2019-08-06 16:33:10Z [overcloud.StorageVirtualIP]: CREATE_IN_PROGRESS  state changed
2019-08-06 16:33:10Z [overcloud.StorageMgmtVirtualIP]: CREATE_IN_PROGRESS  state changed
2019-08-06 16:33:10Z [overcloud.NetCidrMapValue]: CREATE_IN_PROGRESS  state changed
2019-08-06 16:33:10Z [overcloud.PublicVirtualIP]: CREATE_IN_PROGRESS  state changed
2019-08-06 16:33:10Z [overcloud.NetCidrMapValue]: CREATE_COMPLETE  state changed
2019-08-06 16:33:10Z [overcloud.RedisVirtualIP]: CREATE_IN_PROGRESS  state changed
2019-08-06 16:33:10Z [overcloud.InternalApiVirtualIP]: CREATE_IN_PROGRESS  state changed
2019-08-06 16:33:11Z [overcloud.StorageMgmtVirtualIP]: CREATE_FAILED  resources.StorageMgmtVirtualIP: Property error: resources.StorageMgmtPort.properties.fixed_ips[0].subnet: Multiple subne
t matches found for name 'storage_mgmt_subnet', use an ID to be more specific.
2019-08-06 16:33:11Z [overcloud]: CREATE_FAILED  Resource CREATE failed: resources.StorageMgmtVirtualIP: Property error: resources.StorageMgmtPort.properties.fixed_ips[0].subnet: Multiple su
bnet matches found for name 'storage_mgmt_subnet', use an ID to be more specific.
2019-08-06 16:33:11Z [overcloud.StorageVirtualIP]: CREATE_FAILED  resources.StorageVirtualIP: Property error: resources.StoragePort.properties.fixed_ips[0].subnet: Multiple subnet matches fo
und for name 'storage_subnet', use an ID to be more specific.
2019-08-06 16:33:11Z [overcloud]: CREATE_FAILED  Resource CREATE failed: resources.StorageVirtualIP: Property error: resources.StoragePort.properties.fixed_ips[0].subnet: Multiple subnet mat
ches found for name 'storage_subnet', use an ID to be more specific.
2019-08-06 16:33:11Z [overcloud.RedisVirtualIP]: CREATE_FAILED  resources.RedisVirtualIP: Property error: resources.VipPort.properties.fixed_ips[0].subnet: Multiple subnet matches found for 
name 'internal_api_subnet', use an ID to be more specific.
2019-08-06 16:33:11Z [overcloud]: CREATE_FAILED  Resource CREATE failed: resources.RedisVirtualIP: Property error: resources.VipPort.properties.fixed_ips[0].subnet: Multiple subnet matches f
ound for name 'internal_api_subnet', use an ID to be more specific.
2019-08-06 16:33:11Z [overcloud.InternalApiVirtualIP]: CREATE_FAILED  resources.InternalApiVirtualIP: Property error: resources.InternalApiPort.properties.fixed_ips[0].subnet: Multiple subne
t matches found for name 'internal_api_subnet', use an ID to be more specific.
2019-08-06 16:33:12Z [overcloud]: CREATE_FAILED  Resource CREATE failed: resources.InternalApiVirtualIP: Property error: resources.InternalApiPort.properties.fixed_ips[0].subnet: Multiple su
bnet matches found for name 'internal_api_subnet', use an ID to be more specific.
2019-08-06 16:33:12Z [overcloud.PublicVirtualIP]: CREATE_IN_PROGRESS  Stack CREATE started
2019-08-06 16:33:12Z [overcloud.PublicVirtualIP.ExternalPort]: CREATE_IN_PROGRESS  state changed
2019-08-06 16:33:13Z [overcloud.PublicVirtualIP.ExternalPort]: CREATE_COMPLETE  state changed
2019-08-06 16:33:13Z [overcloud.PublicVirtualIP]: CREATE_COMPLETE  Stack CREATE completed successfully
2019-08-06 16:33:14Z [overcloud.PublicVirtualIP]: CREATE_COMPLETE  state changed

 Stack overcloud/48cbfa74-5a87-4ff6-a450-32c1ba5b384a CREATE_FAILED 

overcloud.RedisVirtualIP:
  resource_type: OS::TripleO::Network::Ports::RedisVipPort
  physical_resource_id: 
  status: CREATE_FAILED
  status_reason: |
    resources.RedisVirtualIP: Property error: resources.VipPort.properties.fixed_ips[0].subnet: Multiple subnet matches found for name 'internal_api_subnet', use an ID to be more specific.
overcloud.StorageVirtualIP:
  resource_type: OS::TripleO::Network::Ports::StorageVipPort
  physical_resource_id: 
  status: CREATE_FAILED
  status_reason: |
    resources.StorageVirtualIP: Property error: resources.StoragePort.properties.fixed_ips[0].subnet: Multiple subnet matches found for name 'storage_subnet', use an ID to be more specific.
overcloud.InternalApiVirtualIP:
  resource_type: OS::TripleO::Network::Ports::InternalApiVipPort
  physical_resource_id: 
  status: CREATE_FAILED
  status_reason: |
    resources.InternalApiVirtualIP: Property error: resources.InternalApiPort.properties.fixed_ips[0].subnet: Multiple subnet matches found for name 'internal_api_subnet', use an ID to be m$
re specific.
overcloud.StorageMgmtVirtualIP:
  resource_type: OS::TripleO::Network::Ports::StorageMgmtVipPort
  physical_resource_id: 
  status: CREATE_FAILED
  status_reason: |
    resources.StorageMgmtVirtualIP: Property error: resources.StorageMgmtPort.properties.fixed_ips[0].subnet: Multiple subnet matches found for name 'storage_mgmt_subnet', use an ID to be m$
re specific.
Heat Stack create failed.

Comment 1 Bob Fournier 2019-08-06 18:39:54 UTC
I think you have some duplicates in the config that is causing this problem.

For internal_api the IPv6 subnets are duplicated:

internal_api_subnet:
      vlan: 23
      ip_subnet: '172.120.1.0/24'
      allocation_pools: [{'start': '172.120.1.10', 'end': '172.120.1.200'}]
      gateway_ip: '172.120.1.1'
      ipv6_subnet: 'fd00:fd00:fd00:1001::/64'  <===
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:1000::10', 'end': 'fd00:fd00:fd00:1000:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:1000::1'
    internal_api1_subnet:
      vlan: 20
      ip_subnet: '172.117.1.0/24'
      allocation_pools: [{'start': '172.117.1.10', 'end': '172.117.1.200'}]
      gateway_ip: '172.117.1.1'
      ipv6_subnet: 'fd00:fd00:fd00:1001::/64' <=== 
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:1001::10', 'end': 'fd00:fd00:fd00:1001:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:1001::1'

Also Storage and StorageMgmt are configured to use the same subnet.

- name: Storage
  vip: true
  vlan: 34
  name_lower: storage
  ip_subnet: '172.121.4.0/24'
  allocation_pools: [{'start': '172.121.4.10', 'end': '172.121.4.200'}]
  gateway_ip: '172.121.4.1'


- name: StorageMgmt
  vlan: 44
  name_lower: storage_mgmt
  vip: true
  ip_subnet: '172.121.4.0/24'
  allocation_pools: [{'start': '172.121.4.10', 'end': '172.121.4.200'}]
  gateway_ip: '172.121.4.1'

Comment 2 Alexander Chuzhoy 2019-08-06 21:12:28 UTC
Fixed:
[stack@undercloud-0 ~]$ cat templates/network_data.yaml 
# List of networks, used for j2 templating of enabled networks
#
# Supported values:
#
# name: Name of the network (mandatory)
# name_lower: lowercase version of name used for filenames
#             (optional, defaults to name.lower())
# enabled: Is the network enabled (optional, defaults to true)
# vlan: vlan for the network (optional)
# vip: Enable creation of a virtual IP on this network
# ip_subnet: IP/CIDR, e.g. '192.168.24.0/24' or '2001:db8:fd00:1000::/64'
#            (optional, may use parameter defaults instead)
# allocation_pools: IP range list e.g. [{'start':'10.0.0.4', 'end':'10.0.0.250'}]
# gateway_ip: gateway for the network (optional, may use parameter defaults)
# ipv6_subnet: Optional, sets default IPv6 subnet if IPv4 is already defined.
# ipv6_allocation_pools: Set default IPv6 allocation pools if IPv4 allocation pools
#                        are already defined.
# ipv6_gateway: Set an IPv6 gateway if IPv4 gateway already defined.
# ipv6: If ip_subnet not defined, this specifies that the network is IPv6-only.
# NOTE: IP-related values set parameter defaults in templates, may be overridden,
# either by operators, or e.g in environments/network-isolation-v6.yaml where we
# set some default IPv6 addresses.
# compat_name: for existing stack you may need to override the default
#              transformation for the resource's name.
#
# Example:
# - name Example
#   vip: false
#   ip_subnet: '10.0.2.0/24'
#   allocation_pools: [{'start': '10.0.2.4', 'end': '10.0.2.250'}]
#   gateway_ip: '10.0.2.254'
#
# To support backward compatility, two versions of the network definitions will
# be created, network/<network>.yaml and network/<network>_v6.yaml. Only
# one of these files may be used in the deployment at a time, since the
# parameters used for configuration are the same in both files. In the
# future, this behavior may be changed to create only one file for custom
# networks. You may specify IPv6 addresses for ip_subnet, allocation_pools,
# and gateway_ip if no IPv4 addresses are used for a custom network, or set
# ipv6: true, and the network/<network>.yaml file will be configured as IPv6.
#
# For configuring both IPv4 and IPv6 on the same interface, use two separate
# networks, and then assign both IPs in the custom NIC configuration templates.

- name: External
  vip: true
  name_lower: external
  vlan: 10
  ip_subnet: '10.0.0.0/24'
  allocation_pools: [{'start': '10.0.0.4', 'end': '10.0.0.250'}]
  gateway_ip: '10.0.0.1'
  ipv6_subnet: '2001:db8:fd00:1100::/64'
  ipv6_allocation_pools: [{'start': '2001:db8:fd00:1100::10', 'end': '2001:db8:fd00:1100:ffff:ffff:ffff:fffe'}]
  gateway_ipv6: '2001:db8:fd00:1000::1'
- name: InternalApi
  name_lower: internal_api
  vip: true
  vlan: 24
  ip_subnet: '172.121.1.0/24'
  allocation_pools: [{'start': '172.121.1.10', 'end': '172.121.1.200'}]
  gateway_ip: '172.121.1.1'
  ipv6_subnet: 'fd00:fd00:fd00:1004::/64'
  ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:1004::10', 'end': 'fd00:fd00:fd00:1004:ffff:ffff:ffff:fffe'}]
  subnets:
    internal_api_subnet:
      vlan: 23
      ip_subnet: '172.120.1.0/24'
      allocation_pools: [{'start': '172.120.1.10', 'end': '172.120.1.200'}]
      gateway_ip: '172.120.1.1'
      ipv6_subnet: 'fd00:fd00:fd00:1000::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:1000::10', 'end': 'fd00:fd00:fd00:1000:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:1000::1'
    internal_api1_subnet:
      vlan: 20
      ip_subnet: '172.117.1.0/24'
      allocation_pools: [{'start': '172.117.1.10', 'end': '172.117.1.200'}]
      gateway_ip: '172.117.1.1'
      ipv6_subnet: 'fd00:fd00:fd00:1001::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:1001::10', 'end': 'fd00:fd00:fd00:1001:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:1001::1'
    internal_api2_subnet:
      vlan: 21
      ip_subnet: '172.118.1.0/24'
      allocation_pools: [{'start': '172.118.1.10', 'end': '172.118.1.200'}]
      gateway_ip: '172.118.1.1'
      ipv6_subnet: 'fd00:fd00:fd00:1002::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:1002::10', 'end': 'fd00:fd00:fd00:1002:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:1002::1'
    internal_api3_subnet:
      vlan: 22
      ip_subnet: '172.119.1.0/24'
      allocation_pools: [{'start': '172.119.1.10', 'end': '172.119.1.200'}]
      gateway_ip: '172.119.1.1'
      ipv6_subnet: 'fd00:fd00:fd00:1003::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:1003::10', 'end': 'fd00:fd00:fd00:1003:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:1003::1'
- name: Storage
  vip: true
  vlan: 34
  name_lower: storage
  ip_subnet: '172.121.3.0/24'
  allocation_pools: [{'start': '172.121.3.10', 'end': '172.121.3.200'}]
  gateway_ip: '172.121.3.1'
  ipv6_subnet: 'fd00:fd00:fd00:2004::/64'
  ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:2004::10', 'end': 'fd00:fd00:fd00:2004:ffff:ffff:ffff:fffe'}]
  subnets:
    storage_subnet:
      vlan: 33
      ip_subnet: '172.120.3.0/24'
      allocation_pools: [{'start': '172.120.3.10', 'end': '172.120.3.200'}]
      gateway_ip: '172.120.3.1'
      ipv6_subnet: 'fd00:fd00:fd00:2000::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:2000::10', 'end': 'fd00:fd00:fd00:2000:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:2000::1'
    storage1_subnet:
      vlan: 30
      ip_subnet: '172.117.3.0/24'
      allocation_pools: [{'start': '172.117.3.10', 'end': '172.117.3.200'}]
      gateway_ip: '172.117.3.1'
      ipv6_subnet: 'fd00:fd00:fd00:2001::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:2001::10', 'end': 'fd00:fd00:fd00:2001:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:2001::1'
    storage2_subnet:
      vlan: 31
      ip_subnet: '172.118.3.0/24'
      allocation_pools: [{'start': '172.118.3.10', 'end': '172.118.3.200'}]
      gateway_ip: '172.118.3.1'
      ipv6_subnet: 'fd00:fd00:fd00:2002::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:2002::10', 'end': 'fd00:fd00:fd00:2002:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:2002::1'
    storage3_subnet:
      vlan: 32
      ip_subnet: '172.119.3.0/24'
      allocation_pools: [{'start': '172.119.3.10', 'end': '172.119.3.200'}]
      gateway_ip: '172.119.3.1'
      ipv6_subnet: 'fd00:fd00:fd00:2003::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:2003::10', 'end': 'fd00:fd00:fd00:2003:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:2003::1'
- name: StorageMgmt
  vlan: 44
  name_lower: storage_mgmt
  vip: true
  ip_subnet: '172.121.4.0/24'
  allocation_pools: [{'start': '172.121.4.10', 'end': '172.121.4.200'}]
  gateway_ip: '172.121.4.1'
  ipv6_subnet: 'fd00:fd00:fd00:3004::/64'
  ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:3004::10', 'end': 'fd00:fd00:fd00:3004:ffff:ffff:ffff:fffe'}]
  subnets:
    storage_mgmt_subnet:
      vlan: 43
      ip_subnet: '172.120.4.0/24'
      allocation_pools: [{'start': '172.120.4.10', 'end': '172.120.4.200'}]
      gateway_ip: '172.120.4.1'
      ipv6_subnet: 'fd00:fd00:fd00:3000::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:3000::10', 'end': 'fd00:fd00:fd00:3000:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:3000::1'
    storage_mgmt1_subnet:
      vlan: 40
      ip_subnet: '172.117.4.0/24'
      allocation_pools: [{'start': '172.117.4.10', 'end': '172.117.4.200'}]
      gateway_ip: '172.117.4.1'
      ipv6_subnet: 'fd00:fd00:fd00:3001::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:3001::10', 'end': 'fd00:fd00:fd00:3001:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:3001::1'
    storage_mgmt2_subnet:
      vlan: 41
      ip_subnet: '172.118.4.0/24'
      allocation_pools: [{'start': '172.118.4.10', 'end': '172.118.4.200'}]
      gateway_ip: '172.118.4.1'
      ipv6_subnet: 'fd00:fd00:fd00:3002::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:3002::10', 'end': 'fd00:fd00:fd00:3002:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:3002::1'
    storage_mgmt3_subnet:
      vlan: 42
      ip_subnet: '172.119.4.0/24'
      allocation_pools: [{'start': '172.119.4.10', 'end': '172.119.4.200'}]
      gateway_ip: '172.119.4.1'
      ipv6_subnet: 'fd00:fd00:fd00:3003::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:3003::10', 'end': 'fd00:fd00:fd00:3003:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:3003::1'
- name: Tenant
  vip: false  # Tenant network does not use VIPs
  name_lower: tenant
  vlan: 54
  ip_subnet: '172.121.2.0/24'
  allocation_pools: [{'start': '172.121.2.10', 'end': '172.121.2.200'}]
  gateway_ip: '172.121.2.1'
  ipv6_subnet: 'fd00:fd00:fd00:4000::/64'
  ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:4000::10', 'end': 'fd00:fd00:fd00:4000:ffff:ffff:ffff:fffe'}]
  subnets:
    tenant_subnet:
      vlan: 53
      ip_subnet: '172.120.2.0/24'
      allocation_pools: [{'start': '172.120.2.10', 'end': '172.120.2.200'}]
      gateway_ip: '172.120.2.1'
      ipv6_subnet: 'fd00:fd00:fd00:4000::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:4000::10', 'end': 'fd00:fd00:fd00:4000:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:4000::1'
    tenant1_subnet:
      vlan: 50
      ip_subnet: '172.117.2.0/24'
      allocation_pools: [{'start': '172.117.2.10', 'end': '172.117.2.200'}]
      gateway_ip: '172.117.2.1'
      ipv6_subnet: 'fd00:fd00:fd00:4001::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:4001::10', 'end': 'fd00:fd00:fd00:4001:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:4001::1'
    tenant2_subnet:
      vlan: 51
      ip_subnet: '172.118.2.0/24'
      allocation_pools: [{'start': '172.118.2.10', 'end': '172.118.2.200'}]
      gateway_ip: '172.118.2.1'
      ipv6_subnet: 'fd00:fd00:fd00:4002::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:4002::10', 'end': 'fd00:fd00:fd00:4002:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:4002::1'
    tenant3_subnet:
      vlan: 52
      ip_subnet: '172.119.2.0/24'
      allocation_pools: [{'start': '172.119.2.10', 'end': '172.119.2.200'}]
      gateway_ip: '172.119.2.1'
      ipv6_subnet: 'fd00:fd00:fd00:4003::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:4003::10', 'end': 'fd00:fd00:fd00:4003:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:4003::1'
- name: Management
  # Management network is enabled by default for backwards-compatibility, but
  # is not included in any roles by default. Add to role definitions to use.
  enabled: true
  vip: false  # Management network does not use VIPs
  name_lower: management
  vlan: 60
  ip_subnet: '172.20.0.0/24'
  allocation_pools: [{'start': '172.20.0.10', 'end': '172.20.0.250'}]
  gateway_ip: '172.20.0.254'
  ipv6_subnet: 'fd00:fd00:fd00:5000::/64'
  ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:5000::10', 'end': 'fd00:fd00:fd00:5000:ffff:ffff:ffff:fffe'}]
  gateway_ipv6: 'fd00:fd00:fd00:5000::1'
  subnets:
    management_leaf1:
      enabled: true
      vlan: 61
      ip_subnet: '172.20.1.0/24'
      allocation_pools: [{'start': '172.20.1.10', 'end': '172.20.1.250'}]
      gateway_ip: '172.20.1.254'
      ipv6_subnet: 'fd00:fd00:fd00:5001::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:5001::10', 'end': 'fd00:fd00:fd00:5001:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:5001::1'






The deployment fails with:

overcloud.RedisVirtualIP:
  resource_type: OS::TripleO::Network::Ports::RedisVipPort
  physical_resource_id: 
  status: CREATE_FAILED
  status_reason: |
    resources.RedisVirtualIP: Property error: resources.VipPort.properties.fixed_ips[0].subnet: Multiple subnet matches found for name 'internal_api_subnet', use an ID to be more specific.
overcloud.StorageVirtualIP:
  resource_type: OS::TripleO::Network::Ports::StorageVipPort
  physical_resource_id: 
  status: CREATE_FAILED
  status_reason: |
    resources.StorageVirtualIP: Property error: resources.StoragePort.properties.fixed_ips[0].subnet: Multiple subnet matches found for name 'storage_subnet', use an ID to be more specific.
overcloud.InternalApiVirtualIP:
  resource_type: OS::TripleO::Network::Ports::InternalApiVipPort
  physical_resource_id: 
  status: CREATE_FAILED
  status_reason: |
    resources.InternalApiVirtualIP: Property error: resources.InternalApiPort.properties.fixed_ips[0].subnet: Multiple subnet matches found for name 'internal_api_subnet', use an ID to be more specific.
overcloud.StorageMgmtVirtualIP:
  resource_type: OS::TripleO::Network::Ports::StorageMgmtVipPort
  physical_resource_id: 
  status: CREATE_FAILED
  status_reason: |
    resources.StorageMgmtVirtualIP: Property error: resources.StorageMgmtPort.properties.fixed_ips[0].subnet: Multiple subnet matches found for name 'storage_mgmt_subnet', use an ID to be more specific.
Heat Stack create failed.

Comment 3 Dan Sneddon 2019-08-07 19:51:29 UTC
The first subnet should not be defined separately, so remove this:

    internal_api_subnet:
      vlan: 23
      ip_subnet: '172.120.1.0/24'
      allocation_pools: [{'start': '172.120.1.10', 'end': '172.120.1.200'}]
      gateway_ip: '172.120.1.1'
      ipv6_subnet: 'fd00:fd00:fd00:1000::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:1000::10', 'end': 'fd00:fd00:fd00:1000:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:1000::1'

As well as the other places where you defined leaf0 separately (tenant_subnet, storage_subnet, etc.). The network definition contains the info for the leaf0, and you only have to define subnets separately for leaf1, leaf2, etc.

Comment 4 Alexander Chuzhoy 2019-08-07 20:33:30 UTC
We should emphasize in our doc and/or example that the following (using the InternalApi example but applies to any network) is wrong as internal_api_subnet is already defined above subnets.


- name: InternalApi
  name_lower: internal_api
  vip: true
  vlan: 24
  ip_subnet: '172.121.1.0/24'
  allocation_pools: [{'start': '172.121.1.10', 'end': '172.121.1.200'}]
  gateway_ip: '172.121.1.1'
  ipv6_subnet: 'fd00:fd00:fd00:1004::/64'
  ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:1004::10', 'end': 'fd00:fd00:fd00:1004:ffff:ffff:ffff:fffe'}]
  subnets:
    internal_api_subnet:
      vlan: 23
      ip_subnet: '172.120.1.0/24'
      allocation_pools: [{'start': '172.120.1.10', 'end': '172.120.1.200'}]
      gateway_ip: '172.120.1.1'
      ipv6_subnet: 'fd00:fd00:fd00:1001::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:1000::10', 'end': 'fd00:fd00:fd00:1000:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:1000::1'
    internal_api1_subnet:
      vlan: 20
      ip_subnet: '172.117.1.0/24'
      allocation_pools: [{'start': '172.117.1.10', 'end': '172.117.1.200'}]
      gateway_ip: '172.117.1.1'
      ipv6_subnet: 'fd00:fd00:fd00:1001::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:1001::10', 'end': 'fd00:fd00:fd00:1001:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:1001::1'



It should be written instead (here  getting rid of vlan24/172.121.1.0/24 , so if these are needed, should be in yet another subnet):


- name: InternalApi
  name_lower: internal_api
  vip: true
  vlan: 23
  ip_subnet: '172.120.1.0/24'
  allocation_pools: [{'start': '172.120.1.10', 'end': '172.120.1.200'}]
  gateway_ip: '172.120.1.1'
  ipv6_subnet: 'fd00:fd00:fd00:1001::/64'
  ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:1001::10', 'end': 'fd00:fd00:fd00:1001:ffff:ffff:ffff:fffe'}]
  subnets:
    internal_api1_subnet:
      vlan: 20
      ip_subnet: '172.117.1.0/24'
      allocation_pools: [{'start': '172.117.1.10', 'end': '172.117.1.200'}]
      gateway_ip: '172.117.1.1'
      ipv6_subnet: 'fd00:fd00:fd00:1001::/64'
      ipv6_allocation_pools: [{'start': 'fd00:fd00:fd00:1001::10', 'end': 'fd00:fd00:fd00:1001:ffff:ffff:ffff:fffe'}]
      gateway_ipv6: 'fd00:fd00:fd00:1001::1'


Note You need to log in before you can comment on or make changes to this bug.