Reinstate CloudDomain properties for Controller/Compute roles
[apex-tripleo-heat-templates.git] / puppet / controller.yaml
1 heat_template_version: 2016-10-14
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   OvercloudControlFlavor:
97     description: Flavor for control nodes to request when deploying.
98     default: baremetal
99     type: string
100     constraints:
101       - custom_constraint: nova.flavor
102   HAProxyStatsPassword:
103     description: Password for HAProxy stats endpoint
104     type: string
105   HAProxyStatsUser:
106     description: User for HAProxy stats endpoint
107     default: admin
108     type: string
109   HAProxySyslogAddress:
110     default: /dev/log
111     description: Syslog address where HAproxy will send its log
112     type: string
113   HeatAuthEncryptionKey:
114     description: Auth encryption key for heat-engine
115     type: string
116     hidden: true
117   HorizonSecret:
118     description: Secret key for Django
119     type: string
120     hidden: true
121   controllerImage:
122     type: string
123     default: overcloud-full
124     constraints:
125       - custom_constraint: glance.image
126   ImageUpdatePolicy:
127     default: 'REBUILD_PRESERVE_EPHEMERAL'
128     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
129     type: string
130   InstanceNameTemplate:
131     default: 'instance-%08x'
132     description: Template string to be used to generate instance names
133     type: string
134   KeyName:
135     default: default
136     description: Name of an existing Nova key pair to enable SSH access to the instances
137     type: string
138     constraints:
139       - custom_constraint: nova.keypair
140   KeystoneRegion:
141     type: string
142     default: 'regionOne'
143     description: Keystone region for endpoint
144   ManageFirewall:
145     default: false
146     description: Whether to manage IPtables rules.
147     type: boolean
148   MemcachedIPv6:
149     default: false
150     description: Enable IPv6 features in Memcached.
151     type: boolean
152   PurgeFirewallRules:
153     default: false
154     description: Whether IPtables rules should be purged before setting up the new ones.
155     type: boolean
156   MysqlClusterUniquePart:
157     description: A unique identifier of the MySQL cluster the controller is in.
158     type: string
159     default: 'unset'  # Has to be here because of the ignored empty value bug
160     # Drop the validation: https://bugs.launchpad.net/tripleo/+bug/1405446
161     # constraints:
162     # - length: {min: 4, max: 10}
163   MysqlInnodbBufferPoolSize:
164     description: >
165         Specifies the size of the buffer pool in megabytes. Setting to
166         zero should be interpreted as "no value" and will defer to the
167         lower level default.
168     type: number
169     default: 0
170   MysqlMaxConnections:
171     description: Configures MySQL max_connections config setting
172     type: number
173     default: 4096
174   MysqlClustercheckPassword:
175     type: string
176     hidden: true
177   MysqlRootPassword:
178     type: string
179     hidden: true
180     default: ''  # Has to be here because of the ignored empty value bug
181   NeutronMetadataProxySharedSecret:
182     description: Shared secret to prevent spoofing
183     type: string
184     hidden: true
185   NeutronPassword:
186     description: The password for the neutron service and db account, used by neutron agents.
187     type: string
188     hidden: true
189   NeutronPublicInterface:
190     default: nic1
191     description: What interface to bridge onto br-ex for network nodes.
192     type: string
193   NovaEnableDBPurge:
194     default: true
195     description: |
196         Whether to create cron job for purging soft deleted rows in Nova database.
197     type: boolean
198   NovaIPv6:
199     default: false
200     description: Enable IPv6 features in Nova
201     type: boolean
202   NovaPassword:
203     description: The password for the nova service and db account, used by nova-api.
204     type: string
205     hidden: true
206   PcsdPassword:
207     type: string
208     description: The password for the 'pcsd' user.
209     hidden: true
210   PublicVirtualInterface:
211     default: 'br-ex'
212     description: >
213         Specifies the interface where the public-facing virtual ip will be assigned.
214         This should be int_public when a VLAN is being used.
215     type: string
216   RabbitCookie:
217     type: string
218     default: ''  # Has to be here because of the ignored empty value bug
219     hidden: true
220   RabbitPassword:
221     description: The password for RabbitMQ
222     type: string
223     hidden: true
224   RabbitUserName:
225     default: guest
226     description: The username for RabbitMQ
227     type: string
228   RabbitClientUseSSL:
229     default: false
230     description: >
231         Rabbit client subscriber parameter to specify
232         an SSL connection to the RabbitMQ host.
233     type: string
234   RabbitClientPort:
235     default: 5672
236     description: Set rabbit subscriber port, change this if using SSL
237     type: number
238   RedisPassword:
239     description: The password for Redis
240     type: string
241     hidden: true
242   RedisVirtualIP:
243     type: string
244     default: ''  # Has to be here because of the ignored empty value bug
245   RedisVirtualIPUri:
246     type: string
247     default: ''  # Has to be here because of the ignored empty value bug
248     description: An IP address which is wrapped in brackets in case of IPv6
249   SwiftHashSuffix:
250     description: A random string to be used as a salt when hashing to determine mappings
251       in the ring.
252     hidden: true
253     type: string
254   UpgradeLevelNovaCompute:
255     type: string
256     description: Nova Compute upgrade level
257     default: ''
258   MysqlVirtualIP:
259     type: string
260     default: ''
261   EnablePackageInstall:
262     default: 'false'
263     description: Set to true to enable package installation via Puppet
264     type: boolean
265   ServiceNetMap:
266     default: {}
267     description: Mapping of service_name -> network name. Typically set
268                  via parameter_defaults in the resource registry.
269     type: json
270   EndpointMap:
271     default: {}
272     description: Mapping of service endpoint -> protocol. Typically set
273                  via parameter_defaults in the resource registry.
274     type: json
275   UpdateIdentifier:
276     default: ''
277     type: string
278     description: >
279       Setting to a previously unused value during stack-update will trigger
280       package update on all nodes
281   Hostname:
282     type: string
283     default: '' # Defaults to Heat created hostname
284   HostnameMap:
285     type: json
286     default: {}
287     description: Optional mapping to override hostnames
288   NetworkDeploymentActions:
289     type: comma_delimited_list
290     description: >
291       Heat action when to apply network configuration changes
292     default: ['CREATE']
293   NodeIndex:
294     type: number
295     default: 0
296   SoftwareConfigTransport:
297     default: POLL_SERVER_CFN
298     description: |
299       How the server should receive the metadata required for software configuration.
300     type: string
301     constraints:
302     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
303   CloudDomain:
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: OvercloudControlFlavor}
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         aodh_internal_url: { get_param: [ EndpointMap, AodhInternal, uri ] }
517         aodh_public_url: { get_param: [ EndpointMap, AodhPublic, uri ] }
518         aodh_admin_url: { get_param: [ EndpointMap, AodhAdmin, uri ] }
519         ceilometer_coordination_url:
520           list_join:
521             - ''
522             - - 'redis://:'
523               - {get_param: RedisPassword}
524               - '@'
525               - {get_param: RedisVirtualIPUri}
526               - ':6379/'
527         gnocchi_internal_url: {get_param: [EndpointMap, GnocchiInternal, uri]}
528         gnocchi_public_url: { get_param: [ EndpointMap, GnocchiPublic, uri ] }
529         gnocchi_admin_url: { get_param: [ EndpointMap, GnocchiAdmin, uri ] }
530         nova_enable_db_purge: {get_param: NovaEnableDBPurge}
531         nova_ipv6: {get_param: NovaIPv6}
532         corosync_ipv6: {get_param: CorosyncIPv6}
533         memcached_ipv6: {get_param: MemcachedIPv6}
534         nova_password: {get_param: NovaPassword}
535         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
536         instance_name_template: {get_param: InstanceNameTemplate}
537         fencing_config: {get_param: FencingConfig}
538         pcsd_password: {get_param: PcsdPassword}
539         rabbit_username: {get_param: RabbitUserName}
540         rabbit_password: {get_param: RabbitPassword}
541         rabbit_cookie: {get_param: RabbitCookie}
542         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
543         rabbit_client_port: {get_param: RabbitClientPort}
544         control_virtual_interface: {get_param: ControlVirtualInterface}
545         public_virtual_interface: {get_param: PublicVirtualInterface}
546         swift_hash_suffix: {get_param: SwiftHashSuffix}
547         enable_package_install: {get_param: EnablePackageInstall}
548         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
549         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
550         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
551         cinder_iscsi_network:
552           str_replace:
553             template: "'IP'"
554             params:
555               IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
556         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
557         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
558         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
559         glance_api_servers: { get_param: [EndpointMap, GlanceInternal, uri]}
560         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
561         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
562         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
563         keystone_region: {get_param: KeystoneRegion}
564         manila_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ManilaApiNetwork]}]}
565         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
566         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
567         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
568         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
569         aodh_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
570         gnocchi_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
571         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
572         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
573         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
574         horizon_subnet:
575           str_replace:
576             template: "['SUBNET']"
577             params:
578               SUBNET: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
579         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
580         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
581         redis_vip: {get_param: RedisVirtualIP}
582         sahara_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
583         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
584         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
585         mysql_virtual_ip: {get_param: MysqlVirtualIP}
586         ceph_cluster_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
587         ceph_public_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
588         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
589         ironic_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
590
591   # Map heat metadata into hiera datafiles
592   ControllerConfig:
593     type: OS::Heat::StructuredConfig
594     properties:
595       group: os-apply-config
596       config:
597         hiera:
598           hierarchy:
599             - '"%{::uuid}"'
600             - heat_config_%{::deploy_config_name}
601             - controller_extraconfig
602             - extraconfig
603             - service_configs
604             - service_names
605             - controller
606             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
607             - ceph_cluster # provided by CephClusterConfig
608             - ceph
609             - bootstrap_node # provided by BootstrapNodeConfig
610             - all_nodes # provided by allNodesConfig
611             - vip_data # provided by vip-config
612             - '"%{::osfamily}"'
613             - network
614             - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
615             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
616             - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
617             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
618             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
619             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
620             - midonet_data #Optionally provided by AllNodesExtraConfig
621           merge_behavior: deeper
622           datafiles:
623             service_names:
624               mapped_data:
625                 service_names: {get_param: ServiceNames}
626             service_configs:
627               mapped_data:
628                 map_replace:
629                   - {get_param: ServiceConfigSettings}
630                   - values: {get_attr: [NetIpMap, net_ip_map]}
631             controller_extraconfig:
632               mapped_data:
633                 map_merge:
634                   - {get_param: controllerExtraConfig}
635                   - {get_param: ControllerExtraConfig}
636             extraconfig:
637               mapped_data: {get_param: ExtraConfig}
638             network:
639               mapped_data:
640                 net_ip_map: {get_attr: [NetIpMap, net_ip_map]}
641                 net_ip_subnet_map: {get_attr: [NetIpMap, net_ip_subnet_map]}
642                 net_ip_uri_map: {get_attr: [NetIpMap, net_ip_uri_map]}
643             ceph:
644               mapped_data:
645                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
646                 ceph::profile::params::public_network: {get_input: ceph_public_network}
647                 ceph::profile::params::public_addr: {get_input: ceph_public_ip}
648             controller:
649               mapped_data: # data supplied directly to this deployment configuration, etc
650                 bootstack_nodeid: {get_input: bootstack_nodeid}
651
652                 # Pacemaker
653                 enable_fencing: {get_input: enable_fencing}
654                 enable_load_balancer: {get_input: enable_load_balancer}
655                 hacluster_pwd: {get_input: pcsd_password}
656                 corosync_ipv6: {get_input: corosync_ipv6}
657                 tripleo::fencing::config: {get_input: fencing_config}
658
659                 # Swift
660                 # FIXME: need to move proxy_local_net_ip into swift-proxy.yaml
661                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
662                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
663                 swift::swift_hash_path_suffix: {get_input: swift_hash_suffix}
664
665                 # Cinder
666                 tripleo::profile::base::cinder::volume::iscsi::cinder_iscsi_address: {get_input: cinder_iscsi_network}
667                 cinder::api::bind_host: {get_input: cinder_api_network}
668
669                 # Glance
670                 glance::api::bind_host: {get_input: glance_api_network}
671                 glance::registry::bind_host: {get_input: glance_registry_network}
672
673                 # Heat
674                 heat::api::bind_host: {get_input: heat_api_network}
675                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
676                 heat::api_cfn::bind_host: {get_input: heat_api_network}
677                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
678
679                 # Keystone
680                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
681                 keystone::public_bind_host: {get_input: keystone_public_api_network}
682                 keystone::wsgi::apache::bind_host: {get_input: keystone_public_api_network}
683                 keystone::wsgi::apache::admin_bind_host: {get_input: keystone_admin_api_network}
684
685                 # Manila
686                 manila::api::bind_host: {get_input: manila_api_network}
687
688                 # MongoDB
689                 mongodb::server::bind_ip: {get_input: mongo_db_network}
690
691                 # MySQL
692                 admin_password: {get_input: admin_password}
693                 enable_galera: {get_input: enable_galera}
694                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
695                 mysql_max_connections: {get_input: mysql_max_connections}
696                 mysql::server::root_password: {get_input: mysql_root_password}
697                 mysql_clustercheck_password: {get_input: mysql_clustercheck_password}
698                 mysql_cluster_name: {get_input: mysql_cluster_name}
699                 mysql_bind_host: {get_input: mysql_network}
700                 mysql_virtual_ip: {get_input: mysql_virtual_ip}
701
702                 # Neutron
703                 neutron::bind_host: {get_input: neutron_api_network}
704                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
705                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
706
707                 # Aodh
708                 aodh::api::host: {get_input: aodh_api_network}
709                 aodh::wsgi::apache::bind_host: {get_input: aodh_api_network}
710
711                 # Ceilometer
712                 ceilometer::api::host: {get_input: ceilometer_api_network}
713                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
714                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
715
716                 # Gnocchi
717                 gnocchi::wsgi::apache::bind_host: {get_input: gnocchi_api_network}
718                 gnocchi::api::host: {get_input: gnocchi_api_network}
719                 gnocchi::api::keystone_auth_uri: {get_input: keystone_auth_uri}
720                 gnocchi::api::keystone_identity_uri: {get_input: keystone_identity_uri}
721                 gnocchi::storage::swift::swift_authurl: {get_input: keystone_auth_uri}
722                 gnocchi::keystone::auth::public_url: {get_input: gnocchi_public_url }
723                 gnocchi::keystone::auth::internal_url: {get_input: gnocchi_internal_url }
724                 gnocchi::keystone::auth::admin_url: {get_input: gnocchi_admin_url }
725                 gnocchi::keystone::auth::region: {get_input: keystone_region}
726
727                 # Nova
728                 nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
729                 nova::use_ipv6: {get_input: nova_ipv6}
730                 nova::api::auth_uri: {get_input: keystone_auth_uri}
731                 nova::api::identity_uri: {get_input: keystone_identity_uri}
732                 nova::api::api_bind_address: {get_input: nova_api_network}
733                 nova::api::metadata_listen: {get_input: nova_metadata_network}
734                 nova::api::admin_password: {get_input: nova_password}
735                 nova::glance_api_servers: {get_input: glance_api_servers}
736                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
737                 nova::api::instance_name_template: {get_input: instance_name_template}
738                 nova::vncproxy::host: {get_input: nova_api_network}
739                 nova_enable_db_purge: {get_input: nova_enable_db_purge}
740
741                 # Horizon
742                 apache::mod::remoteip::proxy_ips: {get_input: horizon_subnet}
743                 apache::ip: {get_input: horizon_network}
744                 horizon::django_debug: {get_input: debug}
745                 horizon::secret_key: {get_input: horizon_secret}
746                 horizon::bind_address: {get_input: horizon_network}
747                 horizon::keystone_url: {get_input: keystone_auth_uri}
748
749                 # Sahara
750                 sahara::host: {get_input: sahara_api_network}
751
752                 # RabbitMQ
753                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
754                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
755                 # Redis
756                 redis::bind: {get_input: redis_network}
757                 redis_vip: {get_input: redis_vip}
758                 # Firewall
759                 tripleo::firewall::manage_firewall: {get_input: manage_firewall}
760                 tripleo::firewall::purge_firewall_rules: {get_input: purge_firewall_rules}
761                 # Misc
762                 memcached_ipv6: {get_input: memcached_ipv6}
763                 memcached::listen_ip: {get_input: memcached_network}
764                 control_virtual_interface: {get_input: control_virtual_interface}
765                 public_virtual_interface: {get_input: public_virtual_interface}
766                 tripleo::keepalived::control_virtual_interface: {get_input: control_virtual_interface}
767                 tripleo::keepalived::public_virtual_interface: {get_input: public_virtual_interface}
768                 tripleo::haproxy::control_virtual_interface: {get_input: control_virtual_interface}
769                 tripleo::haproxy::public_virtual_interface: {get_input: public_virtual_interface}
770                 tripleo::haproxy::haproxy_log_address: {get_input: haproxy_log_address}
771                 tripleo::haproxy::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
772                 tripleo::haproxy::haproxy_stats_user: {get_input: haproxy_stats_user}
773                 tripleo::haproxy::haproxy_stats_password: {get_input: haproxy_stats_password}
774                 tripleo::haproxy::redis_password: {get_input: redis_password}
775                 tripleo::packages::enable_install: {get_input: enable_package_install}
776                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
777
778   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
779   ControllerExtraConfigPre:
780     depends_on: ControllerDeployment
781     type: OS::TripleO::ControllerExtraConfigPre
782     properties:
783         server: {get_resource: Controller}
784
785   # Hook for site-specific additional pre-deployment config,
786   # applying to all nodes, e.g node registration/unregistration
787   NodeExtraConfig:
788     depends_on: [ControllerExtraConfigPre, NodeTLSData]
789     type: OS::TripleO::NodeExtraConfig
790     properties:
791         server: {get_resource: Controller}
792
793   UpdateConfig:
794     type: OS::TripleO::Tasks::PackageUpdate
795
796   UpdateDeployment:
797     type: OS::Heat::SoftwareDeployment
798     properties:
799       name: UpdateDeployment
800       config: {get_resource: UpdateConfig}
801       server: {get_resource: Controller}
802       input_values:
803         update_identifier:
804           get_param: UpdateIdentifier
805
806 outputs:
807   ip_address:
808     description: IP address of the server in the ctlplane network
809     value: {get_attr: [Controller, networks, ctlplane, 0]}
810   external_ip_address:
811     description: IP address of the server in the external network
812     value: {get_attr: [ExternalPort, ip_address]}
813   internal_api_ip_address:
814     description: IP address of the server in the internal_api network
815     value: {get_attr: [InternalApiPort, ip_address]}
816   storage_ip_address:
817     description: IP address of the server in the storage network
818     value: {get_attr: [StoragePort, ip_address]}
819   storage_mgmt_ip_address:
820     description: IP address of the server in the storage_mgmt network
821     value: {get_attr: [StorageMgmtPort, ip_address]}
822   tenant_ip_address:
823     description: IP address of the server in the tenant network
824     value: {get_attr: [TenantPort, ip_address]}
825   management_ip_address:
826     description: IP address of the server in the management network
827     value: {get_attr: [ManagementPort, ip_address]}
828   hostname:
829     description: Hostname of the server
830     value: {get_attr: [Controller, name]}
831   hosts_entry:
832     description: >
833       Server's IP address and hostname in the /etc/hosts format
834     value:
835       str_replace:
836         template: |
837           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
838           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
839           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
840           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
841           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
842           TENANTIP TENANTHOST.DOMAIN TENANTHOST
843           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
844         params:
845           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
846           DOMAIN: {get_param: CloudDomain}
847           PRIMARYHOST: {get_attr: [Controller, name]}
848           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
849           EXTERNALHOST:
850             list_join:
851             - '.'
852             - - {get_attr: [Controller, name]}
853               - external
854           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
855           INTERNAL_APIHOST:
856             list_join:
857             - '.'
858             - - {get_attr: [Controller, name]}
859               - internalapi
860           STORAGEIP: {get_attr: [StoragePort, ip_address]}
861           STORAGEHOST:
862             list_join:
863             - '.'
864             - - {get_attr: [Controller, name]}
865               - storage
866           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
867           STORAGE_MGMTHOST:
868             list_join:
869             - '.'
870             - - {get_attr: [Controller, name]}
871               - storagemgmt
872           TENANTIP: {get_attr: [TenantPort, ip_address]}
873           TENANTHOST:
874             list_join:
875             - '.'
876             - - {get_attr: [Controller, name]}
877               - tenant
878           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
879           MANAGEMENTHOST:
880             list_join:
881             - '.'
882             - - {get_attr: [Controller, name]}
883               - management
884   nova_server_resource:
885     description: Heat resource handle for the Nova compute server
886     value:
887       {get_resource: Controller}
888   swift_device:
889     description: Swift device formatted for swift-ring-builder
890     value:
891       str_replace:
892         template: 'r1z1-IP:%PORT%/d1'
893         params:
894           IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
895   swift_proxy_memcache:
896     description: Swift proxy-memcache value
897     value:
898       str_replace:
899         template: "IP:11211"
900         params:
901           IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
902   tls_key_modulus_md5:
903     description: MD5 checksum of the TLS Key Modulus
904     value: {get_attr: [NodeTLSData, key_modulus_md5]}
905   tls_cert_modulus_md5:
906     description: MD5 checksum of the TLS Certificate Modulus
907     value: {get_attr: [NodeTLSData, cert_modulus_md5]}