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