Merge "Remove keystone PKI related parameters"
[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         cinder_public_url: {get_param: [EndpointMap, CinderPublic, uri]}
499         cinder_internal_url: {get_param: [EndpointMap, CinderInternal, uri]}
500         cinder_admin_url: {get_param: [EndpointMap, CinderAdmin, uri]}
501         cinder_public_url_v2: {get_param: [EndpointMap, CinderV2Public, uri]}
502         cinder_internal_url_v2: {get_param: [EndpointMap, CinderV2Internal, uri]}
503         cinder_admin_url_v2: {get_param: [EndpointMap, CinderV2Admin, uri]}
504         keystone_identity_uri: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
505         keystone_auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
506         keystone_ec2_uri: { get_param: [EndpointMap, KeystoneEC2, uri] }
507         enable_fencing: {get_param: EnableFencing}
508         enable_galera: {get_param: EnableGalera}
509         enable_load_balancer: {get_param: EnableLoadBalancer}
510         manage_firewall: {get_param: ManageFirewall}
511         purge_firewall_rules: {get_param: PurgeFirewallRules}
512         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
513         mysql_max_connections: {get_param: MysqlMaxConnections}
514         mysql_root_password: {get_param: MysqlRootPassword}
515         mysql_clustercheck_password: {get_param: MysqlClustercheckPassword}
516         mysql_cluster_name:
517           str_replace:
518             template: tripleo-CLUSTER
519             params:
520               CLUSTER: {get_param: MysqlClusterUniquePart}
521         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
522         neutron_password: {get_param: NeutronPassword}
523         neutron_internal_url: { get_param: [ EndpointMap, NeutronInternal, uri ] }
524         neutron_public_url: { get_param: [ EndpointMap, NeutronPublic, uri ] }
525         neutron_admin_url: { get_param: [ EndpointMap, NeutronAdmin, uri ] }
526         neutron_auth_url: { get_param: [ EndpointMap, KeystoneV3Admin, uri ] }
527         nova_internal_url: { get_param: [ EndpointMap, NovaInternal, uri ] }
528         aodh_internal_url: { get_param: [ EndpointMap, AodhInternal, uri ] }
529         aodh_public_url: { get_param: [ EndpointMap, AodhPublic, uri ] }
530         aodh_admin_url: { get_param: [ EndpointMap, AodhAdmin, uri ] }
531         ceilometer_coordination_url:
532           list_join:
533             - ''
534             - - 'redis://:'
535               - {get_param: RedisPassword}
536               - '@'
537               - {get_param: RedisVirtualIPUri}
538               - ':6379/'
539         gnocchi_internal_url: {get_param: [EndpointMap, GnocchiInternal, uri]}
540         gnocchi_public_url: { get_param: [ EndpointMap, GnocchiPublic, uri ] }
541         gnocchi_admin_url: { get_param: [ EndpointMap, GnocchiAdmin, uri ] }
542         nova_enable_db_purge: {get_param: NovaEnableDBPurge}
543         nova_ipv6: {get_param: NovaIPv6}
544         corosync_ipv6: {get_param: CorosyncIPv6}
545         memcached_ipv6: {get_param: MemcachedIPv6}
546         nova_password: {get_param: NovaPassword}
547         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
548         instance_name_template: {get_param: InstanceNameTemplate}
549         nova_public_url: {get_param: [EndpointMap, NovaPublic, uri]}
550         nova_internal_url: {get_param: [EndpointMap, NovaInternal, uri]}
551         nova_admin_url: {get_param: [EndpointMap, NovaAdmin, uri]}
552         fencing_config: {get_param: FencingConfig}
553         pcsd_password: {get_param: PcsdPassword}
554         rabbit_username: {get_param: RabbitUserName}
555         rabbit_password: {get_param: RabbitPassword}
556         rabbit_cookie: {get_param: RabbitCookie}
557         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
558         rabbit_client_port: {get_param: RabbitClientPort}
559         control_virtual_interface: {get_param: ControlVirtualInterface}
560         public_virtual_interface: {get_param: PublicVirtualInterface}
561         swift_hash_suffix: {get_param: SwiftHashSuffix}
562         enable_package_install: {get_param: EnablePackageInstall}
563         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
564         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
565         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
566         cinder_iscsi_network:
567           str_replace:
568             template: "'IP'"
569             params:
570               IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
571         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
572         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
573         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
574         glance_api_servers: { get_param: [EndpointMap, GlanceInternal, uri]}
575         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
576         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
577         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
578         keystone_region: {get_param: KeystoneRegion}
579         manila_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ManilaApiNetwork]}]}
580         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
581         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
582         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
583         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
584         aodh_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
585         gnocchi_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
586         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
587         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
588         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
589         horizon_subnet:
590           str_replace:
591             template: "['SUBNET']"
592             params:
593               SUBNET: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
594         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
595         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
596         redis_vip: {get_param: RedisVirtualIP}
597         sahara_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
598         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
599         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
600         mysql_virtual_ip: {get_param: MysqlVirtualIP}
601         ceph_cluster_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
602         ceph_public_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
603         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
604         ironic_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
605
606   # Map heat metadata into hiera datafiles
607   ControllerConfig:
608     type: OS::Heat::StructuredConfig
609     properties:
610       group: os-apply-config
611       config:
612         hiera:
613           hierarchy:
614             - '"%{::uuid}"'
615             - heat_config_%{::deploy_config_name}
616             - controller_extraconfig
617             - extraconfig
618             - service_configs
619             - service_names
620             - controller
621             - object
622             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
623             - ceph_cluster # provided by CephClusterConfig
624             - ceph
625             - bootstrap_node # provided by BootstrapNodeConfig
626             - all_nodes # provided by allNodesConfig
627             - vip_data # provided by vip-config
628             - '"%{::osfamily}"'
629             - network
630             - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
631             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
632             - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
633             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
634             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
635             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
636             - midonet_data #Optionally provided by AllNodesExtraConfig
637           merge_behavior: deeper
638           datafiles:
639             service_names:
640               mapped_data:
641                 service_names: {get_param: ServiceNames}
642             service_configs:
643               mapped_data: {get_param: ServiceConfigSettings}
644             controller_extraconfig:
645               mapped_data:
646                 map_merge:
647                   - {get_param: controllerExtraConfig}
648                   - {get_param: ControllerExtraConfig}
649             extraconfig:
650               mapped_data: {get_param: ExtraConfig}
651             network:
652               mapped_data:
653                 net_ip_map: {get_attr: [NetIpMap, net_ip_map]}
654                 net_ip_subnet_map: {get_attr: [NetIpMap, net_ip_subnet_map]}
655                 net_ip_uri_map: {get_attr: [NetIpMap, net_ip_uri_map]}
656             ceph:
657               raw_data: {get_file: hieradata/ceph.yaml}
658               mapped_data:
659                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
660                 ceph::profile::params::public_network: {get_input: ceph_public_network}
661                 ceph::profile::params::public_addr: {get_input: ceph_public_ip}
662             object:
663               raw_data: {get_file: hieradata/object.yaml}
664             controller:
665               raw_data: {get_file: hieradata/controller.yaml}
666               mapped_data: # data supplied directly to this deployment configuration, etc
667                 bootstack_nodeid: {get_input: bootstack_nodeid}
668
669                 # Pacemaker
670                 enable_fencing: {get_input: enable_fencing}
671                 enable_load_balancer: {get_input: enable_load_balancer}
672                 hacluster_pwd: {get_input: pcsd_password}
673                 corosync_ipv6: {get_input: corosync_ipv6}
674                 tripleo::fencing::config: {get_input: fencing_config}
675
676                 # Swift
677                 # FIXME: need to move proxy_local_net_ip into swift-proxy.yaml
678                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
679                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
680                 swift::swift_hash_path_suffix: {get_input: swift_hash_suffix}
681
682                 # Cinder
683                 tripleo::profile::base::cinder::volume::iscsi::cinder_iscsi_address: {get_input: cinder_iscsi_network}
684                 cinder::api::bind_host: {get_input: cinder_api_network}
685                 cinder::keystone::auth::public_url: {get_input: cinder_public_url }
686                 cinder::keystone::auth::internal_url: {get_input: cinder_internal_url }
687                 cinder::keystone::auth::admin_url: {get_input: cinder_admin_url }
688                 cinder::keystone::auth::public_url_v2: {get_input: cinder_public_url_v2 }
689                 cinder::keystone::auth::internal_url_v2: {get_input: cinder_internal_url_v2 }
690                 cinder::keystone::auth::admin_url_v2: {get_input: cinder_admin_url_v2 }
691                 cinder::keystone::auth::password: {get_input: cinder_password }
692                 cinder::keystone::auth::region: {get_input: keystone_region}
693
694                 # Glance
695                 glance::api::bind_host: {get_input: glance_api_network}
696                 glance::registry::bind_host: {get_input: glance_registry_network}
697                 glance::keystone::auth::region: {get_input: keystone_region}
698
699                 # Heat
700                 heat::api::bind_host: {get_input: heat_api_network}
701                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
702                 heat::api_cfn::bind_host: {get_input: heat_api_network}
703                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
704
705                 # Keystone
706                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
707                 keystone::public_bind_host: {get_input: keystone_public_api_network}
708                 keystone::wsgi::apache::bind_host: {get_input: keystone_public_api_network}
709                 keystone::wsgi::apache::admin_bind_host: {get_input: keystone_admin_api_network}
710
711                 # Manila
712                 manila::api::bind_host: {get_input: manila_api_network}
713
714                 # MongoDB
715                 mongodb::server::bind_ip: {get_input: mongo_db_network}
716
717                 # MySQL
718                 admin_password: {get_input: admin_password}
719                 enable_galera: {get_input: enable_galera}
720                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
721                 mysql_max_connections: {get_input: mysql_max_connections}
722                 mysql::server::root_password: {get_input: mysql_root_password}
723                 mysql_clustercheck_password: {get_input: mysql_clustercheck_password}
724                 mysql_cluster_name: {get_input: mysql_cluster_name}
725                 mysql_bind_host: {get_input: mysql_network}
726                 mysql_virtual_ip: {get_input: mysql_virtual_ip}
727
728                 # Neutron
729                 neutron::bind_host: {get_input: neutron_api_network}
730                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
731                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
732                 neutron::keystone::auth::public_url: {get_input: neutron_public_url }
733                 neutron::keystone::auth::internal_url: {get_input: neutron_internal_url }
734                 neutron::keystone::auth::admin_url: {get_input: neutron_admin_url }
735                 neutron::keystone::auth::password: {get_input: neutron_password }
736                 neutron::keystone::auth::region: {get_input: keystone_region}
737
738                 # Aodh
739                 aodh::api::host: {get_input: aodh_api_network}
740                 aodh::wsgi::apache::bind_host: {get_input: aodh_api_network}
741
742                 # Ceilometer
743                 ceilometer::api::host: {get_input: ceilometer_api_network}
744                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
745                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
746
747                 # Gnocchi
748                 gnocchi::wsgi::apache::bind_host: {get_input: gnocchi_api_network}
749                 gnocchi::api::host: {get_input: gnocchi_api_network}
750                 gnocchi::api::keystone_auth_uri: {get_input: keystone_auth_uri}
751                 gnocchi::api::keystone_identity_uri: {get_input: keystone_identity_uri}
752                 gnocchi::storage::swift::swift_authurl: {get_input: keystone_auth_uri}
753                 gnocchi::keystone::auth::public_url: {get_input: gnocchi_public_url }
754                 gnocchi::keystone::auth::internal_url: {get_input: gnocchi_internal_url }
755                 gnocchi::keystone::auth::admin_url: {get_input: gnocchi_admin_url }
756                 gnocchi::keystone::auth::region: {get_input: keystone_region}
757
758                 # Nova
759                 nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
760                 nova::use_ipv6: {get_input: nova_ipv6}
761                 nova::api::auth_uri: {get_input: keystone_auth_uri}
762                 nova::api::identity_uri: {get_input: keystone_identity_uri}
763                 nova::api::api_bind_address: {get_input: nova_api_network}
764                 nova::api::metadata_listen: {get_input: nova_metadata_network}
765                 nova::api::admin_password: {get_input: nova_password}
766                 nova::glance_api_servers: {get_input: glance_api_servers}
767                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
768                 nova::api::instance_name_template: {get_input: instance_name_template}
769                 nova::network::neutron::neutron_password: {get_input: neutron_password}
770                 nova::network::neutron::neutron_url: {get_input: neutron_internal_url}
771                 nova::network::neutron::neutron_auth_url: {get_input: neutron_auth_url}
772                 nova::vncproxy::host: {get_input: nova_api_network}
773                 nova_enable_db_purge: {get_input: nova_enable_db_purge}
774                 nova::keystone::auth::public_url: {get_input: nova_public_url}
775                 nova::keystone::auth::internal_url: {get_input: nova_internal_url}
776                 nova::keystone::auth::admin_url: {get_input: nova_admin_url}
777                 nova::keystone::auth::password: {get_input: nova_password }
778                 nova::keystone::auth::region: {get_input: keystone_region}
779
780                 # Horizon
781                 apache::mod::remoteip::proxy_ips: {get_input: horizon_subnet}
782                 apache::ip: {get_input: horizon_network}
783                 horizon::django_debug: {get_input: debug}
784                 horizon::secret_key: {get_input: horizon_secret}
785                 horizon::bind_address: {get_input: horizon_network}
786                 horizon::keystone_url: {get_input: keystone_auth_uri}
787
788                 # RabbitMQ
789                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
790                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
791                 # Redis
792                 redis::bind: {get_input: redis_network}
793                 redis_vip: {get_input: redis_vip}
794                 # Firewall
795                 tripleo::firewall::manage_firewall: {get_input: manage_firewall}
796                 tripleo::firewall::purge_firewall_rules: {get_input: purge_firewall_rules}
797                 # Misc
798                 memcached_ipv6: {get_input: memcached_ipv6}
799                 memcached::listen_ip: {get_input: memcached_network}
800                 control_virtual_interface: {get_input: control_virtual_interface}
801                 public_virtual_interface: {get_input: public_virtual_interface}
802                 tripleo::keepalived::control_virtual_interface: {get_input: control_virtual_interface}
803                 tripleo::keepalived::public_virtual_interface: {get_input: public_virtual_interface}
804                 tripleo::haproxy::control_virtual_interface: {get_input: control_virtual_interface}
805                 tripleo::haproxy::public_virtual_interface: {get_input: public_virtual_interface}
806                 tripleo::haproxy::haproxy_log_address: {get_input: haproxy_log_address}
807                 tripleo::haproxy::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
808                 tripleo::haproxy::haproxy_stats_user: {get_input: haproxy_stats_user}
809                 tripleo::haproxy::haproxy_stats_password: {get_input: haproxy_stats_password}
810                 tripleo::haproxy::redis_password: {get_input: redis_password}
811                 tripleo::packages::enable_install: {get_input: enable_package_install}
812                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
813
814   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
815   ControllerExtraConfigPre:
816     depends_on: ControllerDeployment
817     type: OS::TripleO::ControllerExtraConfigPre
818     properties:
819         server: {get_resource: Controller}
820
821   # Hook for site-specific additional pre-deployment config,
822   # applying to all nodes, e.g node registration/unregistration
823   NodeExtraConfig:
824     depends_on: [ControllerExtraConfigPre, NodeTLSData]
825     type: OS::TripleO::NodeExtraConfig
826     properties:
827         server: {get_resource: Controller}
828
829   UpdateConfig:
830     type: OS::TripleO::Tasks::PackageUpdate
831
832   UpdateDeployment:
833     type: OS::Heat::SoftwareDeployment
834     properties:
835       name: UpdateDeployment
836       config: {get_resource: UpdateConfig}
837       server: {get_resource: Controller}
838       input_values:
839         update_identifier:
840           get_param: UpdateIdentifier
841
842 outputs:
843   ip_address:
844     description: IP address of the server in the ctlplane network
845     value: {get_attr: [Controller, networks, ctlplane, 0]}
846   external_ip_address:
847     description: IP address of the server in the external network
848     value: {get_attr: [ExternalPort, ip_address]}
849   internal_api_ip_address:
850     description: IP address of the server in the internal_api network
851     value: {get_attr: [InternalApiPort, ip_address]}
852   storage_ip_address:
853     description: IP address of the server in the storage network
854     value: {get_attr: [StoragePort, ip_address]}
855   storage_mgmt_ip_address:
856     description: IP address of the server in the storage_mgmt network
857     value: {get_attr: [StorageMgmtPort, ip_address]}
858   tenant_ip_address:
859     description: IP address of the server in the tenant network
860     value: {get_attr: [TenantPort, ip_address]}
861   management_ip_address:
862     description: IP address of the server in the management network
863     value: {get_attr: [ManagementPort, ip_address]}
864   hostname:
865     description: Hostname of the server
866     value: {get_attr: [Controller, name]}
867   hosts_entry:
868     description: >
869       Server's IP address and hostname in the /etc/hosts format
870     value:
871       str_replace:
872         template: |
873           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
874           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
875           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
876           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
877           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
878           TENANTIP TENANTHOST.DOMAIN TENANTHOST
879           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
880         params:
881           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
882           DOMAIN: {get_param: CloudDomain}
883           PRIMARYHOST: {get_attr: [Controller, name]}
884           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
885           EXTERNALHOST:
886             list_join:
887             - '.'
888             - - {get_attr: [Controller, name]}
889               - external
890           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
891           INTERNAL_APIHOST:
892             list_join:
893             - '.'
894             - - {get_attr: [Controller, name]}
895               - internalapi
896           STORAGEIP: {get_attr: [StoragePort, ip_address]}
897           STORAGEHOST:
898             list_join:
899             - '.'
900             - - {get_attr: [Controller, name]}
901               - storage
902           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
903           STORAGE_MGMTHOST:
904             list_join:
905             - '.'
906             - - {get_attr: [Controller, name]}
907               - storagemgmt
908           TENANTIP: {get_attr: [TenantPort, ip_address]}
909           TENANTHOST:
910             list_join:
911             - '.'
912             - - {get_attr: [Controller, name]}
913               - tenant
914           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
915           MANAGEMENTHOST:
916             list_join:
917             - '.'
918             - - {get_attr: [Controller, name]}
919               - management
920   nova_server_resource:
921     description: Heat resource handle for the Nova compute server
922     value:
923       {get_resource: Controller}
924   swift_device:
925     description: Swift device formatted for swift-ring-builder
926     value:
927       str_replace:
928         template: 'r1z1-IP:%PORT%/d1'
929         params:
930           IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
931   swift_proxy_memcache:
932     description: Swift proxy-memcache value
933     value:
934       str_replace:
935         template: "IP:11211"
936         params:
937           IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
938   tls_key_modulus_md5:
939     description: MD5 checksum of the TLS Key Modulus
940     value: {get_attr: [NodeTLSData, key_modulus_md5]}
941   tls_cert_modulus_md5:
942     description: MD5 checksum of the TLS Certificate Modulus
943     value: {get_attr: [NodeTLSData, cert_modulus_md5]}