Move nova's kestone::auth parameters to API profile
[apex-tripleo-heat-templates.git] / puppet / controller.yaml
1 heat_template_version: 2016-04-08
2
3 description: >
4   OpenStack controller node configured by Puppet.
5
6 parameters:
7   AdminPassword:
8     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
9     type: string
10     hidden: true
11   AodhPassword:
12     description: The password for the aodh services.
13     type: string
14     hidden: true
15   controllerExtraConfig:
16     default: {}
17     description: |
18       Deprecated. Use ControllerExtraConfig via parameter_defaults instead.
19     type: json
20   ControllerExtraConfig:
21     default: {}
22     description: |
23       Controller specific hiera configuration data to inject into the cluster.
24     type: json
25   ControllerIPs:
26     default: {}
27     description: >
28       A network mapped list of IPs to assign to Controllers in the following form:
29       {
30         "internal_api": ["a.b.c.d", "e.f.g.h"],
31         ...
32       }
33     type: json
34   ControlVirtualInterface:
35     default: 'br-ex'
36     description: Interface where virtual ip will be assigned.
37     type: string
38   CorosyncIPv6:
39     default: false
40     description: Enable IPv6 in Corosync
41     type: boolean
42   Debug:
43     default: ''
44     description: Set to True to enable debugging on all services.
45     type: string
46   EnableFencing:
47     default: false
48     description: Whether to enable fencing in Pacemaker or not.
49     type: boolean
50   EnableGalera:
51     default: true
52     description: Whether to use Galera instead of regular MariaDB.
53     type: boolean
54   EnableLoadBalancer:
55     default: true
56     description: Whether to deploy a LoadBalancer on the Controller
57     type: boolean
58   ExtraConfig:
59     default: {}
60     description: |
61       Additional hieradata to inject into the cluster, note that
62       ControllerExtraConfig takes precedence over ExtraConfig.
63     type: json
64   FencingConfig:
65     default: {}
66     description: |
67       Pacemaker fencing configuration. The JSON should have
68       the following structure:
69         {
70           "devices": [
71             {
72               "agent": "AGENT_NAME",
73               "host_mac": "HOST_MAC_ADDRESS",
74               "params": {"PARAM_NAME": "PARAM_VALUE"}
75             }
76           ]
77         }
78       For instance:
79         {
80           "devices": [
81             {
82               "agent": "fence_xvm",
83               "host_mac": "52:54:00:aa:bb:cc",
84               "params": {
85                 "multicast_address": "225.0.0.12",
86                 "port": "baremetal_0",
87                 "manage_fw": true,
88                 "manage_key_file": true,
89                 "key_file": "/etc/fence_xvm.key",
90                 "key_file_password": "abcdef"
91               }
92             }
93           ]
94         }
95     type: json
96   Flavor:
97     description: Flavor for control nodes to request when deploying.
98     type: string
99     constraints:
100       - custom_constraint: nova.flavor
101   HAProxyStatsPassword:
102     description: Password for HAProxy stats endpoint
103     type: string
104   HAProxyStatsUser:
105     description: User for HAProxy stats endpoint
106     default: admin
107     type: string
108   HAProxySyslogAddress:
109     default: /dev/log
110     description: Syslog address where HAproxy will send its log
111     type: string
112   HeatAuthEncryptionKey:
113     description: Auth encryption key for heat-engine
114     type: string
115     hidden: true
116   HorizonSecret:
117     description: Secret key for Django
118     type: string
119     hidden: true
120   controllerImage:
121     type: string
122     default: overcloud-full
123     constraints:
124       - custom_constraint: glance.image
125   ImageUpdatePolicy:
126     default: 'REBUILD_PRESERVE_EPHEMERAL'
127     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
128     type: string
129   InstanceNameTemplate:
130     default: 'instance-%08x'
131     description: Template string to be used to generate instance names
132     type: string
133   KeyName:
134     default: default
135     description: Name of an existing Nova key pair to enable SSH access to the instances
136     type: string
137     constraints:
138       - custom_constraint: nova.keypair
139   KeystoneRegion:
140     type: string
141     default: 'regionOne'
142     description: Keystone region for endpoint
143   ManageFirewall:
144     default: false
145     description: Whether to manage IPtables rules.
146     type: boolean
147   MemcachedIPv6:
148     default: false
149     description: Enable IPv6 features in Memcached.
150     type: boolean
151   PurgeFirewallRules:
152     default: false
153     description: Whether IPtables rules should be purged before setting up the new ones.
154     type: boolean
155   MysqlClusterUniquePart:
156     description: A unique identifier of the MySQL cluster the controller is in.
157     type: string
158     default: 'unset'  # Has to be here because of the ignored empty value bug
159     # Drop the validation: https://bugs.launchpad.net/tripleo/+bug/1405446
160     # constraints:
161     # - length: {min: 4, max: 10}
162   MysqlInnodbBufferPoolSize:
163     description: >
164         Specifies the size of the buffer pool in megabytes. Setting to
165         zero should be interpreted as "no value" and will defer to the
166         lower level default.
167     type: number
168     default: 0
169   MysqlMaxConnections:
170     description: Configures MySQL max_connections config setting
171     type: number
172     default: 4096
173   MysqlClustercheckPassword:
174     type: string
175     hidden: true
176   MysqlRootPassword:
177     type: string
178     hidden: true
179     default: ''  # Has to be here because of the ignored empty value bug
180   NeutronMetadataProxySharedSecret:
181     description: Shared secret to prevent spoofing
182     type: string
183     hidden: true
184   NeutronPassword:
185     description: The password for the neutron service and db account, used by neutron agents.
186     type: string
187     hidden: true
188   NeutronPublicInterface:
189     default: nic1
190     description: What interface to bridge onto br-ex for network nodes.
191     type: string
192   NovaEnableDBPurge:
193     default: true
194     description: |
195         Whether to create cron job for purging soft deleted rows in Nova database.
196     type: boolean
197   NovaIPv6:
198     default: false
199     description: Enable IPv6 features in Nova
200     type: boolean
201   NovaPassword:
202     description: The password for the nova service and db account, used by nova-api.
203     type: string
204     hidden: true
205   PcsdPassword:
206     type: string
207     description: The password for the 'pcsd' user.
208     hidden: true
209   PublicVirtualInterface:
210     default: 'br-ex'
211     description: >
212         Specifies the interface where the public-facing virtual ip will be assigned.
213         This should be int_public when a VLAN is being used.
214     type: string
215   RabbitCookie:
216     type: string
217     default: ''  # Has to be here because of the ignored empty value bug
218     hidden: true
219   RabbitPassword:
220     description: The password for RabbitMQ
221     type: string
222     hidden: true
223   RabbitUserName:
224     default: guest
225     description: The username for RabbitMQ
226     type: string
227   RabbitClientUseSSL:
228     default: false
229     description: >
230         Rabbit client subscriber parameter to specify
231         an SSL connection to the RabbitMQ host.
232     type: string
233   RabbitClientPort:
234     default: 5672
235     description: Set rabbit subscriber port, change this if using SSL
236     type: number
237   RedisPassword:
238     description: The password for Redis
239     type: string
240     hidden: true
241   RedisVirtualIP:
242     type: string
243     default: ''  # Has to be here because of the ignored empty value bug
244   RedisVirtualIPUri:
245     type: string
246     default: ''  # Has to be here because of the ignored empty value bug
247     description: An IP address which is wrapped in brackets in case of IPv6
248   SwiftHashSuffix:
249     description: A random string to be used as a salt when hashing to determine mappings
250       in the ring.
251     hidden: true
252     type: string
253   UpgradeLevelNovaCompute:
254     type: string
255     description: Nova Compute upgrade level
256     default: ''
257   MysqlVirtualIP:
258     type: string
259     default: ''
260   EnablePackageInstall:
261     default: 'false'
262     description: Set to true to enable package installation via Puppet
263     type: boolean
264   ServiceNetMap:
265     default: {}
266     description: Mapping of service_name -> network name. Typically set
267                  via parameter_defaults in the resource registry.
268     type: json
269   EndpointMap:
270     default: {}
271     description: Mapping of service endpoint -> protocol. Typically set
272                  via parameter_defaults in the resource registry.
273     type: json
274   UpdateIdentifier:
275     default: ''
276     type: string
277     description: >
278       Setting to a previously unused value during stack-update will trigger
279       package update on all nodes
280   Hostname:
281     type: string
282     default: '' # Defaults to Heat created hostname
283   HostnameMap:
284     type: json
285     default: {}
286     description: Optional mapping to override hostnames
287   NetworkDeploymentActions:
288     type: comma_delimited_list
289     description: >
290       Heat action when to apply network configuration changes
291     default: ['CREATE']
292   NodeIndex:
293     type: number
294     default: 0
295   SoftwareConfigTransport:
296     default: POLL_SERVER_CFN
297     description: |
298       How the server should receive the metadata required for software configuration.
299     type: string
300     constraints:
301     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
302   CloudDomain:
303     default: ''
304     type: string
305     description: >
306       The DNS domain used for the hosts. This should match the dhcp_domain
307       configured in the Undercloud neutron. Defaults to localdomain.
308   ServerMetadata:
309     default: {}
310     description: >
311       Extra properties or metadata passed to Nova for the created nodes in
312       the overcloud. It's accessible via the Nova metadata API.
313     type: json
314   ControllerSchedulerHints:
315     type: json
316     description: Optional scheduler hints to pass to nova
317     default: {}
318   ServiceConfigSettings:
319     type: json
320     default: {}
321   ServiceNames:
322     type: comma_delimited_list
323     default: []
324   ConfigCommand:
325     type: string
326     description: Command which will be run whenever configuration data changes
327     default: os-refresh-config --timeout 14400
328
329 parameter_groups:
330 - label: deprecated
331   description: Do not use deprecated params, they will be removed.
332   parameters:
333   - controllerExtraConfig
334
335 resources:
336
337   Controller:
338     type: OS::TripleO::Server
339     metadata:
340       os-collect-config:
341         command: {get_param: ConfigCommand}
342     properties:
343       image: {get_param: controllerImage}
344       image_update_policy: {get_param: ImageUpdatePolicy}
345       flavor: {get_param: Flavor}
346       key_name: {get_param: KeyName}
347       networks:
348         - network: ctlplane
349       user_data_format: SOFTWARE_CONFIG
350       user_data: {get_resource: UserData}
351       name:
352         str_replace:
353             template: {get_param: Hostname}
354             params: {get_param: HostnameMap}
355       software_config_transport: {get_param: SoftwareConfigTransport}
356       metadata: {get_param: ServerMetadata}
357       scheduler_hints: {get_param: ControllerSchedulerHints}
358
359   # Combine the NodeAdminUserData and NodeUserData mime archives
360   UserData:
361     type: OS::Heat::MultipartMime
362     properties:
363       parts:
364       - config: {get_resource: NodeAdminUserData}
365         type: multipart
366       - config: {get_resource: NodeUserData}
367         type: multipart
368
369   # Creates the "heat-admin" user if configured via the environment
370   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
371   NodeAdminUserData:
372     type: OS::TripleO::NodeAdminUserData
373
374   # For optional operator additional userdata
375   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
376   NodeUserData:
377     type: OS::TripleO::NodeUserData
378
379   ExternalPort:
380     type: OS::TripleO::Controller::Ports::ExternalPort
381     properties:
382       IPPool: {get_param: ControllerIPs}
383       NodeIndex: {get_param: NodeIndex}
384       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
385
386   InternalApiPort:
387     type: OS::TripleO::Controller::Ports::InternalApiPort
388     properties:
389       IPPool: {get_param: ControllerIPs}
390       NodeIndex: {get_param: NodeIndex}
391       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
392
393   StoragePort:
394     type: OS::TripleO::Controller::Ports::StoragePort
395     properties:
396       IPPool: {get_param: ControllerIPs}
397       NodeIndex: {get_param: NodeIndex}
398       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
399
400   StorageMgmtPort:
401     type: OS::TripleO::Controller::Ports::StorageMgmtPort
402     properties:
403       IPPool: {get_param: ControllerIPs}
404       NodeIndex: {get_param: NodeIndex}
405       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
406
407   TenantPort:
408     type: OS::TripleO::Controller::Ports::TenantPort
409     properties:
410       IPPool: {get_param: ControllerIPs}
411       NodeIndex: {get_param: NodeIndex}
412       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
413
414   ManagementPort:
415     type: OS::TripleO::Controller::Ports::ManagementPort
416     properties:
417       IPPool: {get_param: ControllerIPs}
418       NodeIndex: {get_param: NodeIndex}
419       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
420
421   NetIpMap:
422     type: OS::TripleO::Network::Ports::NetIpMap
423     properties:
424       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
425       ExternalIp: {get_attr: [ExternalPort, ip_address]}
426       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
427       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
428       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
429       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
430       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
431       StorageIp: {get_attr: [StoragePort, ip_address]}
432       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
433       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
434       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
435       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
436       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
437       TenantIp: {get_attr: [TenantPort, ip_address]}
438       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
439       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
440       ManagementIp: {get_attr: [ManagementPort, ip_address]}
441       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
442       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
443
444   NetworkConfig:
445     type: OS::TripleO::Controller::Net::SoftwareConfig
446     properties:
447       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
448       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
449       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
450       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
451       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
452       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
453       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
454
455   NetworkDeployment:
456     type: OS::TripleO::SoftwareDeployment
457     properties:
458       name: NetworkDeployment
459       config: {get_resource: NetworkConfig}
460       server: {get_resource: Controller}
461       actions: {get_param: NetworkDeploymentActions}
462       input_values:
463         bridge_name: br-ex
464         interface_name: {get_param: NeutronPublicInterface}
465
466   # Resource for site-specific injection of root certificate
467   NodeTLSCAData:
468     depends_on: NetworkDeployment
469     type: OS::TripleO::NodeTLSCAData
470     properties:
471       server: {get_resource: Controller}
472
473   # Resource for site-specific passing of private keys/certificates
474   NodeTLSData:
475     depends_on: NodeTLSCAData
476     type: OS::TripleO::NodeTLSData
477     properties:
478       server: {get_resource: Controller}
479       NodeIndex: {get_param: NodeIndex}
480
481
482   ControllerDeployment:
483     type: OS::TripleO::SoftwareDeployment
484     depends_on: NetworkDeployment
485     properties:
486       name: ControllerDeployment
487       config: {get_resource: ControllerConfig}
488       server: {get_resource: Controller}
489       input_values:
490         bootstack_nodeid: {get_attr: [Controller, name]}
491         haproxy_log_address: {get_param: HAProxySyslogAddress}
492         haproxy_stats_password: {get_param: HAProxyStatsPassword}
493         haproxy_stats_user: {get_param: HAProxyStatsUser}
494         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
495         horizon_secret: {get_param: HorizonSecret}
496         admin_password: {get_param: AdminPassword}
497         debug: {get_param: Debug}
498         keystone_identity_uri: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
499         keystone_auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
500         keystone_ec2_uri: { get_param: [EndpointMap, KeystoneEC2, uri] }
501         enable_fencing: {get_param: EnableFencing}
502         enable_galera: {get_param: EnableGalera}
503         enable_load_balancer: {get_param: EnableLoadBalancer}
504         manage_firewall: {get_param: ManageFirewall}
505         purge_firewall_rules: {get_param: PurgeFirewallRules}
506         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
507         mysql_max_connections: {get_param: MysqlMaxConnections}
508         mysql_root_password: {get_param: MysqlRootPassword}
509         mysql_clustercheck_password: {get_param: MysqlClustercheckPassword}
510         mysql_cluster_name:
511           str_replace:
512             template: tripleo-CLUSTER
513             params:
514               CLUSTER: {get_param: MysqlClusterUniquePart}
515         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
516         neutron_password: {get_param: NeutronPassword}
517         neutron_internal_url: { get_param: [ EndpointMap, NeutronInternal, uri ] }
518         neutron_auth_url: { get_param: [ EndpointMap, KeystoneV3Admin, uri ] }
519         nova_internal_url: { get_param: [ EndpointMap, NovaInternal, uri ] }
520         aodh_internal_url: { get_param: [ EndpointMap, AodhInternal, uri ] }
521         aodh_public_url: { get_param: [ EndpointMap, AodhPublic, uri ] }
522         aodh_admin_url: { get_param: [ EndpointMap, AodhAdmin, uri ] }
523         ceilometer_coordination_url:
524           list_join:
525             - ''
526             - - 'redis://:'
527               - {get_param: RedisPassword}
528               - '@'
529               - {get_param: RedisVirtualIPUri}
530               - ':6379/'
531         gnocchi_internal_url: {get_param: [EndpointMap, GnocchiInternal, uri]}
532         gnocchi_public_url: { get_param: [ EndpointMap, GnocchiPublic, uri ] }
533         gnocchi_admin_url: { get_param: [ EndpointMap, GnocchiAdmin, uri ] }
534         nova_enable_db_purge: {get_param: NovaEnableDBPurge}
535         nova_ipv6: {get_param: NovaIPv6}
536         corosync_ipv6: {get_param: CorosyncIPv6}
537         memcached_ipv6: {get_param: MemcachedIPv6}
538         nova_password: {get_param: NovaPassword}
539         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
540         instance_name_template: {get_param: InstanceNameTemplate}
541         fencing_config: {get_param: FencingConfig}
542         pcsd_password: {get_param: PcsdPassword}
543         rabbit_username: {get_param: RabbitUserName}
544         rabbit_password: {get_param: RabbitPassword}
545         rabbit_cookie: {get_param: RabbitCookie}
546         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
547         rabbit_client_port: {get_param: RabbitClientPort}
548         control_virtual_interface: {get_param: ControlVirtualInterface}
549         public_virtual_interface: {get_param: PublicVirtualInterface}
550         swift_hash_suffix: {get_param: SwiftHashSuffix}
551         enable_package_install: {get_param: EnablePackageInstall}
552         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
553         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
554         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
555         cinder_iscsi_network:
556           str_replace:
557             template: "'IP'"
558             params:
559               IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
560         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
561         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
562         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
563         glance_api_servers: { get_param: [EndpointMap, GlanceInternal, uri]}
564         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
565         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
566         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
567         keystone_region: {get_param: KeystoneRegion}
568         manila_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ManilaApiNetwork]}]}
569         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
570         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
571         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
572         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
573         aodh_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
574         gnocchi_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
575         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
576         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
577         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
578         horizon_subnet:
579           str_replace:
580             template: "['SUBNET']"
581             params:
582               SUBNET: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
583         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
584         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
585         redis_vip: {get_param: RedisVirtualIP}
586         sahara_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
587         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
588         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
589         mysql_virtual_ip: {get_param: MysqlVirtualIP}
590         ceph_cluster_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
591         ceph_public_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
592         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
593         ironic_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
594
595   # Map heat metadata into hiera datafiles
596   ControllerConfig:
597     type: OS::Heat::StructuredConfig
598     properties:
599       group: os-apply-config
600       config:
601         hiera:
602           hierarchy:
603             - '"%{::uuid}"'
604             - heat_config_%{::deploy_config_name}
605             - controller_extraconfig
606             - extraconfig
607             - service_configs
608             - service_names
609             - controller
610             - object
611             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
612             - ceph_cluster # provided by CephClusterConfig
613             - ceph
614             - bootstrap_node # provided by BootstrapNodeConfig
615             - all_nodes # provided by allNodesConfig
616             - vip_data # provided by vip-config
617             - '"%{::osfamily}"'
618             - network
619             - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
620             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
621             - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
622             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
623             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
624             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
625             - midonet_data #Optionally provided by AllNodesExtraConfig
626           merge_behavior: deeper
627           datafiles:
628             service_names:
629               mapped_data:
630                 service_names: {get_param: ServiceNames}
631             service_configs:
632               mapped_data: {get_param: ServiceConfigSettings}
633             controller_extraconfig:
634               mapped_data:
635                 map_merge:
636                   - {get_param: controllerExtraConfig}
637                   - {get_param: ControllerExtraConfig}
638             extraconfig:
639               mapped_data: {get_param: ExtraConfig}
640             network:
641               mapped_data:
642                 net_ip_map: {get_attr: [NetIpMap, net_ip_map]}
643                 net_ip_subnet_map: {get_attr: [NetIpMap, net_ip_subnet_map]}
644                 net_ip_uri_map: {get_attr: [NetIpMap, net_ip_uri_map]}
645             ceph:
646               raw_data: {get_file: hieradata/ceph.yaml}
647               mapped_data:
648                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
649                 ceph::profile::params::public_network: {get_input: ceph_public_network}
650                 ceph::profile::params::public_addr: {get_input: ceph_public_ip}
651             object:
652               raw_data: {get_file: hieradata/object.yaml}
653             controller:
654               raw_data: {get_file: hieradata/controller.yaml}
655               mapped_data: # data supplied directly to this deployment configuration, etc
656                 bootstack_nodeid: {get_input: bootstack_nodeid}
657
658                 # Pacemaker
659                 enable_fencing: {get_input: enable_fencing}
660                 enable_load_balancer: {get_input: enable_load_balancer}
661                 hacluster_pwd: {get_input: pcsd_password}
662                 corosync_ipv6: {get_input: corosync_ipv6}
663                 tripleo::fencing::config: {get_input: fencing_config}
664
665                 # Swift
666                 # FIXME: need to move proxy_local_net_ip into swift-proxy.yaml
667                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
668                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
669                 swift::swift_hash_path_suffix: {get_input: swift_hash_suffix}
670
671                 # Cinder
672                 tripleo::profile::base::cinder::volume::iscsi::cinder_iscsi_address: {get_input: cinder_iscsi_network}
673                 cinder::api::bind_host: {get_input: cinder_api_network}
674
675                 # Glance
676                 glance::api::bind_host: {get_input: glance_api_network}
677                 glance::registry::bind_host: {get_input: glance_registry_network}
678
679                 # Heat
680                 heat::api::bind_host: {get_input: heat_api_network}
681                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
682                 heat::api_cfn::bind_host: {get_input: heat_api_network}
683                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
684
685                 # Keystone
686                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
687                 keystone::public_bind_host: {get_input: keystone_public_api_network}
688                 keystone::wsgi::apache::bind_host: {get_input: keystone_public_api_network}
689                 keystone::wsgi::apache::admin_bind_host: {get_input: keystone_admin_api_network}
690
691                 # Manila
692                 manila::api::bind_host: {get_input: manila_api_network}
693
694                 # MongoDB
695                 mongodb::server::bind_ip: {get_input: mongo_db_network}
696
697                 # MySQL
698                 admin_password: {get_input: admin_password}
699                 enable_galera: {get_input: enable_galera}
700                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
701                 mysql_max_connections: {get_input: mysql_max_connections}
702                 mysql::server::root_password: {get_input: mysql_root_password}
703                 mysql_clustercheck_password: {get_input: mysql_clustercheck_password}
704                 mysql_cluster_name: {get_input: mysql_cluster_name}
705                 mysql_bind_host: {get_input: mysql_network}
706                 mysql_virtual_ip: {get_input: mysql_virtual_ip}
707
708                 # Neutron
709                 neutron::bind_host: {get_input: neutron_api_network}
710                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
711                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
712
713                 # Aodh
714                 aodh::api::host: {get_input: aodh_api_network}
715                 aodh::wsgi::apache::bind_host: {get_input: aodh_api_network}
716
717                 # Ceilometer
718                 ceilometer::api::host: {get_input: ceilometer_api_network}
719                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
720                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
721
722                 # Gnocchi
723                 gnocchi::wsgi::apache::bind_host: {get_input: gnocchi_api_network}
724                 gnocchi::api::host: {get_input: gnocchi_api_network}
725                 gnocchi::api::keystone_auth_uri: {get_input: keystone_auth_uri}
726                 gnocchi::api::keystone_identity_uri: {get_input: keystone_identity_uri}
727                 gnocchi::storage::swift::swift_authurl: {get_input: keystone_auth_uri}
728                 gnocchi::keystone::auth::public_url: {get_input: gnocchi_public_url }
729                 gnocchi::keystone::auth::internal_url: {get_input: gnocchi_internal_url }
730                 gnocchi::keystone::auth::admin_url: {get_input: gnocchi_admin_url }
731                 gnocchi::keystone::auth::region: {get_input: keystone_region}
732
733                 # Nova
734                 nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
735                 nova::use_ipv6: {get_input: nova_ipv6}
736                 nova::api::auth_uri: {get_input: keystone_auth_uri}
737                 nova::api::identity_uri: {get_input: keystone_identity_uri}
738                 nova::api::api_bind_address: {get_input: nova_api_network}
739                 nova::api::metadata_listen: {get_input: nova_metadata_network}
740                 nova::api::admin_password: {get_input: nova_password}
741                 nova::glance_api_servers: {get_input: glance_api_servers}
742                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
743                 nova::api::instance_name_template: {get_input: instance_name_template}
744                 nova::network::neutron::neutron_password: {get_input: neutron_password}
745                 nova::network::neutron::neutron_url: {get_input: neutron_internal_url}
746                 nova::network::neutron::neutron_auth_url: {get_input: neutron_auth_url}
747                 nova::vncproxy::host: {get_input: nova_api_network}
748                 nova_enable_db_purge: {get_input: nova_enable_db_purge}
749
750                 # Horizon
751                 apache::mod::remoteip::proxy_ips: {get_input: horizon_subnet}
752                 apache::ip: {get_input: horizon_network}
753                 horizon::django_debug: {get_input: debug}
754                 horizon::secret_key: {get_input: horizon_secret}
755                 horizon::bind_address: {get_input: horizon_network}
756                 horizon::keystone_url: {get_input: keystone_auth_uri}
757
758                 # Sahara
759                 sahara::host: {get_input: sahara_api_network}
760
761                 # RabbitMQ
762                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
763                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
764                 # Redis
765                 redis::bind: {get_input: redis_network}
766                 redis_vip: {get_input: redis_vip}
767                 # Firewall
768                 tripleo::firewall::manage_firewall: {get_input: manage_firewall}
769                 tripleo::firewall::purge_firewall_rules: {get_input: purge_firewall_rules}
770                 # Misc
771                 memcached_ipv6: {get_input: memcached_ipv6}
772                 memcached::listen_ip: {get_input: memcached_network}
773                 control_virtual_interface: {get_input: control_virtual_interface}
774                 public_virtual_interface: {get_input: public_virtual_interface}
775                 tripleo::keepalived::control_virtual_interface: {get_input: control_virtual_interface}
776                 tripleo::keepalived::public_virtual_interface: {get_input: public_virtual_interface}
777                 tripleo::haproxy::control_virtual_interface: {get_input: control_virtual_interface}
778                 tripleo::haproxy::public_virtual_interface: {get_input: public_virtual_interface}
779                 tripleo::haproxy::haproxy_log_address: {get_input: haproxy_log_address}
780                 tripleo::haproxy::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
781                 tripleo::haproxy::haproxy_stats_user: {get_input: haproxy_stats_user}
782                 tripleo::haproxy::haproxy_stats_password: {get_input: haproxy_stats_password}
783                 tripleo::haproxy::redis_password: {get_input: redis_password}
784                 tripleo::packages::enable_install: {get_input: enable_package_install}
785                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
786
787   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
788   ControllerExtraConfigPre:
789     depends_on: ControllerDeployment
790     type: OS::TripleO::ControllerExtraConfigPre
791     properties:
792         server: {get_resource: Controller}
793
794   # Hook for site-specific additional pre-deployment config,
795   # applying to all nodes, e.g node registration/unregistration
796   NodeExtraConfig:
797     depends_on: [ControllerExtraConfigPre, NodeTLSData]
798     type: OS::TripleO::NodeExtraConfig
799     properties:
800         server: {get_resource: Controller}
801
802   UpdateConfig:
803     type: OS::TripleO::Tasks::PackageUpdate
804
805   UpdateDeployment:
806     type: OS::Heat::SoftwareDeployment
807     properties:
808       name: UpdateDeployment
809       config: {get_resource: UpdateConfig}
810       server: {get_resource: Controller}
811       input_values:
812         update_identifier:
813           get_param: UpdateIdentifier
814
815 outputs:
816   ip_address:
817     description: IP address of the server in the ctlplane network
818     value: {get_attr: [Controller, networks, ctlplane, 0]}
819   external_ip_address:
820     description: IP address of the server in the external network
821     value: {get_attr: [ExternalPort, ip_address]}
822   internal_api_ip_address:
823     description: IP address of the server in the internal_api network
824     value: {get_attr: [InternalApiPort, ip_address]}
825   storage_ip_address:
826     description: IP address of the server in the storage network
827     value: {get_attr: [StoragePort, ip_address]}
828   storage_mgmt_ip_address:
829     description: IP address of the server in the storage_mgmt network
830     value: {get_attr: [StorageMgmtPort, ip_address]}
831   tenant_ip_address:
832     description: IP address of the server in the tenant network
833     value: {get_attr: [TenantPort, ip_address]}
834   management_ip_address:
835     description: IP address of the server in the management network
836     value: {get_attr: [ManagementPort, ip_address]}
837   hostname:
838     description: Hostname of the server
839     value: {get_attr: [Controller, name]}
840   hosts_entry:
841     description: >
842       Server's IP address and hostname in the /etc/hosts format
843     value:
844       str_replace:
845         template: |
846           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
847           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
848           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
849           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
850           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
851           TENANTIP TENANTHOST.DOMAIN TENANTHOST
852           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
853         params:
854           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
855           DOMAIN: {get_param: CloudDomain}
856           PRIMARYHOST: {get_attr: [Controller, name]}
857           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
858           EXTERNALHOST:
859             list_join:
860             - '.'
861             - - {get_attr: [Controller, name]}
862               - external
863           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
864           INTERNAL_APIHOST:
865             list_join:
866             - '.'
867             - - {get_attr: [Controller, name]}
868               - internalapi
869           STORAGEIP: {get_attr: [StoragePort, ip_address]}
870           STORAGEHOST:
871             list_join:
872             - '.'
873             - - {get_attr: [Controller, name]}
874               - storage
875           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
876           STORAGE_MGMTHOST:
877             list_join:
878             - '.'
879             - - {get_attr: [Controller, name]}
880               - storagemgmt
881           TENANTIP: {get_attr: [TenantPort, ip_address]}
882           TENANTHOST:
883             list_join:
884             - '.'
885             - - {get_attr: [Controller, name]}
886               - tenant
887           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
888           MANAGEMENTHOST:
889             list_join:
890             - '.'
891             - - {get_attr: [Controller, name]}
892               - management
893   nova_server_resource:
894     description: Heat resource handle for the Nova compute server
895     value:
896       {get_resource: Controller}
897   swift_device:
898     description: Swift device formatted for swift-ring-builder
899     value:
900       str_replace:
901         template: 'r1z1-IP:%PORT%/d1'
902         params:
903           IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
904   swift_proxy_memcache:
905     description: Swift proxy-memcache value
906     value:
907       str_replace:
908         template: "IP:11211"
909         params:
910           IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
911   tls_key_modulus_md5:
912     description: MD5 checksum of the TLS Key Modulus
913     value: {get_attr: [NodeTLSData, key_modulus_md5]}
914   tls_cert_modulus_md5:
915     description: MD5 checksum of the TLS Certificate Modulus
916     value: {get_attr: [NodeTLSData, cert_modulus_md5]}