# primary role is: CellControllerCompute heat_template_version: wallaby description: > Deploy an OpenStack environment, consisting of several node types (roles), Controller, Compute, BlockStorage, SwiftStorage and CephStorage. The Storage roles enable independent scaling of the storage components, but the minimal deployment is one Controller and one Compute node. # TODO(shadower): we should probably use the parameter groups to put # some order in here. parameters: # Common parameters (not specific to CloudNameStorage: default: overcloud.storage.localdomain description: > The DNS name of this cloud's storage endpoint. E.g. 'ci-overcloud.storage.tripleo.org'. type: string StorageVirtualFixedIPs: default: [] description: > Control the IP allocation for the StorageVirtualInterface port. E.g. [{'ip_address':'1.2.3.4'}] type: json # Special case StorageMgmt hostname param, which is CloudNameStorageManagement CloudNameStorageManagement: default: overcloud.storagemgmt.localdomain description: > The DNS name of this cloud's storage_mgmt endpoint. E.g. 'ci-overcloud.storagemgmt.tripleo.org'. type: string StorageMgmtVirtualFixedIPs: default: [] description: > Control the IP allocation for the StorageMgmtVirtualInterface port. E.g. [{'ip_address':'1.2.3.4'}] type: json # Special case the Internal API hostname param, which is CloudNameInternal CloudNameInternal: default: overcloud.internalapi.localdomain description: > The DNS name of this cloud's internal_api endpoint. E.g. 'ci-overcloud.internalapi.tripleo.org'. type: string InternalApiVirtualFixedIPs: default: [] description: > Control the IP allocation for the InternalApiVirtualInterface port. E.g. [{'ip_address':'1.2.3.4'}] type: json # Special case the External hostname param, which is CloudName CloudName: default: overcloud.localdomain description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org type: string # TODO (dsneddon) Legacy name, eventually refactor to match network name PublicVirtualFixedIPs: default: [] description: > Control the IP allocation for the PublicVirtualInterface port. E.g. [{'ip_address':'1.2.3.4'}] type: json ExternalVirtualFixedIPs: default: [] description: > Control the IP allocation for the ExternalVirtualInterface port. E.g. [{'ip_address':'1.2.3.4'}] type: json CloudNameCtlplane: default: overcloud.ctlplane.localdomain description: > The DNS name of this cloud's provisioning network endpoint. E.g. 'ci-overcloud.ctlplane.tripleo.org'. type: string ExtraHostFileEntries: default: [] description: List of extra hosts entries to be appended to /etc/hosts type: comma_delimited_list UndercloudHostsEntries: default: [] description: > List of undercloud hosts entries to be appended to /etc/hosts. The value is populated with the HEAT_HOSTS entries on the undercloud by tripleoclient when running deploy. type: comma_delimited_list EndpointMapOverride: default: {} description: Can be used to override the calcluated EndpointMap type: json ExtraConfig: default: {} description: | Additional hiera configuration to inject into the cluster. type: json DeployedServerPortMap: default: {} type: json NeutronControlPlaneID: default: 'ctlplane' type: string description: Neutron ID or name for ctlplane network. NeutronPhysicalBridge: default: 'br-ex' description: An OVS bridge to create for accessing external networks. type: string NeutronPublicInterface: default: nic1 description: Which interface to add to the NeutronPhysicalBridge. type: string ControlPlaneSubnet: description: The name of the undercloud Neutron control plane subnet default: ctlplane-subnet type: string ControlPlaneSubnetCidr: default: '' description: > The subnet CIDR of the control plane network. (The parameter is automatically resolved from the ctlplane subnet's cidr attribute.) type: string DnsSearchDomains: # Override this via parameter_defaults default: [] description: A list of DNS search domains to be added (in order) to resolv.conf. type: comma_delimited_list ControlFixedIPs: default: [] description: > Control the IP allocation for the ControlVirtualIP port. E.g. [{'ip_address':'1.2.3.4'}] type: json RabbitCookieSalt: type: string default: unset description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change. CloudDomain: default: 'localdomain' type: string description: > The DNS domain used for the hosts. This must match the overcloud_domain_name configured on the undercloud. ServerMetadata: default: {} description: > Extra properties or metadata passed to Nova for the created nodes in the overcloud. It's accessible via the Nova metadata API. type: json # Compute-specific params # FIXME(shardy) handle these deprecated names as they don't match compute.yaml HypervisorNeutronPhysicalBridge: default: 'br-ex' description: > An OVS bridge to create on each hypervisor. This defaults to br-ex the same as the control plane nodes, as we have a uniform configuration of the openvswitch agent. Typically should not need to be changed. type: string HypervisorNeutronPublicInterface: default: nic1 description: What interface to add to the HypervisorNeutronPhysicalBridge. type: string NodeCreateBatchSize: default: 30 description: Maxiumum batch size for creating nodes type: number NovaAdditionalCell: default: false description: Whether this is an cell additional to the default cell. type: boolean NovaLocalMetadataPerCell: default: false description: > Indicates that the nova-metadata API service has been deployed per-cell, so that we can have better performance and data isolation in a multi-cell deployment. Users should consider the use of this configuration depending on how neutron is setup. If networks span cells, you might need to run nova-metadata API service globally. If your networks are segmented along cell boundaries, then you can run nova-metadata API service per cell. When running nova-metadata API service per cell, you should also configure each Neutron metadata-agent to point to the corresponding nova-metadata API service. type: boolean BondInterfaceOvsOptions: default: '' description: The ovs_options or bonding_options string for the bond interface. Set things like lacp=active and/or bond_mode=balance-slb for OVS bonds or like mode=4 for Linux bonds using this option. type: string constraints: - allowed_pattern: ^((?!balance.tcp).)*$ description: The balance-tcp bond mode is known to cause packet loss and should not be used in BondInterfaceOvsOptions. NetworkConfigWithAnsible: description: NetworkConfig with ansible flag type: boolean default: True # Jinja loop for Role in role_data.yaml ControllerLocalMtu: # Override this via parameter_defaults default: 1500 description: MTU to use for the Undercloud local_interface. type: number constraints: - range: { min: 1000, max: 65536 } ControllerNetworkConfigTemplate: description: Controller NetworkConfig Template type: string default: '' ControllerExtraConfig: default: {} description: | Role specific additional hiera configuration to inject into the cluster. type: json controllerExtraConfig: default: {} description: | DEPRECATED use ControllerExtraConfig instead type: json # Parameters generated for Controller Role ControllerServices: description: A list of service resources (configured in the Heat resource_registry) which represent nested stacks for each service that should get installed on the Controller role. type: comma_delimited_list ControllerNetworkConfigUpdate: type: boolean description: > When set to "True", existing networks will be updated on the overcloud. This parameter replaces the functionality previously provided by NetworkDeploymentActions. Defaults to "False" so that only new nodes will have their networks configured. This is a role based parameter. default: False ControllerUseNMState: type: boolean description: > When set to "True", NMState provider is used in os-net-config command to apply the network configuration. This is a role based parameter. default: False ControllerIfcfgPurge: type: boolean description: > When set to "True", os-net-config will remove the ifcfg-* provider based configurations and apply the same network_configuration using nmstate provider. This flag is intended to be used along with "ControllerUseNMState: True" ONLY for provider migration use-case. This is a role based parameter. default: False ControllerAnyErrorsFatal: default: yes type: string ControllerMaxFailPercentage: default: 0 type: number ControllerCount: description: Number of Controller nodes to deploy type: number default: 1 ControllerHostnameFormat: type: string description: > Format for Controller node hostnames Note %index% is translated into the index of the node, e.g 0/1/2 etc and %stackname% is replaced with the stack name e.g overcloud default: "%stackname%-controller-%index%" ControllerRemovalPolicies: default: [] type: json description: > List of resources to be removed from Controller ResourceGroup when doing an update which requires removal of specific resources. Example format ComputeRemovalPolicies: [{'resource_list': ['0']}] ControllerRemovalPoliciesMode: default: append type: string description: > How to handle change to RemovalPolicies for Controller ResourceGroup when doing an update. Default mode 'append' will append to the existing blacklist and 'update' would replace the blacklist. ControllerSchedulerHints: type: json description: Optional scheduler hints to pass to nova default: {} ControllerParameters: type: json description: Optional Role Specific parameters to be provided to service default: {} ControllerExtraGroupVars: type: json description: Optional extra Ansible group vars default: {} ControllerControlPlaneSubnet: default: ctlplane-subnet description: | Name of the subnet on ctlplane network for this role. type: string ControllerServiceNetMap: default: {} description: | Role specific ServiceNetMap overrides, the map provided will be merged with the global ServiceNetMap when passing the ServiceNetMap to the ControllerServiceChain resource and the Controller resource group. For example: ControllerServiceNetMap: NovaLibvirtNetwork: internal_api_leaf2 type: json ControllerNetConfigOverride: default: {} description: | Custom JSON data to be used to override the os-net-config config. This is meant to be used by net_config_override parameter in tripleoclient to provide an easy means to pass in custom net configs for the Undercloud. type: json CellControllerLocalMtu: # Override this via parameter_defaults default: 1500 description: MTU to use for the Undercloud local_interface. type: number constraints: - range: { min: 1000, max: 65536 } CellControllerNetworkConfigTemplate: description: CellController NetworkConfig Template type: string default: '' CellControllerExtraConfig: default: {} description: | Role specific additional hiera configuration to inject into the cluster. type: json controllerExtraConfig: default: {} description: | DEPRECATED use CellControllerExtraConfig instead type: json # Parameters generated for CellController Role CellControllerServices: description: A list of service resources (configured in the Heat resource_registry) which represent nested stacks for each service that should get installed on the CellController role. type: comma_delimited_list CellControllerNetworkConfigUpdate: type: boolean description: > When set to "True", existing networks will be updated on the overcloud. This parameter replaces the functionality previously provided by NetworkDeploymentActions. Defaults to "False" so that only new nodes will have their networks configured. This is a role based parameter. default: False CellControllerUseNMState: type: boolean description: > When set to "True", NMState provider is used in os-net-config command to apply the network configuration. This is a role based parameter. default: False CellControllerIfcfgPurge: type: boolean description: > When set to "True", os-net-config will remove the ifcfg-* provider based configurations and apply the same network_configuration using nmstate provider. This flag is intended to be used along with "CellControllerUseNMState: True" ONLY for provider migration use-case. This is a role based parameter. default: False CellControllerAnyErrorsFatal: default: yes type: string CellControllerMaxFailPercentage: default: 0 type: number CellControllerCount: description: Number of CellController nodes to deploy type: number default: 1 CellControllerHostnameFormat: type: string description: > Format for CellController node hostnames Note %index% is translated into the index of the node, e.g 0/1/2 etc and %stackname% is replaced with the stack name e.g overcloud default: "%stackname%-controller-%index%" CellControllerRemovalPolicies: default: [] type: json description: > List of resources to be removed from CellController ResourceGroup when doing an update which requires removal of specific resources. Example format ComputeRemovalPolicies: [{'resource_list': ['0']}] CellControllerRemovalPoliciesMode: default: append type: string description: > How to handle change to RemovalPolicies for CellController ResourceGroup when doing an update. Default mode 'append' will append to the existing blacklist and 'update' would replace the blacklist. CellControllerSchedulerHints: type: json description: Optional scheduler hints to pass to nova default: {} CellControllerParameters: type: json description: Optional Role Specific parameters to be provided to service default: {} CellControllerExtraGroupVars: type: json description: Optional extra Ansible group vars default: {} CellControllerControlPlaneSubnet: default: ctlplane-subnet description: | Name of the subnet on ctlplane network for this role. type: string CellControllerServiceNetMap: default: {} description: | Role specific ServiceNetMap overrides, the map provided will be merged with the global ServiceNetMap when passing the ServiceNetMap to the CellControllerServiceChain resource and the CellController resource group. For example: CellControllerServiceNetMap: NovaLibvirtNetwork: internal_api_leaf2 type: json CellControllerNetConfigOverride: default: {} description: | Custom JSON data to be used to override the os-net-config config. This is meant to be used by net_config_override parameter in tripleoclient to provide an easy means to pass in custom net configs for the Undercloud. type: json CellControllerComputeLocalMtu: # Override this via parameter_defaults default: 1500 description: MTU to use for the Undercloud local_interface. type: number constraints: - range: { min: 1000, max: 65536 } CellControllerComputeNetworkConfigTemplate: description: CellControllerCompute NetworkConfig Template type: string default: '' CellControllerComputeExtraConfig: default: {} description: | Role specific additional hiera configuration to inject into the cluster. type: json controllerExtraConfig: default: {} description: | DEPRECATED use CellControllerComputeExtraConfig instead type: json # Parameters generated for CellControllerCompute Role CellControllerComputeServices: description: A list of service resources (configured in the Heat resource_registry) which represent nested stacks for each service that should get installed on the CellControllerCompute role. type: comma_delimited_list CellControllerComputeNetworkConfigUpdate: type: boolean description: > When set to "True", existing networks will be updated on the overcloud. This parameter replaces the functionality previously provided by NetworkDeploymentActions. Defaults to "False" so that only new nodes will have their networks configured. This is a role based parameter. default: False CellControllerComputeUseNMState: type: boolean description: > When set to "True", NMState provider is used in os-net-config command to apply the network configuration. This is a role based parameter. default: False CellControllerComputeIfcfgPurge: type: boolean description: > When set to "True", os-net-config will remove the ifcfg-* provider based configurations and apply the same network_configuration using nmstate provider. This flag is intended to be used along with "CellControllerComputeUseNMState: True" ONLY for provider migration use-case. This is a role based parameter. default: False CellControllerComputeAnyErrorsFatal: default: yes type: string CellControllerComputeMaxFailPercentage: default: 0 type: number CellControllerComputeCount: description: Number of CellControllerCompute nodes to deploy type: number default: 1 CellControllerComputeHostnameFormat: type: string description: > Format for CellControllerCompute node hostnames Note %index% is translated into the index of the node, e.g 0/1/2 etc and %stackname% is replaced with the stack name e.g overcloud default: "%stackname%-controller-compute-%index%" CellControllerComputeRemovalPolicies: default: [] type: json description: > List of resources to be removed from CellControllerCompute ResourceGroup when doing an update which requires removal of specific resources. Example format ComputeRemovalPolicies: [{'resource_list': ['0']}] CellControllerComputeRemovalPoliciesMode: default: append type: string description: > How to handle change to RemovalPolicies for CellControllerCompute ResourceGroup when doing an update. Default mode 'append' will append to the existing blacklist and 'update' would replace the blacklist. CellControllerComputeSchedulerHints: type: json description: Optional scheduler hints to pass to nova default: {} CellControllerComputeParameters: type: json description: Optional Role Specific parameters to be provided to service default: {} CellControllerComputeExtraGroupVars: type: json description: Optional extra Ansible group vars default: {} CellControllerComputeControlPlaneSubnet: default: ctlplane-subnet description: | Name of the subnet on ctlplane network for this role. type: string CellControllerComputeServiceNetMap: default: {} description: | Role specific ServiceNetMap overrides, the map provided will be merged with the global ServiceNetMap when passing the ServiceNetMap to the CellControllerComputeServiceChain resource and the CellControllerCompute resource group. For example: CellControllerComputeServiceNetMap: NovaLibvirtNetwork: internal_api_leaf2 type: json CellControllerComputeNetConfigOverride: default: {} description: | Custom JSON data to be used to override the os-net-config config. This is meant to be used by net_config_override parameter in tripleoclient to provide an easy means to pass in custom net configs for the Undercloud. type: json ComputeLocalMtu: # Override this via parameter_defaults default: 1500 description: MTU to use for the Undercloud local_interface. type: number constraints: - range: { min: 1000, max: 65536 } ComputeNetworkConfigTemplate: description: Compute NetworkConfig Template type: string default: '' ComputeExtraConfig: default: {} description: | Role specific additional hiera configuration to inject into the cluster. type: json NovaComputeExtraConfig: default: {} description: | DEPRECATED use ComputeExtraConfig instead type: json # Parameters generated for Compute Role ComputeServices: description: A list of service resources (configured in the Heat resource_registry) which represent nested stacks for each service that should get installed on the Compute role. type: comma_delimited_list ComputeNetworkConfigUpdate: type: boolean description: > When set to "True", existing networks will be updated on the overcloud. This parameter replaces the functionality previously provided by NetworkDeploymentActions. Defaults to "False" so that only new nodes will have their networks configured. This is a role based parameter. default: False ComputeUseNMState: type: boolean description: > When set to "True", NMState provider is used in os-net-config command to apply the network configuration. This is a role based parameter. default: False ComputeIfcfgPurge: type: boolean description: > When set to "True", os-net-config will remove the ifcfg-* provider based configurations and apply the same network_configuration using nmstate provider. This flag is intended to be used along with "ComputeUseNMState: True" ONLY for provider migration use-case. This is a role based parameter. default: False ComputeAnyErrorsFatal: default: yes type: string ComputeMaxFailPercentage: default: 0 type: number ComputeCount: description: Number of Compute nodes to deploy type: number default: 1 ComputeHostnameFormat: type: string description: > Format for Compute node hostnames Note %index% is translated into the index of the node, e.g 0/1/2 etc and %stackname% is replaced with the stack name e.g overcloud default: "%stackname%-novacompute-%index%" ComputeRemovalPolicies: default: [] type: json description: > List of resources to be removed from Compute ResourceGroup when doing an update which requires removal of specific resources. Example format ComputeRemovalPolicies: [{'resource_list': ['0']}] ComputeRemovalPoliciesMode: default: append type: string description: > How to handle change to RemovalPolicies for Compute ResourceGroup when doing an update. Default mode 'append' will append to the existing blacklist and 'update' would replace the blacklist. ComputeSchedulerHints: type: json description: Optional scheduler hints to pass to nova default: {} NovaComputeSchedulerHints: type: json description: DEPRECATED - use ComputeSchedulerHints instead default: {} ComputeParameters: type: json description: Optional Role Specific parameters to be provided to service default: {} ComputeExtraGroupVars: type: json description: Optional extra Ansible group vars default: {} ComputeControlPlaneSubnet: default: ctlplane-subnet description: | Name of the subnet on ctlplane network for this role. type: string ComputeServiceNetMap: default: {} description: | Role specific ServiceNetMap overrides, the map provided will be merged with the global ServiceNetMap when passing the ServiceNetMap to the ComputeServiceChain resource and the Compute resource group. For example: ComputeServiceNetMap: NovaLibvirtNetwork: internal_api_leaf2 type: json ComputeNetConfigOverride: default: {} description: | Custom JSON data to be used to override the os-net-config config. This is meant to be used by net_config_override parameter in tripleoclient to provide an easy means to pass in custom net configs for the Undercloud. type: json BlockStorageLocalMtu: # Override this via parameter_defaults default: 1500 description: MTU to use for the Undercloud local_interface. type: number constraints: - range: { min: 1000, max: 65536 } BlockStorageNetworkConfigTemplate: description: BlockStorage NetworkConfig Template type: string default: '' BlockStorageExtraConfig: default: {} description: | Role specific additional hiera configuration to inject into the cluster. type: json # Parameters generated for BlockStorage Role BlockStorageServices: description: A list of service resources (configured in the Heat resource_registry) which represent nested stacks for each service that should get installed on the BlockStorage role. type: comma_delimited_list BlockStorageNetworkConfigUpdate: type: boolean description: > When set to "True", existing networks will be updated on the overcloud. This parameter replaces the functionality previously provided by NetworkDeploymentActions. Defaults to "False" so that only new nodes will have their networks configured. This is a role based parameter. default: False BlockStorageUseNMState: type: boolean description: > When set to "True", NMState provider is used in os-net-config command to apply the network configuration. This is a role based parameter. default: False BlockStorageIfcfgPurge: type: boolean description: > When set to "True", os-net-config will remove the ifcfg-* provider based configurations and apply the same network_configuration using nmstate provider. This flag is intended to be used along with "BlockStorageUseNMState: True" ONLY for provider migration use-case. This is a role based parameter. default: False BlockStorageAnyErrorsFatal: default: yes type: string BlockStorageMaxFailPercentage: default: 0 type: number BlockStorageCount: description: Number of BlockStorage nodes to deploy type: number default: 0 BlockStorageHostnameFormat: type: string description: > Format for BlockStorage node hostnames Note %index% is translated into the index of the node, e.g 0/1/2 etc and %stackname% is replaced with the stack name e.g overcloud default: "%stackname%-blockstorage-%index%" BlockStorageRemovalPolicies: default: [] type: json description: > List of resources to be removed from BlockStorage ResourceGroup when doing an update which requires removal of specific resources. Example format ComputeRemovalPolicies: [{'resource_list': ['0']}] BlockStorageRemovalPoliciesMode: default: append type: string description: > How to handle change to RemovalPolicies for BlockStorage ResourceGroup when doing an update. Default mode 'append' will append to the existing blacklist and 'update' would replace the blacklist. BlockStorageSchedulerHints: type: json description: Optional scheduler hints to pass to nova default: {} BlockStorageParameters: type: json description: Optional Role Specific parameters to be provided to service default: {} BlockStorageExtraGroupVars: type: json description: Optional extra Ansible group vars default: {} BlockStorageControlPlaneSubnet: default: ctlplane-subnet description: | Name of the subnet on ctlplane network for this role. type: string BlockStorageServiceNetMap: default: {} description: | Role specific ServiceNetMap overrides, the map provided will be merged with the global ServiceNetMap when passing the ServiceNetMap to the BlockStorageServiceChain resource and the BlockStorage resource group. For example: BlockStorageServiceNetMap: NovaLibvirtNetwork: internal_api_leaf2 type: json BlockStorageNetConfigOverride: default: {} description: | Custom JSON data to be used to override the os-net-config config. This is meant to be used by net_config_override parameter in tripleoclient to provide an easy means to pass in custom net configs for the Undercloud. type: json ObjectStorageLocalMtu: # Override this via parameter_defaults default: 1500 description: MTU to use for the Undercloud local_interface. type: number constraints: - range: { min: 1000, max: 65536 } ObjectStorageNetworkConfigTemplate: description: ObjectStorage NetworkConfig Template type: string default: '' ObjectStorageExtraConfig: default: {} description: | Role specific additional hiera configuration to inject into the cluster. type: json # Parameters generated for ObjectStorage Role ObjectStorageServices: description: A list of service resources (configured in the Heat resource_registry) which represent nested stacks for each service that should get installed on the ObjectStorage role. type: comma_delimited_list ObjectStorageNetworkConfigUpdate: type: boolean description: > When set to "True", existing networks will be updated on the overcloud. This parameter replaces the functionality previously provided by NetworkDeploymentActions. Defaults to "False" so that only new nodes will have their networks configured. This is a role based parameter. default: False ObjectStorageUseNMState: type: boolean description: > When set to "True", NMState provider is used in os-net-config command to apply the network configuration. This is a role based parameter. default: False ObjectStorageIfcfgPurge: type: boolean description: > When set to "True", os-net-config will remove the ifcfg-* provider based configurations and apply the same network_configuration using nmstate provider. This flag is intended to be used along with "ObjectStorageUseNMState: True" ONLY for provider migration use-case. This is a role based parameter. default: False ObjectStorageAnyErrorsFatal: default: yes type: string ObjectStorageMaxFailPercentage: default: 0 type: number ObjectStorageCount: description: Number of ObjectStorage nodes to deploy type: number default: 0 ObjectStorageHostnameFormat: type: string description: > Format for ObjectStorage node hostnames Note %index% is translated into the index of the node, e.g 0/1/2 etc and %stackname% is replaced with the stack name e.g overcloud default: "%stackname%-objectstorage-%index%" ObjectStorageRemovalPolicies: default: [] type: json description: > List of resources to be removed from ObjectStorage ResourceGroup when doing an update which requires removal of specific resources. Example format ComputeRemovalPolicies: [{'resource_list': ['0']}] ObjectStorageRemovalPoliciesMode: default: append type: string description: > How to handle change to RemovalPolicies for ObjectStorage ResourceGroup when doing an update. Default mode 'append' will append to the existing blacklist and 'update' would replace the blacklist. ObjectStorageSchedulerHints: type: json description: Optional scheduler hints to pass to nova default: {} ObjectStorageParameters: type: json description: Optional Role Specific parameters to be provided to service default: {} ObjectStorageExtraGroupVars: type: json description: Optional extra Ansible group vars default: {} ObjectStorageControlPlaneSubnet: default: ctlplane-subnet description: | Name of the subnet on ctlplane network for this role. type: string ObjectStorageServiceNetMap: default: {} description: | Role specific ServiceNetMap overrides, the map provided will be merged with the global ServiceNetMap when passing the ServiceNetMap to the ObjectStorageServiceChain resource and the ObjectStorage resource group. For example: ObjectStorageServiceNetMap: NovaLibvirtNetwork: internal_api_leaf2 type: json ObjectStorageNetConfigOverride: default: {} description: | Custom JSON data to be used to override the os-net-config config. This is meant to be used by net_config_override parameter in tripleoclient to provide an easy means to pass in custom net configs for the Undercloud. type: json CephStorageLocalMtu: # Override this via parameter_defaults default: 1500 description: MTU to use for the Undercloud local_interface. type: number constraints: - range: { min: 1000, max: 65536 } CephStorageNetworkConfigTemplate: description: CephStorage NetworkConfig Template type: string default: '' CephStorageExtraConfig: default: {} description: | Role specific additional hiera configuration to inject into the cluster. type: json # Parameters generated for CephStorage Role CephStorageServices: description: A list of service resources (configured in the Heat resource_registry) which represent nested stacks for each service that should get installed on the CephStorage role. type: comma_delimited_list CephStorageNetworkConfigUpdate: type: boolean description: > When set to "True", existing networks will be updated on the overcloud. This parameter replaces the functionality previously provided by NetworkDeploymentActions. Defaults to "False" so that only new nodes will have their networks configured. This is a role based parameter. default: False CephStorageUseNMState: type: boolean description: > When set to "True", NMState provider is used in os-net-config command to apply the network configuration. This is a role based parameter. default: False CephStorageIfcfgPurge: type: boolean description: > When set to "True", os-net-config will remove the ifcfg-* provider based configurations and apply the same network_configuration using nmstate provider. This flag is intended to be used along with "CephStorageUseNMState: True" ONLY for provider migration use-case. This is a role based parameter. default: False CephStorageAnyErrorsFatal: default: yes type: string CephStorageMaxFailPercentage: default: 0 type: number CephStorageCount: description: Number of CephStorage nodes to deploy type: number default: 0 CephStorageHostnameFormat: type: string description: > Format for CephStorage node hostnames Note %index% is translated into the index of the node, e.g 0/1/2 etc and %stackname% is replaced with the stack name e.g overcloud default: "%stackname%-cephstorage-%index%" CephStorageRemovalPolicies: default: [] type: json description: > List of resources to be removed from CephStorage ResourceGroup when doing an update which requires removal of specific resources. Example format ComputeRemovalPolicies: [{'resource_list': ['0']}] CephStorageRemovalPoliciesMode: default: append type: string description: > How to handle change to RemovalPolicies for CephStorage ResourceGroup when doing an update. Default mode 'append' will append to the existing blacklist and 'update' would replace the blacklist. CephStorageSchedulerHints: type: json description: Optional scheduler hints to pass to nova default: {} CephStorageParameters: type: json description: Optional Role Specific parameters to be provided to service default: {} CephStorageExtraGroupVars: type: json description: Optional extra Ansible group vars default: {} CephStorageControlPlaneSubnet: default: ctlplane-subnet description: | Name of the subnet on ctlplane network for this role. type: string CephStorageServiceNetMap: default: {} description: | Role specific ServiceNetMap overrides, the map provided will be merged with the global ServiceNetMap when passing the ServiceNetMap to the CephStorageServiceChain resource and the CephStorage resource group. For example: CephStorageServiceNetMap: NovaLibvirtNetwork: internal_api_leaf2 type: json CephStorageNetConfigOverride: default: {} description: | Custom JSON data to be used to override the os-net-config config. This is meant to be used by net_config_override parameter in tripleoclient to provide an easy means to pass in custom net configs for the Undercloud. type: json NetworkerLocalMtu: # Override this via parameter_defaults default: 1500 description: MTU to use for the Undercloud local_interface. type: number constraints: - range: { min: 1000, max: 65536 } NetworkerNetworkConfigTemplate: description: Networker NetworkConfig Template type: string default: '' NetworkerExtraConfig: default: {} description: | Role specific additional hiera configuration to inject into the cluster. type: json # Parameters generated for Networker Role NetworkerServices: description: A list of service resources (configured in the Heat resource_registry) which represent nested stacks for each service that should get installed on the Networker role. type: comma_delimited_list NetworkerNetworkConfigUpdate: type: boolean description: > When set to "True", existing networks will be updated on the overcloud. This parameter replaces the functionality previously provided by NetworkDeploymentActions. Defaults to "False" so that only new nodes will have their networks configured. This is a role based parameter. default: False NetworkerUseNMState: type: boolean description: > When set to "True", NMState provider is used in os-net-config command to apply the network configuration. This is a role based parameter. default: False NetworkerIfcfgPurge: type: boolean description: > When set to "True", os-net-config will remove the ifcfg-* provider based configurations and apply the same network_configuration using nmstate provider. This flag is intended to be used along with "NetworkerUseNMState: True" ONLY for provider migration use-case. This is a role based parameter. default: False NetworkerAnyErrorsFatal: default: yes type: string NetworkerMaxFailPercentage: default: 0 type: number NetworkerCount: description: Number of Networker nodes to deploy type: number default: 0 NetworkerHostnameFormat: type: string description: > Format for Networker node hostnames Note %index% is translated into the index of the node, e.g 0/1/2 etc and %stackname% is replaced with the stack name e.g overcloud default: "%stackname%-networker-%index%" NetworkerRemovalPolicies: default: [] type: json description: > List of resources to be removed from Networker ResourceGroup when doing an update which requires removal of specific resources. Example format ComputeRemovalPolicies: [{'resource_list': ['0']}] NetworkerRemovalPoliciesMode: default: append type: string description: > How to handle change to RemovalPolicies for Networker ResourceGroup when doing an update. Default mode 'append' will append to the existing blacklist and 'update' would replace the blacklist. NetworkerSchedulerHints: type: json description: Optional scheduler hints to pass to nova default: {} NetworkerParameters: type: json description: Optional Role Specific parameters to be provided to service default: {} NetworkerExtraGroupVars: type: json description: Optional extra Ansible group vars default: {} NetworkerControlPlaneSubnet: default: ctlplane-subnet description: | Name of the subnet on ctlplane network for this role. type: string NetworkerServiceNetMap: default: {} description: | Role specific ServiceNetMap overrides, the map provided will be merged with the global ServiceNetMap when passing the ServiceNetMap to the NetworkerServiceChain resource and the Networker resource group. For example: NetworkerServiceNetMap: NovaLibvirtNetwork: internal_api_leaf2 type: json NetworkerNetConfigOverride: default: {} description: | Custom JSON data to be used to override the os-net-config config. This is meant to be used by net_config_override parameter in tripleoclient to provide an easy means to pass in custom net configs for the Undercloud. type: json # Identifiers to trigger tasks on nodes UpdateIdentifier: default: '' type: string description: > Setting to a previously unused value during stack-update will trigger package update on all nodes DeployIdentifier: default: '' type: string description: > Setting this to a unique value will re-run any deployment tasks which perform configuration on a Heat stack-update. AddVipsToEtcHosts: default: True type: boolean description: > Set to true to append per network Vips to /etc/hosts on each node. DeploymentServerBlacklist: default: [] type: comma_delimited_list description: > List of server hostnames to blacklist from any triggered deployments. GlobalConfigExtraMapData: type: json default: {} description: Map of extra global_config_settings data to set on each node. NetConfigDataLookup: type: json default: {} description: > Configure os-net-config mappings for specific nodes Your environment file needs to look like: parameter_defaults: NetConfigDataLookup: node1: nic1: "00:c8:7c:e6:f0:2e" node2: nic1: "00:18:7d:99:0c:b6" node3: dmiString: 'system-uuid' id: 'A8C85861-1B16-4803-8689-AFC62984F8F6' nic1: em3 # Dell PowerEdge nodegroup1: dmiString: "system-product-name" id: "PowerEdge R630" nic1: em3 nic2: em1 nic3: em2 # Cisco UCS B200-M4" nodegroup2: dmiString: "system-product-name" id: "UCSB-B200-M4" nic1: enp7s0 nic2: enp6s0 This will result in the first node* entry where either a mac matches a local device or a DMI String matches the specified id being written as a mapping file for os-net-config. (/etc/os-net-config/mapping.yaml) DnsServers: # Override this via parameter_defaults default: [] description: > DNS servers to use for the Overcloud (2 max for some implementations). If not set the nameservers configured in the ctlplane subnet's dns_nameservers attribute will be used. type: comma_delimited_list RootStackName: description: The name of the stack/plan. type: string AdminPassword: description: The password for the keystone admin account, used for monitoring, querying neutron etc. type: string hidden: true KeystoneRegion: type: string default: 'regionOne' description: Keystone region for endpoint parameter_groups: - label: deprecated description: Do not use deprecated params, they will be removed. parameters: - DnsServers - controllerExtraConfig parameter_groups: - label: deprecated description: Do not use deprecated params, they will be removed. parameters: - DnsServers - controllerExtraConfig parameter_groups: - label: deprecated description: Do not use deprecated params, they will be removed. parameters: - DnsServers - controllerExtraConfig parameter_groups: - label: deprecated description: Do not use deprecated params, they will be removed. parameters: - DnsServers - NovaComputeSchedulerHints - NovaComputeExtraConfig conditions: add_vips_to_etc_hosts: {equals : [{get_param: AddVipsToEtcHosts}, True]} control_fixed_ip_not_set: {equals : [{get_param: ControlFixedIPs}, []]} storage_virtual_fixed_ip_set: not: equals: - get_param: StorageVirtualFixedIPs - [] storage_mgmt_virtual_fixed_ip_set: not: equals: - get_param: StorageMgmtVirtualFixedIPs - [] internal_api_virtual_fixed_ip_set: not: equals: - get_param: InternalApiVirtualFixedIPs - [] tenant_virtual_fixed_ip_set: not: equals: - get_param: TenantVirtualFixedIPs - [] public_virtual_fixed_ip_set: not: equals: - get_param: PublicVirtualFixedIPs - [] set_default_mysql_cell_internal: or: - equals: - get_param: NovaAdditionalCell - true - and: - equals: - get_param: NovaAdditionalCell - false - equals: - get_param: [EndpointMapOverride, MysqlCellInternal] - '' set_default_nova_vnc_proxy_cell_public: or: - equals: - get_param: NovaAdditionalCell - true - and: - equals: - get_param: NovaAdditionalCell - false - equals: - get_param: [EndpointMapOverride, NovaVNCProxyCellPublic] - '' set_default_nova_metadata_cell_internal: or: - equals: - get_param: NovaLocalMetadataPerCell - true - and: - equals: - get_param: NovaLocalMetadataPerCell - false - equals: - get_param: [EndpointMapOverride, NovaMetadataCellInternal] - '' dnsservers_set: not: equals: [{get_param: DnsServers}, []] resources: VipHosts: type: OS::Heat::Value properties: type: comma_delimited_list value: - str_replace: template: IP HOST params: IP: {get_attr: [VipMap, net_ip_map, ctlplane]} HOST: {get_param: CloudNameCtlplane} - str_replace: template: IP HOST params: IP: {get_attr: [VipMap, net_ip_map, storage]} HOST: {get_param: CloudNameStorage} # Special case StorageMgmt hostname param, which is CloudNameStorageManagement - str_replace: template: IP HOST params: IP: {get_attr: [VipMap, net_ip_map, storage_mgmt]} HOST: {get_param: CloudNameStorageManagement} # Special case the Internal API hostname param, which is CloudNameInternal - str_replace: template: IP HOST params: IP: {get_attr: [VipMap, net_ip_map, internal_api]} HOST: {get_param: CloudNameInternal} # Special case the External hostname param, which is CloudName - str_replace: template: IP HOST params: IP: {get_attr: [VipMap, net_ip_map, external]} HOST: {get_param: CloudName} NetCidrMapValue: type: OS::Heat::Value properties: type: json value: map_replace: - map_merge: - {get_attr: [Networks, net_cidr_map]} # NOTE(hjensas): When ctlplane network and subnets are created by the # undercloud installer, the subnet cidrs are added as tags. - ctlplane: {get_attr: [ControlVirtualIP, network, tags]} - keys: ctlplane: {get_param: NeutronControlPlaneID} NetIpVersionMapValue: type: OS::Heat::Value properties: type: json value: map_replace: - map_merge: - {get_attr: [Networks, net_ip_version_map]} - ctlplane: {get_attr: [ControlVirtualIP, subnets, 0, ip_version]} - keys: ctlplane: {get_param: NeutronControlPlaneID} ServiceNetMap: type: OS::TripleO::ServiceNetMap EndpointMap: type: OS::TripleO::EndpointMap properties: CloudEndpoints: ctlplane: {get_param: CloudNameCtlplane} storage: {get_param: CloudNameStorage} # Special case StorageMgmt hostname param, which is CloudNameStorageManagement storage_mgmt: {get_param: CloudNameStorageManagement} # Special case the Internal API hostname param, which is CloudNameInternal internal_api: {get_param: CloudNameInternal} # Special case the External hostname param, which is CloudName external: {get_param: CloudName} NetIpMap: {get_attr: [VipMap, net_ip_map]} ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]} EndpointMapData: type: OS::Heat::Value properties: type: json value: map_merge: - {get_attr: [EndpointMap, endpoint_map]} - {get_param: EndpointMapOverride} # For parent stack we must set these to the local endpoints # For split-controlplane stacks that are nova cells we must set # these to the local endpoints # For split-controlplane stacks that are not nova cells we should # take these from EndpointMapOverride (i.e the parent stack) - if: - set_default_mysql_cell_internal - MysqlCellInternal: {get_attr: [EndpointMap, endpoint_map, MysqlInternal]} - {} - if: - set_default_nova_vnc_proxy_cell_public - NovaVNCProxyCellPublic: {get_attr: [EndpointMap, endpoint_map, NovaVNCProxyPublic]} - {} - if: - set_default_nova_metadata_cell_internal - NovaMetadataCellInternal: {get_attr: [EndpointMap, endpoint_map, NovaMetadataInternal]} - {} # Creates the "heat-admin" user if configured via the environment # Should return a OS::Heat::MultipartMime reference via OS::stack_id NodeAdminUserData: type: OS::TripleO::NodeAdminUserData # Bootstraps an ntp configuration and includes a hardware clock sync to # for containers. # Should return a OS::Heat::MultipartMime reference via OS::stack_id NodeTimesyncUserData: type: OS::TripleO::NodeTimesyncUserData # For optional operator additional userdata # Should return a OS::Heat::MultipartMime reference via OS::stack_id NodeUserData: type: OS::TripleO::NodeUserData # Jinja loop for Role in roles_data.yaml # Resources generated for Controller Role ControllerServiceChain: type: OS::TripleO::ControllerServices properties: Services: get_param: ControllerServices ServiceNetMap: map_merge: - {get_attr: [ServiceNetMap, service_net_map]} - {get_param: ControllerServiceNetMap} ServiceData: net_cidr_map: {get_attr: [NetCidrMapValue, value]} net_vip_map: {get_attr: [VipMap, net_ip_map]} net_ip_version_map: {get_attr: [NetIpVersionMapValue, value]} vip_subnet_map: {get_attr: [ServiceNetMap, vip_subnet_map]} EndpointMap: {get_attr: [EndpointMapData, value]} RoleName: Controller RoleParameters: map_merge: - {'OVNCMSOptions': 'enable-chassis-as-gw'} - get_param: ControllerParameters # Lookup of role_data via heat outputs is slow, so workaround this by caching # the value in an OS::Heat::Value resource ControllerServiceChainRoleData: type: OS::Heat::Value properties: type: json value: {get_attr: [ControllerServiceChain, role_data]} ControllerConfigData: type: OS::Heat::Value properties: type: json value: service_configs: {get_attr: [ControllerServiceConfigSettings, value]} service_names: {get_attr: [ControllerServiceNames, value]} role_extraconfig: map_merge: - tripleo::profile::base::metrics::collectd::sensubility::subscriptions: {get_attr: [ControllerServiceChainRoleData, value, monitoring_subscriptions]} - tripleo_collectd_sensubility_subscriptions: {get_attr: [ControllerServiceChainRoleData, value, monitoring_subscriptions]} - {get_param: controllerExtraConfig} - {get_param: ControllerExtraConfig} extraconfig: {get_param: ExtraConfig} hieradata_files: - '%{::uuid}' - fqdn - docker_puppet # Optionally provided by container-puppet.sh - ansible_managed - heat_config_%{::deploy_config_name} - config_step - role_extraconfig - extraconfig - pci_passthrough_whitelist - service_names - service_configs - cloud_domain - bootstrap_node # provided by tripleo_hieradata - all_nodes # provided by tripleo_hieradata - vip_data # provided by tripleo_hieradata - net_ip_map - ovn_chassis_mac_map # provided by tripleo_hieradata - '%{::osfamily}' # The following are required for compatibility with the Controller role # where some vendor integrations added hieradata via ExtraConfigPre - neutron_bigswitch_data # Optionally provided by Controller/ComputeExtraConfigPre # Special variable for upgrade - upgrade ControllerServiceConfigSettings: type: OS::Heat::Value properties: type: json value: map_merge: - get_param: GlobalConfigExtraMapData - get_attr: [ControllerServiceChainRoleData, value, config_settings] - get_attr: [ControllerServiceChainRoleData, value, global_config_settings] - get_attr: [CellControllerServiceChainRoleData, value, global_config_settings] - get_attr: [CellControllerComputeServiceChainRoleData, value, global_config_settings] - get_attr: [ComputeServiceChainRoleData, value, global_config_settings] - get_attr: [BlockStorageServiceChainRoleData, value, global_config_settings] - get_attr: [ObjectStorageServiceChainRoleData, value, global_config_settings] - get_attr: [CephStorageServiceChainRoleData, value, global_config_settings] - get_attr: [NetworkerServiceChainRoleData, value, global_config_settings] # This next step combines two yaql passes: # - The inner one does a deep merge on the service_config_settings for all roles # - The outer one filters the map based on the services enabled for the role # then merges the result into one map. - yaql: expression: let(root => $) -> $.data.map.items().where($[0] in coalesce($root.data.services, [])).select($[1]).reduce($1.mergeWith($2), {}) data: map: yaql: expression: $.data.where($ != null).reduce($1.mergeWith($2), {}) data: - get_attr: [ControllerServiceChainRoleData, value, service_config_settings] - get_attr: [CellControllerServiceChainRoleData, value, service_config_settings] - get_attr: [CellControllerComputeServiceChainRoleData, value, service_config_settings] - get_attr: [ComputeServiceChainRoleData, value, service_config_settings] - get_attr: [BlockStorageServiceChainRoleData, value, service_config_settings] - get_attr: [ObjectStorageServiceChainRoleData, value, service_config_settings] - get_attr: [CephStorageServiceChainRoleData, value, service_config_settings] - get_attr: [NetworkerServiceChainRoleData, value, service_config_settings] services: {get_attr: [ControllerServiceNames, value]} # Filter any null/None service_names which may be present due to mapping # of services to OS::Heat::None ControllerServiceNames: type: OS::Heat::Value depends_on: ControllerServiceChain properties: type: comma_delimited_list value: yaql: expression: let(root => $) -> distinct($.data.extra_services.items().where($[0] in coalesce($root.data.enabled_services, [])).select($[1]).flatten() + coalesce($root.data.enabled_services, [])) data: enabled_services: {get_attr: [ControllerServiceChainRoleData, value, service_names]} extra_services: # If anything other than keystone needs this # then we should add an extra_networks interface # to the service templates role_data but for # now we hard-code the keystone special case keystone: - keystone_admin_api - keystone_public_api ControllerServiceNetMapLower: type: OS::Heat::Value properties: value: map_merge: - {get_attr: [ServiceNetMap, service_net_map_lower]} - yaql: expression: dict($.data.map.items().select([ regex(`([a-z0-9])([A-Z])`).replace($[0], '\\1_\\2').toLower(), $[1]])) data: map: {get_param: ControllerServiceNetMap} ControllerIpListMap: type: OS::TripleO::Network::Ports::NetIpListMap properties: ControlPlaneIpList: {get_attr: [Controller, ip_address]} StorageIpList: {get_attr: [Controller, storage_ip_address]} StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]} InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]} TenantIpList: {get_attr: [Controller, tenant_ip_address]} ExternalIpList: {get_attr: [Controller, external_ip_address]} RoleNetworks: - ctlplane - storage - storage_mgmt - internal_api - tenant - external EnabledServices: {get_attr: [ControllerServiceNames, value]} ServiceNetMap: {get_attr: [ControllerServiceNetMapLower, value]} ServiceHostnameList: {get_attr: [Controller, hostname]} NetworkHostnameMap: {get_attr: [ControllerNetworkHostnameMap, value]} ControllerNetworkHostnameMap: type: OS::Heat::Value properties: type: json value: # Note (shardy) this somewhat complex yaql may be replaced # with a map_deep_merge function in ocata. It merges the # list of maps, but appends to colliding lists so we can # create a map of lists for all nodes for each network yaql: expression: dict($.data.where($ != null).flatten().selectMany($.items()).groupBy($[0], $[1]).select([$[0], $[1].flatten()])) data: - {get_attr: [Controller, hostname_map]} # Combine the NodeAdminUserData and NodeUserData mime archives ControllerUserData: type: OS::Heat::MultipartMime properties: parts: - config: {get_resource: NodeAdminUserData} type: multipart - config: {get_resource: NodeTimesyncUserData} type: multipart - config: {get_resource: NodeUserData} type: multipart - config: {get_resource: ControllerRoleUserData} type: multipart # For optional operator role-specific userdata # Should return a OS::Heat::MultipartMime reference via OS::stack_id ControllerRoleUserData: type: OS::TripleO::Controller::NodeUserData Controller: type: OS::Heat::ResourceGroup depends_on: Networks update_policy: batch_create: max_batch_size: {get_param: NodeCreateBatchSize} properties: count: {get_param: ControllerCount} removal_policies: {get_param: ControllerRemovalPolicies} removal_policies_mode: {get_param: ControllerRemovalPoliciesMode} resource_def: type: OS::TripleO::Controller properties: CloudDomain: {get_param: CloudDomain} ServiceNetMap: map_merge: - {get_attr: [ServiceNetMap, service_net_map]} - {get_param: ControllerServiceNetMap} EndpointMap: {get_attr: [EndpointMapData, value]} Hostname: str_replace: template: {get_param: ControllerHostnameFormat} params: '%stackname%': {get_param: 'OS::stack_name'} NodeIndex: '%index%' # Note, SchedulerHints must be defined here, not only in the # nested template, as it can contain %index% ControllerSchedulerHints: map_merge: - {get_param: ControllerSchedulerHints} ServiceNames: {get_attr: [ControllerServiceNames, value]} ServiceMetadataSettings: {get_attr: [ControllerServiceChainRoleData, value, service_metadata_settings]} OVNBridgeMappings: {get_attr: [ControllerServiceChainRoleData, value, config_settings, 'ovn::controller::ovn_bridge_mappings']} DeploymentServerBlacklistDict: {get_attr: [DeploymentServerBlacklistDict, value]} RoleParameters: map_merge: - {'OVNCMSOptions': 'enable-chassis-as-gw'} - get_param: ControllerParameters UserData: {get_resource: ControllerUserData} # Resources generated for CellController Role CellControllerServiceChain: type: OS::TripleO::CellControllerServices properties: Services: get_param: CellControllerServices ServiceNetMap: map_merge: - {get_attr: [ServiceNetMap, service_net_map]} - {get_param: CellControllerServiceNetMap} ServiceData: net_cidr_map: {get_attr: [NetCidrMapValue, value]} net_vip_map: {get_attr: [VipMap, net_ip_map]} net_ip_version_map: {get_attr: [NetIpVersionMapValue, value]} vip_subnet_map: {get_attr: [ServiceNetMap, vip_subnet_map]} EndpointMap: {get_attr: [EndpointMapData, value]} RoleName: CellController RoleParameters: map_merge: - {'OVNCMSOptions': 'enable-chassis-as-gw'} - get_param: CellControllerParameters # Lookup of role_data via heat outputs is slow, so workaround this by caching # the value in an OS::Heat::Value resource CellControllerServiceChainRoleData: type: OS::Heat::Value properties: type: json value: {get_attr: [CellControllerServiceChain, role_data]} CellControllerConfigData: type: OS::Heat::Value properties: type: json value: service_configs: {get_attr: [CellControllerServiceConfigSettings, value]} service_names: {get_attr: [CellControllerServiceNames, value]} role_extraconfig: map_merge: - tripleo::profile::base::metrics::collectd::sensubility::subscriptions: {get_attr: [CellControllerServiceChainRoleData, value, monitoring_subscriptions]} - tripleo_collectd_sensubility_subscriptions: {get_attr: [CellControllerServiceChainRoleData, value, monitoring_subscriptions]} - {get_param: controllerExtraConfig} - {get_param: CellControllerExtraConfig} extraconfig: {get_param: ExtraConfig} hieradata_files: - '%{::uuid}' - fqdn - docker_puppet # Optionally provided by container-puppet.sh - ansible_managed - heat_config_%{::deploy_config_name} - config_step - role_extraconfig - extraconfig - pci_passthrough_whitelist - service_names - service_configs - cloud_domain - bootstrap_node # provided by tripleo_hieradata - all_nodes # provided by tripleo_hieradata - vip_data # provided by tripleo_hieradata - net_ip_map - ovn_chassis_mac_map # provided by tripleo_hieradata - '%{::osfamily}' # The following are required for compatibility with the Controller role # where some vendor integrations added hieradata via ExtraConfigPre - neutron_bigswitch_data # Optionally provided by Controller/ComputeExtraConfigPre # Special variable for upgrade - upgrade CellControllerServiceConfigSettings: type: OS::Heat::Value properties: type: json value: map_merge: - get_param: GlobalConfigExtraMapData - get_attr: [CellControllerServiceChainRoleData, value, config_settings] - get_attr: [ControllerServiceChainRoleData, value, global_config_settings] - get_attr: [CellControllerServiceChainRoleData, value, global_config_settings] - get_attr: [CellControllerComputeServiceChainRoleData, value, global_config_settings] - get_attr: [ComputeServiceChainRoleData, value, global_config_settings] - get_attr: [BlockStorageServiceChainRoleData, value, global_config_settings] - get_attr: [ObjectStorageServiceChainRoleData, value, global_config_settings] - get_attr: [CephStorageServiceChainRoleData, value, global_config_settings] - get_attr: [NetworkerServiceChainRoleData, value, global_config_settings] # This next step combines two yaql passes: # - The inner one does a deep merge on the service_config_settings for all roles # - The outer one filters the map based on the services enabled for the role # then merges the result into one map. - yaql: expression: let(root => $) -> $.data.map.items().where($[0] in coalesce($root.data.services, [])).select($[1]).reduce($1.mergeWith($2), {}) data: map: yaql: expression: $.data.where($ != null).reduce($1.mergeWith($2), {}) data: - get_attr: [ControllerServiceChainRoleData, value, service_config_settings] - get_attr: [CellControllerServiceChainRoleData, value, service_config_settings] - get_attr: [CellControllerComputeServiceChainRoleData, value, service_config_settings] - get_attr: [ComputeServiceChainRoleData, value, service_config_settings] - get_attr: [BlockStorageServiceChainRoleData, value, service_config_settings] - get_attr: [ObjectStorageServiceChainRoleData, value, service_config_settings] - get_attr: [CephStorageServiceChainRoleData, value, service_config_settings] - get_attr: [NetworkerServiceChainRoleData, value, service_config_settings] services: {get_attr: [CellControllerServiceNames, value]} # Filter any null/None service_names which may be present due to mapping # of services to OS::Heat::None CellControllerServiceNames: type: OS::Heat::Value depends_on: CellControllerServiceChain properties: type: comma_delimited_list value: yaql: expression: let(root => $) -> distinct($.data.extra_services.items().where($[0] in coalesce($root.data.enabled_services, [])).select($[1]).flatten() + coalesce($root.data.enabled_services, [])) data: enabled_services: {get_attr: [CellControllerServiceChainRoleData, value, service_names]} extra_services: # If anything other than keystone needs this # then we should add an extra_networks interface # to the service templates role_data but for # now we hard-code the keystone special case keystone: - keystone_admin_api - keystone_public_api CellControllerServiceNetMapLower: type: OS::Heat::Value properties: value: map_merge: - {get_attr: [ServiceNetMap, service_net_map_lower]} - yaql: expression: dict($.data.map.items().select([ regex(`([a-z0-9])([A-Z])`).replace($[0], '\\1_\\2').toLower(), $[1]])) data: map: {get_param: CellControllerServiceNetMap} CellControllerIpListMap: type: OS::TripleO::Network::Ports::NetIpListMap properties: ControlPlaneIpList: {get_attr: [CellController, ip_address]} StorageIpList: {get_attr: [CellController, storage_ip_address]} StorageMgmtIpList: {get_attr: [CellController, storage_mgmt_ip_address]} InternalApiIpList: {get_attr: [CellController, internal_api_ip_address]} TenantIpList: {get_attr: [CellController, tenant_ip_address]} ExternalIpList: {get_attr: [CellController, external_ip_address]} RoleNetworks: - ctlplane - storage - storage_mgmt - internal_api - tenant - external EnabledServices: {get_attr: [CellControllerServiceNames, value]} ServiceNetMap: {get_attr: [CellControllerServiceNetMapLower, value]} ServiceHostnameList: {get_attr: [CellController, hostname]} NetworkHostnameMap: {get_attr: [CellControllerNetworkHostnameMap, value]} CellControllerNetworkHostnameMap: type: OS::Heat::Value properties: type: json value: # Note (shardy) this somewhat complex yaql may be replaced # with a map_deep_merge function in ocata. It merges the # list of maps, but appends to colliding lists so we can # create a map of lists for all nodes for each network yaql: expression: dict($.data.where($ != null).flatten().selectMany($.items()).groupBy($[0], $[1]).select([$[0], $[1].flatten()])) data: - {get_attr: [CellController, hostname_map]} # Combine the NodeAdminUserData and NodeUserData mime archives CellControllerUserData: type: OS::Heat::MultipartMime properties: parts: - config: {get_resource: NodeAdminUserData} type: multipart - config: {get_resource: NodeTimesyncUserData} type: multipart - config: {get_resource: NodeUserData} type: multipart - config: {get_resource: CellControllerRoleUserData} type: multipart # For optional operator role-specific userdata # Should return a OS::Heat::MultipartMime reference via OS::stack_id CellControllerRoleUserData: type: OS::TripleO::CellController::NodeUserData CellController: type: OS::Heat::ResourceGroup depends_on: Networks update_policy: batch_create: max_batch_size: {get_param: NodeCreateBatchSize} properties: count: {get_param: CellControllerCount} removal_policies: {get_param: CellControllerRemovalPolicies} removal_policies_mode: {get_param: CellControllerRemovalPoliciesMode} resource_def: type: OS::TripleO::CellController properties: CloudDomain: {get_param: CloudDomain} ServiceNetMap: map_merge: - {get_attr: [ServiceNetMap, service_net_map]} - {get_param: CellControllerServiceNetMap} EndpointMap: {get_attr: [EndpointMapData, value]} Hostname: str_replace: template: {get_param: CellControllerHostnameFormat} params: '%stackname%': {get_param: 'OS::stack_name'} NodeIndex: '%index%' # Note, SchedulerHints must be defined here, not only in the # nested template, as it can contain %index% CellControllerSchedulerHints: map_merge: - {get_param: CellControllerSchedulerHints} ServiceNames: {get_attr: [CellControllerServiceNames, value]} ServiceMetadataSettings: {get_attr: [CellControllerServiceChainRoleData, value, service_metadata_settings]} OVNBridgeMappings: {get_attr: [CellControllerServiceChainRoleData, value, config_settings, 'ovn::controller::ovn_bridge_mappings']} DeploymentServerBlacklistDict: {get_attr: [DeploymentServerBlacklistDict, value]} RoleParameters: map_merge: - {'OVNCMSOptions': 'enable-chassis-as-gw'} - get_param: CellControllerParameters UserData: {get_resource: CellControllerUserData} # Resources generated for CellControllerCompute Role CellControllerComputeServiceChain: type: OS::TripleO::CellControllerComputeServices properties: Services: get_param: CellControllerComputeServices ServiceNetMap: map_merge: - {get_attr: [ServiceNetMap, service_net_map]} - {get_param: CellControllerComputeServiceNetMap} ServiceData: net_cidr_map: {get_attr: [NetCidrMapValue, value]} net_vip_map: {get_attr: [VipMap, net_ip_map]} net_ip_version_map: {get_attr: [NetIpVersionMapValue, value]} vip_subnet_map: {get_attr: [ServiceNetMap, vip_subnet_map]} EndpointMap: {get_attr: [EndpointMapData, value]} RoleName: CellControllerCompute RoleParameters: map_merge: - {'OVNCMSOptions': 'enable-chassis-as-gw'} - get_param: CellControllerComputeParameters # Lookup of role_data via heat outputs is slow, so workaround this by caching # the value in an OS::Heat::Value resource CellControllerComputeServiceChainRoleData: type: OS::Heat::Value properties: type: json value: {get_attr: [CellControllerComputeServiceChain, role_data]} CellControllerComputeConfigData: type: OS::Heat::Value properties: type: json value: service_configs: {get_attr: [CellControllerComputeServiceConfigSettings, value]} service_names: {get_attr: [CellControllerComputeServiceNames, value]} role_extraconfig: map_merge: - tripleo::profile::base::metrics::collectd::sensubility::subscriptions: {get_attr: [CellControllerComputeServiceChainRoleData, value, monitoring_subscriptions]} - tripleo_collectd_sensubility_subscriptions: {get_attr: [CellControllerComputeServiceChainRoleData, value, monitoring_subscriptions]} - {get_param: controllerExtraConfig} - {get_param: CellControllerComputeExtraConfig} extraconfig: {get_param: ExtraConfig} hieradata_files: - '%{::uuid}' - fqdn - docker_puppet # Optionally provided by container-puppet.sh - ansible_managed - heat_config_%{::deploy_config_name} - config_step - role_extraconfig - extraconfig - pci_passthrough_whitelist - service_names - service_configs - cloud_domain - bootstrap_node # provided by tripleo_hieradata - all_nodes # provided by tripleo_hieradata - vip_data # provided by tripleo_hieradata - net_ip_map - ovn_chassis_mac_map # provided by tripleo_hieradata - '%{::osfamily}' # The following are required for compatibility with the Controller role # where some vendor integrations added hieradata via ExtraConfigPre - neutron_bigswitch_data # Optionally provided by Controller/ComputeExtraConfigPre # Special variable for upgrade - upgrade CellControllerComputeServiceConfigSettings: type: OS::Heat::Value properties: type: json value: map_merge: - get_param: GlobalConfigExtraMapData - get_attr: [CellControllerComputeServiceChainRoleData, value, config_settings] - get_attr: [ControllerServiceChainRoleData, value, global_config_settings] - get_attr: [CellControllerServiceChainRoleData, value, global_config_settings] - get_attr: [CellControllerComputeServiceChainRoleData, value, global_config_settings] - get_attr: [ComputeServiceChainRoleData, value, global_config_settings] - get_attr: [BlockStorageServiceChainRoleData, value, global_config_settings] - get_attr: [ObjectStorageServiceChainRoleData, value, global_config_settings] - get_attr: [CephStorageServiceChainRoleData, value, global_config_settings] - get_attr: [NetworkerServiceChainRoleData, value, global_config_settings] # This next step combines two yaql passes: # - The inner one does a deep merge on the service_config_settings for all roles # - The outer one filters the map based on the services enabled for the role # then merges the result into one map. - yaql: expression: let(root => $) -> $.data.map.items().where($[0] in coalesce($root.data.services, [])).select($[1]).reduce($1.mergeWith($2), {}) data: map: yaql: expression: $.data.where($ != null).reduce($1.mergeWith($2), {}) data: - get_attr: [ControllerServiceChainRoleData, value, service_config_settings] - get_attr: [CellControllerServiceChainRoleData, value, service_config_settings] - get_attr: [CellControllerComputeServiceChainRoleData, value, service_config_settings] - get_attr: [ComputeServiceChainRoleData, value, service_config_settings] - get_attr: [BlockStorageServiceChainRoleData, value, service_config_settings] - get_attr: [ObjectStorageServiceChainRoleData, value, service_config_settings] - get_attr: [CephStorageServiceChainRoleData, value, service_config_settings] - get_attr: [NetworkerServiceChainRoleData, value, service_config_settings] services: {get_attr: [CellControllerComputeServiceNames, value]} # Filter any null/None service_names which may be present due to mapping # of services to OS::Heat::None CellControllerComputeServiceNames: type: OS::Heat::Value depends_on: CellControllerComputeServiceChain properties: type: comma_delimited_list value: yaql: expression: let(root => $) -> distinct($.data.extra_services.items().where($[0] in coalesce($root.data.enabled_services, [])).select($[1]).flatten() + coalesce($root.data.enabled_services, [])) data: enabled_services: {get_attr: [CellControllerComputeServiceChainRoleData, value, service_names]} extra_services: # If anything other than keystone needs this # then we should add an extra_networks interface # to the service templates role_data but for # now we hard-code the keystone special case keystone: - keystone_admin_api - keystone_public_api CellControllerComputeServiceNetMapLower: type: OS::Heat::Value properties: value: map_merge: - {get_attr: [ServiceNetMap, service_net_map_lower]} - yaql: expression: dict($.data.map.items().select([ regex(`([a-z0-9])([A-Z])`).replace($[0], '\\1_\\2').toLower(), $[1]])) data: map: {get_param: CellControllerComputeServiceNetMap} CellControllerComputeIpListMap: type: OS::TripleO::Network::Ports::NetIpListMap properties: ControlPlaneIpList: {get_attr: [CellControllerCompute, ip_address]} StorageIpList: {get_attr: [CellControllerCompute, storage_ip_address]} StorageMgmtIpList: {get_attr: [CellControllerCompute, storage_mgmt_ip_address]} InternalApiIpList: {get_attr: [CellControllerCompute, internal_api_ip_address]} TenantIpList: {get_attr: [CellControllerCompute, tenant_ip_address]} ExternalIpList: {get_attr: [CellControllerCompute, external_ip_address]} RoleNetworks: - ctlplane - storage - storage_mgmt - internal_api - tenant - external EnabledServices: {get_attr: [CellControllerComputeServiceNames, value]} ServiceNetMap: {get_attr: [CellControllerComputeServiceNetMapLower, value]} ServiceHostnameList: {get_attr: [CellControllerCompute, hostname]} NetworkHostnameMap: {get_attr: [CellControllerComputeNetworkHostnameMap, value]} CellControllerComputeNetworkHostnameMap: type: OS::Heat::Value properties: type: json value: # Note (shardy) this somewhat complex yaql may be replaced # with a map_deep_merge function in ocata. It merges the # list of maps, but appends to colliding lists so we can # create a map of lists for all nodes for each network yaql: expression: dict($.data.where($ != null).flatten().selectMany($.items()).groupBy($[0], $[1]).select([$[0], $[1].flatten()])) data: - {get_attr: [CellControllerCompute, hostname_map]} # Combine the NodeAdminUserData and NodeUserData mime archives CellControllerComputeUserData: type: OS::Heat::MultipartMime properties: parts: - config: {get_resource: NodeAdminUserData} type: multipart - config: {get_resource: NodeTimesyncUserData} type: multipart - config: {get_resource: NodeUserData} type: multipart - config: {get_resource: CellControllerComputeRoleUserData} type: multipart # For optional operator role-specific userdata # Should return a OS::Heat::MultipartMime reference via OS::stack_id CellControllerComputeRoleUserData: type: OS::TripleO::CellControllerCompute::NodeUserData CellControllerCompute: type: OS::Heat::ResourceGroup depends_on: Networks update_policy: batch_create: max_batch_size: {get_param: NodeCreateBatchSize} properties: count: {get_param: CellControllerComputeCount} removal_policies: {get_param: CellControllerComputeRemovalPolicies} removal_policies_mode: {get_param: CellControllerComputeRemovalPoliciesMode} resource_def: type: OS::TripleO::CellControllerCompute properties: CloudDomain: {get_param: CloudDomain} ServiceNetMap: map_merge: - {get_attr: [ServiceNetMap, service_net_map]} - {get_param: CellControllerComputeServiceNetMap} EndpointMap: {get_attr: [EndpointMapData, value]} Hostname: str_replace: template: {get_param: CellControllerComputeHostnameFormat} params: '%stackname%': {get_param: 'OS::stack_name'} NodeIndex: '%index%' # Note, SchedulerHints must be defined here, not only in the # nested template, as it can contain %index% CellControllerComputeSchedulerHints: map_merge: - {get_param: CellControllerComputeSchedulerHints} ServiceNames: {get_attr: [CellControllerComputeServiceNames, value]} ServiceMetadataSettings: {get_attr: [CellControllerComputeServiceChainRoleData, value, service_metadata_settings]} OVNBridgeMappings: {get_attr: [CellControllerComputeServiceChainRoleData, value, config_settings, 'ovn::controller::ovn_bridge_mappings']} DeploymentServerBlacklistDict: {get_attr: [DeploymentServerBlacklistDict, value]} RoleParameters: map_merge: - {'OVNCMSOptions': 'enable-chassis-as-gw'} - get_param: CellControllerComputeParameters UserData: {get_resource: CellControllerComputeUserData} # Resources generated for Compute Role ComputeServiceChain: type: OS::TripleO::ComputeServices properties: Services: get_param: ComputeServices ServiceNetMap: map_merge: - {get_attr: [ServiceNetMap, service_net_map]} - {get_param: ComputeServiceNetMap} ServiceData: net_cidr_map: {get_attr: [NetCidrMapValue, value]} net_vip_map: {get_attr: [VipMap, net_ip_map]} net_ip_version_map: {get_attr: [NetIpVersionMapValue, value]} vip_subnet_map: {get_attr: [ServiceNetMap, vip_subnet_map]} EndpointMap: {get_attr: [EndpointMapData, value]} RoleName: Compute RoleParameters: map_merge: - {'FsAioMaxNumber': 1048576, 'TunedProfileName': 'throughput-performance'} - get_param: ComputeParameters # Lookup of role_data via heat outputs is slow, so workaround this by caching # the value in an OS::Heat::Value resource ComputeServiceChainRoleData: type: OS::Heat::Value properties: type: json value: {get_attr: [ComputeServiceChain, role_data]} ComputeConfigData: type: OS::Heat::Value properties: type: json value: service_configs: {get_attr: [ComputeServiceConfigSettings, value]} service_names: {get_attr: [ComputeServiceNames, value]} role_extraconfig: map_merge: - tripleo::profile::base::metrics::collectd::sensubility::subscriptions: {get_attr: [ComputeServiceChainRoleData, value, monitoring_subscriptions]} - tripleo_collectd_sensubility_subscriptions: {get_attr: [ComputeServiceChainRoleData, value, monitoring_subscriptions]} - {get_param: NovaComputeExtraConfig} - {get_param: ComputeExtraConfig} extraconfig: {get_param: ExtraConfig} hieradata_files: - '%{::uuid}' - fqdn - docker_puppet # Optionally provided by container-puppet.sh - ansible_managed - heat_config_%{::deploy_config_name} - config_step - role_extraconfig - extraconfig - pci_passthrough_whitelist - service_names - service_configs - cloud_domain - bootstrap_node # provided by tripleo_hieradata - all_nodes # provided by tripleo_hieradata - vip_data # provided by tripleo_hieradata - net_ip_map - ovn_chassis_mac_map # provided by tripleo_hieradata - '%{::osfamily}' # The following are required for compatibility with the Controller role # where some vendor integrations added hieradata via ExtraConfigPre - neutron_bigswitch_data # Optionally provided by Controller/ComputeExtraConfigPre # Special variable for upgrade - upgrade ComputeServiceConfigSettings: type: OS::Heat::Value properties: type: json value: map_merge: - get_param: GlobalConfigExtraMapData - get_attr: [ComputeServiceChainRoleData, value, config_settings] - get_attr: [ControllerServiceChainRoleData, value, global_config_settings] - get_attr: [CellControllerServiceChainRoleData, value, global_config_settings] - get_attr: [CellControllerComputeServiceChainRoleData, value, global_config_settings] - get_attr: [ComputeServiceChainRoleData, value, global_config_settings] - get_attr: [BlockStorageServiceChainRoleData, value, global_config_settings] - get_attr: [ObjectStorageServiceChainRoleData, value, global_config_settings] - get_attr: [CephStorageServiceChainRoleData, value, global_config_settings] - get_attr: [NetworkerServiceChainRoleData, value, global_config_settings] # This next step combines two yaql passes: # - The inner one does a deep merge on the service_config_settings for all roles # - The outer one filters the map based on the services enabled for the role # then merges the result into one map. - yaql: expression: let(root => $) -> $.data.map.items().where($[0] in coalesce($root.data.services, [])).select($[1]).reduce($1.mergeWith($2), {}) data: map: yaql: expression: $.data.where($ != null).reduce($1.mergeWith($2), {}) data: - get_attr: [ControllerServiceChainRoleData, value, service_config_settings] - get_attr: [CellControllerServiceChainRoleData, value, service_config_settings] - get_attr: [CellControllerComputeServiceChainRoleData, value, service_config_settings] - get_attr: [ComputeServiceChainRoleData, value, service_config_settings] - get_attr: [BlockStorageServiceChainRoleData, value, service_config_settings] - get_attr: [ObjectStorageServiceChainRoleData, value, service_config_settings] - get_attr: [CephStorageServiceChainRoleData, value, service_config_settings] - get_attr: [NetworkerServiceChainRoleData, value, service_config_settings] services: {get_attr: [ComputeServiceNames, value]} # Filter any null/None service_names which may be present due to mapping # of services to OS::Heat::None ComputeServiceNames: type: OS::Heat::Value depends_on: ComputeServiceChain properties: type: comma_delimited_list value: yaql: expression: let(root => $) -> distinct($.data.extra_services.items().where($[0] in coalesce($root.data.enabled_services, [])).select($[1]).flatten() + coalesce($root.data.enabled_services, [])) data: enabled_services: {get_attr: [ComputeServiceChainRoleData, value, service_names]} extra_services: # If anything other than keystone needs this # then we should add an extra_networks interface # to the service templates role_data but for # now we hard-code the keystone special case keystone: - keystone_admin_api - keystone_public_api ComputeServiceNetMapLower: type: OS::Heat::Value properties: value: map_merge: - {get_attr: [ServiceNetMap, service_net_map_lower]} - yaql: expression: dict($.data.map.items().select([ regex(`([a-z0-9])([A-Z])`).replace($[0], '\\1_\\2').toLower(), $[1]])) data: map: {get_param: ComputeServiceNetMap} ComputeIpListMap: type: OS::TripleO::Network::Ports::NetIpListMap properties: ControlPlaneIpList: {get_attr: [Compute, ip_address]} StorageIpList: {get_attr: [Compute, storage_ip_address]} InternalApiIpList: {get_attr: [Compute, internal_api_ip_address]} TenantIpList: {get_attr: [Compute, tenant_ip_address]} RoleNetworks: - ctlplane - storage - internal_api - tenant EnabledServices: {get_attr: [ComputeServiceNames, value]} ServiceNetMap: {get_attr: [ComputeServiceNetMapLower, value]} ServiceHostnameList: {get_attr: [Compute, hostname]} NetworkHostnameMap: {get_attr: [ComputeNetworkHostnameMap, value]} ComputeNetworkHostnameMap: type: OS::Heat::Value properties: type: json value: # Note (shardy) this somewhat complex yaql may be replaced # with a map_deep_merge function in ocata. It merges the # list of maps, but appends to colliding lists so we can # create a map of lists for all nodes for each network yaql: expression: dict($.data.where($ != null).flatten().selectMany($.items()).groupBy($[0], $[1]).select([$[0], $[1].flatten()])) data: - {get_attr: [Compute, hostname_map]} # Combine the NodeAdminUserData and NodeUserData mime archives ComputeUserData: type: OS::Heat::MultipartMime properties: parts: - config: {get_resource: NodeAdminUserData} type: multipart - config: {get_resource: NodeTimesyncUserData} type: multipart - config: {get_resource: NodeUserData} type: multipart - config: {get_resource: ComputeRoleUserData} type: multipart # For optional operator role-specific userdata # Should return a OS::Heat::MultipartMime reference via OS::stack_id ComputeRoleUserData: type: OS::TripleO::Compute::NodeUserData Compute: type: OS::Heat::ResourceGroup depends_on: Networks update_policy: batch_create: max_batch_size: {get_param: NodeCreateBatchSize} properties: count: {get_param: ComputeCount} removal_policies: {get_param: ComputeRemovalPolicies} removal_policies_mode: {get_param: ComputeRemovalPoliciesMode} resource_def: type: OS::TripleO::Compute properties: CloudDomain: {get_param: CloudDomain} ServiceNetMap: map_merge: - {get_attr: [ServiceNetMap, service_net_map]} - {get_param: ComputeServiceNetMap} EndpointMap: {get_attr: [EndpointMapData, value]} Hostname: str_replace: template: {get_param: ComputeHostnameFormat} params: '%stackname%': {get_param: 'OS::stack_name'} NodeIndex: '%index%' # Note, SchedulerHints must be defined here, not only in the # nested template, as it can contain %index% ComputeSchedulerHints: map_merge: - {get_param: NovaComputeSchedulerHints} - {get_param: ComputeSchedulerHints} ServiceNames: {get_attr: [ComputeServiceNames, value]} ServiceMetadataSettings: {get_attr: [ComputeServiceChainRoleData, value, service_metadata_settings]} OVNBridgeMappings: {get_attr: [ComputeServiceChainRoleData, value, config_settings, 'ovn::controller::ovn_bridge_mappings']} DeploymentServerBlacklistDict: {get_attr: [DeploymentServerBlacklistDict, value]} RoleParameters: map_merge: - {'FsAioMaxNumber': 1048576, 'TunedProfileName': 'throughput-performance'} - get_param: ComputeParameters UserData: {get_resource: ComputeUserData} # Resources generated for BlockStorage Role BlockStorageServiceChain: type: OS::TripleO::BlockStorageServices properties: Services: get_param: BlockStorageServices ServiceNetMap: map_merge: - {get_attr: [ServiceNetMap, service_net_map]} - {get_param: BlockStorageServiceNetMap} ServiceData: net_cidr_map: {get_attr: [NetCidrMapValue, value]} net_vip_map: {get_attr: [VipMap, net_ip_map]} net_ip_version_map: {get_attr: [NetIpVersionMapValue, value]} vip_subnet_map: {get_attr: [ServiceNetMap, vip_subnet_map]} EndpointMap: {get_attr: [EndpointMapData, value]} RoleName: BlockStorage RoleParameters: map_merge: - {} - get_param: BlockStorageParameters # Lookup of role_data via heat outputs is slow, so workaround this by caching # the value in an OS::Heat::Value resource BlockStorageServiceChainRoleData: type: OS::Heat::Value properties: type: json value: {get_attr: [BlockStorageServiceChain, role_data]} BlockStorageConfigData: type: OS::Heat::Value properties: type: json value: service_configs: {get_attr: [BlockStorageServiceConfigSettings, value]} service_names: {get_attr: [BlockStorageServiceNames, value]} role_extraconfig: map_merge: - tripleo::profile::base::metrics::collectd::sensubility::subscriptions: {get_attr: [BlockStorageServiceChainRoleData, value, monitoring_subscriptions]} - tripleo_collectd_sensubility_subscriptions: {get_attr: [BlockStorageServiceChainRoleData, value, monitoring_subscriptions]} - {get_param: BlockStorageExtraConfig} extraconfig: {get_param: ExtraConfig} hieradata_files: - '%{::uuid}' - fqdn - docker_puppet # Optionally provided by container-puppet.sh - ansible_managed - heat_config_%{::deploy_config_name} - config_step - role_extraconfig - extraconfig - pci_passthrough_whitelist - service_names - service_configs - cloud_domain - bootstrap_node # provided by tripleo_hieradata - all_nodes # provided by tripleo_hieradata - vip_data # provided by tripleo_hieradata - net_ip_map - ovn_chassis_mac_map # provided by tripleo_hieradata - '%{::osfamily}' # The following are required for compatibility with the Controller role # where some vendor integrations added hieradata via ExtraConfigPre - neutron_bigswitch_data # Optionally provided by Controller/ComputeExtraConfigPre # Special variable for upgrade - upgrade BlockStorageServiceConfigSettings: type: OS::Heat::Value properties: type: json value: map_merge: - get_param: GlobalConfigExtraMapData - get_attr: [BlockStorageServiceChainRoleData, value, config_settings] - get_attr: [ControllerServiceChainRoleData, value, global_config_settings] - get_attr: [CellControllerServiceChainRoleData, value, global_config_settings] - get_attr: [CellControllerComputeServiceChainRoleData, value, global_config_settings] - get_attr: [ComputeServiceChainRoleData, value, global_config_settings] - get_attr: [BlockStorageServiceChainRoleData, value, global_config_settings] - get_attr: [ObjectStorageServiceChainRoleData, value, global_config_settings] - get_attr: [CephStorageServiceChainRoleData, value, global_config_settings] - get_attr: [NetworkerServiceChainRoleData, value, global_config_settings] # This next step combines two yaql passes: # - The inner one does a deep merge on the service_config_settings for all roles # - The outer one filters the map based on the services enabled for the role # then merges the result into one map. - yaql: expression: let(root => $) -> $.data.map.items().where($[0] in coalesce($root.data.services, [])).select($[1]).reduce($1.mergeWith($2), {}) data: map: yaql: expression: $.data.where($ != null).reduce($1.mergeWith($2), {}) data: - get_attr: [ControllerServiceChainRoleData, value, service_config_settings] - get_attr: [CellControllerServiceChainRoleData, value, service_config_settings] - get_attr: [CellControllerComputeServiceChainRoleData, value, service_config_settings] - get_attr: [ComputeServiceChainRoleData, value, service_config_settings] - get_attr: [BlockStorageServiceChainRoleData, value, service_config_settings] - get_attr: [ObjectStorageServiceChainRoleData, value, service_config_settings] - get_attr: [CephStorageServiceChainRoleData, value, service_config_settings] - get_attr: [NetworkerServiceChainRoleData, value, service_config_settings] services: {get_attr: [BlockStorageServiceNames, value]} # Filter any null/None service_names which may be present due to mapping # of services to OS::Heat::None BlockStorageServiceNames: type: OS::Heat::Value depends_on: BlockStorageServiceChain properties: type: comma_delimited_list value: yaql: expression: let(root => $) -> distinct($.data.extra_services.items().where($[0] in coalesce($root.data.enabled_services, [])).select($[1]).flatten() + coalesce($root.data.enabled_services, [])) data: enabled_services: {get_attr: [BlockStorageServiceChainRoleData, value, service_names]} extra_services: # If anything other than keystone needs this # then we should add an extra_networks interface # to the service templates role_data but for # now we hard-code the keystone special case keystone: - keystone_admin_api - keystone_public_api BlockStorageServiceNetMapLower: type: OS::Heat::Value properties: value: map_merge: - {get_attr: [ServiceNetMap, service_net_map_lower]} - yaql: expression: dict($.data.map.items().select([ regex(`([a-z0-9])([A-Z])`).replace($[0], '\\1_\\2').toLower(), $[1]])) data: map: {get_param: BlockStorageServiceNetMap} BlockStorageIpListMap: type: OS::TripleO::Network::Ports::NetIpListMap properties: ControlPlaneIpList: {get_attr: [BlockStorage, ip_address]} StorageIpList: {get_attr: [BlockStorage, storage_ip_address]} StorageMgmtIpList: {get_attr: [BlockStorage, storage_mgmt_ip_address]} InternalApiIpList: {get_attr: [BlockStorage, internal_api_ip_address]} RoleNetworks: - ctlplane - storage - storage_mgmt - internal_api EnabledServices: {get_attr: [BlockStorageServiceNames, value]} ServiceNetMap: {get_attr: [BlockStorageServiceNetMapLower, value]} ServiceHostnameList: {get_attr: [BlockStorage, hostname]} NetworkHostnameMap: {get_attr: [BlockStorageNetworkHostnameMap, value]} BlockStorageNetworkHostnameMap: type: OS::Heat::Value properties: type: json value: # Note (shardy) this somewhat complex yaql may be replaced # with a map_deep_merge function in ocata. It merges the # list of maps, but appends to colliding lists so we can # create a map of lists for all nodes for each network yaql: expression: dict($.data.where($ != null).flatten().selectMany($.items()).groupBy($[0], $[1]).select([$[0], $[1].flatten()])) data: - {get_attr: [BlockStorage, hostname_map]} # Combine the NodeAdminUserData and NodeUserData mime archives BlockStorageUserData: type: OS::Heat::MultipartMime properties: parts: - config: {get_resource: NodeAdminUserData} type: multipart - config: {get_resource: NodeTimesyncUserData} type: multipart - config: {get_resource: NodeUserData} type: multipart - config: {get_resource: BlockStorageRoleUserData} type: multipart # For optional operator role-specific userdata # Should return a OS::Heat::MultipartMime reference via OS::stack_id BlockStorageRoleUserData: type: OS::TripleO::BlockStorage::NodeUserData BlockStorage: type: OS::Heat::ResourceGroup depends_on: Networks update_policy: batch_create: max_batch_size: {get_param: NodeCreateBatchSize} properties: count: {get_param: BlockStorageCount} removal_policies: {get_param: BlockStorageRemovalPolicies} removal_policies_mode: {get_param: BlockStorageRemovalPoliciesMode} resource_def: type: OS::TripleO::BlockStorage properties: CloudDomain: {get_param: CloudDomain} ServiceNetMap: map_merge: - {get_attr: [ServiceNetMap, service_net_map]} - {get_param: BlockStorageServiceNetMap} EndpointMap: {get_attr: [EndpointMapData, value]} Hostname: str_replace: template: {get_param: BlockStorageHostnameFormat} params: '%stackname%': {get_param: 'OS::stack_name'} NodeIndex: '%index%' # Note, SchedulerHints must be defined here, not only in the # nested template, as it can contain %index% BlockStorageSchedulerHints: map_merge: - {get_param: BlockStorageSchedulerHints} ServiceNames: {get_attr: [BlockStorageServiceNames, value]} ServiceMetadataSettings: {get_attr: [BlockStorageServiceChainRoleData, value, service_metadata_settings]} OVNBridgeMappings: {get_attr: [BlockStorageServiceChainRoleData, value, config_settings, 'ovn::controller::ovn_bridge_mappings']} DeploymentServerBlacklistDict: {get_attr: [DeploymentServerBlacklistDict, value]} RoleParameters: map_merge: - {} - get_param: BlockStorageParameters UserData: {get_resource: BlockStorageUserData} # Resources generated for ObjectStorage Role ObjectStorageServiceChain: type: OS::TripleO::ObjectStorageServices properties: Services: get_param: ObjectStorageServices ServiceNetMap: map_merge: - {get_attr: [ServiceNetMap, service_net_map]} - {get_param: ObjectStorageServiceNetMap} ServiceData: net_cidr_map: {get_attr: [NetCidrMapValue, value]} net_vip_map: {get_attr: [VipMap, net_ip_map]} net_ip_version_map: {get_attr: [NetIpVersionMapValue, value]} vip_subnet_map: {get_attr: [ServiceNetMap, vip_subnet_map]} EndpointMap: {get_attr: [EndpointMapData, value]} RoleName: ObjectStorage RoleParameters: map_merge: - {} - get_param: ObjectStorageParameters # Lookup of role_data via heat outputs is slow, so workaround this by caching # the value in an OS::Heat::Value resource ObjectStorageServiceChainRoleData: type: OS::Heat::Value properties: type: json value: {get_attr: [ObjectStorageServiceChain, role_data]} ObjectStorageConfigData: type: OS::Heat::Value properties: type: json value: service_configs: {get_attr: [ObjectStorageServiceConfigSettings, value]} service_names: {get_attr: [ObjectStorageServiceNames, value]} role_extraconfig: map_merge: - tripleo::profile::base::metrics::collectd::sensubility::subscriptions: {get_attr: [ObjectStorageServiceChainRoleData, value, monitoring_subscriptions]} - tripleo_collectd_sensubility_subscriptions: {get_attr: [ObjectStorageServiceChainRoleData, value, monitoring_subscriptions]} - {get_param: ObjectStorageExtraConfig} extraconfig: {get_param: ExtraConfig} hieradata_files: - '%{::uuid}' - fqdn - docker_puppet # Optionally provided by container-puppet.sh - ansible_managed - heat_config_%{::deploy_config_name} - config_step - role_extraconfig - extraconfig - pci_passthrough_whitelist - service_names - service_configs - cloud_domain - bootstrap_node # provided by tripleo_hieradata - all_nodes # provided by tripleo_hieradata - vip_data # provided by tripleo_hieradata - net_ip_map - ovn_chassis_mac_map # provided by tripleo_hieradata - '%{::osfamily}' # The following are required for compatibility with the Controller role # where some vendor integrations added hieradata via ExtraConfigPre - neutron_bigswitch_data # Optionally provided by Controller/ComputeExtraConfigPre # Special variable for upgrade - upgrade ObjectStorageServiceConfigSettings: type: OS::Heat::Value properties: type: json value: map_merge: - get_param: GlobalConfigExtraMapData - get_attr: [ObjectStorageServiceChainRoleData, value, config_settings] - get_attr: [ControllerServiceChainRoleData, value, global_config_settings] - get_attr: [CellControllerServiceChainRoleData, value, global_config_settings] - get_attr: [CellControllerComputeServiceChainRoleData, value, global_config_settings] - get_attr: [ComputeServiceChainRoleData, value, global_config_settings] - get_attr: [BlockStorageServiceChainRoleData, value, global_config_settings] - get_attr: [ObjectStorageServiceChainRoleData, value, global_config_settings] - get_attr: [CephStorageServiceChainRoleData, value, global_config_settings] - get_attr: [NetworkerServiceChainRoleData, value, global_config_settings] # This next step combines two yaql passes: # - The inner one does a deep merge on the service_config_settings for all roles # - The outer one filters the map based on the services enabled for the role # then merges the result into one map. - yaql: expression: let(root => $) -> $.data.map.items().where($[0] in coalesce($root.data.services, [])).select($[1]).reduce($1.mergeWith($2), {}) data: map: yaql: expression: $.data.where($ != null).reduce($1.mergeWith($2), {}) data: - get_attr: [ControllerServiceChainRoleData, value, service_config_settings] - get_attr: [CellControllerServiceChainRoleData, value, service_config_settings] - get_attr: [CellControllerComputeServiceChainRoleData, value, service_config_settings] - get_attr: [ComputeServiceChainRoleData, value, service_config_settings] - get_attr: [BlockStorageServiceChainRoleData, value, service_config_settings] - get_attr: [ObjectStorageServiceChainRoleData, value, service_config_settings] - get_attr: [CephStorageServiceChainRoleData, value, service_config_settings] - get_attr: [NetworkerServiceChainRoleData, value, service_config_settings] services: {get_attr: [ObjectStorageServiceNames, value]} # Filter any null/None service_names which may be present due to mapping # of services to OS::Heat::None ObjectStorageServiceNames: type: OS::Heat::Value depends_on: ObjectStorageServiceChain properties: type: comma_delimited_list value: yaql: expression: let(root => $) -> distinct($.data.extra_services.items().where($[0] in coalesce($root.data.enabled_services, [])).select($[1]).flatten() + coalesce($root.data.enabled_services, [])) data: enabled_services: {get_attr: [ObjectStorageServiceChainRoleData, value, service_names]} extra_services: # If anything other than keystone needs this # then we should add an extra_networks interface # to the service templates role_data but for # now we hard-code the keystone special case keystone: - keystone_admin_api - keystone_public_api ObjectStorageServiceNetMapLower: type: OS::Heat::Value properties: value: map_merge: - {get_attr: [ServiceNetMap, service_net_map_lower]} - yaql: expression: dict($.data.map.items().select([ regex(`([a-z0-9])([A-Z])`).replace($[0], '\\1_\\2').toLower(), $[1]])) data: map: {get_param: ObjectStorageServiceNetMap} ObjectStorageIpListMap: type: OS::TripleO::Network::Ports::NetIpListMap properties: ControlPlaneIpList: {get_attr: [ObjectStorage, ip_address]} StorageIpList: {get_attr: [ObjectStorage, storage_ip_address]} StorageMgmtIpList: {get_attr: [ObjectStorage, storage_mgmt_ip_address]} InternalApiIpList: {get_attr: [ObjectStorage, internal_api_ip_address]} RoleNetworks: - ctlplane - storage - storage_mgmt - internal_api EnabledServices: {get_attr: [ObjectStorageServiceNames, value]} ServiceNetMap: {get_attr: [ObjectStorageServiceNetMapLower, value]} ServiceHostnameList: {get_attr: [ObjectStorage, hostname]} NetworkHostnameMap: {get_attr: [ObjectStorageNetworkHostnameMap, value]} ObjectStorageNetworkHostnameMap: type: OS::Heat::Value properties: type: json value: # Note (shardy) this somewhat complex yaql may be replaced # with a map_deep_merge function in ocata. It merges the # list of maps, but appends to colliding lists so we can # create a map of lists for all nodes for each network yaql: expression: dict($.data.where($ != null).flatten().selectMany($.items()).groupBy($[0], $[1]).select([$[0], $[1].flatten()])) data: - {get_attr: [ObjectStorage, hostname_map]} # Combine the NodeAdminUserData and NodeUserData mime archives ObjectStorageUserData: type: OS::Heat::MultipartMime properties: parts: - config: {get_resource: NodeAdminUserData} type: multipart - config: {get_resource: NodeTimesyncUserData} type: multipart - config: {get_resource: NodeUserData} type: multipart - config: {get_resource: ObjectStorageRoleUserData} type: multipart # For optional operator role-specific userdata # Should return a OS::Heat::MultipartMime reference via OS::stack_id ObjectStorageRoleUserData: type: OS::TripleO::ObjectStorage::NodeUserData ObjectStorage: type: OS::Heat::ResourceGroup depends_on: Networks update_policy: batch_create: max_batch_size: {get_param: NodeCreateBatchSize} properties: count: {get_param: ObjectStorageCount} removal_policies: {get_param: ObjectStorageRemovalPolicies} removal_policies_mode: {get_param: ObjectStorageRemovalPoliciesMode} resource_def: type: OS::TripleO::ObjectStorage properties: CloudDomain: {get_param: CloudDomain} ServiceNetMap: map_merge: - {get_attr: [ServiceNetMap, service_net_map]} - {get_param: ObjectStorageServiceNetMap} EndpointMap: {get_attr: [EndpointMapData, value]} Hostname: str_replace: template: {get_param: ObjectStorageHostnameFormat} params: '%stackname%': {get_param: 'OS::stack_name'} NodeIndex: '%index%' # Note, SchedulerHints must be defined here, not only in the # nested template, as it can contain %index% ObjectStorageSchedulerHints: map_merge: - {get_param: ObjectStorageSchedulerHints} ServiceNames: {get_attr: [ObjectStorageServiceNames, value]} ServiceMetadataSettings: {get_attr: [ObjectStorageServiceChainRoleData, value, service_metadata_settings]} OVNBridgeMappings: {get_attr: [ObjectStorageServiceChainRoleData, value, config_settings, 'ovn::controller::ovn_bridge_mappings']} DeploymentServerBlacklistDict: {get_attr: [DeploymentServerBlacklistDict, value]} RoleParameters: map_merge: - {} - get_param: ObjectStorageParameters UserData: {get_resource: ObjectStorageUserData} # Resources generated for CephStorage Role CephStorageServiceChain: type: OS::TripleO::CephStorageServices properties: Services: get_param: CephStorageServices ServiceNetMap: map_merge: - {get_attr: [ServiceNetMap, service_net_map]} - {get_param: CephStorageServiceNetMap} ServiceData: net_cidr_map: {get_attr: [NetCidrMapValue, value]} net_vip_map: {get_attr: [VipMap, net_ip_map]} net_ip_version_map: {get_attr: [NetIpVersionMapValue, value]} vip_subnet_map: {get_attr: [ServiceNetMap, vip_subnet_map]} EndpointMap: {get_attr: [EndpointMapData, value]} RoleName: CephStorage RoleParameters: map_merge: - {} - get_param: CephStorageParameters # Lookup of role_data via heat outputs is slow, so workaround this by caching # the value in an OS::Heat::Value resource CephStorageServiceChainRoleData: type: OS::Heat::Value properties: type: json value: {get_attr: [CephStorageServiceChain, role_data]} CephStorageConfigData: type: OS::Heat::Value properties: type: json value: service_configs: {get_attr: [CephStorageServiceConfigSettings, value]} service_names: {get_attr: [CephStorageServiceNames, value]} role_extraconfig: map_merge: - tripleo::profile::base::metrics::collectd::sensubility::subscriptions: {get_attr: [CephStorageServiceChainRoleData, value, monitoring_subscriptions]} - tripleo_collectd_sensubility_subscriptions: {get_attr: [CephStorageServiceChainRoleData, value, monitoring_subscriptions]} - {get_param: CephStorageExtraConfig} extraconfig: {get_param: ExtraConfig} hieradata_files: - '%{::uuid}' - fqdn - docker_puppet # Optionally provided by container-puppet.sh - ansible_managed - heat_config_%{::deploy_config_name} - config_step - role_extraconfig - extraconfig - pci_passthrough_whitelist - service_names - service_configs - cloud_domain - bootstrap_node # provided by tripleo_hieradata - all_nodes # provided by tripleo_hieradata - vip_data # provided by tripleo_hieradata - net_ip_map - ovn_chassis_mac_map # provided by tripleo_hieradata - '%{::osfamily}' # The following are required for compatibility with the Controller role # where some vendor integrations added hieradata via ExtraConfigPre - neutron_bigswitch_data # Optionally provided by Controller/ComputeExtraConfigPre # Special variable for upgrade - upgrade CephStorageServiceConfigSettings: type: OS::Heat::Value properties: type: json value: map_merge: - get_param: GlobalConfigExtraMapData - get_attr: [CephStorageServiceChainRoleData, value, config_settings] - get_attr: [ControllerServiceChainRoleData, value, global_config_settings] - get_attr: [CellControllerServiceChainRoleData, value, global_config_settings] - get_attr: [CellControllerComputeServiceChainRoleData, value, global_config_settings] - get_attr: [ComputeServiceChainRoleData, value, global_config_settings] - get_attr: [BlockStorageServiceChainRoleData, value, global_config_settings] - get_attr: [ObjectStorageServiceChainRoleData, value, global_config_settings] - get_attr: [CephStorageServiceChainRoleData, value, global_config_settings] - get_attr: [NetworkerServiceChainRoleData, value, global_config_settings] # This next step combines two yaql passes: # - The inner one does a deep merge on the service_config_settings for all roles # - The outer one filters the map based on the services enabled for the role # then merges the result into one map. - yaql: expression: let(root => $) -> $.data.map.items().where($[0] in coalesce($root.data.services, [])).select($[1]).reduce($1.mergeWith($2), {}) data: map: yaql: expression: $.data.where($ != null).reduce($1.mergeWith($2), {}) data: - get_attr: [ControllerServiceChainRoleData, value, service_config_settings] - get_attr: [CellControllerServiceChainRoleData, value, service_config_settings] - get_attr: [CellControllerComputeServiceChainRoleData, value, service_config_settings] - get_attr: [ComputeServiceChainRoleData, value, service_config_settings] - get_attr: [BlockStorageServiceChainRoleData, value, service_config_settings] - get_attr: [ObjectStorageServiceChainRoleData, value, service_config_settings] - get_attr: [CephStorageServiceChainRoleData, value, service_config_settings] - get_attr: [NetworkerServiceChainRoleData, value, service_config_settings] services: {get_attr: [CephStorageServiceNames, value]} # Filter any null/None service_names which may be present due to mapping # of services to OS::Heat::None CephStorageServiceNames: type: OS::Heat::Value depends_on: CephStorageServiceChain properties: type: comma_delimited_list value: yaql: expression: let(root => $) -> distinct($.data.extra_services.items().where($[0] in coalesce($root.data.enabled_services, [])).select($[1]).flatten() + coalesce($root.data.enabled_services, [])) data: enabled_services: {get_attr: [CephStorageServiceChainRoleData, value, service_names]} extra_services: # If anything other than keystone needs this # then we should add an extra_networks interface # to the service templates role_data but for # now we hard-code the keystone special case keystone: - keystone_admin_api - keystone_public_api CephStorageServiceNetMapLower: type: OS::Heat::Value properties: value: map_merge: - {get_attr: [ServiceNetMap, service_net_map_lower]} - yaql: expression: dict($.data.map.items().select([ regex(`([a-z0-9])([A-Z])`).replace($[0], '\\1_\\2').toLower(), $[1]])) data: map: {get_param: CephStorageServiceNetMap} CephStorageIpListMap: type: OS::TripleO::Network::Ports::NetIpListMap properties: ControlPlaneIpList: {get_attr: [CephStorage, ip_address]} StorageIpList: {get_attr: [CephStorage, storage_ip_address]} StorageMgmtIpList: {get_attr: [CephStorage, storage_mgmt_ip_address]} RoleNetworks: - ctlplane - storage - storage_mgmt EnabledServices: {get_attr: [CephStorageServiceNames, value]} ServiceNetMap: {get_attr: [CephStorageServiceNetMapLower, value]} ServiceHostnameList: {get_attr: [CephStorage, hostname]} NetworkHostnameMap: {get_attr: [CephStorageNetworkHostnameMap, value]} CephStorageNetworkHostnameMap: type: OS::Heat::Value properties: type: json value: # Note (shardy) this somewhat complex yaql may be replaced # with a map_deep_merge function in ocata. It merges the # list of maps, but appends to colliding lists so we can # create a map of lists for all nodes for each network yaql: expression: dict($.data.where($ != null).flatten().selectMany($.items()).groupBy($[0], $[1]).select([$[0], $[1].flatten()])) data: - {get_attr: [CephStorage, hostname_map]} # Combine the NodeAdminUserData and NodeUserData mime archives CephStorageUserData: type: OS::Heat::MultipartMime properties: parts: - config: {get_resource: NodeAdminUserData} type: multipart - config: {get_resource: NodeTimesyncUserData} type: multipart - config: {get_resource: NodeUserData} type: multipart - config: {get_resource: CephStorageRoleUserData} type: multipart # For optional operator role-specific userdata # Should return a OS::Heat::MultipartMime reference via OS::stack_id CephStorageRoleUserData: type: OS::TripleO::CephStorage::NodeUserData CephStorage: type: OS::Heat::ResourceGroup depends_on: Networks update_policy: batch_create: max_batch_size: {get_param: NodeCreateBatchSize} properties: count: {get_param: CephStorageCount} removal_policies: {get_param: CephStorageRemovalPolicies} removal_policies_mode: {get_param: CephStorageRemovalPoliciesMode} resource_def: type: OS::TripleO::CephStorage properties: CloudDomain: {get_param: CloudDomain} ServiceNetMap: map_merge: - {get_attr: [ServiceNetMap, service_net_map]} - {get_param: CephStorageServiceNetMap} EndpointMap: {get_attr: [EndpointMapData, value]} Hostname: str_replace: template: {get_param: CephStorageHostnameFormat} params: '%stackname%': {get_param: 'OS::stack_name'} NodeIndex: '%index%' # Note, SchedulerHints must be defined here, not only in the # nested template, as it can contain %index% CephStorageSchedulerHints: map_merge: - {get_param: CephStorageSchedulerHints} ServiceNames: {get_attr: [CephStorageServiceNames, value]} ServiceMetadataSettings: {get_attr: [CephStorageServiceChainRoleData, value, service_metadata_settings]} OVNBridgeMappings: {get_attr: [CephStorageServiceChainRoleData, value, config_settings, 'ovn::controller::ovn_bridge_mappings']} DeploymentServerBlacklistDict: {get_attr: [DeploymentServerBlacklistDict, value]} RoleParameters: map_merge: - {} - get_param: CephStorageParameters UserData: {get_resource: CephStorageUserData} # Resources generated for Networker Role NetworkerServiceChain: type: OS::TripleO::NetworkerServices properties: Services: get_param: NetworkerServices ServiceNetMap: map_merge: - {get_attr: [ServiceNetMap, service_net_map]} - {get_param: NetworkerServiceNetMap} ServiceData: net_cidr_map: {get_attr: [NetCidrMapValue, value]} net_vip_map: {get_attr: [VipMap, net_ip_map]} net_ip_version_map: {get_attr: [NetIpVersionMapValue, value]} vip_subnet_map: {get_attr: [ServiceNetMap, vip_subnet_map]} EndpointMap: {get_attr: [EndpointMapData, value]} RoleName: Networker RoleParameters: map_merge: - {'OVNCMSOptions': 'enable-chassis-as-gw'} - get_param: NetworkerParameters # Lookup of role_data via heat outputs is slow, so workaround this by caching # the value in an OS::Heat::Value resource NetworkerServiceChainRoleData: type: OS::Heat::Value properties: type: json value: {get_attr: [NetworkerServiceChain, role_data]} NetworkerConfigData: type: OS::Heat::Value properties: type: json value: service_configs: {get_attr: [NetworkerServiceConfigSettings, value]} service_names: {get_attr: [NetworkerServiceNames, value]} role_extraconfig: map_merge: - tripleo::profile::base::metrics::collectd::sensubility::subscriptions: {get_attr: [NetworkerServiceChainRoleData, value, monitoring_subscriptions]} - tripleo_collectd_sensubility_subscriptions: {get_attr: [NetworkerServiceChainRoleData, value, monitoring_subscriptions]} - {get_param: NetworkerExtraConfig} extraconfig: {get_param: ExtraConfig} hieradata_files: - '%{::uuid}' - fqdn - docker_puppet # Optionally provided by container-puppet.sh - ansible_managed - heat_config_%{::deploy_config_name} - config_step - role_extraconfig - extraconfig - pci_passthrough_whitelist - service_names - service_configs - cloud_domain - bootstrap_node # provided by tripleo_hieradata - all_nodes # provided by tripleo_hieradata - vip_data # provided by tripleo_hieradata - net_ip_map - ovn_chassis_mac_map # provided by tripleo_hieradata - '%{::osfamily}' # The following are required for compatibility with the Controller role # where some vendor integrations added hieradata via ExtraConfigPre - neutron_bigswitch_data # Optionally provided by Controller/ComputeExtraConfigPre # Special variable for upgrade - upgrade NetworkerServiceConfigSettings: type: OS::Heat::Value properties: type: json value: map_merge: - get_param: GlobalConfigExtraMapData - get_attr: [NetworkerServiceChainRoleData, value, config_settings] - get_attr: [ControllerServiceChainRoleData, value, global_config_settings] - get_attr: [CellControllerServiceChainRoleData, value, global_config_settings] - get_attr: [CellControllerComputeServiceChainRoleData, value, global_config_settings] - get_attr: [ComputeServiceChainRoleData, value, global_config_settings] - get_attr: [BlockStorageServiceChainRoleData, value, global_config_settings] - get_attr: [ObjectStorageServiceChainRoleData, value, global_config_settings] - get_attr: [CephStorageServiceChainRoleData, value, global_config_settings] - get_attr: [NetworkerServiceChainRoleData, value, global_config_settings] # This next step combines two yaql passes: # - The inner one does a deep merge on the service_config_settings for all roles # - The outer one filters the map based on the services enabled for the role # then merges the result into one map. - yaql: expression: let(root => $) -> $.data.map.items().where($[0] in coalesce($root.data.services, [])).select($[1]).reduce($1.mergeWith($2), {}) data: map: yaql: expression: $.data.where($ != null).reduce($1.mergeWith($2), {}) data: - get_attr: [ControllerServiceChainRoleData, value, service_config_settings] - get_attr: [CellControllerServiceChainRoleData, value, service_config_settings] - get_attr: [CellControllerComputeServiceChainRoleData, value, service_config_settings] - get_attr: [ComputeServiceChainRoleData, value, service_config_settings] - get_attr: [BlockStorageServiceChainRoleData, value, service_config_settings] - get_attr: [ObjectStorageServiceChainRoleData, value, service_config_settings] - get_attr: [CephStorageServiceChainRoleData, value, service_config_settings] - get_attr: [NetworkerServiceChainRoleData, value, service_config_settings] services: {get_attr: [NetworkerServiceNames, value]} # Filter any null/None service_names which may be present due to mapping # of services to OS::Heat::None NetworkerServiceNames: type: OS::Heat::Value depends_on: NetworkerServiceChain properties: type: comma_delimited_list value: yaql: expression: let(root => $) -> distinct($.data.extra_services.items().where($[0] in coalesce($root.data.enabled_services, [])).select($[1]).flatten() + coalesce($root.data.enabled_services, [])) data: enabled_services: {get_attr: [NetworkerServiceChainRoleData, value, service_names]} extra_services: # If anything other than keystone needs this # then we should add an extra_networks interface # to the service templates role_data but for # now we hard-code the keystone special case keystone: - keystone_admin_api - keystone_public_api NetworkerServiceNetMapLower: type: OS::Heat::Value properties: value: map_merge: - {get_attr: [ServiceNetMap, service_net_map_lower]} - yaql: expression: dict($.data.map.items().select([ regex(`([a-z0-9])([A-Z])`).replace($[0], '\\1_\\2').toLower(), $[1]])) data: map: {get_param: NetworkerServiceNetMap} NetworkerIpListMap: type: OS::TripleO::Network::Ports::NetIpListMap properties: ControlPlaneIpList: {get_attr: [Networker, ip_address]} InternalApiIpList: {get_attr: [Networker, internal_api_ip_address]} TenantIpList: {get_attr: [Networker, tenant_ip_address]} RoleNetworks: - ctlplane - internal_api - tenant EnabledServices: {get_attr: [NetworkerServiceNames, value]} ServiceNetMap: {get_attr: [NetworkerServiceNetMapLower, value]} ServiceHostnameList: {get_attr: [Networker, hostname]} NetworkHostnameMap: {get_attr: [NetworkerNetworkHostnameMap, value]} NetworkerNetworkHostnameMap: type: OS::Heat::Value properties: type: json value: # Note (shardy) this somewhat complex yaql may be replaced # with a map_deep_merge function in ocata. It merges the # list of maps, but appends to colliding lists so we can # create a map of lists for all nodes for each network yaql: expression: dict($.data.where($ != null).flatten().selectMany($.items()).groupBy($[0], $[1]).select([$[0], $[1].flatten()])) data: - {get_attr: [Networker, hostname_map]} # Combine the NodeAdminUserData and NodeUserData mime archives NetworkerUserData: type: OS::Heat::MultipartMime properties: parts: - config: {get_resource: NodeAdminUserData} type: multipart - config: {get_resource: NodeTimesyncUserData} type: multipart - config: {get_resource: NodeUserData} type: multipart - config: {get_resource: NetworkerRoleUserData} type: multipart # For optional operator role-specific userdata # Should return a OS::Heat::MultipartMime reference via OS::stack_id NetworkerRoleUserData: type: OS::TripleO::Networker::NodeUserData Networker: type: OS::Heat::ResourceGroup depends_on: Networks update_policy: batch_create: max_batch_size: {get_param: NodeCreateBatchSize} properties: count: {get_param: NetworkerCount} removal_policies: {get_param: NetworkerRemovalPolicies} removal_policies_mode: {get_param: NetworkerRemovalPoliciesMode} resource_def: type: OS::TripleO::Networker properties: CloudDomain: {get_param: CloudDomain} ServiceNetMap: map_merge: - {get_attr: [ServiceNetMap, service_net_map]} - {get_param: NetworkerServiceNetMap} EndpointMap: {get_attr: [EndpointMapData, value]} Hostname: str_replace: template: {get_param: NetworkerHostnameFormat} params: '%stackname%': {get_param: 'OS::stack_name'} NodeIndex: '%index%' # Note, SchedulerHints must be defined here, not only in the # nested template, as it can contain %index% NetworkerSchedulerHints: map_merge: - {get_param: NetworkerSchedulerHints} ServiceNames: {get_attr: [NetworkerServiceNames, value]} ServiceMetadataSettings: {get_attr: [NetworkerServiceChainRoleData, value, service_metadata_settings]} OVNBridgeMappings: {get_attr: [NetworkerServiceChainRoleData, value, config_settings, 'ovn::controller::ovn_bridge_mappings']} DeploymentServerBlacklistDict: {get_attr: [DeploymentServerBlacklistDict, value]} RoleParameters: map_merge: - {'OVNCMSOptions': 'enable-chassis-as-gw'} - get_param: NetworkerParameters UserData: {get_resource: NetworkerUserData} ControllerServers: type: OS::Heat::Value depends_on: Controller properties: type: json value: yaql: expression: let(servers=>switch(isDict($.data.servers) => $.data.servers, true => {})) -> $servers.deleteAll($servers.keys().where($servers[$] = null)) data: servers: {get_attr: [Controller, attributes, nova_server_resource]} CellControllerServers: type: OS::Heat::Value depends_on: CellController properties: type: json value: yaql: expression: let(servers=>switch(isDict($.data.servers) => $.data.servers, true => {})) -> $servers.deleteAll($servers.keys().where($servers[$] = null)) data: servers: {get_attr: [CellController, attributes, nova_server_resource]} CellControllerComputeServers: type: OS::Heat::Value depends_on: CellControllerCompute properties: type: json value: yaql: expression: let(servers=>switch(isDict($.data.servers) => $.data.servers, true => {})) -> $servers.deleteAll($servers.keys().where($servers[$] = null)) data: servers: {get_attr: [CellControllerCompute, attributes, nova_server_resource]} ComputeServers: type: OS::Heat::Value depends_on: Compute properties: type: json value: yaql: expression: let(servers=>switch(isDict($.data.servers) => $.data.servers, true => {})) -> $servers.deleteAll($servers.keys().where($servers[$] = null)) data: servers: {get_attr: [Compute, attributes, nova_server_resource]} BlockStorageServers: type: OS::Heat::Value depends_on: BlockStorage properties: type: json value: yaql: expression: let(servers=>switch(isDict($.data.servers) => $.data.servers, true => {})) -> $servers.deleteAll($servers.keys().where($servers[$] = null)) data: servers: {get_attr: [BlockStorage, attributes, nova_server_resource]} ObjectStorageServers: type: OS::Heat::Value depends_on: ObjectStorage properties: type: json value: yaql: expression: let(servers=>switch(isDict($.data.servers) => $.data.servers, true => {})) -> $servers.deleteAll($servers.keys().where($servers[$] = null)) data: servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]} CephStorageServers: type: OS::Heat::Value depends_on: CephStorage properties: type: json value: yaql: expression: let(servers=>switch(isDict($.data.servers) => $.data.servers, true => {})) -> $servers.deleteAll($servers.keys().where($servers[$] = null)) data: servers: {get_attr: [CephStorage, attributes, nova_server_resource]} NetworkerServers: type: OS::Heat::Value depends_on: Networker properties: type: json value: yaql: expression: let(servers=>switch(isDict($.data.servers) => $.data.servers, true => {})) -> $servers.deleteAll($servers.keys().where($servers[$] = null)) data: servers: {get_attr: [Networker, attributes, nova_server_resource]} # This is a different format to *Servers, as it creates a map of lists # whereas *Servers creates a map of maps with keys of the nested resource names ServerIdMap: type: OS::Heat::Value properties: value: server_ids: Controller: {get_attr: [Controller, nova_server_resource]} CellController: {get_attr: [CellController, nova_server_resource]} CellControllerCompute: {get_attr: [CellControllerCompute, nova_server_resource]} Compute: {get_attr: [Compute, nova_server_resource]} BlockStorage: {get_attr: [BlockStorage, nova_server_resource]} ObjectStorage: {get_attr: [ObjectStorage, nova_server_resource]} CephStorage: {get_attr: [CephStorage, nova_server_resource]} Networker: {get_attr: [Networker, nova_server_resource]} bootstrap_server_id: yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [CellControllerCompute, nova_server_resource]} # This resource just creates a dict out of the DeploymentServerBlacklist, # which is a list. The dict is used in the role templates to set a condition # on whether to create the deployment resources. We can't use the list # directly because there is no way to ask Heat if a list contains a specific # value. DeploymentServerBlacklistDict: type: OS::Heat::Value properties: type: json value: map_merge: repeat: template: hostname: 1 for_each: hostname: {get_param: DeploymentServerBlacklist} HostsEntryValue: type: OS::Heat::Value properties: type: comma_delimited_list value: list_concat_unique: list_concat: - - {get_param: UndercloudHostsEntries} - - if: - add_vips_to_etc_hosts - {get_attr: [VipHosts, value]} - [] - {get_attr: [Controller, hosts_entry]} - {get_attr: [CellController, hosts_entry]} - {get_attr: [CellControllerCompute, hosts_entry]} - {get_attr: [Compute, hosts_entry]} - {get_attr: [BlockStorage, hosts_entry]} - {get_attr: [ObjectStorage, hosts_entry]} - {get_attr: [CephStorage, hosts_entry]} - {get_attr: [Networker, hosts_entry]} - - {get_param: ExtraHostFileEntries} CloudNames: type: OS::Heat::Value properties: value: cloud_name_storage: {get_param: CloudNameStorage} # Special case StorageMgmt hostname param, which is CloudNameStorageManagement cloud_name_storage_mgmt: {get_param: CloudNameStorageManagement} # Special case the Internal API hostname param, which is CloudNameInternal cloud_name_internal_api: {get_param: CloudNameInternal} # Special case the External hostname param, which is CloudName cloud_name_external: {get_param: CloudName} cloud_name_ctlplane: {get_param: CloudNameCtlplane} GlobalConfig: type: OS::Heat::Value properties: type: json value: map_merge: - get_attr: [ControllerServiceChainRoleData, value, global_config_settings] - get_attr: [CellControllerServiceChainRoleData, value, global_config_settings] - get_attr: [CellControllerComputeServiceChainRoleData, value, global_config_settings] - get_attr: [ComputeServiceChainRoleData, value, global_config_settings] - get_attr: [BlockStorageServiceChainRoleData, value, global_config_settings] - get_attr: [ObjectStorageServiceChainRoleData, value, global_config_settings] - get_attr: [CephStorageServiceChainRoleData, value, global_config_settings] - get_attr: [NetworkerServiceChainRoleData, value, global_config_settings] # creates the network architecture Networks: type: OS::TripleO::Network # Because of nested get_attr functions in *VirtualIP/VipMap, # we can't determine which attributes of Networks are used until after # ServiceNetMap's attribute values are available. depends_on: ServiceNetMap properties: CtlplaneNetworkCidrs: {get_attr: [ControlVirtualIP, network, tags]} # NOTE(tkajinam): Backend services and haproxy might be running in different # nodes, so we need to gather all frontend firewall rules # across all roles and pass the combined data to firewall # configuration task in the node where haproxy (or edge # haproxy) is assigned to. FirewallFrontendRules: type: OS::Heat::Value properties: type: json value: frontend: map_merge: - get_attr: [ControllerServiceChainRoleData, value, firewall_frontend_rules] - get_attr: [CellControllerServiceChainRoleData, value, firewall_frontend_rules] - get_attr: [CellControllerComputeServiceChainRoleData, value, firewall_frontend_rules] - get_attr: [ComputeServiceChainRoleData, value, firewall_frontend_rules] - get_attr: [BlockStorageServiceChainRoleData, value, firewall_frontend_rules] - get_attr: [ObjectStorageServiceChainRoleData, value, firewall_frontend_rules] - get_attr: [CephStorageServiceChainRoleData, value, firewall_frontend_rules] - get_attr: [NetworkerServiceChainRoleData, value, firewall_frontend_rules] ssl_frontend: map_merge: - get_attr: [ControllerServiceChainRoleData, value, firewall_ssl_frontend_rules] - get_attr: [CellControllerServiceChainRoleData, value, firewall_ssl_frontend_rules] - get_attr: [CellControllerComputeServiceChainRoleData, value, firewall_ssl_frontend_rules] - get_attr: [ComputeServiceChainRoleData, value, firewall_ssl_frontend_rules] - get_attr: [BlockStorageServiceChainRoleData, value, firewall_ssl_frontend_rules] - get_attr: [ObjectStorageServiceChainRoleData, value, firewall_ssl_frontend_rules] - get_attr: [CephStorageServiceChainRoleData, value, firewall_ssl_frontend_rules] - get_attr: [NetworkerServiceChainRoleData, value, firewall_ssl_frontend_rules] edge_frontend: map_merge: - get_attr: [ControllerServiceChainRoleData, value, firewall_edge_frontend_rules] - get_attr: [CellControllerServiceChainRoleData, value, firewall_edge_frontend_rules] - get_attr: [CellControllerComputeServiceChainRoleData, value, firewall_edge_frontend_rules] - get_attr: [ComputeServiceChainRoleData, value, firewall_edge_frontend_rules] - get_attr: [BlockStorageServiceChainRoleData, value, firewall_edge_frontend_rules] - get_attr: [ObjectStorageServiceChainRoleData, value, firewall_edge_frontend_rules] - get_attr: [CephStorageServiceChainRoleData, value, firewall_edge_frontend_rules] - get_attr: [NetworkerServiceChainRoleData, value, firewall_edge_frontend_rules] edge_ssl_frontend: map_merge: - get_attr: [ControllerServiceChainRoleData, value, firewall_edge_ssl_frontend_rules] - get_attr: [CellControllerServiceChainRoleData, value, firewall_edge_ssl_frontend_rules] - get_attr: [CellControllerComputeServiceChainRoleData, value, firewall_edge_ssl_frontend_rules] - get_attr: [ComputeServiceChainRoleData, value, firewall_edge_ssl_frontend_rules] - get_attr: [BlockStorageServiceChainRoleData, value, firewall_edge_ssl_frontend_rules] - get_attr: [ObjectStorageServiceChainRoleData, value, firewall_edge_ssl_frontend_rules] - get_attr: [CephStorageServiceChainRoleData, value, firewall_edge_ssl_frontend_rules] - get_attr: [NetworkerServiceChainRoleData, value, firewall_edge_ssl_frontend_rules] ControllerGroupVars: type: OS::Heat::Value properties: value: ctlplane_mtu: {get_attr: [Networks, net_attributes_map, ctlplane, network, mtu]} ctlplane_gateway_ip: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ControllerControlPlaneSubnet}, gateway_ip]} ctlplane_dns_nameservers: if: - dnsservers_set - {get_param: DnsServers} - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ControllerControlPlaneSubnet}, dns_nameservers]} ctlplane_subnet_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ControllerControlPlaneSubnet}, cidr]}, 1]} ctlplane_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ControllerControlPlaneSubnet}, host_routes]} - - default: true next_hop: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ControllerControlPlaneSubnet}, gateway_ip]} # MTU is not filtered on role.networks, for DVR we need the External MTU on the exteranl_bridge storage_mtu: {get_attr: [Networks, net_attributes_map, storage, network, mtu]} storage_mgmt_mtu: {get_attr: [Networks, net_attributes_map, storage_mgmt, network, mtu]} internal_api_mtu: {get_attr: [Networks, net_attributes_map, internal_api, network, mtu]} tenant_mtu: {get_attr: [Networks, net_attributes_map, tenant, network, mtu]} external_mtu: {get_attr: [Networks, net_attributes_map, external, network, mtu]} storage_gateway_ip: {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, gateway_ip]} storage_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, host_routes]} storage_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, cidr]}, 1]} storage_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, tags]} storage_mgmt_gateway_ip: {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, gateway_ip]} storage_mgmt_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, host_routes]} storage_mgmt_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, cidr]}, 1]} storage_mgmt_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, tags]} internal_api_gateway_ip: {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, gateway_ip]} internal_api_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, host_routes]} internal_api_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, cidr]}, 1]} internal_api_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, tags]} tenant_gateway_ip: {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, gateway_ip]} tenant_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, host_routes]} tenant_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, cidr]}, 1]} tenant_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, tags]} external_gateway_ip: {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, gateway_ip]} external_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, host_routes]} external_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, cidr]}, 1]} external_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, tags]} network_cidrs: Storage_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, cidr]}, 1]} StorageMgmt_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, cidr]}, 1]} InternalApi_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, cidr]}, 1]} Tenant_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, cidr]}, 1]} External_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, cidr]}, 1]} dns_search_domains: {get_param: DnsSearchDomains} bond_interface_ovs_options: {get_param: BondInterfaceOvsOptions} local_mtu: {get_param: ControllerLocalMtu} role_networks: - Storage - StorageMgmt - InternalApi - Tenant - External networks_lower: Storage: storage StorageMgmt: storage_mgmt InternalApi: internal_api Tenant: tenant External: external networks_all: - Storage - StorageMgmt - InternalApi - Tenant - External service_metadata_settings: {get_attr: [ControllerServiceChainRoleData, value, service_metadata_settings]} tripleo_network_config_template: {get_param: ControllerNetworkConfigTemplate} tripleo_network_config_with_ansible: {get_param: NetworkConfigWithAnsible} default_route_networks: ['ControlPlane'] networks_skip_config: [] tripleo_firewall_rules: {get_attr: [ControllerServiceChainRoleData, value, firewall_rules]} tripleo_firewall_frontend_rules: {get_attr: [FirewallFrontendRules, value, frontend]} tripleo_firewall_ssl_frontend_rules: {get_attr: [FirewallFrontendRules, value, ssl_frontend]} tripleo_firewall_edge_frontend_rules: {get_attr: [FirewallFrontendRules, value, edge_frontend]} tripleo_firewall_edge_ssl_frontend_rules: {get_attr: [FirewallFrontendRules, value, edge_ssl_frontend]} role_tags: ['primary', 'controller', 'external_bridge'] service_net_map: {get_attr: [ControllerServiceNetMapLower, value]} ControllerNetworkConfig: type: OS::TripleO::Controller::Net::SoftwareConfig properties: ControlPlaneIp: "{{ ctlplane_ip }}" ControlPlaneSubnetCidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ControllerControlPlaneSubnet}, cidr]}, 1]} ControlPlaneDefaultRoute: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ControllerControlPlaneSubnet}, gateway_ip]} ControlPlaneStaticRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ControllerControlPlaneSubnet}, host_routes]} - - default: true next_hop: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ControllerControlPlaneSubnet}, gateway_ip]} ControlPlaneMtu: {get_attr: [Networks, net_attributes_map, ctlplane, network, mtu]} DnsServers: if: - dnsservers_set - {get_param: DnsServers} - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ControllerControlPlaneSubnet}, dns_nameservers]} StorageIpSubnet: "{{ storage_ip ~ '/' ~ storage_cidr }}" StorageInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, host_routes]} StorageMtu: {get_attr: [Networks, net_attributes_map, storage, network, mtu]} StorageNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, tags]} StorageMgmtIpSubnet: "{{ storage_mgmt_ip ~ '/' ~ storage_mgmt_cidr }}" StorageMgmtInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, host_routes]} StorageMgmtMtu: {get_attr: [Networks, net_attributes_map, storage_mgmt, network, mtu]} StorageMgmtNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, tags]} InternalApiIpSubnet: "{{ internal_api_ip ~ '/' ~ internal_api_cidr }}" InternalApiInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, host_routes]} InternalApiMtu: {get_attr: [Networks, net_attributes_map, internal_api, network, mtu]} InternalApiNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, tags]} TenantIpSubnet: "{{ tenant_ip ~ '/' ~ tenant_cidr }}" TenantInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, host_routes]} TenantMtu: {get_attr: [Networks, net_attributes_map, tenant, network, mtu]} TenantNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, tags]} ExternalIpSubnet: "{{ external_ip ~ '/' ~ external_cidr }}" ExternalInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, host_routes]} ExternalMtu: {get_attr: [Networks, net_attributes_map, external, network, mtu]} ExternalNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, tags]} CellControllerGroupVars: type: OS::Heat::Value properties: value: ctlplane_mtu: {get_attr: [Networks, net_attributes_map, ctlplane, network, mtu]} ctlplane_gateway_ip: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CellControllerControlPlaneSubnet}, gateway_ip]} ctlplane_dns_nameservers: if: - dnsservers_set - {get_param: DnsServers} - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CellControllerControlPlaneSubnet}, dns_nameservers]} ctlplane_subnet_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CellControllerControlPlaneSubnet}, cidr]}, 1]} ctlplane_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CellControllerControlPlaneSubnet}, host_routes]} - - default: true next_hop: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CellControllerControlPlaneSubnet}, gateway_ip]} # MTU is not filtered on role.networks, for DVR we need the External MTU on the exteranl_bridge storage_mtu: {get_attr: [Networks, net_attributes_map, storage, network, mtu]} storage_mgmt_mtu: {get_attr: [Networks, net_attributes_map, storage_mgmt, network, mtu]} internal_api_mtu: {get_attr: [Networks, net_attributes_map, internal_api, network, mtu]} tenant_mtu: {get_attr: [Networks, net_attributes_map, tenant, network, mtu]} external_mtu: {get_attr: [Networks, net_attributes_map, external, network, mtu]} storage_gateway_ip: {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, gateway_ip]} storage_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, host_routes]} storage_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, cidr]}, 1]} storage_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, tags]} storage_mgmt_gateway_ip: {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, gateway_ip]} storage_mgmt_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, host_routes]} storage_mgmt_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, cidr]}, 1]} storage_mgmt_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, tags]} internal_api_gateway_ip: {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, gateway_ip]} internal_api_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, host_routes]} internal_api_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, cidr]}, 1]} internal_api_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, tags]} tenant_gateway_ip: {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, gateway_ip]} tenant_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, host_routes]} tenant_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, cidr]}, 1]} tenant_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, tags]} external_gateway_ip: {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, gateway_ip]} external_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, host_routes]} external_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, cidr]}, 1]} external_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, tags]} network_cidrs: Storage_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, cidr]}, 1]} StorageMgmt_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, cidr]}, 1]} InternalApi_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, cidr]}, 1]} Tenant_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, cidr]}, 1]} External_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, cidr]}, 1]} dns_search_domains: {get_param: DnsSearchDomains} bond_interface_ovs_options: {get_param: BondInterfaceOvsOptions} local_mtu: {get_param: CellControllerLocalMtu} role_networks: - Storage - StorageMgmt - InternalApi - Tenant - External networks_lower: Storage: storage StorageMgmt: storage_mgmt InternalApi: internal_api Tenant: tenant External: external networks_all: - Storage - StorageMgmt - InternalApi - Tenant - External service_metadata_settings: {get_attr: [CellControllerServiceChainRoleData, value, service_metadata_settings]} tripleo_network_config_template: {get_param: CellControllerNetworkConfigTemplate} tripleo_network_config_with_ansible: {get_param: NetworkConfigWithAnsible} default_route_networks: ['ControlPlane'] networks_skip_config: [] tripleo_firewall_rules: {get_attr: [CellControllerServiceChainRoleData, value, firewall_rules]} tripleo_firewall_frontend_rules: {get_attr: [FirewallFrontendRules, value, frontend]} tripleo_firewall_ssl_frontend_rules: {get_attr: [FirewallFrontendRules, value, ssl_frontend]} tripleo_firewall_edge_frontend_rules: {get_attr: [FirewallFrontendRules, value, edge_frontend]} tripleo_firewall_edge_ssl_frontend_rules: {get_attr: [FirewallFrontendRules, value, edge_ssl_frontend]} role_tags: ['primary', 'controller'] service_net_map: {get_attr: [CellControllerServiceNetMapLower, value]} CellControllerNetworkConfig: type: OS::TripleO::CellController::Net::SoftwareConfig properties: ControlPlaneIp: "{{ ctlplane_ip }}" ControlPlaneSubnetCidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CellControllerControlPlaneSubnet}, cidr]}, 1]} ControlPlaneDefaultRoute: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CellControllerControlPlaneSubnet}, gateway_ip]} ControlPlaneStaticRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CellControllerControlPlaneSubnet}, host_routes]} - - default: true next_hop: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CellControllerControlPlaneSubnet}, gateway_ip]} ControlPlaneMtu: {get_attr: [Networks, net_attributes_map, ctlplane, network, mtu]} DnsServers: if: - dnsservers_set - {get_param: DnsServers} - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CellControllerControlPlaneSubnet}, dns_nameservers]} StorageIpSubnet: "{{ storage_ip ~ '/' ~ storage_cidr }}" StorageInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, host_routes]} StorageMtu: {get_attr: [Networks, net_attributes_map, storage, network, mtu]} StorageNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, tags]} StorageMgmtIpSubnet: "{{ storage_mgmt_ip ~ '/' ~ storage_mgmt_cidr }}" StorageMgmtInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, host_routes]} StorageMgmtMtu: {get_attr: [Networks, net_attributes_map, storage_mgmt, network, mtu]} StorageMgmtNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, tags]} InternalApiIpSubnet: "{{ internal_api_ip ~ '/' ~ internal_api_cidr }}" InternalApiInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, host_routes]} InternalApiMtu: {get_attr: [Networks, net_attributes_map, internal_api, network, mtu]} InternalApiNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, tags]} TenantIpSubnet: "{{ tenant_ip ~ '/' ~ tenant_cidr }}" TenantInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, host_routes]} TenantMtu: {get_attr: [Networks, net_attributes_map, tenant, network, mtu]} TenantNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, tags]} ExternalIpSubnet: "{{ external_ip ~ '/' ~ external_cidr }}" ExternalInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, host_routes]} ExternalMtu: {get_attr: [Networks, net_attributes_map, external, network, mtu]} ExternalNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, tags]} CellControllerComputeGroupVars: type: OS::Heat::Value properties: value: ctlplane_mtu: {get_attr: [Networks, net_attributes_map, ctlplane, network, mtu]} ctlplane_gateway_ip: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CellControllerComputeControlPlaneSubnet}, gateway_ip]} ctlplane_dns_nameservers: if: - dnsservers_set - {get_param: DnsServers} - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CellControllerComputeControlPlaneSubnet}, dns_nameservers]} ctlplane_subnet_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CellControllerComputeControlPlaneSubnet}, cidr]}, 1]} ctlplane_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CellControllerComputeControlPlaneSubnet}, host_routes]} - - default: true next_hop: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CellControllerComputeControlPlaneSubnet}, gateway_ip]} # MTU is not filtered on role.networks, for DVR we need the External MTU on the exteranl_bridge storage_mtu: {get_attr: [Networks, net_attributes_map, storage, network, mtu]} storage_mgmt_mtu: {get_attr: [Networks, net_attributes_map, storage_mgmt, network, mtu]} internal_api_mtu: {get_attr: [Networks, net_attributes_map, internal_api, network, mtu]} tenant_mtu: {get_attr: [Networks, net_attributes_map, tenant, network, mtu]} external_mtu: {get_attr: [Networks, net_attributes_map, external, network, mtu]} storage_gateway_ip: {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, gateway_ip]} storage_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, host_routes]} storage_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, cidr]}, 1]} storage_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, tags]} storage_mgmt_gateway_ip: {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, gateway_ip]} storage_mgmt_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, host_routes]} storage_mgmt_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, cidr]}, 1]} storage_mgmt_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, tags]} internal_api_gateway_ip: {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, gateway_ip]} internal_api_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, host_routes]} internal_api_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, cidr]}, 1]} internal_api_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, tags]} tenant_gateway_ip: {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, gateway_ip]} tenant_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, host_routes]} tenant_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, cidr]}, 1]} tenant_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, tags]} external_gateway_ip: {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, gateway_ip]} external_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, host_routes]} external_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, cidr]}, 1]} external_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, tags]} network_cidrs: Storage_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, cidr]}, 1]} StorageMgmt_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, cidr]}, 1]} InternalApi_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, cidr]}, 1]} Tenant_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, cidr]}, 1]} External_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, cidr]}, 1]} dns_search_domains: {get_param: DnsSearchDomains} bond_interface_ovs_options: {get_param: BondInterfaceOvsOptions} local_mtu: {get_param: CellControllerComputeLocalMtu} role_networks: - Storage - StorageMgmt - InternalApi - Tenant - External networks_lower: Storage: storage StorageMgmt: storage_mgmt InternalApi: internal_api Tenant: tenant External: external networks_all: - Storage - StorageMgmt - InternalApi - Tenant - External service_metadata_settings: {get_attr: [CellControllerComputeServiceChainRoleData, value, service_metadata_settings]} tripleo_network_config_template: {get_param: CellControllerComputeNetworkConfigTemplate} tripleo_network_config_with_ansible: {get_param: NetworkConfigWithAnsible} default_route_networks: ['ControlPlane'] networks_skip_config: [] tripleo_firewall_rules: {get_attr: [CellControllerComputeServiceChainRoleData, value, firewall_rules]} tripleo_firewall_frontend_rules: {get_attr: [FirewallFrontendRules, value, frontend]} tripleo_firewall_ssl_frontend_rules: {get_attr: [FirewallFrontendRules, value, ssl_frontend]} tripleo_firewall_edge_frontend_rules: {get_attr: [FirewallFrontendRules, value, edge_frontend]} tripleo_firewall_edge_ssl_frontend_rules: {get_attr: [FirewallFrontendRules, value, edge_ssl_frontend]} role_tags: ['primary', 'controller', 'external_bridge'] service_net_map: {get_attr: [CellControllerComputeServiceNetMapLower, value]} CellControllerComputeNetworkConfig: type: OS::TripleO::CellControllerCompute::Net::SoftwareConfig properties: ControlPlaneIp: "{{ ctlplane_ip }}" ControlPlaneSubnetCidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CellControllerComputeControlPlaneSubnet}, cidr]}, 1]} ControlPlaneDefaultRoute: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CellControllerComputeControlPlaneSubnet}, gateway_ip]} ControlPlaneStaticRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CellControllerComputeControlPlaneSubnet}, host_routes]} - - default: true next_hop: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CellControllerComputeControlPlaneSubnet}, gateway_ip]} ControlPlaneMtu: {get_attr: [Networks, net_attributes_map, ctlplane, network, mtu]} DnsServers: if: - dnsservers_set - {get_param: DnsServers} - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CellControllerComputeControlPlaneSubnet}, dns_nameservers]} StorageIpSubnet: "{{ storage_ip ~ '/' ~ storage_cidr }}" StorageInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, host_routes]} StorageMtu: {get_attr: [Networks, net_attributes_map, storage, network, mtu]} StorageNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, tags]} StorageMgmtIpSubnet: "{{ storage_mgmt_ip ~ '/' ~ storage_mgmt_cidr }}" StorageMgmtInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, host_routes]} StorageMgmtMtu: {get_attr: [Networks, net_attributes_map, storage_mgmt, network, mtu]} StorageMgmtNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, tags]} InternalApiIpSubnet: "{{ internal_api_ip ~ '/' ~ internal_api_cidr }}" InternalApiInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, host_routes]} InternalApiMtu: {get_attr: [Networks, net_attributes_map, internal_api, network, mtu]} InternalApiNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, tags]} TenantIpSubnet: "{{ tenant_ip ~ '/' ~ tenant_cidr }}" TenantInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, host_routes]} TenantMtu: {get_attr: [Networks, net_attributes_map, tenant, network, mtu]} TenantNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, tags]} ExternalIpSubnet: "{{ external_ip ~ '/' ~ external_cidr }}" ExternalInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, host_routes]} ExternalMtu: {get_attr: [Networks, net_attributes_map, external, network, mtu]} ExternalNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, tags]} ComputeGroupVars: type: OS::Heat::Value properties: value: ctlplane_mtu: {get_attr: [Networks, net_attributes_map, ctlplane, network, mtu]} ctlplane_gateway_ip: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ComputeControlPlaneSubnet}, gateway_ip]} ctlplane_dns_nameservers: if: - dnsservers_set - {get_param: DnsServers} - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ComputeControlPlaneSubnet}, dns_nameservers]} ctlplane_subnet_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ComputeControlPlaneSubnet}, cidr]}, 1]} ctlplane_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ComputeControlPlaneSubnet}, host_routes]} - - default: true next_hop: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ComputeControlPlaneSubnet}, gateway_ip]} # MTU is not filtered on role.networks, for DVR we need the External MTU on the exteranl_bridge storage_mtu: {get_attr: [Networks, net_attributes_map, storage, network, mtu]} storage_mgmt_mtu: {get_attr: [Networks, net_attributes_map, storage_mgmt, network, mtu]} internal_api_mtu: {get_attr: [Networks, net_attributes_map, internal_api, network, mtu]} tenant_mtu: {get_attr: [Networks, net_attributes_map, tenant, network, mtu]} external_mtu: {get_attr: [Networks, net_attributes_map, external, network, mtu]} storage_gateway_ip: {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, gateway_ip]} storage_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, host_routes]} storage_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, cidr]}, 1]} storage_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, tags]} internal_api_gateway_ip: {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, gateway_ip]} internal_api_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, host_routes]} internal_api_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, cidr]}, 1]} internal_api_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, tags]} tenant_gateway_ip: {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, gateway_ip]} tenant_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, host_routes]} tenant_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, cidr]}, 1]} tenant_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, tags]} network_cidrs: Storage_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, cidr]}, 1]} InternalApi_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, cidr]}, 1]} Tenant_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, cidr]}, 1]} dns_search_domains: {get_param: DnsSearchDomains} bond_interface_ovs_options: {get_param: BondInterfaceOvsOptions} local_mtu: {get_param: ComputeLocalMtu} role_networks: - Storage - InternalApi - Tenant networks_lower: Storage: storage StorageMgmt: storage_mgmt InternalApi: internal_api Tenant: tenant External: external networks_all: - Storage - StorageMgmt - InternalApi - Tenant - External service_metadata_settings: {get_attr: [ComputeServiceChainRoleData, value, service_metadata_settings]} tripleo_network_config_template: {get_param: ComputeNetworkConfigTemplate} tripleo_network_config_with_ansible: {get_param: NetworkConfigWithAnsible} default_route_networks: ['ControlPlane'] networks_skip_config: [] tripleo_firewall_rules: {get_attr: [ComputeServiceChainRoleData, value, firewall_rules]} tripleo_firewall_frontend_rules: {get_attr: [FirewallFrontendRules, value, frontend]} tripleo_firewall_ssl_frontend_rules: {get_attr: [FirewallFrontendRules, value, ssl_frontend]} tripleo_firewall_edge_frontend_rules: {get_attr: [FirewallFrontendRules, value, edge_frontend]} tripleo_firewall_edge_ssl_frontend_rules: {get_attr: [FirewallFrontendRules, value, edge_ssl_frontend]} role_tags: ['compute', 'external_bridge'] service_net_map: {get_attr: [ComputeServiceNetMapLower, value]} ComputeNetworkConfig: type: OS::TripleO::Compute::Net::SoftwareConfig properties: ControlPlaneIp: "{{ ctlplane_ip }}" ControlPlaneSubnetCidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ComputeControlPlaneSubnet}, cidr]}, 1]} ControlPlaneDefaultRoute: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ComputeControlPlaneSubnet}, gateway_ip]} ControlPlaneStaticRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ComputeControlPlaneSubnet}, host_routes]} - - default: true next_hop: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ComputeControlPlaneSubnet}, gateway_ip]} ControlPlaneMtu: {get_attr: [Networks, net_attributes_map, ctlplane, network, mtu]} DnsServers: if: - dnsservers_set - {get_param: DnsServers} - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ComputeControlPlaneSubnet}, dns_nameservers]} StorageIpSubnet: "{{ storage_ip ~ '/' ~ storage_cidr }}" StorageInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, host_routes]} StorageMtu: {get_attr: [Networks, net_attributes_map, storage, network, mtu]} StorageNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, tags]} InternalApiIpSubnet: "{{ internal_api_ip ~ '/' ~ internal_api_cidr }}" InternalApiInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, host_routes]} InternalApiMtu: {get_attr: [Networks, net_attributes_map, internal_api, network, mtu]} InternalApiNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, tags]} TenantIpSubnet: "{{ tenant_ip ~ '/' ~ tenant_cidr }}" TenantInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, host_routes]} TenantMtu: {get_attr: [Networks, net_attributes_map, tenant, network, mtu]} TenantNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, tags]} BlockStorageGroupVars: type: OS::Heat::Value properties: value: ctlplane_mtu: {get_attr: [Networks, net_attributes_map, ctlplane, network, mtu]} ctlplane_gateway_ip: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: BlockStorageControlPlaneSubnet}, gateway_ip]} ctlplane_dns_nameservers: if: - dnsservers_set - {get_param: DnsServers} - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: BlockStorageControlPlaneSubnet}, dns_nameservers]} ctlplane_subnet_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: BlockStorageControlPlaneSubnet}, cidr]}, 1]} ctlplane_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: BlockStorageControlPlaneSubnet}, host_routes]} - - default: true next_hop: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: BlockStorageControlPlaneSubnet}, gateway_ip]} # MTU is not filtered on role.networks, for DVR we need the External MTU on the exteranl_bridge storage_mtu: {get_attr: [Networks, net_attributes_map, storage, network, mtu]} storage_mgmt_mtu: {get_attr: [Networks, net_attributes_map, storage_mgmt, network, mtu]} internal_api_mtu: {get_attr: [Networks, net_attributes_map, internal_api, network, mtu]} tenant_mtu: {get_attr: [Networks, net_attributes_map, tenant, network, mtu]} external_mtu: {get_attr: [Networks, net_attributes_map, external, network, mtu]} storage_gateway_ip: {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, gateway_ip]} storage_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, host_routes]} storage_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, cidr]}, 1]} storage_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, tags]} storage_mgmt_gateway_ip: {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, gateway_ip]} storage_mgmt_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, host_routes]} storage_mgmt_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, cidr]}, 1]} storage_mgmt_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, tags]} internal_api_gateway_ip: {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, gateway_ip]} internal_api_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, host_routes]} internal_api_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, cidr]}, 1]} internal_api_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, tags]} network_cidrs: Storage_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, cidr]}, 1]} StorageMgmt_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, cidr]}, 1]} InternalApi_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, cidr]}, 1]} dns_search_domains: {get_param: DnsSearchDomains} bond_interface_ovs_options: {get_param: BondInterfaceOvsOptions} local_mtu: {get_param: BlockStorageLocalMtu} role_networks: - Storage - StorageMgmt - InternalApi networks_lower: Storage: storage StorageMgmt: storage_mgmt InternalApi: internal_api Tenant: tenant External: external networks_all: - Storage - StorageMgmt - InternalApi - Tenant - External service_metadata_settings: {get_attr: [BlockStorageServiceChainRoleData, value, service_metadata_settings]} tripleo_network_config_template: {get_param: BlockStorageNetworkConfigTemplate} tripleo_network_config_with_ansible: {get_param: NetworkConfigWithAnsible} default_route_networks: ['ControlPlane'] networks_skip_config: [] tripleo_firewall_rules: {get_attr: [BlockStorageServiceChainRoleData, value, firewall_rules]} tripleo_firewall_frontend_rules: {get_attr: [FirewallFrontendRules, value, frontend]} tripleo_firewall_ssl_frontend_rules: {get_attr: [FirewallFrontendRules, value, ssl_frontend]} tripleo_firewall_edge_frontend_rules: {get_attr: [FirewallFrontendRules, value, edge_frontend]} tripleo_firewall_edge_ssl_frontend_rules: {get_attr: [FirewallFrontendRules, value, edge_ssl_frontend]} role_tags: ['storage'] service_net_map: {get_attr: [BlockStorageServiceNetMapLower, value]} BlockStorageNetworkConfig: type: OS::TripleO::BlockStorage::Net::SoftwareConfig properties: ControlPlaneIp: "{{ ctlplane_ip }}" ControlPlaneSubnetCidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: BlockStorageControlPlaneSubnet}, cidr]}, 1]} ControlPlaneDefaultRoute: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: BlockStorageControlPlaneSubnet}, gateway_ip]} ControlPlaneStaticRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: BlockStorageControlPlaneSubnet}, host_routes]} - - default: true next_hop: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: BlockStorageControlPlaneSubnet}, gateway_ip]} ControlPlaneMtu: {get_attr: [Networks, net_attributes_map, ctlplane, network, mtu]} DnsServers: if: - dnsservers_set - {get_param: DnsServers} - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: BlockStorageControlPlaneSubnet}, dns_nameservers]} StorageIpSubnet: "{{ storage_ip ~ '/' ~ storage_cidr }}" StorageInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, host_routes]} StorageMtu: {get_attr: [Networks, net_attributes_map, storage, network, mtu]} StorageNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, tags]} StorageMgmtIpSubnet: "{{ storage_mgmt_ip ~ '/' ~ storage_mgmt_cidr }}" StorageMgmtInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, host_routes]} StorageMgmtMtu: {get_attr: [Networks, net_attributes_map, storage_mgmt, network, mtu]} StorageMgmtNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, tags]} InternalApiIpSubnet: "{{ internal_api_ip ~ '/' ~ internal_api_cidr }}" InternalApiInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, host_routes]} InternalApiMtu: {get_attr: [Networks, net_attributes_map, internal_api, network, mtu]} InternalApiNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, tags]} ObjectStorageGroupVars: type: OS::Heat::Value properties: value: ctlplane_mtu: {get_attr: [Networks, net_attributes_map, ctlplane, network, mtu]} ctlplane_gateway_ip: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ObjectStorageControlPlaneSubnet}, gateway_ip]} ctlplane_dns_nameservers: if: - dnsservers_set - {get_param: DnsServers} - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ObjectStorageControlPlaneSubnet}, dns_nameservers]} ctlplane_subnet_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ObjectStorageControlPlaneSubnet}, cidr]}, 1]} ctlplane_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ObjectStorageControlPlaneSubnet}, host_routes]} - - default: true next_hop: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ObjectStorageControlPlaneSubnet}, gateway_ip]} # MTU is not filtered on role.networks, for DVR we need the External MTU on the exteranl_bridge storage_mtu: {get_attr: [Networks, net_attributes_map, storage, network, mtu]} storage_mgmt_mtu: {get_attr: [Networks, net_attributes_map, storage_mgmt, network, mtu]} internal_api_mtu: {get_attr: [Networks, net_attributes_map, internal_api, network, mtu]} tenant_mtu: {get_attr: [Networks, net_attributes_map, tenant, network, mtu]} external_mtu: {get_attr: [Networks, net_attributes_map, external, network, mtu]} storage_gateway_ip: {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, gateway_ip]} storage_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, host_routes]} storage_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, cidr]}, 1]} storage_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, tags]} storage_mgmt_gateway_ip: {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, gateway_ip]} storage_mgmt_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, host_routes]} storage_mgmt_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, cidr]}, 1]} storage_mgmt_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, tags]} internal_api_gateway_ip: {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, gateway_ip]} internal_api_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, host_routes]} internal_api_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, cidr]}, 1]} internal_api_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, tags]} network_cidrs: Storage_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, cidr]}, 1]} StorageMgmt_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, cidr]}, 1]} InternalApi_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, cidr]}, 1]} dns_search_domains: {get_param: DnsSearchDomains} bond_interface_ovs_options: {get_param: BondInterfaceOvsOptions} local_mtu: {get_param: ObjectStorageLocalMtu} role_networks: - Storage - StorageMgmt - InternalApi networks_lower: Storage: storage StorageMgmt: storage_mgmt InternalApi: internal_api Tenant: tenant External: external networks_all: - Storage - StorageMgmt - InternalApi - Tenant - External service_metadata_settings: {get_attr: [ObjectStorageServiceChainRoleData, value, service_metadata_settings]} tripleo_network_config_template: {get_param: ObjectStorageNetworkConfigTemplate} tripleo_network_config_with_ansible: {get_param: NetworkConfigWithAnsible} default_route_networks: ['ControlPlane'] networks_skip_config: [] tripleo_firewall_rules: {get_attr: [ObjectStorageServiceChainRoleData, value, firewall_rules]} tripleo_firewall_frontend_rules: {get_attr: [FirewallFrontendRules, value, frontend]} tripleo_firewall_ssl_frontend_rules: {get_attr: [FirewallFrontendRules, value, ssl_frontend]} tripleo_firewall_edge_frontend_rules: {get_attr: [FirewallFrontendRules, value, edge_frontend]} tripleo_firewall_edge_ssl_frontend_rules: {get_attr: [FirewallFrontendRules, value, edge_ssl_frontend]} role_tags: ['storage'] service_net_map: {get_attr: [ObjectStorageServiceNetMapLower, value]} ObjectStorageNetworkConfig: type: OS::TripleO::ObjectStorage::Net::SoftwareConfig properties: ControlPlaneIp: "{{ ctlplane_ip }}" ControlPlaneSubnetCidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ObjectStorageControlPlaneSubnet}, cidr]}, 1]} ControlPlaneDefaultRoute: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ObjectStorageControlPlaneSubnet}, gateway_ip]} ControlPlaneStaticRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ObjectStorageControlPlaneSubnet}, host_routes]} - - default: true next_hop: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ObjectStorageControlPlaneSubnet}, gateway_ip]} ControlPlaneMtu: {get_attr: [Networks, net_attributes_map, ctlplane, network, mtu]} DnsServers: if: - dnsservers_set - {get_param: DnsServers} - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ObjectStorageControlPlaneSubnet}, dns_nameservers]} StorageIpSubnet: "{{ storage_ip ~ '/' ~ storage_cidr }}" StorageInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, host_routes]} StorageMtu: {get_attr: [Networks, net_attributes_map, storage, network, mtu]} StorageNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, tags]} StorageMgmtIpSubnet: "{{ storage_mgmt_ip ~ '/' ~ storage_mgmt_cidr }}" StorageMgmtInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, host_routes]} StorageMgmtMtu: {get_attr: [Networks, net_attributes_map, storage_mgmt, network, mtu]} StorageMgmtNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, tags]} InternalApiIpSubnet: "{{ internal_api_ip ~ '/' ~ internal_api_cidr }}" InternalApiInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, host_routes]} InternalApiMtu: {get_attr: [Networks, net_attributes_map, internal_api, network, mtu]} InternalApiNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, tags]} CephStorageGroupVars: type: OS::Heat::Value properties: value: ctlplane_mtu: {get_attr: [Networks, net_attributes_map, ctlplane, network, mtu]} ctlplane_gateway_ip: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CephStorageControlPlaneSubnet}, gateway_ip]} ctlplane_dns_nameservers: if: - dnsservers_set - {get_param: DnsServers} - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CephStorageControlPlaneSubnet}, dns_nameservers]} ctlplane_subnet_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CephStorageControlPlaneSubnet}, cidr]}, 1]} ctlplane_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CephStorageControlPlaneSubnet}, host_routes]} - - default: true next_hop: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CephStorageControlPlaneSubnet}, gateway_ip]} # MTU is not filtered on role.networks, for DVR we need the External MTU on the exteranl_bridge storage_mtu: {get_attr: [Networks, net_attributes_map, storage, network, mtu]} storage_mgmt_mtu: {get_attr: [Networks, net_attributes_map, storage_mgmt, network, mtu]} internal_api_mtu: {get_attr: [Networks, net_attributes_map, internal_api, network, mtu]} tenant_mtu: {get_attr: [Networks, net_attributes_map, tenant, network, mtu]} external_mtu: {get_attr: [Networks, net_attributes_map, external, network, mtu]} storage_gateway_ip: {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, gateway_ip]} storage_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, host_routes]} storage_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, cidr]}, 1]} storage_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, tags]} storage_mgmt_gateway_ip: {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, gateway_ip]} storage_mgmt_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, host_routes]} storage_mgmt_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, cidr]}, 1]} storage_mgmt_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, tags]} network_cidrs: Storage_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, cidr]}, 1]} StorageMgmt_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, cidr]}, 1]} dns_search_domains: {get_param: DnsSearchDomains} bond_interface_ovs_options: {get_param: BondInterfaceOvsOptions} local_mtu: {get_param: CephStorageLocalMtu} role_networks: - Storage - StorageMgmt networks_lower: Storage: storage StorageMgmt: storage_mgmt InternalApi: internal_api Tenant: tenant External: external networks_all: - Storage - StorageMgmt - InternalApi - Tenant - External service_metadata_settings: {get_attr: [CephStorageServiceChainRoleData, value, service_metadata_settings]} tripleo_network_config_template: {get_param: CephStorageNetworkConfigTemplate} tripleo_network_config_with_ansible: {get_param: NetworkConfigWithAnsible} default_route_networks: ['ControlPlane'] networks_skip_config: [] tripleo_firewall_rules: {get_attr: [CephStorageServiceChainRoleData, value, firewall_rules]} tripleo_firewall_frontend_rules: {get_attr: [FirewallFrontendRules, value, frontend]} tripleo_firewall_ssl_frontend_rules: {get_attr: [FirewallFrontendRules, value, ssl_frontend]} tripleo_firewall_edge_frontend_rules: {get_attr: [FirewallFrontendRules, value, edge_frontend]} tripleo_firewall_edge_ssl_frontend_rules: {get_attr: [FirewallFrontendRules, value, edge_ssl_frontend]} role_tags: ['ceph', 'storage'] service_net_map: {get_attr: [CephStorageServiceNetMapLower, value]} CephStorageNetworkConfig: type: OS::TripleO::CephStorage::Net::SoftwareConfig properties: ControlPlaneIp: "{{ ctlplane_ip }}" ControlPlaneSubnetCidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CephStorageControlPlaneSubnet}, cidr]}, 1]} ControlPlaneDefaultRoute: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CephStorageControlPlaneSubnet}, gateway_ip]} ControlPlaneStaticRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CephStorageControlPlaneSubnet}, host_routes]} - - default: true next_hop: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CephStorageControlPlaneSubnet}, gateway_ip]} ControlPlaneMtu: {get_attr: [Networks, net_attributes_map, ctlplane, network, mtu]} DnsServers: if: - dnsservers_set - {get_param: DnsServers} - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CephStorageControlPlaneSubnet}, dns_nameservers]} StorageIpSubnet: "{{ storage_ip ~ '/' ~ storage_cidr }}" StorageInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, host_routes]} StorageMtu: {get_attr: [Networks, net_attributes_map, storage, network, mtu]} StorageNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, tags]} StorageMgmtIpSubnet: "{{ storage_mgmt_ip ~ '/' ~ storage_mgmt_cidr }}" StorageMgmtInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, host_routes]} StorageMgmtMtu: {get_attr: [Networks, net_attributes_map, storage_mgmt, network, mtu]} StorageMgmtNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, tags]} NetworkerGroupVars: type: OS::Heat::Value properties: value: ctlplane_mtu: {get_attr: [Networks, net_attributes_map, ctlplane, network, mtu]} ctlplane_gateway_ip: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: NetworkerControlPlaneSubnet}, gateway_ip]} ctlplane_dns_nameservers: if: - dnsservers_set - {get_param: DnsServers} - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: NetworkerControlPlaneSubnet}, dns_nameservers]} ctlplane_subnet_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: NetworkerControlPlaneSubnet}, cidr]}, 1]} ctlplane_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: NetworkerControlPlaneSubnet}, host_routes]} - - default: true next_hop: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: NetworkerControlPlaneSubnet}, gateway_ip]} # MTU is not filtered on role.networks, for DVR we need the External MTU on the exteranl_bridge storage_mtu: {get_attr: [Networks, net_attributes_map, storage, network, mtu]} storage_mgmt_mtu: {get_attr: [Networks, net_attributes_map, storage_mgmt, network, mtu]} internal_api_mtu: {get_attr: [Networks, net_attributes_map, internal_api, network, mtu]} tenant_mtu: {get_attr: [Networks, net_attributes_map, tenant, network, mtu]} external_mtu: {get_attr: [Networks, net_attributes_map, external, network, mtu]} internal_api_gateway_ip: {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, gateway_ip]} internal_api_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, host_routes]} internal_api_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, cidr]}, 1]} internal_api_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, tags]} tenant_gateway_ip: {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, gateway_ip]} tenant_host_routes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, host_routes]} tenant_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, cidr]}, 1]} tenant_vlan_id: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, tags]} network_cidrs: InternalApi_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, cidr]}, 1]} Tenant_cidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, cidr]}, 1]} dns_search_domains: {get_param: DnsSearchDomains} bond_interface_ovs_options: {get_param: BondInterfaceOvsOptions} local_mtu: {get_param: NetworkerLocalMtu} role_networks: - InternalApi - Tenant networks_lower: Storage: storage StorageMgmt: storage_mgmt InternalApi: internal_api Tenant: tenant External: external networks_all: - Storage - StorageMgmt - InternalApi - Tenant - External service_metadata_settings: {get_attr: [NetworkerServiceChainRoleData, value, service_metadata_settings]} tripleo_network_config_template: {get_param: NetworkerNetworkConfigTemplate} tripleo_network_config_with_ansible: {get_param: NetworkConfigWithAnsible} default_route_networks: ['ControlPlane'] networks_skip_config: [] tripleo_firewall_rules: {get_attr: [NetworkerServiceChainRoleData, value, firewall_rules]} tripleo_firewall_frontend_rules: {get_attr: [FirewallFrontendRules, value, frontend]} tripleo_firewall_ssl_frontend_rules: {get_attr: [FirewallFrontendRules, value, ssl_frontend]} tripleo_firewall_edge_frontend_rules: {get_attr: [FirewallFrontendRules, value, edge_frontend]} tripleo_firewall_edge_ssl_frontend_rules: {get_attr: [FirewallFrontendRules, value, edge_ssl_frontend]} role_tags: ['external_bridge'] service_net_map: {get_attr: [NetworkerServiceNetMapLower, value]} NetworkerNetworkConfig: type: OS::TripleO::Networker::Net::SoftwareConfig properties: ControlPlaneIp: "{{ ctlplane_ip }}" ControlPlaneSubnetCidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: NetworkerControlPlaneSubnet}, cidr]}, 1]} ControlPlaneDefaultRoute: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: NetworkerControlPlaneSubnet}, gateway_ip]} ControlPlaneStaticRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: NetworkerControlPlaneSubnet}, host_routes]} - - default: true next_hop: {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: NetworkerControlPlaneSubnet}, gateway_ip]} ControlPlaneMtu: {get_attr: [Networks, net_attributes_map, ctlplane, network, mtu]} DnsServers: if: - dnsservers_set - {get_param: DnsServers} - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: NetworkerControlPlaneSubnet}, dns_nameservers]} InternalApiIpSubnet: "{{ internal_api_ip ~ '/' ~ internal_api_cidr }}" InternalApiInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, host_routes]} InternalApiMtu: {get_attr: [Networks, net_attributes_map, internal_api, network, mtu]} InternalApiNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, tags]} TenantIpSubnet: "{{ tenant_ip ~ '/' ~ tenant_cidr }}" TenantInterfaceRoutes: list_concat_unique: - {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, host_routes]} TenantMtu: {get_attr: [Networks, net_attributes_map, tenant, network, mtu]} TenantNetworkVlanID: yaql: expression: > switch(not isList($.data) => 1, not $.data.where($.startsWith('tripleo_vlan_id')).len() => 1, true => int($.data.where($.startsWith('tripleo_vlan_id')).first().split('=').last())) data: {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, tags]} ControlVirtualIP: depends_on: ServiceNetMap type: OS::TripleO::Network::Ports::ControlPlaneVipPort properties: name: control_virtual_ip dns_name: {str_split: ['.', {get_param: CloudNameCtlplane}, 0]} network: {get_param: NeutronControlPlaneID} fixed_ips: if: - control_fixed_ip_not_set - [{subnet: {get_attr: [ServiceNetMap, vip_subnet_map, ctlplane]}}] - get_param: ControlFixedIPs replacement_policy: AUTO tags: - tripleo_vip_net=ctlplane - str_replace: template: tripleo_stack_name=$STACK_NAME params: $STACK_NAME: {get_param: 'OS::stack_name'} StorageVirtualIP: depends_on: [Networks, ServiceNetMap] type: OS::TripleO::Network::Ports::StorageVipPort properties: ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} ControlPlaneSubnetCidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_attr: [ServiceNetMap, vip_subnet_map, ctlplane]}, cidr]}, 1]} PortName: storage_virtual_ip DnsName: {str_split: ['.', {get_param: CloudNameStorage}, 0]} FixedIPs: if: - storage_virtual_fixed_ip_set - {get_param: StorageVirtualFixedIPs} - [{subnet: {get_attr: [ServiceNetMap, vip_subnet_map, Storage]}}] IsVirtualIP: true StorageMgmtVirtualIP: depends_on: [Networks, ServiceNetMap] type: OS::TripleO::Network::Ports::StorageMgmtVipPort properties: ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} ControlPlaneSubnetCidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_attr: [ServiceNetMap, vip_subnet_map, ctlplane]}, cidr]}, 1]} PortName: storage_mgmt_virtual_ip DnsName: {str_split: ['.', {get_param: CloudNameStorageManagement}, 0]} FixedIPs: if: - storage_mgmt_virtual_fixed_ip_set - {get_param: StorageMgmtVirtualFixedIPs} - [{subnet: {get_attr: [ServiceNetMap, vip_subnet_map, StorageMgmt]}}] IsVirtualIP: true InternalApiVirtualIP: depends_on: [Networks, ServiceNetMap] type: OS::TripleO::Network::Ports::InternalApiVipPort properties: ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} ControlPlaneSubnetCidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_attr: [ServiceNetMap, vip_subnet_map, ctlplane]}, cidr]}, 1]} PortName: internal_api_virtual_ip DnsName: {str_split: ['.', {get_param: CloudNameInternal}, 0]} FixedIPs: if: - internal_api_virtual_fixed_ip_set - {get_param: InternalApiVirtualFixedIPs} - [{subnet: {get_attr: [ServiceNetMap, vip_subnet_map, InternalApi]}}] IsVirtualIP: true # The public VIP is on the External net, falls back to ctlplane PublicVirtualIP: depends_on: [Networks, ServiceNetMap] type: OS::TripleO::Network::Ports::ExternalVipPort properties: ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} ControlPlaneSubnetCidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_attr: [ServiceNetMap, vip_subnet_map, ctlplane]}, cidr]}, 1]} PortName: external_virtual_ip DnsName: {str_split: ['.', {get_param: CloudName}, 0]} FixedIPs: if: - public_virtual_fixed_ip_set - {get_param: PublicVirtualFixedIPs} - [{subnet: {get_attr: [ServiceNetMap, vip_subnet_map, External]}}] IsVirtualIP: true VipMap: type: OS::TripleO::Network::Ports::NetVipMap properties: ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} ControlPlaneSubnetCidr: {str_split: ['/', {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_attr: [ServiceNetMap, vip_subnet_map, ctlplane]}, cidr]}, 1]} StorageIp: {get_attr: [StorageVirtualIP, ip_address]} StorageIpUri: {get_attr: [StorageVirtualIP, ip_address_uri]} StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]} StorageMgmtIpUri: {get_attr: [StorageMgmtVirtualIP, ip_address_uri]} InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]} InternalApiIpUri: {get_attr: [InternalApiVirtualIP, ip_address_uri]} ExternalIp: {get_attr: [PublicVirtualIP, ip_address]} ExternalIpUri: {get_attr: [PublicVirtualIP, ip_address_uri]} # No tenant or management VIP required # Because of nested get_attr functions in the KeystoneAdminVip output, we # can't determine which attributes of VipMap are used until after # ServiceNetMap's attribute values are available. depends_on: ServiceNetMap # Optional ExtraConfig for all nodes - all roles are passed in here, but # the nested template may configure each role differently (or not at all) AllNodesExtraConfig: type: OS::TripleO::AllNodesExtraConfig properties: servers: Controller: {get_attr: [ControllerServers, value]} CellController: {get_attr: [CellControllerServers, value]} CellControllerCompute: {get_attr: [CellControllerComputeServers, value]} Compute: {get_attr: [ComputeServers, value]} BlockStorage: {get_attr: [BlockStorageServers, value]} ObjectStorage: {get_attr: [ObjectStorageServers, value]} CephStorage: {get_attr: [CephStorageServers, value]} Networker: {get_attr: [NetworkerServers, value]} BlacklistedIpAddresses: type: OS::Heat::Value properties: value: list_concat: - {get_attr: [Controller, blacklist_ip_address]} - {get_attr: [CellController, blacklist_ip_address]} - {get_attr: [CellControllerCompute, blacklist_ip_address]} - {get_attr: [Compute, blacklist_ip_address]} - {get_attr: [BlockStorage, blacklist_ip_address]} - {get_attr: [ObjectStorage, blacklist_ip_address]} - {get_attr: [CephStorage, blacklist_ip_address]} - {get_attr: [Networker, blacklist_ip_address]} AnsibleHostVars: type: OS::Heat::Value properties: type: json value: Controller: map_merge: list_concat: - {get_attr: [Controller, ansible_host_vars_map]} CellController: map_merge: list_concat: - {get_attr: [CellController, ansible_host_vars_map]} CellControllerCompute: map_merge: list_concat: - {get_attr: [CellControllerCompute, ansible_host_vars_map]} Compute: map_merge: list_concat: - {get_attr: [Compute, ansible_host_vars_map]} BlockStorage: map_merge: list_concat: - {get_attr: [BlockStorage, ansible_host_vars_map]} ObjectStorage: map_merge: list_concat: - {get_attr: [ObjectStorage, ansible_host_vars_map]} CephStorage: map_merge: list_concat: - {get_attr: [CephStorage, ansible_host_vars_map]} Networker: map_merge: list_concat: - {get_attr: [Networker, ansible_host_vars_map]} BlacklistedHostnames: type: OS::Heat::Value properties: value: list_concat: - {get_attr: [Controller, blacklist_hostname]} - {get_attr: [CellController, blacklist_hostname]} - {get_attr: [CellControllerCompute, blacklist_hostname]} - {get_attr: [Compute, blacklist_hostname]} - {get_attr: [BlockStorage, blacklist_hostname]} - {get_attr: [ObjectStorage, blacklist_hostname]} - {get_attr: [CephStorage, blacklist_hostname]} - {get_attr: [Networker, blacklist_hostname]} # Post deployment steps for all roles AllNodesDeploySteps: type: OS::TripleO::PostDeploySteps depends_on: - AllNodesExtraConfig properties: servers: Controller: {get_attr: [ControllerServers, value]} CellController: {get_attr: [CellControllerServers, value]} CellControllerCompute: {get_attr: [CellControllerComputeServers, value]} Compute: {get_attr: [ComputeServers, value]} BlockStorage: {get_attr: [BlockStorageServers, value]} ObjectStorage: {get_attr: [ObjectStorageServers, value]} CephStorage: {get_attr: [CephStorageServers, value]} Networker: {get_attr: [NetworkerServers, value]} EndpointMap: {get_attr: [EndpointMapData, value]} role_data: Controller: {get_attr: [ControllerServiceChainRoleData, value]} CellController: {get_attr: [CellControllerServiceChainRoleData, value]} CellControllerCompute: {get_attr: [CellControllerComputeServiceChainRoleData, value]} Compute: {get_attr: [ComputeServiceChainRoleData, value]} BlockStorage: {get_attr: [BlockStorageServiceChainRoleData, value]} ObjectStorage: {get_attr: [ObjectStorageServiceChainRoleData, value]} CephStorage: {get_attr: [CephStorageServiceChainRoleData, value]} Networker: {get_attr: [NetworkerServiceChainRoleData, value]} ControllerCount: {get_param: ControllerCount} CellControllerCount: {get_param: CellControllerCount} CellControllerComputeCount: {get_param: CellControllerComputeCount} ComputeCount: {get_param: ComputeCount} BlockStorageCount: {get_param: BlockStorageCount} ObjectStorageCount: {get_param: ObjectStorageCount} CephStorageCount: {get_param: CephStorageCount} NetworkerCount: {get_param: NetworkerCount} ServiceNetMapLower: {get_attr: [ServiceNetMap, service_net_map_lower]} PingTestGatewayIPsMap: Controller: yaql: expression: list($.data.where($ != null and len($) > 0)).flatten() data: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ControllerControlPlaneSubnet}, gateway_ip]} - {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, gateway_ip]} - {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, gateway_ip]} - {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, gateway_ip]} - {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, gateway_ip]} - {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, gateway_ip]} CellController: yaql: expression: list($.data.where($ != null and len($) > 0)).flatten() data: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CellControllerControlPlaneSubnet}, gateway_ip]} - {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, gateway_ip]} - {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, gateway_ip]} - {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, gateway_ip]} - {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, gateway_ip]} - {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, gateway_ip]} CellControllerCompute: yaql: expression: list($.data.where($ != null and len($) > 0)).flatten() data: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CellControllerComputeControlPlaneSubnet}, gateway_ip]} - {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, gateway_ip]} - {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, gateway_ip]} - {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, gateway_ip]} - {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, gateway_ip]} - {get_attr: [Networks, net_attributes_map, external, subnets, external_subnet, gateway_ip]} Compute: yaql: expression: list($.data.where($ != null and len($) > 0)).flatten() data: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ComputeControlPlaneSubnet}, gateway_ip]} - {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, gateway_ip]} - {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, gateway_ip]} - {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, gateway_ip]} BlockStorage: yaql: expression: list($.data.where($ != null and len($) > 0)).flatten() data: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: BlockStorageControlPlaneSubnet}, gateway_ip]} - {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, gateway_ip]} - {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, gateway_ip]} - {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, gateway_ip]} ObjectStorage: yaql: expression: list($.data.where($ != null and len($) > 0)).flatten() data: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: ObjectStorageControlPlaneSubnet}, gateway_ip]} - {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, gateway_ip]} - {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, gateway_ip]} - {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, gateway_ip]} CephStorage: yaql: expression: list($.data.where($ != null and len($) > 0)).flatten() data: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: CephStorageControlPlaneSubnet}, gateway_ip]} - {get_attr: [Networks, net_attributes_map, storage, subnets, storage_subnet, gateway_ip]} - {get_attr: [Networks, net_attributes_map, storage_mgmt, subnets, storage_mgmt_subnet, gateway_ip]} Networker: yaql: expression: list($.data.where($ != null and len($) > 0)).flatten() data: - {get_attr: [Networks, net_attributes_map, ctlplane, subnets, {get_param: NetworkerControlPlaneSubnet}, gateway_ip]} - {get_attr: [Networks, net_attributes_map, internal_api, subnets, internal_api_subnet, gateway_ip]} - {get_attr: [Networks, net_attributes_map, tenant, subnets, tenant_subnet, gateway_ip]} PingTestIpsMap: Controller: list_join: - ' ' - - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [Controller, ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [Controller, storage_ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [Controller, storage_mgmt_ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [Controller, internal_api_ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [Controller, tenant_ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [Controller, external_ip_address]} CellController: list_join: - ' ' - - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [CellController, ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [CellController, storage_ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [CellController, storage_mgmt_ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [CellController, internal_api_ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [CellController, tenant_ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [CellController, external_ip_address]} CellControllerCompute: list_join: - ' ' - - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [CellControllerCompute, ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [CellControllerCompute, storage_ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [CellControllerCompute, storage_mgmt_ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [CellControllerCompute, internal_api_ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [CellControllerCompute, tenant_ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [CellControllerCompute, external_ip_address]} Compute: list_join: - ' ' - - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [Compute, ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [Compute, storage_ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [Compute, internal_api_ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [Compute, tenant_ip_address]} BlockStorage: list_join: - ' ' - - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [BlockStorage, ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [BlockStorage, storage_ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [BlockStorage, storage_mgmt_ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [BlockStorage, internal_api_ip_address]} ObjectStorage: list_join: - ' ' - - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [ObjectStorage, ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [ObjectStorage, storage_ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [ObjectStorage, storage_mgmt_ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [ObjectStorage, internal_api_ip_address]} CephStorage: list_join: - ' ' - - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [CephStorage, ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [CephStorage, storage_ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [CephStorage, storage_mgmt_ip_address]} Networker: list_join: - ' ' - - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [Networker, ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [Networker, internal_api_ip_address]} - yaql: expression: coalesce($.data, []).first(null) data: {get_attr: [Networker, tenant_ip_address]} HostsEntry: {get_attr: [HostsEntryValue, value]} EnabledServices: list_concat: - {get_attr: [ControllerServiceNames, value]} - {get_attr: [CellControllerServiceNames, value]} - {get_attr: [CellControllerComputeServiceNames, value]} - {get_attr: [ComputeServiceNames, value]} - {get_attr: [BlockStorageServiceNames, value]} - {get_attr: [ObjectStorageServiceNames, value]} - {get_attr: [CephStorageServiceNames, value]} - {get_attr: [NetworkerServiceNames, value]} ControlVirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} EnabledNetworks: - Storage - StorageMgmt - InternalApi - Tenant - External NetVipMap: {get_attr: [VipMap, net_ip_map]} CloudNames: {get_attr: [CloudNames, value]} UndercloudHostsEntries: {get_param: UndercloudHostsEntries} ExtraHostsEntries: {get_param: ExtraHostFileEntries} VipHostsEntries: if: - add_vips_to_etc_hosts - {get_attr: [VipHosts, value]} - [] KeystoneResourcesConfigs: map_merge: - get_attr: [ControllerServiceChainRoleData, value, keystone_resources] - get_attr: [CellControllerServiceChainRoleData, value, keystone_resources] - get_attr: [CellControllerComputeServiceChainRoleData, value, keystone_resources] - get_attr: [ComputeServiceChainRoleData, value, keystone_resources] - get_attr: [BlockStorageServiceChainRoleData, value, keystone_resources] - get_attr: [ObjectStorageServiceChainRoleData, value, keystone_resources] - get_attr: [CephStorageServiceChainRoleData, value, keystone_resources] - get_attr: [NetworkerServiceChainRoleData, value, keystone_resources] NetCidrMap: {get_attr: [NetCidrMapValue, value]} outputs: ManagedEndpoints: description: Asserts that the keystone endpoints have been provisioned. value: true KeystoneURL: description: URL for the Overcloud Keystone service value: {get_attr: [EndpointMapData, value, KeystonePublic, uri_no_suffix]} KeystoneAdminVip: description: Keystone Admin VIP endpoint # Note that these nested get_attr functions require a dependency # relationship between VipMap and ServiceNetMap, since we can't determine # which attributes of VipMap are used until after ServiceNetMap's attribute # values are available. If this is ever reworked to not use nested # get_attr, that dependency can be removed. value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystoneAdminApiNetwork]}]} EndpointMap: description: | Mapping of the resources with the needed info for their endpoints. This includes the protocol used, the IP, port and also a full representation of the URI. value: {get_attr: [EndpointMapData, value]} HostsEntry: description: | The content that should be appended to your /etc/hosts if you want to get hostname-based access to the deployed nodes (useful for testing without setting up a DNS). value: list_concat_unique: - {get_attr: [HostsEntryValue, value]} - {get_attr: [VipHosts, value]} EnabledServices: description: The services enabled on each role value: Controller: {get_attr: [ControllerServiceNames, value]} CellController: {get_attr: [CellControllerServiceNames, value]} CellControllerCompute: {get_attr: [CellControllerComputeServiceNames, value]} Compute: {get_attr: [ComputeServiceNames, value]} BlockStorage: {get_attr: [BlockStorageServiceNames, value]} ObjectStorage: {get_attr: [ObjectStorageServiceNames, value]} CephStorage: {get_attr: [CephStorageServiceNames, value]} Networker: {get_attr: [NetworkerServiceNames, value]} RoleData: description: The configuration data associated with each role value: Controller: {get_attr: [ControllerServiceChainRoleData, value]} CellController: {get_attr: [CellControllerServiceChainRoleData, value]} CellControllerCompute: {get_attr: [CellControllerComputeServiceChainRoleData, value]} Compute: {get_attr: [ComputeServiceChainRoleData, value]} BlockStorage: {get_attr: [BlockStorageServiceChainRoleData, value]} ObjectStorage: {get_attr: [ObjectStorageServiceChainRoleData, value]} CephStorage: {get_attr: [CephStorageServiceChainRoleData, value]} Networker: {get_attr: [NetworkerServiceChainRoleData, value]} RoleConfig: description: The configuration workflows associated with each role value: {get_attr: [AllNodesDeploySteps, RoleConfig]} RoleNetIpMap: description: Mapping of each network to a list of IPs for each role value: Controller: {get_attr: [ControllerIpListMap, net_ip_map]} CellController: {get_attr: [CellControllerIpListMap, net_ip_map]} CellControllerCompute: {get_attr: [CellControllerComputeIpListMap, net_ip_map]} Compute: {get_attr: [ComputeIpListMap, net_ip_map]} BlockStorage: {get_attr: [BlockStorageIpListMap, net_ip_map]} ObjectStorage: {get_attr: [ObjectStorageIpListMap, net_ip_map]} CephStorage: {get_attr: [CephStorageIpListMap, net_ip_map]} Networker: {get_attr: [NetworkerIpListMap, net_ip_map]} RoleGroupVars: description: Mapping of roles to ansible group_vars to be applied config in those roles value: Controller: map_merge: - {get_attr: [ControllerGroupVars, value]} - {get_attr: [ControllerConfigData, value]} - any_errors_fatal: {get_param: ControllerAnyErrorsFatal} max_fail_percentage: {get_param: ControllerMaxFailPercentage} neutron_physical_bridge_name: {get_param: NeutronPhysicalBridge} neutron_public_interface_name: {get_param: NeutronPublicInterface} network_config_update: {get_param: ControllerNetworkConfigUpdate} use_nmstate: {get_param: ControllerUseNMState} ifcfg_purge: {get_param: ControllerIfcfgPurge} tripleo_network_config_os_net_config_mappings: {get_param: NetConfigDataLookup} deployed_server_port_map: {get_param: DeployedServerPortMap} tripleo_network_config_override: {get_param: ControllerNetConfigOverride} tripleo_stack_name: {get_param: RootStackName} - {get_param: ControllerExtraGroupVars} CellController: map_merge: - {get_attr: [CellControllerGroupVars, value]} - {get_attr: [CellControllerConfigData, value]} - any_errors_fatal: {get_param: CellControllerAnyErrorsFatal} max_fail_percentage: {get_param: CellControllerMaxFailPercentage} neutron_physical_bridge_name: {get_param: NeutronPhysicalBridge} neutron_public_interface_name: {get_param: NeutronPublicInterface} network_config_update: {get_param: CellControllerNetworkConfigUpdate} use_nmstate: {get_param: CellControllerUseNMState} ifcfg_purge: {get_param: CellControllerIfcfgPurge} tripleo_network_config_os_net_config_mappings: {get_param: NetConfigDataLookup} deployed_server_port_map: {get_param: DeployedServerPortMap} tripleo_network_config_override: {get_param: CellControllerNetConfigOverride} tripleo_stack_name: {get_param: RootStackName} - {get_param: CellControllerExtraGroupVars} CellControllerCompute: map_merge: - {get_attr: [CellControllerComputeGroupVars, value]} - {get_attr: [CellControllerComputeConfigData, value]} - any_errors_fatal: {get_param: CellControllerComputeAnyErrorsFatal} max_fail_percentage: {get_param: CellControllerComputeMaxFailPercentage} neutron_physical_bridge_name: {get_param: NeutronPhysicalBridge} neutron_public_interface_name: {get_param: NeutronPublicInterface} network_config_update: {get_param: CellControllerComputeNetworkConfigUpdate} use_nmstate: {get_param: CellControllerComputeUseNMState} ifcfg_purge: {get_param: CellControllerComputeIfcfgPurge} tripleo_network_config_os_net_config_mappings: {get_param: NetConfigDataLookup} deployed_server_port_map: {get_param: DeployedServerPortMap} tripleo_network_config_override: {get_param: CellControllerComputeNetConfigOverride} tripleo_stack_name: {get_param: RootStackName} - {get_param: CellControllerComputeExtraGroupVars} Compute: map_merge: - {get_attr: [ComputeGroupVars, value]} - {get_attr: [ComputeConfigData, value]} - any_errors_fatal: {get_param: ComputeAnyErrorsFatal} max_fail_percentage: {get_param: ComputeMaxFailPercentage} neutron_physical_bridge_name: {get_param: NeutronPhysicalBridge} neutron_public_interface_name: {get_param: NeutronPublicInterface} network_config_update: {get_param: ComputeNetworkConfigUpdate} use_nmstate: {get_param: ComputeUseNMState} ifcfg_purge: {get_param: ComputeIfcfgPurge} tripleo_network_config_os_net_config_mappings: {get_param: NetConfigDataLookup} deployed_server_port_map: {get_param: DeployedServerPortMap} tripleo_network_config_override: {get_param: ComputeNetConfigOverride} tripleo_stack_name: {get_param: RootStackName} - {get_param: ComputeExtraGroupVars} BlockStorage: map_merge: - {get_attr: [BlockStorageGroupVars, value]} - {get_attr: [BlockStorageConfigData, value]} - any_errors_fatal: {get_param: BlockStorageAnyErrorsFatal} max_fail_percentage: {get_param: BlockStorageMaxFailPercentage} neutron_physical_bridge_name: {get_param: NeutronPhysicalBridge} neutron_public_interface_name: {get_param: NeutronPublicInterface} network_config_update: {get_param: BlockStorageNetworkConfigUpdate} use_nmstate: {get_param: BlockStorageUseNMState} ifcfg_purge: {get_param: BlockStorageIfcfgPurge} tripleo_network_config_os_net_config_mappings: {get_param: NetConfigDataLookup} deployed_server_port_map: {get_param: DeployedServerPortMap} tripleo_network_config_override: {get_param: BlockStorageNetConfigOverride} tripleo_stack_name: {get_param: RootStackName} - {get_param: BlockStorageExtraGroupVars} ObjectStorage: map_merge: - {get_attr: [ObjectStorageGroupVars, value]} - {get_attr: [ObjectStorageConfigData, value]} - any_errors_fatal: {get_param: ObjectStorageAnyErrorsFatal} max_fail_percentage: {get_param: ObjectStorageMaxFailPercentage} neutron_physical_bridge_name: {get_param: NeutronPhysicalBridge} neutron_public_interface_name: {get_param: NeutronPublicInterface} network_config_update: {get_param: ObjectStorageNetworkConfigUpdate} use_nmstate: {get_param: ObjectStorageUseNMState} ifcfg_purge: {get_param: ObjectStorageIfcfgPurge} tripleo_network_config_os_net_config_mappings: {get_param: NetConfigDataLookup} deployed_server_port_map: {get_param: DeployedServerPortMap} tripleo_network_config_override: {get_param: ObjectStorageNetConfigOverride} tripleo_stack_name: {get_param: RootStackName} - {get_param: ObjectStorageExtraGroupVars} CephStorage: map_merge: - {get_attr: [CephStorageGroupVars, value]} - {get_attr: [CephStorageConfigData, value]} - any_errors_fatal: {get_param: CephStorageAnyErrorsFatal} max_fail_percentage: {get_param: CephStorageMaxFailPercentage} neutron_physical_bridge_name: {get_param: NeutronPhysicalBridge} neutron_public_interface_name: {get_param: NeutronPublicInterface} network_config_update: {get_param: CephStorageNetworkConfigUpdate} use_nmstate: {get_param: CephStorageUseNMState} ifcfg_purge: {get_param: CephStorageIfcfgPurge} tripleo_network_config_os_net_config_mappings: {get_param: NetConfigDataLookup} deployed_server_port_map: {get_param: DeployedServerPortMap} tripleo_network_config_override: {get_param: CephStorageNetConfigOverride} tripleo_stack_name: {get_param: RootStackName} - {get_param: CephStorageExtraGroupVars} Networker: map_merge: - {get_attr: [NetworkerGroupVars, value]} - {get_attr: [NetworkerConfigData, value]} - any_errors_fatal: {get_param: NetworkerAnyErrorsFatal} max_fail_percentage: {get_param: NetworkerMaxFailPercentage} neutron_physical_bridge_name: {get_param: NeutronPhysicalBridge} neutron_public_interface_name: {get_param: NeutronPublicInterface} network_config_update: {get_param: NetworkerNetworkConfigUpdate} use_nmstate: {get_param: NetworkerUseNMState} ifcfg_purge: {get_param: NetworkerIfcfgPurge} tripleo_network_config_os_net_config_mappings: {get_param: NetConfigDataLookup} deployed_server_port_map: {get_param: DeployedServerPortMap} tripleo_network_config_override: {get_param: NetworkerNetConfigOverride} tripleo_stack_name: {get_param: RootStackName} - {get_param: NetworkerExtraGroupVars} RoleNetHostnameMap: description: Mapping of each network to a list of hostnames for each role value: Controller: {get_attr: [ControllerNetworkHostnameMap, value]} CellController: {get_attr: [CellControllerNetworkHostnameMap, value]} CellControllerCompute: {get_attr: [CellControllerComputeNetworkHostnameMap, value]} Compute: {get_attr: [ComputeNetworkHostnameMap, value]} BlockStorage: {get_attr: [BlockStorageNetworkHostnameMap, value]} ObjectStorage: {get_attr: [ObjectStorageNetworkHostnameMap, value]} CephStorage: {get_attr: [CephStorageNetworkHostnameMap, value]} Networker: {get_attr: [NetworkerNetworkHostnameMap, value]} RoleTags: description: Tags for each role, as defined in roles_data.yaml value: Controller: ['primary', 'controller', 'external_bridge'] CellController: ['primary', 'controller'] CellControllerCompute: ['primary', 'controller', 'external_bridge'] Compute: ['compute', 'external_bridge'] BlockStorage: ['storage'] ObjectStorage: ['storage'] CephStorage: ['ceph', 'storage'] Networker: ['external_bridge'] VipMap: description: Mapping of each network to VIP addresses. Also includes the Redis and OVN DBs VIPs. value: {get_attr: [VipMap, net_ip_map]} ServerIdData: description: Mapping of each role to a list of nova server IDs and the bootstrap ID value: {get_attr: [ServerIdMap, value]} BlacklistedHostnames: description: List of blacklisted hostnames value: {get_attr: [BlacklistedHostnames, value]} BlacklistedIpAddresses: description: List of blacklisted ctlplane IP addresses value: {get_attr: [BlacklistedIpAddresses, value]} GlobalConfig: description: The global_config (hieradata). value: {get_attr: [GlobalConfig, value]} RoleNetworkConfigMap: description: Mapping of roles to network config value: Controller: {get_attr: [ControllerNetworkConfig, config]} CellController: {get_attr: [CellControllerNetworkConfig, config]} CellControllerCompute: {get_attr: [CellControllerComputeNetworkConfig, config]} Compute: {get_attr: [ComputeNetworkConfig, config]} BlockStorage: {get_attr: [BlockStorageNetworkConfig, config]} ObjectStorage: {get_attr: [ObjectStorageNetworkConfig, config]} CephStorage: {get_attr: [CephStorageNetworkConfig, config]} Networker: {get_attr: [NetworkerNetworkConfig, config]} AnsibleHostVarsMap: description: Map of Ansible Host variables per role value: {get_attr: [AnsibleHostVars, value]} TripleoHeatTemplatesJinja2RenderingDataSources: description: The role_data and the network_data used when rendering the THT Jinja2 templates value: roles_data: [{'name': 'Controller', 'description': 'Controller role that has all the controler services loaded and handles\nDatabase, Messaging and Network functions.\n', 'CountDefault': 1, 'tags': ['primary', 'controller', 'external_bridge'], 'networks': {'External': {'subnet': 'external_subnet'}, 'InternalApi': {'subnet': 'internal_api_subnet'}, 'Storage': {'subnet': 'storage_subnet'}, 'StorageMgmt': {'subnet': 'storage_mgmt_subnet'}, 'Tenant': {'subnet': 'tenant_subnet'}}, 'default_route_networks': ['ControlPlane'], 'HostnameFormatDefault': '%stackname%-controller-%index%', 'RoleParametersDefault': {'OVNCMSOptions': 'enable-chassis-as-gw'}, '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::CephClient', 'OS::TripleO::Services::CephExternal', 'OS::TripleO::Services::CephGrafana', 'OS::TripleO::Services::CephMds', 'OS::TripleO::Services::CephMgr', 'OS::TripleO::Services::CephMon', 'OS::TripleO::Services::CephNfs', 'OS::TripleO::Services::CephRbdMirror', 'OS::TripleO::Services::CephRgw', 'OS::TripleO::Services::CinderApi', 'OS::TripleO::Services::CinderBackendDellSc', 'OS::TripleO::Services::CinderBackendDellEMCPowerFlex', 'OS::TripleO::Services::CinderBackendDellEMCPowermax', 'OS::TripleO::Services::CinderBackendDellEMCPowerStore', 'OS::TripleO::Services::CinderBackendDellEMCSc', 'OS::TripleO::Services::CinderBackendDellEMCUnity', 'OS::TripleO::Services::CinderBackendDellEMCVMAXISCSI', 'OS::TripleO::Services::CinderBackendDellEMCVNX', 'OS::TripleO::Services::CinderBackendDellEMCVxFlexOS', 'OS::TripleO::Services::CinderBackendDellEMCXtremio', 'OS::TripleO::Services::CinderBackendNetApp', 'OS::TripleO::Services::CinderBackendPure', 'OS::TripleO::Services::CinderBackendScaleIO', '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::DesignateBind', 'OS::TripleO::Services::Etcd', 'OS::TripleO::Services::ExternalSwiftProxy', 'OS::TripleO::Services::Frr', 'OS::TripleO::Services::GlanceApi', 'OS::TripleO::Services::GlanceApiInternal', '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::Kernel', 'OS::TripleO::Services::Keystone', 'OS::TripleO::Services::LoginDefs', 'OS::TripleO::Services::ManilaApi', 'OS::TripleO::Services::ManilaBackendCephFs', 'OS::TripleO::Services::ManilaBackendFlashBlade', 'OS::TripleO::Services::ManilaBackendIsilon', 'OS::TripleO::Services::ManilaBackendNetapp', 'OS::TripleO::Services::ManilaBackendPowerMax', '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::Multipathd', '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::NeutronLinuxbridgeAgent', 'OS::TripleO::Services::NeutronMetadataAgent', 'OS::TripleO::Services::NeutronOvsAgent', 'OS::TripleO::Services::NeutronVppAgent', 'OS::TripleO::Services::NeutronAgentsIBConfig', 'OS::TripleO::Services::NovaApi', 'OS::TripleO::Services::NovaConductor', 'OS::TripleO::Services::NovaIronic', 'OS::TripleO::Services::NovaMetadata', '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::OpenStackClients', 'OS::TripleO::Services::OVNDBs', 'OS::TripleO::Services::OVNController', 'OS::TripleO::Services::Pacemaker', 'OS::TripleO::Services::PlacementApi', 'OS::TripleO::Services::OsloMessagingRpc', 'OS::TripleO::Services::OsloMessagingNotify', 'OS::TripleO::Services::Podman', 'OS::TripleO::Services::Redis', 'OS::TripleO::Services::Rhsm', 'OS::TripleO::Services::Rsyslog', 'OS::TripleO::Services::RsyslogSidecar', 'OS::TripleO::Services::Securetty', '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::Timesync', 'OS::TripleO::Services::Timezone', 'OS::TripleO::Services::TripleoFirewall', 'OS::TripleO::Services::TripleoPackages', 'OS::TripleO::Services::Tuned', 'OS::TripleO::Services::Unbound', 'OS::TripleO::Services::Vpp']}, {'name': 'CellController', 'description': 'Controller role that has the cell controler specific\nservices and handles Database, Messaging and Network functions.\n', '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'}}, 'default_route_networks': ['ControlPlane'], 'HostnameFormatDefault': '%stackname%-controller-%index%', 'RoleParametersDefault': {'OVNCMSOptions': 'enable-chassis-as-gw'}, '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::AuditD', 'OS::TripleO::Services::BootParams', 'OS::TripleO::Services::CACerts', 'OS::TripleO::Services::Clustercheck', 'OS::TripleO::Services::Collectd', 'OS::TripleO::Services::ContainerImagePrepare', 'OS::TripleO::Services::ContainersLogrotateCrond', 'OS::TripleO::Services::Frr', 'OS::TripleO::Services::HAproxy', '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::MySQL', 'OS::TripleO::Services::MySQLClient', 'OS::TripleO::Services::NeutronMetadataAgent', 'OS::TripleO::Services::NovaConductor', 'OS::TripleO::Services::NovaMetadata', 'OS::TripleO::Services::NovaVncProxy', 'OS::TripleO::Services::OsloMessagingRpc', 'OS::TripleO::Services::Pacemaker', 'OS::TripleO::Services::Podman', 'OS::TripleO::Services::Ptp', 'OS::TripleO::Services::Rhsm', 'OS::TripleO::Services::Rsyslog', 'OS::TripleO::Services::RsyslogSidecar', 'OS::TripleO::Services::Securetty', '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']}, {'name': 'CellControllerCompute', 'description': 'Controller and Compute AIO role that has compute and cell controler specific\nservices loaded and handles Database, Messaging and Network functions.\n', 'CountDefault': 1, 'tags': ['primary', 'controller', 'external_bridge'], 'networks': {'External': {'subnet': 'external_subnet'}, 'InternalApi': {'subnet': 'internal_api_subnet'}, 'Storage': {'subnet': 'storage_subnet'}, 'StorageMgmt': {'subnet': 'storage_mgmt_subnet'}, 'Tenant': {'subnet': 'tenant_subnet'}}, 'default_route_networks': ['ControlPlane'], 'HostnameFormatDefault': '%stackname%-controller-compute-%index%', 'RoleParametersDefault': {'OVNCMSOptions': 'enable-chassis-as-gw'}, '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::AuditD', 'OS::TripleO::Services::BootParams', 'OS::TripleO::Services::CACerts', 'OS::TripleO::Services::CephClient', 'OS::TripleO::Services::CephExternal', 'OS::TripleO::Services::Clustercheck', 'OS::TripleO::Services::Collectd', 'OS::TripleO::Services::ComputeCeilometerAgent', 'OS::TripleO::Services::CeilometerAgentIpmi', 'OS::TripleO::Services::ContainerImagePrepare', 'OS::TripleO::Services::HAproxy', 'OS::TripleO::Services::ComputeNeutronCorePlugin', 'OS::TripleO::Services::ComputeNeutronL3Agent', 'OS::TripleO::Services::ComputeNeutronMetadataAgent', 'OS::TripleO::Services::ComputeNeutronOvsAgent', 'OS::TripleO::Services::Frr', '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::Multipathd', 'OS::TripleO::Services::MySQL', 'OS::TripleO::Services::MySQLClient', 'OS::TripleO::Services::NeutronBgpVpnBagpipe', 'OS::TripleO::Services::NeutronLinuxbridgeAgent', 'OS::TripleO::Services::NeutronVppAgent', 'OS::TripleO::Services::NovaAZConfig', 'OS::TripleO::Services::NovaCompute', 'OS::TripleO::Services::NovaLibvirt', 'OS::TripleO::Services::NovaLibvirtGuests', 'OS::TripleO::Services::NovaMigrationTarget', 'OS::TripleO::Services::ContainersLogrotateCrond', 'OS::TripleO::Services::NeutronMetadataAgent', 'OS::TripleO::Services::NovaConductor', 'OS::TripleO::Services::NovaMetadata', 'OS::TripleO::Services::NovaVncProxy', 'OS::TripleO::Services::OVNController', 'OS::TripleO::Services::OVNMetadataAgent', 'OS::TripleO::Services::Pacemaker', 'OS::TripleO::Services::OsloMessagingRpc', 'OS::TripleO::Services::Podman', 'OS::TripleO::Services::Ptp', 'OS::TripleO::Services::Rhsm', 'OS::TripleO::Services::Rsyslog', 'OS::TripleO::Services::RsyslogSidecar', 'OS::TripleO::Services::Securetty', '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']}, {'name': 'Compute', 'description': 'Basic Compute Node role\n', 'CountDefault': 1, 'tags': ['compute', 'external_bridge'], 'networks': {'InternalApi': {'subnet': 'internal_api_subnet'}, 'Tenant': {'subnet': 'tenant_subnet'}, 'Storage': {'subnet': 'storage_subnet'}}, 'default_route_networks': ['ControlPlane'], 'HostnameFormatDefault': '%stackname%-novacompute-%index%', 'RoleParametersDefault': {'FsAioMaxNumber': 1048576, 'TunedProfileName': 'throughput-performance'}, '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::Collectd', 'OS::TripleO::Services::ComputeCeilometerAgent', 'OS::TripleO::Services::CeilometerAgentIpmi', 'OS::TripleO::Services::ComputeNeutronCorePlugin', 'OS::TripleO::Services::ComputeNeutronL3Agent', 'OS::TripleO::Services::ComputeNeutronMetadataAgent', 'OS::TripleO::Services::ComputeNeutronOvsAgent', 'OS::TripleO::Services::Frr', '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::Multipathd', 'OS::TripleO::Services::MySQLClient', 'OS::TripleO::Services::NeutronBgpVpnBagpipe', 'OS::TripleO::Services::NeutronLinuxbridgeAgent', 'OS::TripleO::Services::NeutronVppAgent', 'OS::TripleO::Services::NovaAZConfig', 'OS::TripleO::Services::NovaCompute', 'OS::TripleO::Services::NovaLibvirt', 'OS::TripleO::Services::NovaLibvirtGuests', 'OS::TripleO::Services::NovaMigrationTarget', 'OS::TripleO::Services::ContainersLogrotateCrond', 'OS::TripleO::Services::Podman', 'OS::TripleO::Services::Rhsm', 'OS::TripleO::Services::Rsyslog', 'OS::TripleO::Services::RsyslogSidecar', 'OS::TripleO::Services::Securetty', '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']}, {'name': 'BlockStorage', 'description': 'Cinder Block Storage node role\n', 'tags': ['storage'], 'networks': {'InternalApi': {'subnet': 'internal_api_subnet'}, 'Storage': {'subnet': 'storage_subnet'}, 'StorageMgmt': {'subnet': 'storage_mgmt_subnet'}}, 'uses_deprecated_params': False, 'deprecated_nic_config_name': 'cinder-storage.yaml', 'update_serial': 25, 'ServicesDefault': ['OS::TripleO::Services::Aide', 'OS::TripleO::Services::AuditD', 'OS::TripleO::Services::BlockStorageCinderVolume', 'OS::TripleO::Services::BootParams', 'OS::TripleO::Services::CACerts', 'OS::TripleO::Services::Collectd', 'OS::TripleO::Services::Frr', '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::Multipathd', 'OS::TripleO::Services::MySQLClient', 'OS::TripleO::Services::ContainersLogrotateCrond', 'OS::TripleO::Services::Podman', 'OS::TripleO::Services::Rhsm', 'OS::TripleO::Services::Rsyslog', 'OS::TripleO::Services::RsyslogSidecar', 'OS::TripleO::Services::Securetty', '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']}, {'name': 'ObjectStorage', 'description': 'Swift Object Storage node role\n', 'tags': ['storage'], 'networks': {'InternalApi': {'subnet': 'internal_api_subnet'}, 'Storage': {'subnet': 'storage_subnet'}, 'StorageMgmt': {'subnet': 'storage_mgmt_subnet'}}, 'uses_deprecated_params': True, 'deprecated_param_metadata': 'SwiftStorageServerMetadata', 'deprecated_param_ips': 'SwiftStorageIPs', 'deprecated_param_image': 'SwiftStorageImage', 'deprecated_param_flavor': 'OvercloudSwiftStorageFlavor', 'deprecated_nic_config_name': 'swift-storage.yaml', 'deprecated_server_resource_name': 'SwiftStorage', 'update_serial': 1, 'ServicesDefault': ['OS::TripleO::Services::Aide', 'OS::TripleO::Services::AuditD', 'OS::TripleO::Services::BootParams', 'OS::TripleO::Services::CACerts', 'OS::TripleO::Services::Collectd', 'OS::TripleO::Services::Frr', '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::Rsyslog', 'OS::TripleO::Services::RsyslogSidecar', 'OS::TripleO::Services::Securetty', 'OS::TripleO::Services::Snmp', 'OS::TripleO::Services::Sshd', 'OS::TripleO::Services::SwiftRingBuilder', 'OS::TripleO::Services::SwiftStorage', 'OS::TripleO::Services::Timesync', 'OS::TripleO::Services::Timezone', 'OS::TripleO::Services::TripleoFirewall', 'OS::TripleO::Services::TripleoPackages', 'OS::TripleO::Services::Tuned', 'OS::TripleO::Services::Ptp']}, {'name': 'CephStorage', 'description': 'Ceph OSD Storage node role\n', 'tags': ['ceph', 'storage'], 'networks': {'Storage': {'subnet': 'storage_subnet'}, 'StorageMgmt': {'subnet': 'storage_mgmt_subnet'}}, 'uses_deprecated_params': False, 'HostnameFormatDefault': '%stackname%-cephstorage-%index%', 'deprecated_nic_config_name': 'ceph-storage.yaml', 'update_serial': 1, 'rhsm_enforce': False, 'ServicesDefault': ['OS::TripleO::Services::Aide', 'OS::TripleO::Services::AuditD', 'OS::TripleO::Services::BootParams', 'OS::TripleO::Services::CACerts', 'OS::TripleO::Services::CephOSD', 'OS::TripleO::Services::Collectd', 'OS::TripleO::Services::Frr', '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::Rsyslog', 'OS::TripleO::Services::RsyslogSidecar', 'OS::TripleO::Services::Securetty', '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']}, {'name': 'Networker', 'description': 'Standalone networking role to run Neutron agents on their own.\n', 'networks': {'InternalApi': {'subnet': 'internal_api_subnet'}, 'Tenant': {'subnet': 'tenant_subnet'}}, 'tags': ['external_bridge'], 'HostnameFormatDefault': '%stackname%-networker-%index%', 'RoleParametersDefault': {'OVNCMSOptions': 'enable-chassis-as-gw'}, 'update_serial': 1, 'ServicesDefault': ['OS::TripleO::Services::Aide', 'OS::TripleO::Services::AuditD', 'OS::TripleO::Services::BootParams', 'OS::TripleO::Services::CACerts', 'OS::TripleO::Services::Collectd', 'OS::TripleO::Services::Frr', 'OS::TripleO::Services::IpaClient', 'OS::TripleO::Services::Ipsec', 'OS::TripleO::Services::IronicNeutronAgent', 'OS::TripleO::Services::Kernel', 'OS::TripleO::Services::LoginDefs', 'OS::TripleO::Services::MetricsQdr', 'OS::TripleO::Services::MySQLClient', 'OS::TripleO::Services::NeutronDhcpAgent', 'OS::TripleO::Services::NeutronL2gwAgent', 'OS::TripleO::Services::NeutronL3Agent', 'OS::TripleO::Services::NeutronMetadataAgent', 'OS::TripleO::Services::NeutronOvsAgent', 'OS::TripleO::Services::NeutronVppAgent', 'OS::TripleO::Services::ContainersLogrotateCrond', 'OS::TripleO::Services::OctaviaDeploymentConfig', 'OS::TripleO::Services::OctaviaHealthManager', 'OS::TripleO::Services::OctaviaHousekeeping', 'OS::TripleO::Services::OctaviaWorker', 'OS::TripleO::Services::OVNController', 'OS::TripleO::Services::OVNMetadataAgent', 'OS::TripleO::Services::Podman', 'OS::TripleO::Services::Rhsm', 'OS::TripleO::Services::Rsyslog', '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']}] networks_data: [{'name': 'Storage', 'mtu': 1500, 'vip': True, 'name_lower': 'storage', 'dns_domain': 'storage.ooo.test.', 'service_net_map_replace': 'storage', 'subnets': {'storage_subnet': {'vlan': 21, 'ip_subnet': '172.18.0.0/24', 'allocation_pools': [{'start': '172.18.0.120', 'end': '172.18.0.250'}]}}, 'idx': 0}, {'name': 'StorageMgmt', 'mtu': 1500, 'vip': True, 'name_lower': 'storage_mgmt', 'dns_domain': 'storagemgmt.ooo.test.', 'service_net_map_replace': 'storage_mgmt', 'subnets': {'storage_mgmt_subnet': {'vlan': 23, 'ip_subnet': '172.20.0.0/24', 'allocation_pools': [{'start': '172.20.0.120', 'end': '172.20.0.250'}]}}, 'idx': 1}, {'name': 'InternalApi', 'mtu': 1500, 'vip': True, 'name_lower': 'internal_api', 'dns_domain': 'internal-api.ooo.test.', 'service_net_map_replace': 'internal_api', 'subnets': {'internal_api_subnet': {'vlan': 20, 'ip_subnet': '172.17.0.0/24', 'allocation_pools': [{'start': '172.17.0.120', 'end': '172.17.0.250'}]}}, 'idx': 2}, {'name': 'Tenant', 'mtu': 1500, 'vip': False, 'name_lower': 'tenant', 'dns_domain': 'tenant.ooo.test.', 'service_net_map_replace': 'tenant', 'subnets': {'tenant_subnet': {'vlan': 22, 'ip_subnet': '172.19.0.0/24', 'allocation_pools': [{'start': '172.19.0.120', 'end': '172.19.0.250'}]}}, 'idx': 3}, {'name': 'External', 'mtu': 1500, 'vip': True, 'name_lower': 'external', 'dns_domain': 'external.ooo.test.', 'service_net_map_replace': 'external', 'subnets': {'external_subnet': {'vlan': 44, 'ip_subnet': '172.21.0.0/24', 'allocation_pools': [{'start': '172.21.0.120', 'end': '172.21.0.250'}]}}, 'idx': 4}] AdminPassword: description: The password for the keystone admin account, used for monitoring, querying neutron etc. value: {get_param: AdminPassword} KeystoneRegion: description: Keystone region for endpoint value: {get_param: KeystoneRegion}