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