Convert Swift ringbuilder to composable services format
[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   Image:
121     type: string
122     default: overcloud-control
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   SchedulerHints:
315     type: json
316     description: Optional scheduler hints to pass to nova
317     default: {}
318   ServiceConfigSettings:
319     type: json
320     default: {}
321   ConfigCommand:
322     type: string
323     description: Command which will be run whenever configuration data changes
324     default: os-refresh-config --timeout 14400
325
326 parameter_groups:
327 - label: deprecated
328   description: Do not use deprecated params, they will be removed.
329   parameters:
330   - controllerExtraConfig
331
332 resources:
333
334   Controller:
335     type: OS::TripleO::Server
336     metadata:
337       os-collect-config:
338         command: {get_param: ConfigCommand}
339     properties:
340       image: {get_param: Image}
341       image_update_policy: {get_param: ImageUpdatePolicy}
342       flavor: {get_param: Flavor}
343       key_name: {get_param: KeyName}
344       networks:
345         - network: ctlplane
346       user_data_format: SOFTWARE_CONFIG
347       user_data: {get_resource: UserData}
348       name:
349         str_replace:
350             template: {get_param: Hostname}
351             params: {get_param: HostnameMap}
352       software_config_transport: {get_param: SoftwareConfigTransport}
353       metadata: {get_param: ServerMetadata}
354       scheduler_hints: {get_param: SchedulerHints}
355
356   # Combine the NodeAdminUserData and NodeUserData mime archives
357   UserData:
358     type: OS::Heat::MultipartMime
359     properties:
360       parts:
361       - config: {get_resource: NodeAdminUserData}
362         type: multipart
363       - config: {get_resource: NodeUserData}
364         type: multipart
365
366   # Creates the "heat-admin" user if configured via the environment
367   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
368   NodeAdminUserData:
369     type: OS::TripleO::NodeAdminUserData
370
371   # For optional operator additional userdata
372   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
373   NodeUserData:
374     type: OS::TripleO::NodeUserData
375
376   ExternalPort:
377     type: OS::TripleO::Controller::Ports::ExternalPort
378     properties:
379       IPPool: {get_param: ControllerIPs}
380       NodeIndex: {get_param: NodeIndex}
381       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
382
383   InternalApiPort:
384     type: OS::TripleO::Controller::Ports::InternalApiPort
385     properties:
386       IPPool: {get_param: ControllerIPs}
387       NodeIndex: {get_param: NodeIndex}
388       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
389
390   StoragePort:
391     type: OS::TripleO::Controller::Ports::StoragePort
392     properties:
393       IPPool: {get_param: ControllerIPs}
394       NodeIndex: {get_param: NodeIndex}
395       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
396
397   StorageMgmtPort:
398     type: OS::TripleO::Controller::Ports::StorageMgmtPort
399     properties:
400       IPPool: {get_param: ControllerIPs}
401       NodeIndex: {get_param: NodeIndex}
402       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
403
404   TenantPort:
405     type: OS::TripleO::Controller::Ports::TenantPort
406     properties:
407       IPPool: {get_param: ControllerIPs}
408       NodeIndex: {get_param: NodeIndex}
409       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
410
411   ManagementPort:
412     type: OS::TripleO::Controller::Ports::ManagementPort
413     properties:
414       IPPool: {get_param: ControllerIPs}
415       NodeIndex: {get_param: NodeIndex}
416       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
417
418   NetIpMap:
419     type: OS::TripleO::Network::Ports::NetIpMap
420     properties:
421       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
422       ExternalIp: {get_attr: [ExternalPort, ip_address]}
423       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
424       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
425       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
426       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
427       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
428       StorageIp: {get_attr: [StoragePort, ip_address]}
429       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
430       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
431       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
432       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
433       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
434       TenantIp: {get_attr: [TenantPort, ip_address]}
435       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
436       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
437       ManagementIp: {get_attr: [ManagementPort, ip_address]}
438       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
439       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
440
441   NetworkConfig:
442     type: OS::TripleO::Controller::Net::SoftwareConfig
443     properties:
444       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
445       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
446       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
447       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
448       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
449       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
450       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
451
452   NetworkDeployment:
453     type: OS::TripleO::SoftwareDeployment
454     properties:
455       name: NetworkDeployment
456       config: {get_resource: NetworkConfig}
457       server: {get_resource: Controller}
458       actions: {get_param: NetworkDeploymentActions}
459       input_values:
460         bridge_name: br-ex
461         interface_name: {get_param: NeutronPublicInterface}
462
463   # Resource for site-specific injection of root certificate
464   NodeTLSCAData:
465     depends_on: NetworkDeployment
466     type: OS::TripleO::NodeTLSCAData
467     properties:
468       server: {get_resource: Controller}
469
470   # Resource for site-specific passing of private keys/certificates
471   NodeTLSData:
472     depends_on: NodeTLSCAData
473     type: OS::TripleO::NodeTLSData
474     properties:
475       server: {get_resource: Controller}
476       NodeIndex: {get_param: NodeIndex}
477
478
479   ControllerDeployment:
480     type: OS::TripleO::SoftwareDeployment
481     depends_on: NetworkDeployment
482     properties:
483       name: ControllerDeployment
484       config: {get_resource: ControllerConfig}
485       server: {get_resource: Controller}
486       input_values:
487         bootstack_nodeid: {get_attr: [Controller, name]}
488         haproxy_log_address: {get_param: HAProxySyslogAddress}
489         haproxy_stats_password: {get_param: HAProxyStatsPassword}
490         haproxy_stats_user: {get_param: HAProxyStatsUser}
491         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
492         horizon_secret: {get_param: HorizonSecret}
493         admin_password: {get_param: AdminPassword}
494         debug: {get_param: Debug}
495         cinder_public_url: {get_param: [EndpointMap, CinderPublic, uri]}
496         cinder_internal_url: {get_param: [EndpointMap, CinderInternal, uri]}
497         cinder_admin_url: {get_param: [EndpointMap, CinderAdmin, uri]}
498         cinder_public_url_v2: {get_param: [EndpointMap, CinderV2Public, uri]}
499         cinder_internal_url_v2: {get_param: [EndpointMap, CinderV2Internal, uri]}
500         cinder_admin_url_v2: {get_param: [EndpointMap, CinderV2Admin, uri]}
501         keystone_identity_uri: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
502         keystone_auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
503         keystone_ec2_uri: { get_param: [EndpointMap, KeystoneEC2, uri] }
504         enable_fencing: {get_param: EnableFencing}
505         enable_galera: {get_param: EnableGalera}
506         enable_load_balancer: {get_param: EnableLoadBalancer}
507         manage_firewall: {get_param: ManageFirewall}
508         purge_firewall_rules: {get_param: PurgeFirewallRules}
509         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
510         mysql_max_connections: {get_param: MysqlMaxConnections}
511         mysql_root_password: {get_param: MysqlRootPassword}
512         mysql_clustercheck_password: {get_param: MysqlClustercheckPassword}
513         mysql_cluster_name:
514           str_replace:
515             template: tripleo-CLUSTER
516             params:
517               CLUSTER: {get_param: MysqlClusterUniquePart}
518         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
519         neutron_password: {get_param: NeutronPassword}
520         neutron_internal_url: { get_param: [ EndpointMap, NeutronInternal, uri ] }
521         neutron_public_url: { get_param: [ EndpointMap, NeutronPublic, uri ] }
522         neutron_admin_url: { get_param: [ EndpointMap, NeutronAdmin, uri ] }
523         neutron_auth_url: { get_param: [ EndpointMap, KeystoneV3Admin, uri ] }
524         nova_internal_url: { get_param: [ EndpointMap, NovaInternal, uri ] }
525         aodh_password: {get_param: AodhPassword}
526         aodh_internal_url: { get_param: [ EndpointMap, AodhInternal, uri ] }
527         aodh_public_url: { get_param: [ EndpointMap, AodhPublic, uri ] }
528         aodh_admin_url: { get_param: [ EndpointMap, AodhAdmin, uri ] }
529         ceilometer_coordination_url:
530           list_join:
531             - ''
532             - - 'redis://:'
533               - {get_param: RedisPassword}
534               - '@'
535               - {get_param: RedisVirtualIPUri}
536               - ':6379/'
537         aodh_dsn:
538           list_join:
539             - ''
540             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
541               - '://aodh:'
542               - {get_param: AodhPassword}
543               - '@'
544               - {get_param: [EndpointMap, MysqlInternal, host]}
545               - '/aodh'
546         gnocchi_internal_url: {get_param: [EndpointMap, GnocchiInternal, uri]}
547         gnocchi_public_url: { get_param: [ EndpointMap, GnocchiPublic, uri ] }
548         gnocchi_admin_url: { get_param: [ EndpointMap, GnocchiAdmin, uri ] }
549         nova_enable_db_purge: {get_param: NovaEnableDBPurge}
550         nova_ipv6: {get_param: NovaIPv6}
551         corosync_ipv6: {get_param: CorosyncIPv6}
552         memcached_ipv6: {get_param: MemcachedIPv6}
553         nova_password: {get_param: NovaPassword}
554         nova_dsn:
555           list_join:
556             - ''
557             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
558               - '://nova:'
559               - {get_param: NovaPassword}
560               - '@'
561               - {get_param: [EndpointMap, MysqlInternal, host]}
562               - '/nova'
563         nova_api_dsn:
564           list_join:
565             - ''
566             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
567               - '://nova_api:'
568               - {get_param: NovaPassword}
569               - '@'
570               - {get_param: [EndpointMap, MysqlInternal, host]}
571               - '/nova_api'
572         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
573         instance_name_template: {get_param: InstanceNameTemplate}
574         nova_public_url: {get_param: [EndpointMap, NovaPublic, uri]}
575         nova_internal_url: {get_param: [EndpointMap, NovaInternal, uri]}
576         nova_admin_url: {get_param: [EndpointMap, NovaAdmin, uri]}
577         fencing_config: {get_param: FencingConfig}
578         pcsd_password: {get_param: PcsdPassword}
579         rabbit_username: {get_param: RabbitUserName}
580         rabbit_password: {get_param: RabbitPassword}
581         rabbit_cookie: {get_param: RabbitCookie}
582         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
583         rabbit_client_port: {get_param: RabbitClientPort}
584         control_virtual_interface: {get_param: ControlVirtualInterface}
585         public_virtual_interface: {get_param: PublicVirtualInterface}
586         swift_hash_suffix: {get_param: SwiftHashSuffix}
587         enable_package_install: {get_param: EnablePackageInstall}
588         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
589         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
590         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
591         cinder_iscsi_network:
592           str_replace:
593             template: "'IP'"
594             params:
595               IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
596         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
597         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
598         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
599         glance_api_servers: { get_param: [EndpointMap, GlanceInternal, uri]}
600         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
601         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
602         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
603         keystone_region: {get_param: KeystoneRegion}
604         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
605         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
606         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
607         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
608         aodh_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
609         gnocchi_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
610         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
611         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
612         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
613         horizon_subnet:
614           str_replace:
615             template: "['SUBNET']"
616             params:
617               SUBNET: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
618         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
619         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
620         redis_vip: {get_param: RedisVirtualIP}
621         sahara_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
622         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
623         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
624         mysql_virtual_ip: {get_param: MysqlVirtualIP}
625         ceph_cluster_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
626         ceph_public_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
627         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
628         ironic_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
629
630   # Map heat metadata into hiera datafiles
631   ControllerConfig:
632     type: OS::Heat::StructuredConfig
633     properties:
634       group: os-apply-config
635       config:
636         hiera:
637           hierarchy:
638             - '"%{::uuid}"'
639             - heat_config_%{::deploy_config_name}
640             - controller_extraconfig
641             - extraconfig
642             - service_configs
643             - controller
644             - database
645             - object
646             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
647             - ceph_cluster # provided by CephClusterConfig
648             - ceph
649             - bootstrap_node # provided by BootstrapNodeConfig
650             - all_nodes # provided by allNodesConfig
651             - vip_data # provided by vip-config
652             - '"%{::osfamily}"'
653             - common
654             - network
655             - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
656             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
657             - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
658             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
659             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
660             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
661             - midonet_data #Optionally provided by AllNodesExtraConfig
662           merge_behavior: deeper
663           datafiles:
664             service_configs:
665               mapped_data: {get_param: ServiceConfigSettings}
666             controller_extraconfig:
667               mapped_data:
668                 map_merge:
669                   - {get_param: controllerExtraConfig}
670                   - {get_param: ControllerExtraConfig}
671             extraconfig:
672               mapped_data: {get_param: ExtraConfig}
673             common:
674               raw_data: {get_file: hieradata/common.yaml}
675             network:
676               mapped_data:
677                 net_ip_map: {get_attr: [NetIpMap, net_ip_map]}
678                 net_ip_subnet_map: {get_attr: [NetIpMap, net_ip_subnet_map]}
679                 net_ip_uri_map: {get_attr: [NetIpMap, net_ip_uri_map]}
680             ceph:
681               raw_data: {get_file: hieradata/ceph.yaml}
682               mapped_data:
683                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
684                 ceph::profile::params::public_network: {get_input: ceph_public_network}
685                 ceph::profile::params::public_addr: {get_input: ceph_public_ip}
686             database:
687               raw_data: {get_file: hieradata/database.yaml}
688             object:
689               raw_data: {get_file: hieradata/object.yaml}
690             controller:
691               raw_data: {get_file: hieradata/controller.yaml}
692               mapped_data: # data supplied directly to this deployment configuration, etc
693                 bootstack_nodeid: {get_input: bootstack_nodeid}
694
695                 # Pacemaker
696                 enable_fencing: {get_input: enable_fencing}
697                 enable_load_balancer: {get_input: enable_load_balancer}
698                 hacluster_pwd: {get_input: pcsd_password}
699                 corosync_ipv6: {get_input: corosync_ipv6}
700                 tripleo::fencing::config: {get_input: fencing_config}
701
702                 # Swift
703                 # FIXME: need to move proxy_local_net_ip into swift-proxy.yaml
704                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
705                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
706                 swift::swift_hash_path_suffix: {get_input: swift_hash_suffix}
707
708                 # Cinder
709                 tripleo::profile::base::cinder::volume::iscsi::cinder_iscsi_address: {get_input: cinder_iscsi_network}
710                 cinder::api::bind_host: {get_input: cinder_api_network}
711                 cinder::keystone::auth::public_url: {get_input: cinder_public_url }
712                 cinder::keystone::auth::internal_url: {get_input: cinder_internal_url }
713                 cinder::keystone::auth::admin_url: {get_input: cinder_admin_url }
714                 cinder::keystone::auth::public_url_v2: {get_input: cinder_public_url_v2 }
715                 cinder::keystone::auth::internal_url_v2: {get_input: cinder_internal_url_v2 }
716                 cinder::keystone::auth::admin_url_v2: {get_input: cinder_admin_url_v2 }
717                 cinder::keystone::auth::password: {get_input: cinder_password }
718                 cinder::keystone::auth::region: {get_input: keystone_region}
719
720                 # Glance
721                 glance::api::bind_host: {get_input: glance_api_network}
722                 glance::registry::bind_host: {get_input: glance_registry_network}
723                 glance::keystone::auth::region: {get_input: keystone_region}
724
725                 # Heat
726                 heat::api::bind_host: {get_input: heat_api_network}
727                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
728                 heat::api_cfn::bind_host: {get_input: heat_api_network}
729                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
730
731                 # Keystone
732                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
733                 keystone::public_bind_host: {get_input: keystone_public_api_network}
734                 keystone::wsgi::apache::bind_host: {get_input: keystone_public_api_network}
735                 keystone::wsgi::apache::admin_bind_host: {get_input: keystone_admin_api_network}
736
737                 # MongoDB
738                 mongodb::server::bind_ip: {get_input: mongo_db_network}
739
740                 # MySQL
741                 admin_password: {get_input: admin_password}
742                 enable_galera: {get_input: enable_galera}
743                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
744                 mysql_max_connections: {get_input: mysql_max_connections}
745                 mysql::server::root_password: {get_input: mysql_root_password}
746                 mysql_clustercheck_password: {get_input: mysql_clustercheck_password}
747                 mysql_cluster_name: {get_input: mysql_cluster_name}
748                 mysql_bind_host: {get_input: mysql_network}
749                 mysql_virtual_ip: {get_input: mysql_virtual_ip}
750
751                 # Neutron
752                 neutron::bind_host: {get_input: neutron_api_network}
753                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
754                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
755                 neutron::keystone::auth::public_url: {get_input: neutron_public_url }
756                 neutron::keystone::auth::internal_url: {get_input: neutron_internal_url }
757                 neutron::keystone::auth::admin_url: {get_input: neutron_admin_url }
758                 neutron::keystone::auth::password: {get_input: neutron_password }
759                 neutron::keystone::auth::region: {get_input: keystone_region}
760
761                 # Ceilometer
762                 ceilometer::api::host: {get_input: ceilometer_api_network}
763                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
764                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
765
766                 # Aodh
767                 aodh_mysql_conn_string: {get_input: aodh_dsn}
768                 aodh::rabbit_userid: {get_input: rabbit_username}
769                 aodh::rabbit_password: {get_input: rabbit_password}
770                 aodh::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
771                 aodh::rabbit_port: {get_input: rabbit_client_port}
772                 aodh::debug: {get_input: debug}
773                 aodh::wsgi::apache::ssl: false
774                 aodh::wsgi::apache::bind_host: {get_input: aodh_api_network}
775                 aodh::api::service_name: 'httpd'
776                 aodh::api::host: {get_input: aodh_api_network}
777                 aodh::api::keystone_password: {get_input: aodh_password}
778                 aodh::api::keystone_auth_uri: {get_input: keystone_auth_uri}
779                 aodh::api::keystone_identity_uri: {get_input: keystone_identity_uri}
780                 aodh::auth::auth_url: {get_input: keystone_auth_uri}
781                 aodh::auth::auth_password: {get_input: aodh_password}
782                 aodh::db::mysql::password: {get_input: aodh_password}
783                 # for a migration path from ceilometer-alarm to aodh, we use the same database & coordination
784                 aodh::evaluator::coordination_url: {get_input: ceilometer_coordination_url}
785                 aodh::keystone::auth::public_url: {get_input: aodh_public_url }
786                 aodh::keystone::auth::internal_url: {get_input: aodh_internal_url }
787                 aodh::keystone::auth::admin_url: {get_input: aodh_admin_url }
788                 aodh::keystone::auth::password: {get_input: aodh_password }
789                 aodh::keystone::auth::region: {get_input: keystone_region}
790
791                 # Gnocchi
792                 gnocchi::wsgi::apache::bind_host: {get_input: gnocchi_api_network}
793                 gnocchi::api::host: {get_input: gnocchi_api_network}
794                 gnocchi::api::keystone_auth_uri: {get_input: keystone_auth_uri}
795                 gnocchi::api::keystone_identity_uri: {get_input: keystone_identity_uri}
796                 gnocchi::storage::swift::swift_authurl: {get_input: keystone_auth_uri}
797                 gnocchi::keystone::auth::public_url: {get_input: gnocchi_public_url }
798                 gnocchi::keystone::auth::internal_url: {get_input: gnocchi_internal_url }
799                 gnocchi::keystone::auth::admin_url: {get_input: gnocchi_admin_url }
800                 gnocchi::keystone::auth::region: {get_input: keystone_region}
801
802                 # Nova
803                 nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
804                 nova::use_ipv6: {get_input: nova_ipv6}
805                 nova::api::auth_uri: {get_input: keystone_auth_uri}
806                 nova::api::identity_uri: {get_input: keystone_identity_uri}
807                 nova::api::api_bind_address: {get_input: nova_api_network}
808                 nova::api::metadata_listen: {get_input: nova_metadata_network}
809                 nova::api::admin_password: {get_input: nova_password}
810                 nova::database_connection: {get_input: nova_dsn}
811                 nova::api_database_connection: {get_input: nova_api_dsn}
812                 nova::glance_api_servers: {get_input: glance_api_servers}
813                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
814                 nova::api::instance_name_template: {get_input: instance_name_template}
815                 nova::network::neutron::neutron_password: {get_input: neutron_password}
816                 nova::network::neutron::neutron_url: {get_input: neutron_internal_url}
817                 nova::network::neutron::neutron_auth_url: {get_input: neutron_auth_url}
818                 nova::vncproxy::host: {get_input: nova_api_network}
819                 nova::db::mysql::password: {get_input: nova_password}
820                 nova::db::mysql_api::password: {get_input: nova_password}
821                 nova_enable_db_purge: {get_input: nova_enable_db_purge}
822                 nova::keystone::auth::public_url: {get_input: nova_public_url}
823                 nova::keystone::auth::internal_url: {get_input: nova_internal_url}
824                 nova::keystone::auth::admin_url: {get_input: nova_admin_url}
825                 nova::keystone::auth::password: {get_input: nova_password }
826                 nova::keystone::auth::region: {get_input: keystone_region}
827
828                 # Horizon
829                 apache::mod::remoteip::proxy_ips: {get_input: horizon_subnet}
830                 apache::ip: {get_input: horizon_network}
831                 horizon::django_debug: {get_input: debug}
832                 horizon::secret_key: {get_input: horizon_secret}
833                 horizon::bind_address: {get_input: horizon_network}
834                 horizon::keystone_url: {get_input: keystone_auth_uri}
835
836                 # RabbitMQ
837                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
838                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
839                 # Redis
840                 redis::bind: {get_input: redis_network}
841                 redis_vip: {get_input: redis_vip}
842                 # Firewall
843                 tripleo::firewall::manage_firewall: {get_input: manage_firewall}
844                 tripleo::firewall::purge_firewall_rules: {get_input: purge_firewall_rules}
845                 # Misc
846                 memcached_ipv6: {get_input: memcached_ipv6}
847                 memcached::listen_ip: {get_input: memcached_network}
848                 control_virtual_interface: {get_input: control_virtual_interface}
849                 public_virtual_interface: {get_input: public_virtual_interface}
850                 tripleo::keepalived::control_virtual_interface: {get_input: control_virtual_interface}
851                 tripleo::keepalived::public_virtual_interface: {get_input: public_virtual_interface}
852                 tripleo::haproxy::control_virtual_interface: {get_input: control_virtual_interface}
853                 tripleo::haproxy::public_virtual_interface: {get_input: public_virtual_interface}
854                 tripleo::haproxy::haproxy_log_address: {get_input: haproxy_log_address}
855                 tripleo::haproxy::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
856                 tripleo::haproxy::haproxy_stats_user: {get_input: haproxy_stats_user}
857                 tripleo::haproxy::haproxy_stats_password: {get_input: haproxy_stats_password}
858                 tripleo::haproxy::redis_password: {get_input: redis_password}
859                 tripleo::packages::enable_install: {get_input: enable_package_install}
860                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
861
862   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
863   ControllerExtraConfigPre:
864     depends_on: ControllerDeployment
865     type: OS::TripleO::ControllerExtraConfigPre
866     properties:
867         server: {get_resource: Controller}
868
869   # Hook for site-specific additional pre-deployment config,
870   # applying to all nodes, e.g node registration/unregistration
871   NodeExtraConfig:
872     depends_on: [ControllerExtraConfigPre, NodeTLSData]
873     type: OS::TripleO::NodeExtraConfig
874     properties:
875         server: {get_resource: Controller}
876
877   UpdateConfig:
878     type: OS::TripleO::Tasks::PackageUpdate
879
880   UpdateDeployment:
881     type: OS::Heat::SoftwareDeployment
882     properties:
883       name: UpdateDeployment
884       config: {get_resource: UpdateConfig}
885       server: {get_resource: Controller}
886       input_values:
887         update_identifier:
888           get_param: UpdateIdentifier
889
890 outputs:
891   ip_address:
892     description: IP address of the server in the ctlplane network
893     value: {get_attr: [Controller, networks, ctlplane, 0]}
894   external_ip_address:
895     description: IP address of the server in the external network
896     value: {get_attr: [ExternalPort, ip_address]}
897   internal_api_ip_address:
898     description: IP address of the server in the internal_api network
899     value: {get_attr: [InternalApiPort, ip_address]}
900   storage_ip_address:
901     description: IP address of the server in the storage network
902     value: {get_attr: [StoragePort, ip_address]}
903   storage_mgmt_ip_address:
904     description: IP address of the server in the storage_mgmt network
905     value: {get_attr: [StorageMgmtPort, ip_address]}
906   tenant_ip_address:
907     description: IP address of the server in the tenant network
908     value: {get_attr: [TenantPort, ip_address]}
909   management_ip_address:
910     description: IP address of the server in the management network
911     value: {get_attr: [ManagementPort, ip_address]}
912   hostname:
913     description: Hostname of the server
914     value: {get_attr: [Controller, name]}
915   hosts_entry:
916     description: >
917       Server's IP address and hostname in the /etc/hosts format
918     value:
919       str_replace:
920         template: |
921           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
922           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
923           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
924           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
925           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
926           TENANTIP TENANTHOST.DOMAIN TENANTHOST
927           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
928         params:
929           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
930           DOMAIN: {get_param: CloudDomain}
931           PRIMARYHOST: {get_attr: [Controller, name]}
932           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
933           EXTERNALHOST:
934             list_join:
935             - '.'
936             - - {get_attr: [Controller, name]}
937               - external
938           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
939           INTERNAL_APIHOST:
940             list_join:
941             - '.'
942             - - {get_attr: [Controller, name]}
943               - internalapi
944           STORAGEIP: {get_attr: [StoragePort, ip_address]}
945           STORAGEHOST:
946             list_join:
947             - '.'
948             - - {get_attr: [Controller, name]}
949               - storage
950           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
951           STORAGE_MGMTHOST:
952             list_join:
953             - '.'
954             - - {get_attr: [Controller, name]}
955               - storagemgmt
956           TENANTIP: {get_attr: [TenantPort, ip_address]}
957           TENANTHOST:
958             list_join:
959             - '.'
960             - - {get_attr: [Controller, name]}
961               - tenant
962           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
963           MANAGEMENTHOST:
964             list_join:
965             - '.'
966             - - {get_attr: [Controller, name]}
967               - management
968   nova_server_resource:
969     description: Heat resource handle for the Nova compute server
970     value:
971       {get_resource: Controller}
972   swift_device:
973     description: Swift device formatted for swift-ring-builder
974     value:
975       str_replace:
976         template: 'r1z1-IP:%PORT%/d1'
977         params:
978           IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
979   swift_proxy_memcache:
980     description: Swift proxy-memcache value
981     value:
982       str_replace:
983         template: "IP:11211"
984         params:
985           IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
986   tls_key_modulus_md5:
987     description: MD5 checksum of the TLS Key Modulus
988     value: {get_attr: [NodeTLSData, key_modulus_md5]}
989   tls_cert_modulus_md5:
990     description: MD5 checksum of the TLS Certificate Modulus
991     value: {get_attr: [NodeTLSData, cert_modulus_md5]}