Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 1473233 Details for
Bug 1611953
environment has wrong section "parameter_groups"/"heat_template_version"
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
overcloud.yml
overcloud.yaml (text/plain), 102.49 KB, created by
Tony Breeds
on 2018-08-03 20:41:30 UTC
(
hide
)
Description:
overcloud.yml
Filename:
MIME Type:
Creator:
Tony Breeds
Created:
2018-08-03 20:41:30 UTC
Size:
102.49 KB
patch
obsolete
># primary role is: Controller >heat_template_version: queens > >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 a role) > CloudNameStorage: > default: overcloud.storage.localdomain > description: > > The DNS name of this cloud's storage endpoint. E.g. > 'ci-overcloud.storage.tripleo.org'. > type: string > # 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 > # 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 > # 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 > 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 > 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 > ControllerExtraConfig: > default: {} > description: | > Role specific additional hiera configuration to inject into the cluster. > type: json > controllerExtraConfig: > default: {} > description: | > DEPRECATED use ControllerExtraConfig instead > type: json > ComputeExtraConfig: > default: {} > description: | > Role specific additional hiera configuration to inject into the cluster. > type: json > NovaComputeExtraConfig: > default: {} > description: | > DEPRECATED use ComputeExtraConfig instead > type: json > ComputePPC64LEExtraConfig: > default: {} > description: | > Role specific additional hiera configuration to inject into the cluster. > type: json > BlockStorageExtraConfig: > default: {} > description: | > Role specific additional hiera configuration to inject into the cluster. > type: json > ObjectStorageExtraConfig: > default: {} > description: | > Role specific additional hiera configuration to inject into the cluster. > type: json > CephStorageExtraConfig: > default: {} > description: | > Role specific additional hiera configuration to inject into the cluster. > type: json > NeutronControlPlaneID: > default: 'ctlplane' > type: string > description: Neutron ID or name for ctlplane network. > 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 > ControlFixedIPs: > default: [] > description: > > Control the IP allocation for the ControlVirtualIP port. E.g. > [{'ip_address':'1.2.3.4'}] > type: json > StorageVirtualFixedIPs: > default: [] > description: > > Control the IP allocation for the StorageVirtualInterface port. E.g. > [{'ip_address':'1.2.3.4'}] > type: json > StorageMgmtVirtualFixedIPs: > default: [] > description: > > Control the IP allocation for the StorageMgmtVirtualInterface port. E.g. > [{'ip_address':'1.2.3.4'}] > type: json > InternalApiVirtualFixedIPs: > default: [] > description: > > Control the IP allocation for the InternalApiVirtualInterface port. E.g. > [{'ip_address':'1.2.3.4'}] > type: json > # 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 > RabbitCookieSalt: > type: string > default: unset > description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change. > RedisVirtualFixedIPs: > default: [] > description: > > Control the IP allocation for the virtual IP used by Redis. E.g. > [{'ip_address':'1.2.3.4'}] > type: json > 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 > > # Jinja loop for Role in role_data.yaml > > # 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 > > 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']}] > > 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: {} > > # 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 > > 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%-compute-%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']}] > > 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: {} > > # Parameters generated for ComputePPC64LE Role > ComputePPC64LEServices: > 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 ComputePPC64LE role. > type: comma_delimited_list > > ComputePPC64LECount: > description: Number of ComputePPC64LE nodes to deploy > type: number > default: 0 > > ComputePPC64LEHostnameFormat: > type: string > description: > > Format for ComputePPC64LE 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%-novacomputeppc64le-%index%" > > ComputePPC64LERemovalPolicies: > default: [] > type: json > description: > > List of resources to be removed from ComputePPC64LE ResourceGroup when > doing an update which requires removal of specific resources. > Example format ComputeRemovalPolicies: [{'resource_list': ['0']}] > > ComputePPC64LESchedulerHints: > type: json > description: Optional scheduler hints to pass to nova > default: {} > > ComputePPC64LEParameters: > type: json > description: Optional Role Specific parameters to be provided to service > default: {} > > # 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 > > 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']}] > > 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: {} > > # 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 > > 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']}] > > 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: {} > > # 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 > > 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']}] > > 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: {} > > > # 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. > > >parameter_groups: >- label: deprecated > description: Do not use deprecated params, they will be removed. > parameters: > - controllerExtraConfig >parameter_groups: >- label: deprecated > description: Do not use deprecated params, they will be removed. > parameters: > - NovaComputeSchedulerHints > - NovaComputeExtraConfig > >conditions: > add_vips_to_etc_hosts: {equals : [{get_param: AddVipsToEtcHosts}, True]} > control_fixed_ip_not_set: {equals : [{get_param: ControlFixedIPs}, []]} > >resources: > > VipHosts: > type: OS::Heat::Value > properties: > type: string > value: > list_join: > - "\n" > - - 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} > > HeatAuthEncryptionKey: > type: OS::TripleO::RandomString > > PcsdPassword: > type: OS::TripleO::RandomString > properties: > length: 16 > > HorizonSecret: > type: OS::TripleO::RandomString > properties: > length: 10 > > NetCidrMapValue: > type: OS::Heat::Value > properties: > type: json > value: > map_replace: > - map_merge: > - {get_attr: [Networks, net_cidr_map]} > - ctlplane: {get_attr: [ControlVirtualIP, subnets, 0, cidr]} > - keys: > ctlplane: {get_param: NeutronControlPlaneID} > values: > disabled: {get_attr: [ControlVirtualIP, subnets, 0, cidr]} > > 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} > > SshKnownHostsConfig: > type: OS::TripleO::Ssh::KnownHostsConfig > properties: > known_hosts: > list_join: > - '' > > - {get_attr: [Controller, known_hosts_entry]} > > - {get_attr: [Compute, known_hosts_entry]} > > - {get_attr: [ComputePPC64LE, known_hosts_entry]} > > - {get_attr: [BlockStorage, known_hosts_entry]} > > - {get_attr: [ObjectStorage, known_hosts_entry]} > > - {get_attr: [CephStorage, known_hosts_entry]} > > > SshKnownHostsHostnames: > type: OS::Heat::Value > properties: > value: > map_merge: > list_concat: > > - {get_attr: [Controller, known_hosts_hostnames]} > > - {get_attr: [Compute, known_hosts_hostnames]} > > - {get_attr: [ComputePPC64LE, known_hosts_hostnames]} > > - {get_attr: [BlockStorage, known_hosts_hostnames]} > > - {get_attr: [ObjectStorage, known_hosts_hostnames]} > > - {get_attr: [CephStorage, known_hosts_hostnames]} > > > # Jinja loop for Role in roles_data.yaml > > # Resources generated for Controller Role > ControllerServiceChain: > type: OS::TripleO::Services > properties: > Services: > get_param: ControllerServices > ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]} > ServiceData: > net_cidr_map: {get_attr: [NetCidrMapValue, value]} > EndpointMap: {get_attr: [EndpointMapData, value]} > DefaultPasswords: {get_attr: [DefaultPasswords, passwords]} > RoleName: Controller > RoleParameters: > map_merge: > - {} > - 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]} > > ControllerServiceConfigSettings: > type: OS::Heat::Value > properties: > type: json > value: > map_merge: > - get_attr: [ControllerServiceChainRoleData, value, config_settings] > > - get_attr: [ControllerServiceChainRoleData, value, global_config_settings] > > - get_attr: [ComputeServiceChainRoleData, value, global_config_settings] > > - get_attr: [ComputePPC64LEServiceChainRoleData, 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] > > # 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: [ComputeServiceChainRoleData, value, service_config_settings] > > - get_attr: [ComputePPC64LEServiceChainRoleData, 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] > > services: {get_attr: [ControllerServiceNames, value]} > > ControllerMergedConfigSettings: > type: OS::Heat::Value > properties: > type: json > value: > config_settings: {} > global_config_settings: {} > service_config_settings: {} > merged_config_settings: > map_merge: > - get_attr: [ControllerServiceConfigSettings, value] > - get_param: ExtraConfig > - get_param: controllerExtraConfig > - get_param: ControllerExtraConfig > > # 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: coalesce($.data, []).where($ != null) > data: {get_attr: [ControllerServiceChainRoleData, value, service_names]} > > ControllerHostsDeployment: > type: OS::Heat::StructuredDeployments > properties: > name: ControllerHostsDeployment > config: {get_attr: [hostsConfig, config_id]} > servers: {get_attr: [ControllerServers, value]} > > ControllerSshKnownHostsDeployment: > type: OS::TripleO::Ssh::KnownHostsDeployment > properties: > name: ControllerSshKnownHostsDeployment > config: {get_resource: SshKnownHostsConfig} > servers: {get_attr: [ControllerServers, value]} > > ControllerAllNodesDeployment: > type: OS::TripleO::AllNodesDeployment > depends_on: > > - ControllerHostsDeployment > - ControllerSshKnownHostsDeployment > > - ComputeHostsDeployment > - ComputeSshKnownHostsDeployment > > - ComputePPC64LEHostsDeployment > - ComputePPC64LESshKnownHostsDeployment > > - BlockStorageHostsDeployment > - BlockStorageSshKnownHostsDeployment > > - ObjectStorageHostsDeployment > - ObjectStorageSshKnownHostsDeployment > > - CephStorageHostsDeployment > - CephStorageSshKnownHostsDeployment > > properties: > name: ControllerAllNodesDeployment > config: {get_attr: [allNodesConfig, config_id]} > servers: {get_attr: [ControllerServers, value]} > input_values: > # Note we have to use yaql to look up the first hostname/ip in the > # list because heat path based attributes operate on the attribute > # inside the ResourceGroup, not the exposed list ref discussion in > # https://bugs.launchpad.net/heat/+bug/1640488 > # The coalesce is needed because $.data is None during heat validation > bootstrap_nodeid: > yaql: > expression: coalesce($.data, []).first(null) > data: {get_attr: [Controller, hostname]} > bootstrap_nodeid_ip: > yaql: > expression: coalesce($.data, []).first(null) > data: {get_attr: [Controller, ip_address]} > > ControllerAllNodesValidationDeployment: > type: OS::Heat::StructuredDeployments > depends_on: ControllerAllNodesDeployment > properties: > name: ControllerAllNodesValidationDeployment > config: {get_resource: AllNodesValidationConfig} > servers: {get_attr: [ControllerServers, value]} > > 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]} > ManagementIpList: {get_attr: [Controller, management_ip_address]} > EnabledServices: {get_attr: [ControllerServiceNames, value]} > ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map_lower]} > 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]} > > 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} > resource_def: > type: OS::TripleO::Controller > properties: > CloudDomain: {get_param: CloudDomain} > ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]} > 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} > ServiceConfigSettings: {get_attr: [ControllerServiceConfigSettings, value]} > ServiceNames: {get_attr: [ControllerServiceNames, value]} > MonitoringSubscriptions: {get_attr: [ControllerServiceChainRoleData, value, monitoring_subscriptions]} > LoggingSources: {get_attr: [ControllerServiceChainRoleData, value, logging_sources]} > LoggingGroups: {get_attr: [ControllerServiceChainRoleData, value, logging_groups]} > ServiceMetadataSettings: {get_attr: [ControllerServiceChainRoleData, value, service_metadata_settings]} > DeploymentServerBlacklistDict: {get_attr: [DeploymentServerBlacklistDict, value]} > RoleParameters: > map_merge: > - {} > - get_param: ControllerParameters > > # Resources generated for Compute Role > ComputeServiceChain: > type: OS::TripleO::Services > properties: > Services: > get_param: ComputeServices > ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]} > ServiceData: > net_cidr_map: {get_attr: [NetCidrMapValue, value]} > EndpointMap: {get_attr: [EndpointMapData, value]} > DefaultPasswords: {get_attr: [DefaultPasswords, passwords]} > RoleName: Compute > RoleParameters: > map_merge: > - {} > - 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]} > > ComputeServiceConfigSettings: > type: OS::Heat::Value > properties: > type: json > value: > map_merge: > - get_attr: [ComputeServiceChainRoleData, value, config_settings] > > - get_attr: [ControllerServiceChainRoleData, value, global_config_settings] > > - get_attr: [ComputeServiceChainRoleData, value, global_config_settings] > > - get_attr: [ComputePPC64LEServiceChainRoleData, 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] > > # 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: [ComputeServiceChainRoleData, value, service_config_settings] > > - get_attr: [ComputePPC64LEServiceChainRoleData, 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] > > services: {get_attr: [ComputeServiceNames, value]} > > ComputeMergedConfigSettings: > type: OS::Heat::Value > properties: > type: json > value: > config_settings: {} > global_config_settings: {} > service_config_settings: {} > merged_config_settings: > map_merge: > - get_attr: [ComputeServiceConfigSettings, value] > - get_param: ExtraConfig > - get_param: NovaComputeExtraConfig > - get_param: ComputeExtraConfig > > # 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: coalesce($.data, []).where($ != null) > data: {get_attr: [ComputeServiceChainRoleData, value, service_names]} > > ComputeHostsDeployment: > type: OS::Heat::StructuredDeployments > properties: > name: ComputeHostsDeployment > config: {get_attr: [hostsConfig, config_id]} > servers: {get_attr: [ComputeServers, value]} > > ComputeSshKnownHostsDeployment: > type: OS::TripleO::Ssh::KnownHostsDeployment > properties: > name: ComputeSshKnownHostsDeployment > config: {get_resource: SshKnownHostsConfig} > servers: {get_attr: [ComputeServers, value]} > > ComputeAllNodesDeployment: > type: OS::TripleO::AllNodesDeployment > depends_on: > > - ControllerHostsDeployment > - ControllerSshKnownHostsDeployment > > - ComputeHostsDeployment > - ComputeSshKnownHostsDeployment > > - ComputePPC64LEHostsDeployment > - ComputePPC64LESshKnownHostsDeployment > > - BlockStorageHostsDeployment > - BlockStorageSshKnownHostsDeployment > > - ObjectStorageHostsDeployment > - ObjectStorageSshKnownHostsDeployment > > - CephStorageHostsDeployment > - CephStorageSshKnownHostsDeployment > > properties: > name: ComputeAllNodesDeployment > config: {get_attr: [allNodesConfig, config_id]} > servers: {get_attr: [ComputeServers, value]} > input_values: > # Note we have to use yaql to look up the first hostname/ip in the > # list because heat path based attributes operate on the attribute > # inside the ResourceGroup, not the exposed list ref discussion in > # https://bugs.launchpad.net/heat/+bug/1640488 > # The coalesce is needed because $.data is None during heat validation > bootstrap_nodeid: > yaql: > expression: coalesce($.data, []).first(null) > data: {get_attr: [Compute, hostname]} > bootstrap_nodeid_ip: > yaql: > expression: coalesce($.data, []).first(null) > data: {get_attr: [Compute, ip_address]} > > ComputeAllNodesValidationDeployment: > type: OS::Heat::StructuredDeployments > depends_on: ComputeAllNodesDeployment > properties: > name: ComputeAllNodesValidationDeployment > config: {get_resource: AllNodesValidationConfig} > servers: {get_attr: [ComputeServers, value]} > > ComputeIpListMap: > type: OS::TripleO::Network::Ports::NetIpListMap > properties: > ControlPlaneIpList: {get_attr: [Compute, ip_address]} > StorageIpList: {get_attr: [Compute, storage_ip_address]} > StorageMgmtIpList: {get_attr: [Compute, storage_mgmt_ip_address]} > InternalApiIpList: {get_attr: [Compute, internal_api_ip_address]} > TenantIpList: {get_attr: [Compute, tenant_ip_address]} > ExternalIpList: {get_attr: [Compute, external_ip_address]} > ManagementIpList: {get_attr: [Compute, management_ip_address]} > EnabledServices: {get_attr: [ComputeServiceNames, value]} > ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map_lower]} > 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]} > > 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} > resource_def: > type: OS::TripleO::Compute > properties: > CloudDomain: {get_param: CloudDomain} > ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]} > 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} > ServiceConfigSettings: {get_attr: [ComputeServiceConfigSettings, value]} > ServiceNames: {get_attr: [ComputeServiceNames, value]} > MonitoringSubscriptions: {get_attr: [ComputeServiceChainRoleData, value, monitoring_subscriptions]} > LoggingSources: {get_attr: [ComputeServiceChainRoleData, value, logging_sources]} > LoggingGroups: {get_attr: [ComputeServiceChainRoleData, value, logging_groups]} > ServiceMetadataSettings: {get_attr: [ComputeServiceChainRoleData, value, service_metadata_settings]} > DeploymentServerBlacklistDict: {get_attr: [DeploymentServerBlacklistDict, value]} > RoleParameters: > map_merge: > - {} > - get_param: ComputeParameters > > # Resources generated for ComputePPC64LE Role > ComputePPC64LEServiceChain: > type: OS::TripleO::Services > properties: > Services: > get_param: ComputePPC64LEServices > ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]} > ServiceData: > net_cidr_map: {get_attr: [NetCidrMapValue, value]} > EndpointMap: {get_attr: [EndpointMapData, value]} > DefaultPasswords: {get_attr: [DefaultPasswords, passwords]} > RoleName: ComputePPC64LE > RoleParameters: > map_merge: > - {'TunedProfileName': 'virtual-host'} > - get_param: ComputePPC64LEParameters > > # Lookup of role_data via heat outputs is slow, so workaround this by caching > # the value in an OS::Heat::Value resource > ComputePPC64LEServiceChainRoleData: > type: OS::Heat::Value > properties: > type: json > value: {get_attr: [ComputePPC64LEServiceChain, role_data]} > > ComputePPC64LEServiceConfigSettings: > type: OS::Heat::Value > properties: > type: json > value: > map_merge: > - get_attr: [ComputePPC64LEServiceChainRoleData, value, config_settings] > > - get_attr: [ControllerServiceChainRoleData, value, global_config_settings] > > - get_attr: [ComputeServiceChainRoleData, value, global_config_settings] > > - get_attr: [ComputePPC64LEServiceChainRoleData, 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] > > # 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: [ComputeServiceChainRoleData, value, service_config_settings] > > - get_attr: [ComputePPC64LEServiceChainRoleData, 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] > > services: {get_attr: [ComputePPC64LEServiceNames, value]} > > ComputePPC64LEMergedConfigSettings: > type: OS::Heat::Value > properties: > type: json > value: > config_settings: {} > global_config_settings: {} > service_config_settings: {} > merged_config_settings: > map_merge: > - get_attr: [ComputePPC64LEServiceConfigSettings, value] > - get_param: ExtraConfig > - get_param: ComputePPC64LEExtraConfig > > # Filter any null/None service_names which may be present due to mapping > # of services to OS::Heat::None > ComputePPC64LEServiceNames: > type: OS::Heat::Value > depends_on: ComputePPC64LEServiceChain > properties: > type: comma_delimited_list > value: > yaql: > expression: coalesce($.data, []).where($ != null) > data: {get_attr: [ComputePPC64LEServiceChainRoleData, value, service_names]} > > ComputePPC64LEHostsDeployment: > type: OS::Heat::StructuredDeployments > properties: > name: ComputePPC64LEHostsDeployment > config: {get_attr: [hostsConfig, config_id]} > servers: {get_attr: [ComputePPC64LEServers, value]} > > ComputePPC64LESshKnownHostsDeployment: > type: OS::TripleO::Ssh::KnownHostsDeployment > properties: > name: ComputePPC64LESshKnownHostsDeployment > config: {get_resource: SshKnownHostsConfig} > servers: {get_attr: [ComputePPC64LEServers, value]} > > ComputePPC64LEAllNodesDeployment: > type: OS::TripleO::AllNodesDeployment > depends_on: > > - ControllerHostsDeployment > - ControllerSshKnownHostsDeployment > > - ComputeHostsDeployment > - ComputeSshKnownHostsDeployment > > - ComputePPC64LEHostsDeployment > - ComputePPC64LESshKnownHostsDeployment > > - BlockStorageHostsDeployment > - BlockStorageSshKnownHostsDeployment > > - ObjectStorageHostsDeployment > - ObjectStorageSshKnownHostsDeployment > > - CephStorageHostsDeployment > - CephStorageSshKnownHostsDeployment > > properties: > name: ComputePPC64LEAllNodesDeployment > config: {get_attr: [allNodesConfig, config_id]} > servers: {get_attr: [ComputePPC64LEServers, value]} > input_values: > # Note we have to use yaql to look up the first hostname/ip in the > # list because heat path based attributes operate on the attribute > # inside the ResourceGroup, not the exposed list ref discussion in > # https://bugs.launchpad.net/heat/+bug/1640488 > # The coalesce is needed because $.data is None during heat validation > bootstrap_nodeid: > yaql: > expression: coalesce($.data, []).first(null) > data: {get_attr: [ComputePPC64LE, hostname]} > bootstrap_nodeid_ip: > yaql: > expression: coalesce($.data, []).first(null) > data: {get_attr: [ComputePPC64LE, ip_address]} > > ComputePPC64LEAllNodesValidationDeployment: > type: OS::Heat::StructuredDeployments > depends_on: ComputePPC64LEAllNodesDeployment > properties: > name: ComputePPC64LEAllNodesValidationDeployment > config: {get_resource: AllNodesValidationConfig} > servers: {get_attr: [ComputePPC64LEServers, value]} > > ComputePPC64LEIpListMap: > type: OS::TripleO::Network::Ports::NetIpListMap > properties: > ControlPlaneIpList: {get_attr: [ComputePPC64LE, ip_address]} > StorageIpList: {get_attr: [ComputePPC64LE, storage_ip_address]} > StorageMgmtIpList: {get_attr: [ComputePPC64LE, storage_mgmt_ip_address]} > InternalApiIpList: {get_attr: [ComputePPC64LE, internal_api_ip_address]} > TenantIpList: {get_attr: [ComputePPC64LE, tenant_ip_address]} > ExternalIpList: {get_attr: [ComputePPC64LE, external_ip_address]} > ManagementIpList: {get_attr: [ComputePPC64LE, management_ip_address]} > EnabledServices: {get_attr: [ComputePPC64LEServiceNames, value]} > ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map_lower]} > ServiceHostnameList: {get_attr: [ComputePPC64LE, hostname]} > NetworkHostnameMap: {get_attr: [ComputePPC64LENetworkHostnameMap, value]} > > ComputePPC64LENetworkHostnameMap: > 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: [ComputePPC64LE, hostname_map]} > > ComputePPC64LE: > type: OS::Heat::ResourceGroup > depends_on: Networks > update_policy: > batch_create: > max_batch_size: {get_param: NodeCreateBatchSize} > properties: > count: {get_param: ComputePPC64LECount} > removal_policies: {get_param: ComputePPC64LERemovalPolicies} > resource_def: > type: OS::TripleO::ComputePPC64LE > properties: > CloudDomain: {get_param: CloudDomain} > ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]} > EndpointMap: {get_attr: [EndpointMapData, value]} > Hostname: > str_replace: > template: {get_param: ComputePPC64LEHostnameFormat} > 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% > ComputePPC64LESchedulerHints: > map_merge: > - {get_param: ComputePPC64LESchedulerHints} > ServiceConfigSettings: {get_attr: [ComputePPC64LEServiceConfigSettings, value]} > ServiceNames: {get_attr: [ComputePPC64LEServiceNames, value]} > MonitoringSubscriptions: {get_attr: [ComputePPC64LEServiceChainRoleData, value, monitoring_subscriptions]} > LoggingSources: {get_attr: [ComputePPC64LEServiceChainRoleData, value, logging_sources]} > LoggingGroups: {get_attr: [ComputePPC64LEServiceChainRoleData, value, logging_groups]} > ServiceMetadataSettings: {get_attr: [ComputePPC64LEServiceChainRoleData, value, service_metadata_settings]} > DeploymentServerBlacklistDict: {get_attr: [DeploymentServerBlacklistDict, value]} > RoleParameters: > map_merge: > - {'TunedProfileName': 'virtual-host'} > - get_param: ComputePPC64LEParameters > > # Resources generated for BlockStorage Role > BlockStorageServiceChain: > type: OS::TripleO::Services > properties: > Services: > get_param: BlockStorageServices > ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]} > ServiceData: > net_cidr_map: {get_attr: [NetCidrMapValue, value]} > EndpointMap: {get_attr: [EndpointMapData, value]} > DefaultPasswords: {get_attr: [DefaultPasswords, passwords]} > 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]} > > BlockStorageServiceConfigSettings: > type: OS::Heat::Value > properties: > type: json > value: > map_merge: > - get_attr: [BlockStorageServiceChainRoleData, value, config_settings] > > - get_attr: [ControllerServiceChainRoleData, value, global_config_settings] > > - get_attr: [ComputeServiceChainRoleData, value, global_config_settings] > > - get_attr: [ComputePPC64LEServiceChainRoleData, 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] > > # 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: [ComputeServiceChainRoleData, value, service_config_settings] > > - get_attr: [ComputePPC64LEServiceChainRoleData, 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] > > services: {get_attr: [BlockStorageServiceNames, value]} > > BlockStorageMergedConfigSettings: > type: OS::Heat::Value > properties: > type: json > value: > config_settings: {} > global_config_settings: {} > service_config_settings: {} > merged_config_settings: > map_merge: > - get_attr: [BlockStorageServiceConfigSettings, value] > - get_param: ExtraConfig > - get_param: BlockStorageExtraConfig > > # 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: coalesce($.data, []).where($ != null) > data: {get_attr: [BlockStorageServiceChainRoleData, value, service_names]} > > BlockStorageHostsDeployment: > type: OS::Heat::StructuredDeployments > properties: > name: BlockStorageHostsDeployment > config: {get_attr: [hostsConfig, config_id]} > servers: {get_attr: [BlockStorageServers, value]} > > BlockStorageSshKnownHostsDeployment: > type: OS::TripleO::Ssh::KnownHostsDeployment > properties: > name: BlockStorageSshKnownHostsDeployment > config: {get_resource: SshKnownHostsConfig} > servers: {get_attr: [BlockStorageServers, value]} > > BlockStorageAllNodesDeployment: > type: OS::TripleO::AllNodesDeployment > depends_on: > > - ControllerHostsDeployment > - ControllerSshKnownHostsDeployment > > - ComputeHostsDeployment > - ComputeSshKnownHostsDeployment > > - ComputePPC64LEHostsDeployment > - ComputePPC64LESshKnownHostsDeployment > > - BlockStorageHostsDeployment > - BlockStorageSshKnownHostsDeployment > > - ObjectStorageHostsDeployment > - ObjectStorageSshKnownHostsDeployment > > - CephStorageHostsDeployment > - CephStorageSshKnownHostsDeployment > > properties: > name: BlockStorageAllNodesDeployment > config: {get_attr: [allNodesConfig, config_id]} > servers: {get_attr: [BlockStorageServers, value]} > input_values: > # Note we have to use yaql to look up the first hostname/ip in the > # list because heat path based attributes operate on the attribute > # inside the ResourceGroup, not the exposed list ref discussion in > # https://bugs.launchpad.net/heat/+bug/1640488 > # The coalesce is needed because $.data is None during heat validation > bootstrap_nodeid: > yaql: > expression: coalesce($.data, []).first(null) > data: {get_attr: [BlockStorage, hostname]} > bootstrap_nodeid_ip: > yaql: > expression: coalesce($.data, []).first(null) > data: {get_attr: [BlockStorage, ip_address]} > > BlockStorageAllNodesValidationDeployment: > type: OS::Heat::StructuredDeployments > depends_on: BlockStorageAllNodesDeployment > properties: > name: BlockStorageAllNodesValidationDeployment > config: {get_resource: AllNodesValidationConfig} > servers: {get_attr: [BlockStorageServers, value]} > > 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]} > TenantIpList: {get_attr: [BlockStorage, tenant_ip_address]} > ExternalIpList: {get_attr: [BlockStorage, external_ip_address]} > ManagementIpList: {get_attr: [BlockStorage, management_ip_address]} > EnabledServices: {get_attr: [BlockStorageServiceNames, value]} > ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map_lower]} > 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]} > > 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} > resource_def: > type: OS::TripleO::BlockStorage > properties: > CloudDomain: {get_param: CloudDomain} > ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]} > 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} > ServiceConfigSettings: {get_attr: [BlockStorageServiceConfigSettings, value]} > ServiceNames: {get_attr: [BlockStorageServiceNames, value]} > MonitoringSubscriptions: {get_attr: [BlockStorageServiceChainRoleData, value, monitoring_subscriptions]} > LoggingSources: {get_attr: [BlockStorageServiceChainRoleData, value, logging_sources]} > LoggingGroups: {get_attr: [BlockStorageServiceChainRoleData, value, logging_groups]} > ServiceMetadataSettings: {get_attr: [BlockStorageServiceChainRoleData, value, service_metadata_settings]} > DeploymentServerBlacklistDict: {get_attr: [DeploymentServerBlacklistDict, value]} > RoleParameters: > map_merge: > - {} > - get_param: BlockStorageParameters > > # Resources generated for ObjectStorage Role > ObjectStorageServiceChain: > type: OS::TripleO::Services > properties: > Services: > get_param: ObjectStorageServices > ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]} > ServiceData: > net_cidr_map: {get_attr: [NetCidrMapValue, value]} > EndpointMap: {get_attr: [EndpointMapData, value]} > DefaultPasswords: {get_attr: [DefaultPasswords, passwords]} > 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]} > > ObjectStorageServiceConfigSettings: > type: OS::Heat::Value > properties: > type: json > value: > map_merge: > - get_attr: [ObjectStorageServiceChainRoleData, value, config_settings] > > - get_attr: [ControllerServiceChainRoleData, value, global_config_settings] > > - get_attr: [ComputeServiceChainRoleData, value, global_config_settings] > > - get_attr: [ComputePPC64LEServiceChainRoleData, 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] > > # 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: [ComputeServiceChainRoleData, value, service_config_settings] > > - get_attr: [ComputePPC64LEServiceChainRoleData, 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] > > services: {get_attr: [ObjectStorageServiceNames, value]} > > ObjectStorageMergedConfigSettings: > type: OS::Heat::Value > properties: > type: json > value: > config_settings: {} > global_config_settings: {} > service_config_settings: {} > merged_config_settings: > map_merge: > - get_attr: [ObjectStorageServiceConfigSettings, value] > - get_param: ExtraConfig > - get_param: ObjectStorageExtraConfig > > # 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: coalesce($.data, []).where($ != null) > data: {get_attr: [ObjectStorageServiceChainRoleData, value, service_names]} > > ObjectStorageHostsDeployment: > type: OS::Heat::StructuredDeployments > properties: > name: ObjectStorageHostsDeployment > config: {get_attr: [hostsConfig, config_id]} > servers: {get_attr: [ObjectStorageServers, value]} > > ObjectStorageSshKnownHostsDeployment: > type: OS::TripleO::Ssh::KnownHostsDeployment > properties: > name: ObjectStorageSshKnownHostsDeployment > config: {get_resource: SshKnownHostsConfig} > servers: {get_attr: [ObjectStorageServers, value]} > > ObjectStorageAllNodesDeployment: > type: OS::TripleO::AllNodesDeployment > depends_on: > > - ControllerHostsDeployment > - ControllerSshKnownHostsDeployment > > - ComputeHostsDeployment > - ComputeSshKnownHostsDeployment > > - ComputePPC64LEHostsDeployment > - ComputePPC64LESshKnownHostsDeployment > > - BlockStorageHostsDeployment > - BlockStorageSshKnownHostsDeployment > > - ObjectStorageHostsDeployment > - ObjectStorageSshKnownHostsDeployment > > - CephStorageHostsDeployment > - CephStorageSshKnownHostsDeployment > > properties: > name: ObjectStorageAllNodesDeployment > config: {get_attr: [allNodesConfig, config_id]} > servers: {get_attr: [ObjectStorageServers, value]} > input_values: > # Note we have to use yaql to look up the first hostname/ip in the > # list because heat path based attributes operate on the attribute > # inside the ResourceGroup, not the exposed list ref discussion in > # https://bugs.launchpad.net/heat/+bug/1640488 > # The coalesce is needed because $.data is None during heat validation > bootstrap_nodeid: > yaql: > expression: coalesce($.data, []).first(null) > data: {get_attr: [ObjectStorage, hostname]} > bootstrap_nodeid_ip: > yaql: > expression: coalesce($.data, []).first(null) > data: {get_attr: [ObjectStorage, ip_address]} > > ObjectStorageAllNodesValidationDeployment: > type: OS::Heat::StructuredDeployments > depends_on: ObjectStorageAllNodesDeployment > properties: > name: ObjectStorageAllNodesValidationDeployment > config: {get_resource: AllNodesValidationConfig} > servers: {get_attr: [ObjectStorageServers, value]} > > 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]} > TenantIpList: {get_attr: [ObjectStorage, tenant_ip_address]} > ExternalIpList: {get_attr: [ObjectStorage, external_ip_address]} > ManagementIpList: {get_attr: [ObjectStorage, management_ip_address]} > EnabledServices: {get_attr: [ObjectStorageServiceNames, value]} > ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map_lower]} > 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]} > > 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} > resource_def: > type: OS::TripleO::ObjectStorage > properties: > CloudDomain: {get_param: CloudDomain} > ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]} > 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} > ServiceConfigSettings: {get_attr: [ObjectStorageServiceConfigSettings, value]} > ServiceNames: {get_attr: [ObjectStorageServiceNames, value]} > MonitoringSubscriptions: {get_attr: [ObjectStorageServiceChainRoleData, value, monitoring_subscriptions]} > LoggingSources: {get_attr: [ObjectStorageServiceChainRoleData, value, logging_sources]} > LoggingGroups: {get_attr: [ObjectStorageServiceChainRoleData, value, logging_groups]} > ServiceMetadataSettings: {get_attr: [ObjectStorageServiceChainRoleData, value, service_metadata_settings]} > DeploymentServerBlacklistDict: {get_attr: [DeploymentServerBlacklistDict, value]} > RoleParameters: > map_merge: > - {} > - get_param: ObjectStorageParameters > > # Resources generated for CephStorage Role > CephStorageServiceChain: > type: OS::TripleO::Services > properties: > Services: > get_param: CephStorageServices > ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]} > ServiceData: > net_cidr_map: {get_attr: [NetCidrMapValue, value]} > EndpointMap: {get_attr: [EndpointMapData, value]} > DefaultPasswords: {get_attr: [DefaultPasswords, passwords]} > 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]} > > CephStorageServiceConfigSettings: > type: OS::Heat::Value > properties: > type: json > value: > map_merge: > - get_attr: [CephStorageServiceChainRoleData, value, config_settings] > > - get_attr: [ControllerServiceChainRoleData, value, global_config_settings] > > - get_attr: [ComputeServiceChainRoleData, value, global_config_settings] > > - get_attr: [ComputePPC64LEServiceChainRoleData, 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] > > # 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: [ComputeServiceChainRoleData, value, service_config_settings] > > - get_attr: [ComputePPC64LEServiceChainRoleData, 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] > > services: {get_attr: [CephStorageServiceNames, value]} > > CephStorageMergedConfigSettings: > type: OS::Heat::Value > properties: > type: json > value: > config_settings: {} > global_config_settings: {} > service_config_settings: {} > merged_config_settings: > map_merge: > - get_attr: [CephStorageServiceConfigSettings, value] > - get_param: ExtraConfig > - get_param: CephStorageExtraConfig > > # 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: coalesce($.data, []).where($ != null) > data: {get_attr: [CephStorageServiceChainRoleData, value, service_names]} > > CephStorageHostsDeployment: > type: OS::Heat::StructuredDeployments > properties: > name: CephStorageHostsDeployment > config: {get_attr: [hostsConfig, config_id]} > servers: {get_attr: [CephStorageServers, value]} > > CephStorageSshKnownHostsDeployment: > type: OS::TripleO::Ssh::KnownHostsDeployment > properties: > name: CephStorageSshKnownHostsDeployment > config: {get_resource: SshKnownHostsConfig} > servers: {get_attr: [CephStorageServers, value]} > > CephStorageAllNodesDeployment: > type: OS::TripleO::AllNodesDeployment > depends_on: > > - ControllerHostsDeployment > - ControllerSshKnownHostsDeployment > > - ComputeHostsDeployment > - ComputeSshKnownHostsDeployment > > - ComputePPC64LEHostsDeployment > - ComputePPC64LESshKnownHostsDeployment > > - BlockStorageHostsDeployment > - BlockStorageSshKnownHostsDeployment > > - ObjectStorageHostsDeployment > - ObjectStorageSshKnownHostsDeployment > > - CephStorageHostsDeployment > - CephStorageSshKnownHostsDeployment > > properties: > name: CephStorageAllNodesDeployment > config: {get_attr: [allNodesConfig, config_id]} > servers: {get_attr: [CephStorageServers, value]} > input_values: > # Note we have to use yaql to look up the first hostname/ip in the > # list because heat path based attributes operate on the attribute > # inside the ResourceGroup, not the exposed list ref discussion in > # https://bugs.launchpad.net/heat/+bug/1640488 > # The coalesce is needed because $.data is None during heat validation > bootstrap_nodeid: > yaql: > expression: coalesce($.data, []).first(null) > data: {get_attr: [CephStorage, hostname]} > bootstrap_nodeid_ip: > yaql: > expression: coalesce($.data, []).first(null) > data: {get_attr: [CephStorage, ip_address]} > > CephStorageAllNodesValidationDeployment: > type: OS::Heat::StructuredDeployments > depends_on: CephStorageAllNodesDeployment > properties: > name: CephStorageAllNodesValidationDeployment > config: {get_resource: AllNodesValidationConfig} > servers: {get_attr: [CephStorageServers, value]} > > 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]} > InternalApiIpList: {get_attr: [CephStorage, internal_api_ip_address]} > TenantIpList: {get_attr: [CephStorage, tenant_ip_address]} > ExternalIpList: {get_attr: [CephStorage, external_ip_address]} > ManagementIpList: {get_attr: [CephStorage, management_ip_address]} > EnabledServices: {get_attr: [CephStorageServiceNames, value]} > ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map_lower]} > 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]} > > 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} > resource_def: > type: OS::TripleO::CephStorage > properties: > CloudDomain: {get_param: CloudDomain} > ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]} > 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} > ServiceConfigSettings: {get_attr: [CephStorageServiceConfigSettings, value]} > ServiceNames: {get_attr: [CephStorageServiceNames, value]} > MonitoringSubscriptions: {get_attr: [CephStorageServiceChainRoleData, value, monitoring_subscriptions]} > LoggingSources: {get_attr: [CephStorageServiceChainRoleData, value, logging_sources]} > LoggingGroups: {get_attr: [CephStorageServiceChainRoleData, value, logging_groups]} > ServiceMetadataSettings: {get_attr: [CephStorageServiceChainRoleData, value, service_metadata_settings]} > DeploymentServerBlacklistDict: {get_attr: [DeploymentServerBlacklistDict, value]} > RoleParameters: > map_merge: > - {} > - get_param: CephStorageParameters > > > > 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]} > > 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]} > > ComputePPC64LEServers: > type: OS::Heat::Value > depends_on: ComputePPC64LE > 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: [ComputePPC64LE, 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]} > > > # 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]} > > Compute: {get_attr: [Compute, nova_server_resource]} > > ComputePPC64LE: {get_attr: [ComputePPC64LE, nova_server_resource]} > > BlockStorage: {get_attr: [BlockStorage, nova_server_resource]} > > ObjectStorage: {get_attr: [ObjectStorage, nova_server_resource]} > > CephStorage: {get_attr: [CephStorage, nova_server_resource]} > > bootstrap_server_id: > yaql: > expression: coalesce($.data, []).first(null) > data: {get_attr: [Controller, 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} > > hostsConfig: > type: OS::TripleO::Hosts::SoftwareConfig > properties: > hosts: > list_join: > - "\n" > - - if: > - add_vips_to_etc_hosts > - {get_attr: [VipHosts, value]} > - '' > - > > - list_join: > - "" > - {get_attr: [Controller, hosts_entry]} > > - list_join: > - "" > - {get_attr: [Compute, hosts_entry]} > > - list_join: > - "" > - {get_attr: [ComputePPC64LE, hosts_entry]} > > - list_join: > - "" > - {get_attr: [BlockStorage, hosts_entry]} > > - list_join: > - "" > - {get_attr: [ObjectStorage, hosts_entry]} > > - list_join: > - "" > - {get_attr: [CephStorage, hosts_entry]} > > - {get_param: ExtraHostFileEntries} > > allNodesConfig: > type: OS::TripleO::AllNodes::SoftwareConfig > properties: > 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} > enabled_services: > list_join: > - ',' > > - {get_attr: [ControllerServiceNames, value]} > > - {get_attr: [ComputeServiceNames, value]} > > - {get_attr: [ComputePPC64LEServiceNames, value]} > > - {get_attr: [BlockStorageServiceNames, value]} > > - {get_attr: [ObjectStorageServiceNames, value]} > > - {get_attr: [CephStorageServiceNames, value]} > > cellv2_discovery_hosts: > # Collects compute hostnames for all roles with a service that requires cellv2 host discovery > list_join: > - ',' > - yaql: > expression: coalesce($.data.e.zip($.data.l).where($[0]).select($[1]).flatten(), []) > data: > e: # list of true/fails for whether cellsv2 host discovery is required for the roles > - {get_attr: [ControllerServiceChainRoleData, value, cellv2_discovery]} > - {get_attr: [ComputeServiceChainRoleData, value, cellv2_discovery]} > - {get_attr: [ComputePPC64LEServiceChainRoleData, value, cellv2_discovery]} > - {get_attr: [BlockStorageServiceChainRoleData, value, cellv2_discovery]} > - {get_attr: [ObjectStorageServiceChainRoleData, value, cellv2_discovery]} > - {get_attr: [CephStorageServiceChainRoleData, value, cellv2_discovery]} > l: # list of list of compute hostnames for the roles > - {get_attr: [Controller, hostname_map, canonical]} > - {get_attr: [Compute, hostname_map, canonical]} > - {get_attr: [ComputePPC64LE, hostname_map, canonical]} > - {get_attr: [BlockStorage, hostname_map, canonical]} > - {get_attr: [ObjectStorage, hostname_map, canonical]} > - {get_attr: [CephStorage, hostname_map, canonical]} > controller_ips: {get_attr: [Controller, ip_address]} > controller_names: {get_attr: [Controller, hostname]} > service_ips: > # 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 when a service > # is deployed on more than one role > yaql: > expression: dict($.data.l.where($ != null).selectMany($.items()).groupBy($[0], $[1]).select([$[0], $[1].flatten()])) > data: > l: > > - {get_attr: [ControllerIpListMap, service_ips]} > > - {get_attr: [ComputeIpListMap, service_ips]} > > - {get_attr: [ComputePPC64LEIpListMap, service_ips]} > > - {get_attr: [BlockStorageIpListMap, service_ips]} > > - {get_attr: [ObjectStorageIpListMap, service_ips]} > > - {get_attr: [CephStorageIpListMap, service_ips]} > > service_node_names: > yaql: > expression: dict($.data.l.where($ != null).selectMany($.items()).groupBy($[0], $[1]).select([$[0], $[1].flatten()])) > data: > l: > > - {get_attr: [ControllerIpListMap, service_hostnames]} > > - {get_attr: [ComputeIpListMap, service_hostnames]} > > - {get_attr: [ComputePPC64LEIpListMap, service_hostnames]} > > - {get_attr: [BlockStorageIpListMap, service_hostnames]} > > - {get_attr: [ObjectStorageIpListMap, service_hostnames]} > > - {get_attr: [CephStorageIpListMap, service_hostnames]} > > short_service_node_names: > yaql: > expression: dict($.data.l.where($ != null).selectMany($.items()).groupBy($[0], $[1]).select([$[0], $[1].flatten()])) > data: > l: > > - {get_attr: [ControllerIpListMap, short_service_hostnames]} > > - {get_attr: [ComputeIpListMap, short_service_hostnames]} > > - {get_attr: [ComputePPC64LEIpListMap, short_service_hostnames]} > > - {get_attr: [BlockStorageIpListMap, short_service_hostnames]} > > - {get_attr: [ObjectStorageIpListMap, short_service_hostnames]} > > - {get_attr: [CephStorageIpListMap, short_service_hostnames]} > > short_service_bootstrap_node: > yaql: > expression: dict($.data.l.where($ != null).selectMany($.items()).groupBy($[0], $[1]).select([$[0], $[1].flatten().first()])) > data: > l: > > - {get_attr: [ControllerIpListMap, short_service_bootstrap_hostnames]} > > - {get_attr: [ComputeIpListMap, short_service_bootstrap_hostnames]} > > - {get_attr: [ComputePPC64LEIpListMap, short_service_bootstrap_hostnames]} > > - {get_attr: [BlockStorageIpListMap, short_service_bootstrap_hostnames]} > > - {get_attr: [ObjectStorageIpListMap, short_service_bootstrap_hostnames]} > > - {get_attr: [CephStorageIpListMap, short_service_bootstrap_hostnames]} > > NetVipMap: {get_attr: [VipMap, net_ip_map]} > RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]} > ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map_lower]} > DeployIdentifier: {get_param: DeployIdentifier} > UpdateIdentifier: {get_param: UpdateIdentifier} > > MysqlRootPassword: > type: OS::TripleO::RandomString > properties: > length: 10 > > RabbitCookie: > type: OS::TripleO::RandomString > properties: > length: 20 > salt: {get_param: RabbitCookieSalt} > > DefaultPasswords: > type: OS::TripleO::DefaultPasswords > properties: > DefaultMysqlRootPassword: {get_attr: [MysqlRootPassword, value]} > DefaultRabbitCookie: {get_attr: [RabbitCookie, value]} > DefaultHeatAuthEncryptionKey: {get_attr: [HeatAuthEncryptionKey, value]} > DefaultPcsdPassword: {get_attr: [PcsdPassword, value]} > DefaultHorizonSecret: {get_attr: [HorizonSecret, value]} > > # creates the network architecture > Networks: > type: OS::TripleO::Network > > ControlVirtualIP: > type: OS::TripleO::Network::Ports::ControlPlaneVipPort > depends_on: Networks > properties: > name: control_virtual_ip > network: {get_param: NeutronControlPlaneID} > fixed_ips: > if: > - control_fixed_ip_not_set > - [{subnet: {get_param: ControlPlaneSubnet}}] > - get_param: ControlFixedIPs > replacement_policy: AUTO > > RedisVirtualIP: > depends_on: Networks > type: OS::TripleO::Network::Ports::RedisVipPort > properties: > ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} > ControlPlaneNetwork: {get_param: NeutronControlPlaneID} > PortName: redis_virtual_ip > NetworkName: {get_attr: [ServiceNetMap, service_net_map, RedisNetwork]} > ServiceName: redis > FixedIPs: {get_param: RedisVirtualFixedIPs} > StorageVirtualIP: > depends_on: Networks > type: OS::TripleO::Network::Ports::StorageVipPort > properties: > ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} > PortName: storage_virtual_ip > FixedIPs: {get_param: StorageVirtualFixedIPs} > StorageMgmtVirtualIP: > depends_on: Networks > type: OS::TripleO::Network::Ports::StorageMgmtVipPort > properties: > ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} > PortName: storage_mgmt_virtual_ip > FixedIPs: {get_param: StorageMgmtVirtualFixedIPs} > InternalApiVirtualIP: > depends_on: Networks > type: OS::TripleO::Network::Ports::InternalApiVipPort > properties: > ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} > PortName: internal_api_virtual_ip > FixedIPs: {get_param: InternalApiVirtualFixedIPs} > # The public VIP is on the External net, falls back to ctlplane > PublicVirtualIP: > depends_on: Networks > type: OS::TripleO::Network::Ports::ExternalVipPort > properties: > ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} > ControlPlaneNetwork: {get_param: NeutronControlPlaneID} > PortName: public_virtual_ip > FixedIPs: {get_param: PublicVirtualFixedIPs} > > VipMap: > type: OS::TripleO::Network::Ports::NetVipMap > properties: > ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} > 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 > > # All Nodes Validations > AllNodesValidationConfig: > type: OS::TripleO::AllNodes::Validation > properties: > PingTestIps: > list_join: > - ' ' > - > - 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]} > - yaql: > expression: coalesce($.data, []).first(null) > data: {get_attr: [Controller, management_ip_address]} > > UpdateWorkflow: > type: OS::TripleO::Tasks::UpdateWorkflow > depends_on: > > - ControllerAllNodesDeployment > > - ComputeAllNodesDeployment > > - ComputePPC64LEAllNodesDeployment > > - BlockStorageAllNodesDeployment > > - ObjectStorageAllNodesDeployment > > - CephStorageAllNodesDeployment > > properties: > servers: > > Controller: {get_attr: [ControllerServers, value]} > > Compute: {get_attr: [ComputeServers, value]} > > ComputePPC64LE: {get_attr: [ComputePPC64LEServers, value]} > > BlockStorage: {get_attr: [BlockStorageServers, value]} > > ObjectStorage: {get_attr: [ObjectStorageServers, value]} > > CephStorage: {get_attr: [CephStorageServers, value]} > > input_values: > deploy_identifier: {get_param: DeployIdentifier} > update_identifier: {get_param: UpdateIdentifier} > > # 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 > depends_on: > - UpdateWorkflow > > - ControllerAllNodesValidationDeployment > > - ComputeAllNodesValidationDeployment > > - ComputePPC64LEAllNodesValidationDeployment > > - BlockStorageAllNodesValidationDeployment > > - ObjectStorageAllNodesValidationDeployment > > - CephStorageAllNodesValidationDeployment > > properties: > servers: > > Controller: {get_attr: [ControllerServers, value]} > > Compute: {get_attr: [ComputeServers, value]} > > ComputePPC64LE: {get_attr: [ComputePPC64LEServers, value]} > > BlockStorage: {get_attr: [BlockStorageServers, value]} > > ObjectStorage: {get_attr: [ObjectStorageServers, value]} > > CephStorage: {get_attr: [CephStorageServers, value]} > > > BlacklistedIpAddresses: > type: OS::Heat::Value > properties: > value: > list_concat: > > - {get_attr: [Controller, blacklist_ip_address]} > > - {get_attr: [Compute, blacklist_ip_address]} > > - {get_attr: [ComputePPC64LE, blacklist_ip_address]} > > - {get_attr: [BlockStorage, blacklist_ip_address]} > > - {get_attr: [ObjectStorage, blacklist_ip_address]} > > - {get_attr: [CephStorage, blacklist_ip_address]} > > > BlacklistedHostnames: > type: OS::Heat::Value > properties: > value: > list_concat: > > - {get_attr: [Controller, blacklist_hostname]} > > - {get_attr: [Compute, blacklist_hostname]} > > - {get_attr: [ComputePPC64LE, blacklist_hostname]} > > - {get_attr: [BlockStorage, blacklist_hostname]} > > - {get_attr: [ObjectStorage, blacklist_hostname]} > > - {get_attr: [CephStorage, blacklist_hostname]} > > > # Post deployment steps for all roles > AllNodesDeploySteps: > type: OS::TripleO::PostDeploySteps > depends_on: > - AllNodesExtraConfig > > - ControllerAllNodesDeployment > > - ComputeAllNodesDeployment > > - ComputePPC64LEAllNodesDeployment > > - BlockStorageAllNodesDeployment > > - ObjectStorageAllNodesDeployment > > - CephStorageAllNodesDeployment > > properties: > servers: > > Controller: {get_attr: [ControllerServers, value]} > > Compute: {get_attr: [ComputeServers, value]} > > ComputePPC64LE: {get_attr: [ComputePPC64LEServers, value]} > > BlockStorage: {get_attr: [BlockStorageServers, value]} > > ObjectStorage: {get_attr: [ObjectStorageServers, value]} > > CephStorage: {get_attr: [CephStorageServers, value]} > > stack_name: {get_param: 'OS::stack_name'} > EndpointMap: {get_attr: [EndpointMapData, value]} > ctlplane_service_ips: > # 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 when a service > # is deployed on more than one role > yaql: > expression: dict($.data.l.where($ != null).selectMany($.items()).groupBy($[0], $[1]).select([$[0], $[1].flatten()])) > data: > l: > > - {get_attr: [ControllerIpListMap, ctlplane_service_ips]} > > - {get_attr: [ComputeIpListMap, ctlplane_service_ips]} > > - {get_attr: [ComputePPC64LEIpListMap, ctlplane_service_ips]} > > - {get_attr: [BlockStorageIpListMap, ctlplane_service_ips]} > > - {get_attr: [ObjectStorageIpListMap, ctlplane_service_ips]} > > - {get_attr: [CephStorageIpListMap, ctlplane_service_ips]} > > role_data: > > Controller: > map_merge: > - {get_attr: [ControllerServiceChainRoleData, value]} > - {get_attr: [ControllerMergedConfigSettings, value]} > > Compute: > map_merge: > - {get_attr: [ComputeServiceChainRoleData, value]} > - {get_attr: [ComputeMergedConfigSettings, value]} > > ComputePPC64LE: > map_merge: > - {get_attr: [ComputePPC64LEServiceChainRoleData, value]} > - {get_attr: [ComputePPC64LEMergedConfigSettings, value]} > > BlockStorage: > map_merge: > - {get_attr: [BlockStorageServiceChainRoleData, value]} > - {get_attr: [BlockStorageMergedConfigSettings, value]} > > ObjectStorage: > map_merge: > - {get_attr: [ObjectStorageServiceChainRoleData, value]} > - {get_attr: [ObjectStorageMergedConfigSettings, value]} > > CephStorage: > map_merge: > - {get_attr: [CephStorageServiceChainRoleData, value]} > - {get_attr: [CephStorageMergedConfigSettings, value]} > > blacklisted_ip_addresses: {get_attr: [BlacklistedIpAddresses, value]} > blacklisted_hostnames: {get_attr: [BlacklistedHostnames, value]} > ssh_known_hosts_hostnames: {get_attr: [SshKnownHostsHostnames, value]} > > ServerOsCollectConfigData: > type: OS::Heat::Value > properties: > type: json > value: > > Controller: {get_attr: [Controller, attributes, os_collect_config]} > > Compute: {get_attr: [Compute, attributes, os_collect_config]} > > ComputePPC64LE: {get_attr: [ComputePPC64LE, attributes, os_collect_config]} > > BlockStorage: {get_attr: [BlockStorage, attributes, os_collect_config]} > > ObjectStorage: {get_attr: [ObjectStorage, attributes, os_collect_config]} > > CephStorage: {get_attr: [CephStorage, attributes, os_collect_config]} > > > DeployedServerEnvironment: > type: OS::TripleO::DeployedServerEnvironment > properties: > RoleCounts: > > ControllerDeployedServerCount: {get_param: ControllerCount} > > ComputeDeployedServerCount: {get_param: ComputeCount} > > ComputePPC64LEDeployedServerCount: {get_param: ComputePPC64LECount} > > BlockStorageDeployedServerCount: {get_param: BlockStorageCount} > > ObjectStorageDeployedServerCount: {get_param: ObjectStorageCount} > > CephStorageDeployedServerCount: {get_param: CephStorageCount} > > VipMap: > map_merge: > - {get_attr: [VipMap, net_ip_map]} > - redis: {get_attr: [RedisVirtualIP, ip_address]} > DeployedServerPortMap: > map_merge: > list_concat: > > - {get_attr: [Controller, deployed_server_port_map]} > > - {get_attr: [Compute, deployed_server_port_map]} > > - {get_attr: [ComputePPC64LE, deployed_server_port_map]} > > - {get_attr: [BlockStorage, deployed_server_port_map]} > > - {get_attr: [ObjectStorage, deployed_server_port_map]} > > - {get_attr: [CephStorage, deployed_server_port_map]} > > DeployedServerDeploymentSwiftDataMap: > map_merge: > list_concat: > > - {get_attr: [Controller, deployed_server_deployment_swift_data_map]} > > - {get_attr: [Compute, deployed_server_deployment_swift_data_map]} > > - {get_attr: [ComputePPC64LE, deployed_server_deployment_swift_data_map]} > > - {get_attr: [BlockStorage, deployed_server_deployment_swift_data_map]} > > - {get_attr: [ObjectStorage, deployed_server_deployment_swift_data_map]} > > - {get_attr: [CephStorage, deployed_server_deployment_swift_data_map]} > > DefaultRouteIp: > str_split: > - ':' > - str_split: > - '/' > - {get_attr: [ServerOsCollectConfigData, value, Controller, '0', request, metadata_url]} > - 2 > - 0 > >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]} > 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_join: > - "\n" > - - {get_attr: [hostsConfig, hosts_entries]} > - - {get_attr: [VipHosts, value]} > EnabledServices: > description: The services enabled on each role > value: > > Controller: {get_attr: [ControllerServiceNames, value]} > > Compute: {get_attr: [ComputeServiceNames, value]} > > ComputePPC64LE: {get_attr: [ComputePPC64LEServiceNames, value]} > > BlockStorage: {get_attr: [BlockStorageServiceNames, value]} > > ObjectStorage: {get_attr: [ObjectStorageServiceNames, value]} > > CephStorage: {get_attr: [CephStorageServiceNames, value]} > > RoleData: > description: The configuration data associated with each role > value: > > Controller: > map_merge: > - {get_attr: [ControllerServiceChainRoleData, value]} > - {get_attr: [ControllerMergedConfigSettings, value]} > > Compute: > map_merge: > - {get_attr: [ComputeServiceChainRoleData, value]} > - {get_attr: [ComputeMergedConfigSettings, value]} > > ComputePPC64LE: > map_merge: > - {get_attr: [ComputePPC64LEServiceChainRoleData, value]} > - {get_attr: [ComputePPC64LEMergedConfigSettings, value]} > > BlockStorage: > map_merge: > - {get_attr: [BlockStorageServiceChainRoleData, value]} > - {get_attr: [BlockStorageMergedConfigSettings, value]} > > ObjectStorage: > map_merge: > - {get_attr: [ObjectStorageServiceChainRoleData, value]} > - {get_attr: [ObjectStorageMergedConfigSettings, value]} > > CephStorage: > map_merge: > - {get_attr: [CephStorageServiceChainRoleData, value]} > - {get_attr: [CephStorageMergedConfigSettings, 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]} > > Compute: {get_attr: [ComputeIpListMap, net_ip_map]} > > ComputePPC64LE: {get_attr: [ComputePPC64LEIpListMap, net_ip_map]} > > BlockStorage: {get_attr: [BlockStorageIpListMap, net_ip_map]} > > ObjectStorage: {get_attr: [ObjectStorageIpListMap, net_ip_map]} > > CephStorage: {get_attr: [CephStorageIpListMap, net_ip_map]} > > RoleNetHostnameMap: > description: Mapping of each network to a list of hostnames for each role > value: > > Controller: {get_attr: [ControllerNetworkHostnameMap, value]} > > Compute: {get_attr: [ComputeNetworkHostnameMap, value]} > > ComputePPC64LE: {get_attr: [ComputePPC64LENetworkHostnameMap, value]} > > BlockStorage: {get_attr: [BlockStorageNetworkHostnameMap, value]} > > ObjectStorage: {get_attr: [ObjectStorageNetworkHostnameMap, value]} > > CephStorage: {get_attr: [CephStorageNetworkHostnameMap, value]} > > RoleTags: > description: Tags for each role, as defined in roles_data.yaml > value: > Controller: ['primary', 'controller'] > Compute: [] > ComputePPC64LE: [] > BlockStorage: [] > ObjectStorage: [] > CephStorage: [] > ServerOsCollectConfigData: > description: The os-collect-config configuration associated with each server resource > value: {get_attr: [ServerOsCollectConfigData, value]} > VipMap: > description: Mapping of each network to VIP addresses. Also includes the Redis VIP. > value: > map_merge: > - {get_attr: [VipMap, net_ip_map]} > - redis: {get_attr: [RedisVirtualIP, ip_address]} > ServerIdData: > description: Mapping of each role to a list of nova server IDs and the bootstrap ID > value: {get_attr: [ServerIdMap, value]} > DeployedServerEnvironment: > description: > Environment data that can be used as input into the services stack when > using split-stack. > value: {get_attr: [DeployedServerEnvironment, deployed_server_environment]}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 1611953
:
1472889
|
1472890
|
1472891
|
1473232
| 1473233 |
1473234