Merge "Composable neutron nuage plugin"
[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   AodhApiVirtualIP:
12     type: string
13     default: ''
14   AodhPassword:
15     description: The password for the aodh services.
16     type: string
17     hidden: true
18   #TODO(composable Redis): Remove the Redis password param
19   #As is used by ceilometer
20   CeilometerApiVirtualIP:
21     type: string
22     default: ''
23   CeilometerBackend:
24     default: 'mongodb'
25     description: The ceilometer backend type.
26     type: string
27   CeilometerMeteringSecret:
28     description: Secret shared by the ceilometer services.
29     type: string
30     hidden: true
31   CeilometerPassword:
32     description: The password for the ceilometer service  and db account.
33     type: string
34     hidden: true
35   CeilometerStoreEvents:
36     default: false
37     description: Whether to store events in ceilometer.
38     type: boolean
39   CeilometerMeterDispatcher:
40     default: 'database'
41     description: Dispatcher to process meter data
42     type: string
43     constraints:
44     - allowed_values: ['gnocchi', 'database']
45   CinderApiVirtualIP:
46     type: string
47     default: ''
48   CeilometerWorkers:
49     default: 0
50     description: Number of workers for Ceilometer service.
51     type: number
52   controllerExtraConfig:
53     default: {}
54     description: |
55       Deprecated. Use ControllerExtraConfig via parameter_defaults instead.
56     type: json
57   ControllerExtraConfig:
58     default: {}
59     description: |
60       Controller specific hiera configuration data to inject into the cluster.
61     type: json
62   ControllerIPs:
63     default: {}
64     description: >
65       A network mapped list of IPs to assign to Controllers in the following form:
66       {
67         "internal_api": ["a.b.c.d", "e.f.g.h"],
68         ...
69       }
70     type: json
71   ControlVirtualInterface:
72     default: 'br-ex'
73     description: Interface where virtual ip will be assigned.
74     type: string
75   CorosyncIPv6:
76     default: false
77     description: Enable IPv6 in Corosync
78     type: boolean
79   Debug:
80     default: ''
81     description: Set to True to enable debugging on all services.
82     type: string
83   EnableFencing:
84     default: false
85     description: Whether to enable fencing in Pacemaker or not.
86     type: boolean
87   EnableGalera:
88     default: true
89     description: Whether to use Galera instead of regular MariaDB.
90     type: boolean
91   EnableLoadBalancer:
92     default: true
93     description: Whether to deploy a LoadBalancer on the Controller
94     type: boolean
95   EnableCephStorage:
96     default: false
97     description: Whether to deploy Ceph Storage (OSD) on the Controller
98     type: boolean
99   EnableSwiftStorage:
100     default: true
101     description: Whether to enable Swift Storage on the Controller
102     type: boolean
103   ExtraConfig:
104     default: {}
105     description: |
106       Additional hieradata to inject into the cluster, note that
107       ControllerExtraConfig takes precedence over ExtraConfig.
108     type: json
109   FencingConfig:
110     default: {}
111     description: |
112       Pacemaker fencing configuration. The JSON should have
113       the following structure:
114         {
115           "devices": [
116             {
117               "agent": "AGENT_NAME",
118               "host_mac": "HOST_MAC_ADDRESS",
119               "params": {"PARAM_NAME": "PARAM_VALUE"}
120             }
121           ]
122         }
123       For instance:
124         {
125           "devices": [
126             {
127               "agent": "fence_xvm",
128               "host_mac": "52:54:00:aa:bb:cc",
129               "params": {
130                 "multicast_address": "225.0.0.12",
131                 "port": "baremetal_0",
132                 "manage_fw": true,
133                 "manage_key_file": true,
134                 "key_file": "/etc/fence_xvm.key",
135                 "key_file_password": "abcdef"
136               }
137             }
138           ]
139         }
140     type: json
141   Flavor:
142     description: Flavor for control nodes to request when deploying.
143     type: string
144     constraints:
145       - custom_constraint: nova.flavor
146   GnocchiBackend:
147     default: file
148     description: The short name of the Gnocchi backend to use. Should be one
149       of swift, rbd, or file
150     type: string
151     constraints:
152     - allowed_values: ['swift', 'file', 'rbd']
153   GnocchiIndexerBackend:
154     default: 'mysql'
155     description: The short name of the Gnocchi indexer backend to use.
156     type: string
157   GnocchiApiVirtualIP:
158     type: string
159     default: ''
160   GnocchiPassword:
161     description: The password for the gnocchi service and db account.
162     type: string
163     hidden: true
164   HAProxyStatsPassword:
165     description: Password for HAProxy stats endpoint
166     type: string
167   HAProxyStatsUser:
168     description: User for HAProxy stats endpoint
169     default: admin
170     type: string
171   HAProxySyslogAddress:
172     default: /dev/log
173     description: Syslog address where HAproxy will send its log
174     type: string
175   HeatAuthEncryptionKey:
176     description: Auth encryption key for heat-engine
177     type: string
178     hidden: true
179   HorizonAllowedHosts:
180     default: '*'
181     description: A list of IP/Hostname allowed to connect to horizon
182     type: comma_delimited_list
183   HorizonSecret:
184     description: Secret key for Django
185     type: string
186     hidden: true
187   Image:
188     type: string
189     default: overcloud-control
190     constraints:
191       - custom_constraint: glance.image
192   ImageUpdatePolicy:
193     default: 'REBUILD_PRESERVE_EPHEMERAL'
194     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
195     type: string
196   InstanceNameTemplate:
197     default: 'instance-%08x'
198     description: Template string to be used to generate instance names
199     type: string
200   KeyName:
201     default: default
202     description: Name of an existing Nova key pair to enable SSH access to the instances
203     type: string
204     constraints:
205       - custom_constraint: nova.keypair
206   KeystoneRegion:
207     type: string
208     default: 'regionOne'
209     description: Keystone region for endpoint
210   ManageFirewall:
211     default: false
212     description: Whether to manage IPtables rules.
213     type: boolean
214   MemcachedIPv6:
215     default: false
216     description: Enable IPv6 features in Memcached.
217     type: boolean
218   PurgeFirewallRules:
219     default: false
220     description: Whether IPtables rules should be purged before setting up the new ones.
221     type: boolean
222   SaharaApiVirtualIP:
223     type: string
224     default: ''
225   MysqlClusterUniquePart:
226     description: A unique identifier of the MySQL cluster the controller is in.
227     type: string
228     default: 'unset'  # Has to be here because of the ignored empty value bug
229     # Drop the validation: https://bugs.launchpad.net/tripleo/+bug/1405446
230     # constraints:
231     # - length: {min: 4, max: 10}
232   MysqlInnodbBufferPoolSize:
233     description: >
234         Specifies the size of the buffer pool in megabytes. Setting to
235         zero should be interpreted as "no value" and will defer to the
236         lower level default.
237     type: number
238     default: 0
239   MysqlMaxConnections:
240     description: Configures MySQL max_connections config setting
241     type: number
242     default: 4096
243   MysqlClustercheckPassword:
244     type: string
245     hidden: true
246   MysqlRootPassword:
247     type: string
248     hidden: true
249     default: ''  # Has to be here because of the ignored empty value bug
250   NeutronMetadataProxySharedSecret:
251     description: Shared secret to prevent spoofing
252     type: string
253     hidden: true
254   NeutronPassword:
255     description: The password for the neutron service and db account, used by neutron agents.
256     type: string
257     hidden: true
258   NeutronPublicInterface:
259     default: nic1
260     description: What interface to bridge onto br-ex for network nodes.
261     type: string
262   NeutronTenantMtu:
263     description: >
264       The default MTU for tenant networks. For VXLAN/GRE tunneling, this should
265       be at least 50 bytes smaller than the MTU on the physical network. This
266       value will be used to set the MTU on the virtual Ethernet device.
267       This number is related to the value of NeutronDnsmasqOptions, since that
268       will determine the MTU that is assigned to the VM host through DHCP.
269     default: 1400
270     type: number
271   NovaApiVirtualIP:
272     type: string
273     default: ''
274   NovaEnableDBPurge:
275     default: true
276     description: |
277         Whether to create cron job for purging soft deleted rows in Nova database.
278     type: boolean
279   NovaIPv6:
280     default: false
281     description: Enable IPv6 features in Nova
282     type: boolean
283   NovaPassword:
284     description: The password for the nova service and db account, used by nova-api.
285     type: string
286     hidden: true
287   NtpServer:
288     default: ''
289     description: Comma-separated list of ntp servers
290     type: comma_delimited_list
291   PcsdPassword:
292     type: string
293     description: The password for the 'pcsd' user.
294     hidden: true
295   PublicVirtualInterface:
296     default: 'br-ex'
297     description: >
298         Specifies the interface where the public-facing virtual ip will be assigned.
299         This should be int_public when a VLAN is being used.
300     type: string
301   PublicVirtualIP:
302     type: string
303     default: ''  # Has to be here because of the ignored empty value bug
304   RabbitCookie:
305     type: string
306     default: ''  # Has to be here because of the ignored empty value bug
307     hidden: true
308   RabbitPassword:
309     description: The password for RabbitMQ
310     type: string
311     hidden: true
312   RabbitUserName:
313     default: guest
314     description: The username for RabbitMQ
315     type: string
316   RabbitClientUseSSL:
317     default: false
318     description: >
319         Rabbit client subscriber parameter to specify
320         an SSL connection to the RabbitMQ host.
321     type: string
322   RabbitClientPort:
323     default: 5672
324     description: Set rabbit subscriber port, change this if using SSL
325     type: number
326   RedisPassword:
327     description: The password for Redis
328     type: string
329     hidden: true
330   RedisVirtualIP:
331     type: string
332     default: ''  # Has to be here because of the ignored empty value bug
333   RedisVirtualIPUri:
334     type: string
335     default: ''  # Has to be here because of the ignored empty value bug
336     description: An IP address which is wrapped in brackets in case of IPv6
337   SnmpdReadonlyUserName:
338     default: ro_snmp_user
339     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
340     type: string
341   SnmpdReadonlyUserPassword:
342     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
343     type: string
344     hidden: true
345   SwiftHashSuffix:
346     description: A random string to be used as a salt when hashing to determine mappings
347       in the ring.
348     hidden: true
349     type: string
350   SwiftMountCheck:
351     default: 'false'
352     description: Value of mount_check in Swift account/container/object -server.conf
353     type: boolean
354   SwiftMinPartHours:
355     type: number
356     default: 1
357     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
358   SwiftPartPower:
359     default: 10
360     description: Partition Power to use when building Swift rings
361     type: number
362   SwiftRingBuild:
363     default: true
364     description: Whether to manage Swift rings or not
365     type: boolean
366   SwiftProxyVirtualIP:
367     type: string
368     default: ''
369   SwiftReplicas:
370     type: number
371     default: 3
372     description: How many replicas to use in the swift rings.
373   TimeZone:
374     default: 'UTC'
375     description: The timezone to be set on controller nodes.
376     type: string
377   UpgradeLevelNovaCompute:
378     type: string
379     description: Nova Compute upgrade level
380     default: ''
381   VirtualIP: # DEPRECATED: use per service settings instead
382     type: string
383     default: ''  # Has to be here because of the ignored empty value bug
384   HeatApiVirtualIP:
385     type: string
386     default: ''
387   HeatApiVirtualIPUri:
388     type: string
389     default: ''
390   MysqlVirtualIP:
391     type: string
392     default: ''
393   NeutronApiVirtualIP:
394     type: string
395     default: ''
396   EnablePackageInstall:
397     default: 'false'
398     description: Set to true to enable package installation via Puppet
399     type: boolean
400   ServiceNetMap:
401     default: {}
402     description: Mapping of service_name -> network name. Typically set
403                  via parameter_defaults in the resource registry.
404     type: json
405   EndpointMap:
406     default: {}
407     description: Mapping of service endpoint -> protocol. Typically set
408                  via parameter_defaults in the resource registry.
409     type: json
410   UpdateIdentifier:
411     default: ''
412     type: string
413     description: >
414       Setting to a previously unused value during stack-update will trigger
415       package update on all nodes
416   Hostname:
417     type: string
418     default: '' # Defaults to Heat created hostname
419   HostnameMap:
420     type: json
421     default: {}
422     description: Optional mapping to override hostnames
423   NetworkDeploymentActions:
424     type: comma_delimited_list
425     description: >
426       Heat action when to apply network configuration changes
427     default: ['CREATE']
428   NodeIndex:
429     type: number
430     default: 0
431   SoftwareConfigTransport:
432     default: POLL_SERVER_CFN
433     description: |
434       How the server should receive the metadata required for software configuration.
435     type: string
436     constraints:
437     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
438   CloudDomain:
439     default: ''
440     type: string
441     description: >
442       The DNS domain used for the hosts. This should match the dhcp_domain
443       configured in the Undercloud neutron. Defaults to localdomain.
444   ServerMetadata:
445     default: {}
446     description: >
447       Extra properties or metadata passed to Nova for the created nodes in
448       the overcloud. It's accessible via the Nova metadata API.
449     type: json
450   SchedulerHints:
451     type: json
452     description: Optional scheduler hints to pass to nova
453     default: {}
454   ServiceConfigSettings:
455     type: json
456     default: {}
457
458 parameter_groups:
459 - label: deprecated
460   description: Do not use deprecated params, they will be removed.
461   parameters:
462   - controllerExtraConfig
463
464 resources:
465
466   Controller:
467     type: OS::Nova::Server
468     properties:
469       image: {get_param: Image}
470       image_update_policy: {get_param: ImageUpdatePolicy}
471       flavor: {get_param: Flavor}
472       key_name: {get_param: KeyName}
473       networks:
474         - network: ctlplane
475       user_data_format: SOFTWARE_CONFIG
476       user_data: {get_resource: UserData}
477       name:
478         str_replace:
479             template: {get_param: Hostname}
480             params: {get_param: HostnameMap}
481       software_config_transport: {get_param: SoftwareConfigTransport}
482       metadata: {get_param: ServerMetadata}
483       scheduler_hints: {get_param: SchedulerHints}
484
485   # Combine the NodeAdminUserData and NodeUserData mime archives
486   UserData:
487     type: OS::Heat::MultipartMime
488     properties:
489       parts:
490       - config: {get_resource: NodeAdminUserData}
491         type: multipart
492       - config: {get_resource: NodeUserData}
493         type: multipart
494
495   # Creates the "heat-admin" user if configured via the environment
496   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
497   NodeAdminUserData:
498     type: OS::TripleO::NodeAdminUserData
499
500   # For optional operator additional userdata
501   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
502   NodeUserData:
503     type: OS::TripleO::NodeUserData
504
505   ExternalPort:
506     type: OS::TripleO::Controller::Ports::ExternalPort
507     properties:
508       IPPool: {get_param: ControllerIPs}
509       NodeIndex: {get_param: NodeIndex}
510       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
511
512   InternalApiPort:
513     type: OS::TripleO::Controller::Ports::InternalApiPort
514     properties:
515       IPPool: {get_param: ControllerIPs}
516       NodeIndex: {get_param: NodeIndex}
517       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
518
519   StoragePort:
520     type: OS::TripleO::Controller::Ports::StoragePort
521     properties:
522       IPPool: {get_param: ControllerIPs}
523       NodeIndex: {get_param: NodeIndex}
524       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
525
526   StorageMgmtPort:
527     type: OS::TripleO::Controller::Ports::StorageMgmtPort
528     properties:
529       IPPool: {get_param: ControllerIPs}
530       NodeIndex: {get_param: NodeIndex}
531       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
532
533   TenantPort:
534     type: OS::TripleO::Controller::Ports::TenantPort
535     properties:
536       IPPool: {get_param: ControllerIPs}
537       NodeIndex: {get_param: NodeIndex}
538       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
539
540   ManagementPort:
541     type: OS::TripleO::Controller::Ports::ManagementPort
542     properties:
543       IPPool: {get_param: ControllerIPs}
544       NodeIndex: {get_param: NodeIndex}
545       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
546
547   NetIpMap:
548     type: OS::TripleO::Network::Ports::NetIpMap
549     properties:
550       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
551       ExternalIp: {get_attr: [ExternalPort, ip_address]}
552       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
553       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
554       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
555       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
556       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
557       StorageIp: {get_attr: [StoragePort, ip_address]}
558       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
559       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
560       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
561       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
562       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
563       TenantIp: {get_attr: [TenantPort, ip_address]}
564       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
565       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
566       ManagementIp: {get_attr: [ManagementPort, ip_address]}
567       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
568       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
569
570   NetworkConfig:
571     type: OS::TripleO::Controller::Net::SoftwareConfig
572     properties:
573       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
574       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
575       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
576       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
577       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
578       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
579       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
580
581   NetworkDeployment:
582     type: OS::TripleO::SoftwareDeployment
583     properties:
584       name: NetworkDeployment
585       config: {get_resource: NetworkConfig}
586       server: {get_resource: Controller}
587       actions: {get_param: NetworkDeploymentActions}
588       input_values:
589         bridge_name: br-ex
590         interface_name: {get_param: NeutronPublicInterface}
591
592   # Resource for site-specific injection of root certificate
593   NodeTLSCAData:
594     depends_on: NetworkDeployment
595     type: OS::TripleO::NodeTLSCAData
596     properties:
597       server: {get_resource: Controller}
598
599   # Resource for site-specific passing of private keys/certificates
600   NodeTLSData:
601     depends_on: NodeTLSCAData
602     type: OS::TripleO::NodeTLSData
603     properties:
604       server: {get_resource: Controller}
605       NodeIndex: {get_param: NodeIndex}
606
607
608   ControllerDeployment:
609     type: OS::TripleO::SoftwareDeployment
610     depends_on: NetworkDeployment
611     properties:
612       name: ControllerDeployment
613       config: {get_resource: ControllerConfig}
614       server: {get_resource: Controller}
615       input_values:
616         bootstack_nodeid: {get_attr: [Controller, name]}
617         ceilometer_workers: {get_param: CeilometerWorkers}
618         haproxy_log_address: {get_param: HAProxySyslogAddress}
619         haproxy_stats_password: {get_param: HAProxyStatsPassword}
620         haproxy_stats_user: {get_param: HAProxyStatsUser}
621         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
622         horizon_allowed_hosts: {get_param: HorizonAllowedHosts}
623         horizon_secret: {get_param: HorizonSecret}
624         admin_password: {get_param: AdminPassword}
625         debug: {get_param: Debug}
626         cinder_public_url: {get_param: [EndpointMap, CinderPublic, uri]}
627         cinder_internal_url: {get_param: [EndpointMap, CinderInternal, uri]}
628         cinder_admin_url: {get_param: [EndpointMap, CinderAdmin, uri]}
629         cinder_public_url_v2: {get_param: [EndpointMap, CinderV2Public, uri]}
630         cinder_internal_url_v2: {get_param: [EndpointMap, CinderV2Internal, uri]}
631         cinder_admin_url_v2: {get_param: [EndpointMap, CinderV2Admin, uri]}
632         keystone_identity_uri: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
633         keystone_auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
634         keystone_ec2_uri: { get_param: [EndpointMap, KeystoneEC2, uri] }
635         enable_fencing: {get_param: EnableFencing}
636         enable_galera: {get_param: EnableGalera}
637         enable_load_balancer: {get_param: EnableLoadBalancer}
638         enable_ceph_storage: {get_param: EnableCephStorage}
639         enable_swift_storage: {get_param: EnableSwiftStorage}
640         manage_firewall: {get_param: ManageFirewall}
641         purge_firewall_rules: {get_param: PurgeFirewallRules}
642         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
643         mysql_max_connections: {get_param: MysqlMaxConnections}
644         mysql_root_password: {get_param: MysqlRootPassword}
645         mysql_clustercheck_password: {get_param: MysqlClustercheckPassword}
646         mysql_cluster_name:
647           str_replace:
648             template: tripleo-CLUSTER
649             params:
650               CLUSTER: {get_param: MysqlClusterUniquePart}
651         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
652         neutron_password: {get_param: NeutronPassword}
653         neutron_tenant_mtu: {get_param: NeutronTenantMtu}
654         neutron_internal_url: { get_param: [ EndpointMap, NeutronInternal, uri ] }
655         neutron_public_url: { get_param: [ EndpointMap, NeutronPublic, uri ] }
656         neutron_admin_url: { get_param: [ EndpointMap, NeutronAdmin, uri ] }
657         neutron_auth_url: { get_param: [ EndpointMap, KeystoneV3Admin, uri ] }
658         nova_internal_url: { get_param: [ EndpointMap, NovaInternal, uri ] }
659         ceilometer_backend: {get_param: CeilometerBackend}
660         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
661         ceilometer_password: {get_param: CeilometerPassword}
662         ceilometer_store_events: {get_param: CeilometerStoreEvents}
663         aodh_password: {get_param: AodhPassword}
664         aodh_internal_url: { get_param: [ EndpointMap, AodhInternal, uri ] }
665         aodh_public_url: { get_param: [ EndpointMap, AodhPublic, uri ] }
666         aodh_admin_url: { get_param: [ EndpointMap, AodhAdmin, uri ] }
667         ceilometer_meter_dispatcher: {get_param: CeilometerMeterDispatcher}
668         gnocchi_password: {get_param: GnocchiPassword}
669         gnocchi_backend: {get_param: GnocchiBackend}
670         gnocchi_indexer_backend: {get_param: GnocchiIndexerBackend}
671         ceilometer_coordination_url:
672           list_join:
673             - ''
674             - - 'redis://:'
675               - {get_param: RedisPassword}
676               - '@'
677               - {get_param: RedisVirtualIPUri}
678               - ':6379/'
679         ceilometer_dsn:
680           list_join:
681             - ''
682             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
683               - '://ceilometer:'
684               - {get_param: CeilometerPassword}
685               - '@'
686               - {get_param: [EndpointMap, MysqlInternal, host]}
687               - '/ceilometer'
688         gnocchi_dsn:
689           list_join:
690             - ''
691             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
692               - '://gnocchi:'
693               - {get_param: GnocchiPassword}
694               - '@'
695               - {get_param: [EndpointMap, MysqlInternal, host]}
696               - '/gnocchi'
697         gnocchi_internal_url: {get_param: [EndpointMap, GnocchiInternal, uri]}
698         gnocchi_public_url: { get_param: [ EndpointMap, GnocchiPublic, uri ] }
699         gnocchi_admin_url: { get_param: [ EndpointMap, GnocchiAdmin, uri ] }
700         ceilometer_public_url: {get_param: [EndpointMap, CeilometerPublic, uri]}
701         ceilometer_internal_url: {get_param: [EndpointMap, CeilometerInternal, uri]}
702         ceilometer_admin_url: {get_param: [EndpointMap, CeilometerAdmin, uri]}
703         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
704         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
705         nova_enable_db_purge: {get_param: NovaEnableDBPurge}
706         nova_ipv6: {get_param: NovaIPv6}
707         corosync_ipv6: {get_param: CorosyncIPv6}
708         memcached_ipv6: {get_param: MemcachedIPv6}
709         nova_password: {get_param: NovaPassword}
710         nova_dsn:
711           list_join:
712             - ''
713             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
714               - '://nova:'
715               - {get_param: NovaPassword}
716               - '@'
717               - {get_param: [EndpointMap, MysqlInternal, host]}
718               - '/nova'
719         nova_api_dsn:
720           list_join:
721             - ''
722             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
723               - '://nova_api:'
724               - {get_param: NovaPassword}
725               - '@'
726               - {get_param: [EndpointMap, MysqlInternal, host]}
727               - '/nova_api'
728         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
729         instance_name_template: {get_param: InstanceNameTemplate}
730         nova_public_url: {get_param: [EndpointMap, NovaPublic, uri]}
731         nova_internal_url: {get_param: [EndpointMap, NovaInternal, uri]}
732         nova_admin_url: {get_param: [EndpointMap, NovaAdmin, uri]}
733         fencing_config: {get_param: FencingConfig}
734         pcsd_password: {get_param: PcsdPassword}
735         rabbit_username: {get_param: RabbitUserName}
736         rabbit_password: {get_param: RabbitPassword}
737         rabbit_cookie: {get_param: RabbitCookie}
738         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
739         rabbit_client_port: {get_param: RabbitClientPort}
740         ntp_servers: {get_param: NtpServer}
741         timezone: {get_param: TimeZone}
742         control_virtual_interface: {get_param: ControlVirtualInterface}
743         public_virtual_interface: {get_param: PublicVirtualInterface}
744         swift_hash_suffix: {get_param: SwiftHashSuffix}
745         swift_part_power: {get_param: SwiftPartPower}
746         swift_ring_build: {get_param: SwiftRingBuild}
747         swift_replicas: {get_param: SwiftReplicas}
748         swift_min_part_hours: {get_param: SwiftMinPartHours}
749         swift_mount_check: {get_param: SwiftMountCheck}
750         enable_package_install: {get_param: EnablePackageInstall}
751         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
752         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
753         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
754         cinder_iscsi_network:
755           str_replace:
756             template: "'IP'"
757             params:
758               IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
759         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
760         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
761         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
762         glance_api_servers: { get_param: [EndpointMap, GlanceInternal, uri]}
763         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
764         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
765         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
766         keystone_region: {get_param: KeystoneRegion}
767         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
768         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
769         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
770         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
771         aodh_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
772         gnocchi_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
773         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
774         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
775         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
776         horizon_subnet:
777           str_replace:
778             template: "['SUBNET']"
779             params:
780               SUBNET: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
781         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
782         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
783         redis_vip: {get_param: RedisVirtualIP}
784         sahara_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
785         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
786         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
787         mysql_virtual_ip: {get_param: MysqlVirtualIP}
788         ceph_cluster_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
789         ceph_public_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
790         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
791
792   # Map heat metadata into hiera datafiles
793   ControllerConfig:
794     type: OS::Heat::StructuredConfig
795     properties:
796       group: os-apply-config
797       config:
798         hiera:
799           hierarchy:
800             - '"%{::uuid}"'
801             - heat_config_%{::deploy_config_name}
802             - controller_extraconfig
803             - extraconfig
804             - service_configs
805             - controller
806             - database
807             - object
808             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
809             - ceph_cluster # provided by CephClusterConfig
810             - ceph
811             - bootstrap_node # provided by BootstrapNodeConfig
812             - all_nodes # provided by allNodesConfig
813             - vip_data # provided by vip-config
814             - '"%{::osfamily}"'
815             - common
816             - network
817             - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
818             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
819             - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
820             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
821             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
822             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
823             - neutron_nuage_data # Optionally provided by ControllerExtraConfigPre
824             - midonet_data #Optionally provided by AllNodesExtraConfig
825             - neutron_opencontrail_data # Optionally provided by ControllerExtraConfigPre
826           merge_behavior: deeper
827           datafiles:
828             service_configs:
829               mapped_data: {get_param: ServiceConfigSettings}
830             controller_extraconfig:
831               mapped_data:
832                 map_merge:
833                   - {get_param: controllerExtraConfig}
834                   - {get_param: ControllerExtraConfig}
835             extraconfig:
836               mapped_data: {get_param: ExtraConfig}
837             common:
838               raw_data: {get_file: hieradata/common.yaml}
839             network:
840               mapped_data:
841                 net_ip_map: {get_attr: [NetIpMap, net_ip_map]}
842                 net_ip_subnet_map: {get_attr: [NetIpMap, net_ip_subnet_map]}
843                 net_ip_uri_map: {get_attr: [NetIpMap, net_ip_uri_map]}
844             ceph:
845               raw_data: {get_file: hieradata/ceph.yaml}
846               mapped_data:
847                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
848                 ceph::profile::params::public_network: {get_input: ceph_public_network}
849                 ceph::profile::params::public_addr: {get_input: ceph_public_ip}
850             database:
851               raw_data: {get_file: hieradata/database.yaml}
852             object:
853               raw_data: {get_file: hieradata/object.yaml}
854             controller:
855               raw_data: {get_file: hieradata/controller.yaml}
856               mapped_data: # data supplied directly to this deployment configuration, etc
857                 bootstack_nodeid: {get_input: bootstack_nodeid}
858
859                 # Pacemaker
860                 enable_fencing: {get_input: enable_fencing}
861                 enable_load_balancer: {get_input: enable_load_balancer}
862                 hacluster_pwd: {get_input: pcsd_password}
863                 corosync_ipv6: {get_input: corosync_ipv6}
864                 tripleo::fencing::config: {get_input: fencing_config}
865
866                 # Swift
867                 # FIXME: need to move proxy_local_net_ip into swift-proxy.yaml
868                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
869                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
870                 swift::swift_hash_path_suffix: {get_input: swift_hash_suffix}
871                 tripleo::ringbuilder::build_ring: { get_input: swift_ring_build }
872                 tripleo::ringbuilder::part_power: {get_input: swift_part_power}
873                 tripleo::ringbuilder::replicas: {get_input: swift_replicas}
874                 tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
875                 swift_mount_check: {get_input: swift_mount_check}
876
877                 # Cinder
878                 tripleo::profile::base::cinder::volume::iscsi::cinder_iscsi_address: {get_input: cinder_iscsi_network}
879                 cinder::api::bind_host: {get_input: cinder_api_network}
880                 cinder::keystone::auth::public_url: {get_input: cinder_public_url }
881                 cinder::keystone::auth::internal_url: {get_input: cinder_internal_url }
882                 cinder::keystone::auth::admin_url: {get_input: cinder_admin_url }
883                 cinder::keystone::auth::public_url_v2: {get_input: cinder_public_url_v2 }
884                 cinder::keystone::auth::internal_url_v2: {get_input: cinder_internal_url_v2 }
885                 cinder::keystone::auth::admin_url_v2: {get_input: cinder_admin_url_v2 }
886                 cinder::keystone::auth::password: {get_input: cinder_password }
887                 cinder::keystone::auth::region: {get_input: keystone_region}
888
889                 # Glance
890                 glance::api::bind_host: {get_input: glance_api_network}
891                 glance::registry::bind_host: {get_input: glance_registry_network}
892                 glance::keystone::auth::region: {get_input: keystone_region}
893
894                 # Heat
895                 heat::api::bind_host: {get_input: heat_api_network}
896                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
897                 heat::api_cfn::bind_host: {get_input: heat_api_network}
898                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
899
900                 # Keystone
901                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
902                 keystone::public_bind_host: {get_input: keystone_public_api_network}
903                 keystone::wsgi::apache::bind_host: {get_input: keystone_public_api_network}
904                 keystone::wsgi::apache::admin_bind_host: {get_input: keystone_admin_api_network}
905
906                 # MongoDB
907                 mongodb::server::bind_ip: {get_input: mongo_db_network}
908
909                 # MySQL
910                 admin_password: {get_input: admin_password}
911                 enable_galera: {get_input: enable_galera}
912                 enable_ceph_storage: {get_input: enable_ceph_storage}
913                 enable_swift_storage: {get_input: enable_swift_storage}
914                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
915                 mysql_max_connections: {get_input: mysql_max_connections}
916                 mysql::server::root_password: {get_input: mysql_root_password}
917                 mysql_clustercheck_password: {get_input: mysql_clustercheck_password}
918                 mysql_cluster_name: {get_input: mysql_cluster_name}
919                 mysql_bind_host: {get_input: mysql_network}
920                 mysql_virtual_ip: {get_input: mysql_virtual_ip}
921
922                 # Neutron
923                 neutron::bind_host: {get_input: neutron_api_network}
924                 neutron::network_device_mtu: {get_input: neutron_tenant_mtu}
925                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
926                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
927                 neutron::keystone::auth::public_url: {get_input: neutron_public_url }
928                 neutron::keystone::auth::internal_url: {get_input: neutron_internal_url }
929                 neutron::keystone::auth::admin_url: {get_input: neutron_admin_url }
930                 neutron::keystone::auth::password: {get_input: neutron_password }
931                 neutron::keystone::auth::region: {get_input: keystone_region}
932
933                 # Ceilometer
934                 ceilometer_backend: {get_input: ceilometer_backend}
935                 ceilometer_mysql_conn_string: {get_input: ceilometer_dsn}
936                 ceilometer::telemetry_secret: {get_input: ceilometer_metering_secret}
937                 ceilometer::rabbit_userid: {get_input: rabbit_username}
938                 ceilometer::rabbit_password: {get_input: rabbit_password}
939                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
940                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
941                 ceilometer::debug: {get_input: debug}
942                 ceilometer::api::host: {get_input: ceilometer_api_network}
943                 ceilometer::api::keystone_password: {get_input: ceilometer_password}
944                 ceilometer::api::auth_uri: {get_input: keystone_auth_uri}
945                 ceilometer::api::identity_uri: {get_input: keystone_identity_uri}
946                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
947                 ceilometer::agent::auth::auth_url: {get_input: keystone_auth_uri}
948                 ceilometer::agent::central::coordination_url: {get_input: ceilometer_coordination_url}
949                 ceilometer::agent::notification::store_events: {get_input: ceilometer_store_events}
950                 ceilometer::db::mysql::password: {get_input: ceilometer_password}
951                 ceilometer::collector::meter_dispatcher: {get_input: ceilometer_meter_dispatcher}
952                 ceilometer::dispatcher::gnocchi::url: {get_input: gnocchi_internal_url }
953                 ceilometer::dispatcher::gnocchi::filter_project: 'service'
954                 ceilometer::dispatcher::gnocchi::archive_policy: 'low'
955                 ceilometer::dispatcher::gnocchi::resources_definition_file: 'gnocchi_resources.yaml'
956                 ceilometer::keystone::auth::public_url: {get_input: ceilometer_public_url }
957                 ceilometer::keystone::auth::internal_url: {get_input: ceilometer_internal_url }
958                 ceilometer::keystone::auth::admin_url: {get_input: ceilometer_admin_url }
959                 ceilometer::keystone::auth::password: {get_input: ceilometer_password }
960                 ceilometer::keystone::auth::region: {get_input: keystone_region}
961                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
962                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
963
964                 # Aodh
965                 aodh::rabbit_userid: {get_input: rabbit_username}
966                 aodh::rabbit_password: {get_input: rabbit_password}
967                 aodh::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
968                 aodh::rabbit_port: {get_input: rabbit_client_port}
969                 aodh::debug: {get_input: debug}
970                 aodh::wsgi::apache::ssl: false
971                 aodh::wsgi::apache::bind_host: {get_input: aodh_api_network}
972                 aodh::api::service_name: 'httpd'
973                 aodh::api::host: {get_input: aodh_api_network}
974                 aodh::api::keystone_password: {get_input: aodh_password}
975                 aodh::api::keystone_auth_uri: {get_input: keystone_auth_uri}
976                 aodh::api::keystone_identity_uri: {get_input: keystone_identity_uri}
977                 aodh::auth::auth_url: {get_input: keystone_auth_uri}
978                 aodh::auth::auth_password: {get_input: aodh_password}
979                 aodh::db::mysql::password: {get_input: aodh_password}
980                 # for a migration path from ceilometer-alarm to aodh, we use the same database & coordination
981                 aodh::evaluator::coordination_url: {get_input: ceilometer_coordination_url}
982                 aodh::keystone::auth::public_url: {get_input: aodh_public_url }
983                 aodh::keystone::auth::internal_url: {get_input: aodh_internal_url }
984                 aodh::keystone::auth::admin_url: {get_input: aodh_admin_url }
985                 aodh::keystone::auth::password: {get_input: aodh_password }
986                 aodh::keystone::auth::region: {get_input: keystone_region}
987
988                 # Gnocchi
989                 gnocchi_backend: {get_input: gnocchi_backend}
990                 gnocchi_indexer_backend: {get_input: gnocchi_indexer_backend}
991                 gnocchi_mysql_conn_string: {get_input: gnocchi_dsn}
992                 gnocchi::debug: {get_input: debug}
993                 gnocchi::wsgi::apache::ssl: false
994                 gnocchi::wsgi::apache::bind_host: {get_input: gnocchi_api_network}
995                 gnocchi::api::service_name: 'httpd'
996                 gnocchi::api::host: {get_input: gnocchi_api_network}
997                 gnocchi::api::keystone_password: {get_input: gnocchi_password}
998                 gnocchi::api::keystone_auth_uri: {get_input: keystone_auth_uri}
999                 gnocchi::api::keystone_identity_uri: {get_input: keystone_identity_uri}
1000                 gnocchi::db::mysql::password: {get_input: gnocchi_password}
1001                 gnocchi::storage::swift::swift_authurl: {get_input: keystone_auth_uri}
1002                 gnocchi::storage::swift::swift_key: {get_input: gnocchi_password}
1003                 gnocchi::keystone::auth::public_url: {get_input: gnocchi_public_url }
1004                 gnocchi::keystone::auth::internal_url: {get_input: gnocchi_internal_url }
1005                 gnocchi::keystone::auth::admin_url: {get_input: gnocchi_admin_url }
1006                 gnocchi::keystone::auth::password: {get_input: gnocchi_password }
1007                 gnocchi::keystone::auth::region: {get_input: keystone_region}
1008
1009                 # Nova
1010                 nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
1011                 nova::use_ipv6: {get_input: nova_ipv6}
1012                 nova::api::auth_uri: {get_input: keystone_auth_uri}
1013                 nova::api::identity_uri: {get_input: keystone_identity_uri}
1014                 nova::api::api_bind_address: {get_input: nova_api_network}
1015                 nova::api::metadata_listen: {get_input: nova_metadata_network}
1016                 nova::api::admin_password: {get_input: nova_password}
1017                 nova::compute::network_device_mtu: {get_input: neutron_tenant_mtu}
1018                 nova::database_connection: {get_input: nova_dsn}
1019                 nova::api_database_connection: {get_input: nova_api_dsn}
1020                 nova::glance_api_servers: {get_input: glance_api_servers}
1021                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
1022                 nova::api::instance_name_template: {get_input: instance_name_template}
1023                 nova::network::neutron::neutron_password: {get_input: neutron_password}
1024                 nova::network::neutron::neutron_url: {get_input: neutron_internal_url}
1025                 nova::network::neutron::neutron_auth_url: {get_input: neutron_auth_url}
1026                 nova::vncproxy::host: {get_input: nova_api_network}
1027                 nova::db::mysql::password: {get_input: nova_password}
1028                 nova::db::mysql_api::password: {get_input: nova_password}
1029                 nova_enable_db_purge: {get_input: nova_enable_db_purge}
1030                 nova::keystone::auth::public_url: {get_input: nova_public_url}
1031                 nova::keystone::auth::internal_url: {get_input: nova_internal_url}
1032                 nova::keystone::auth::admin_url: {get_input: nova_admin_url}
1033                 nova::keystone::auth::password: {get_input: nova_password }
1034                 nova::keystone::auth::region: {get_input: keystone_region}
1035
1036                 # Horizon
1037                 apache::mod::remoteip::proxy_ips: {get_input: horizon_subnet}
1038                 apache::ip: {get_input: horizon_network}
1039                 horizon::allowed_hosts: {get_input: horizon_allowed_hosts}
1040                 horizon::django_debug: {get_input: debug}
1041                 horizon::secret_key: {get_input: horizon_secret}
1042                 horizon::bind_address: {get_input: horizon_network}
1043                 horizon::keystone_url: {get_input: keystone_auth_uri}
1044
1045                 # RabbitMQ
1046                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
1047                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
1048                 # Redis
1049                 redis::bind: {get_input: redis_network}
1050                 redis_vip: {get_input: redis_vip}
1051                 # Firewall
1052                 tripleo::firewall::manage_firewall: {get_input: manage_firewall}
1053                 tripleo::firewall::purge_firewall_rules: {get_input: purge_firewall_rules}
1054                 # Misc
1055                 memcached_ipv6: {get_input: memcached_ipv6}
1056                 memcached::listen_ip: {get_input: memcached_network}
1057                 ntp::servers: {get_input: ntp_servers}
1058                 timezone::timezone: {get_input: timezone}
1059                 control_virtual_interface: {get_input: control_virtual_interface}
1060                 public_virtual_interface: {get_input: public_virtual_interface}
1061                 tripleo::keepalived::control_virtual_interface: {get_input: control_virtual_interface}
1062                 tripleo::keepalived::public_virtual_interface: {get_input: public_virtual_interface}
1063                 tripleo::haproxy::control_virtual_interface: {get_input: control_virtual_interface}
1064                 tripleo::haproxy::public_virtual_interface: {get_input: public_virtual_interface}
1065                 tripleo::haproxy::haproxy_log_address: {get_input: haproxy_log_address}
1066                 tripleo::haproxy::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
1067                 tripleo::haproxy::haproxy_stats_user: {get_input: haproxy_stats_user}
1068                 tripleo::haproxy::haproxy_stats_password: {get_input: haproxy_stats_password}
1069                 tripleo::haproxy::redis_password: {get_input: redis_password}
1070                 tripleo::packages::enable_install: {get_input: enable_package_install}
1071                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
1072
1073   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
1074   ControllerExtraConfigPre:
1075     depends_on: ControllerDeployment
1076     type: OS::TripleO::ControllerExtraConfigPre
1077     properties:
1078         server: {get_resource: Controller}
1079
1080   # Hook for site-specific additional pre-deployment config,
1081   # applying to all nodes, e.g node registration/unregistration
1082   NodeExtraConfig:
1083     depends_on: [ControllerExtraConfigPre, NodeTLSData]
1084     type: OS::TripleO::NodeExtraConfig
1085     properties:
1086         server: {get_resource: Controller}
1087
1088   UpdateConfig:
1089     type: OS::TripleO::Tasks::PackageUpdate
1090
1091   UpdateDeployment:
1092     type: OS::Heat::SoftwareDeployment
1093     properties:
1094       name: UpdateDeployment
1095       config: {get_resource: UpdateConfig}
1096       server: {get_resource: Controller}
1097       input_values:
1098         update_identifier:
1099           get_param: UpdateIdentifier
1100
1101 outputs:
1102   ip_address:
1103     description: IP address of the server in the ctlplane network
1104     value: {get_attr: [Controller, networks, ctlplane, 0]}
1105   external_ip_address:
1106     description: IP address of the server in the external network
1107     value: {get_attr: [ExternalPort, ip_address]}
1108   internal_api_ip_address:
1109     description: IP address of the server in the internal_api network
1110     value: {get_attr: [InternalApiPort, ip_address]}
1111   storage_ip_address:
1112     description: IP address of the server in the storage network
1113     value: {get_attr: [StoragePort, ip_address]}
1114   storage_mgmt_ip_address:
1115     description: IP address of the server in the storage_mgmt network
1116     value: {get_attr: [StorageMgmtPort, ip_address]}
1117   tenant_ip_address:
1118     description: IP address of the server in the tenant network
1119     value: {get_attr: [TenantPort, ip_address]}
1120   management_ip_address:
1121     description: IP address of the server in the management network
1122     value: {get_attr: [ManagementPort, ip_address]}
1123   hostname:
1124     description: Hostname of the server
1125     value: {get_attr: [Controller, name]}
1126   hosts_entry:
1127     description: >
1128       Server's IP address and hostname in the /etc/hosts format
1129     value:
1130       str_replace:
1131         template: |
1132           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
1133           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
1134           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
1135           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
1136           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
1137           TENANTIP TENANTHOST.DOMAIN TENANTHOST
1138           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
1139         params:
1140           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
1141           DOMAIN: {get_param: CloudDomain}
1142           PRIMARYHOST: {get_attr: [Controller, name]}
1143           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
1144           EXTERNALHOST:
1145             list_join:
1146             - '.'
1147             - - {get_attr: [Controller, name]}
1148               - external
1149           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
1150           INTERNAL_APIHOST:
1151             list_join:
1152             - '.'
1153             - - {get_attr: [Controller, name]}
1154               - internalapi
1155           STORAGEIP: {get_attr: [StoragePort, ip_address]}
1156           STORAGEHOST:
1157             list_join:
1158             - '.'
1159             - - {get_attr: [Controller, name]}
1160               - storage
1161           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
1162           STORAGE_MGMTHOST:
1163             list_join:
1164             - '.'
1165             - - {get_attr: [Controller, name]}
1166               - storagemgmt
1167           TENANTIP: {get_attr: [TenantPort, ip_address]}
1168           TENANTHOST:
1169             list_join:
1170             - '.'
1171             - - {get_attr: [Controller, name]}
1172               - tenant
1173           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
1174           MANAGEMENTHOST:
1175             list_join:
1176             - '.'
1177             - - {get_attr: [Controller, name]}
1178               - management
1179   nova_server_resource:
1180     description: Heat resource handle for the Nova compute server
1181     value:
1182       {get_resource: Controller}
1183   swift_device:
1184     description: Swift device formatted for swift-ring-builder
1185     value:
1186       str_replace:
1187         template: 'r1z1-IP:%PORT%/d1'
1188         params:
1189           IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1190   swift_proxy_memcache:
1191     description: Swift proxy-memcache value
1192     value:
1193       str_replace:
1194         template: "IP:11211"
1195         params:
1196           IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1197   config_identifier:
1198     description: identifier which changes if the controller configuration may need re-applying
1199     value:
1200       list_join:
1201         - ','
1202         - - {get_attr: [ControllerDeployment, deploy_stdout]}
1203           - {get_attr: [NodeTLSCAData, deploy_stdout]}
1204           - {get_attr: [NodeTLSData, deploy_stdout]}
1205           - {get_attr: [ControllerExtraConfigPre, deploy_stdout]}
1206           - {get_param: UpdateIdentifier}
1207   tls_key_modulus_md5:
1208     description: MD5 checksum of the TLS Key Modulus
1209     value: {get_attr: [NodeTLSData, key_modulus_md5]}
1210   tls_cert_modulus_md5:
1211     description: MD5 checksum of the TLS Certificate Modulus
1212     value: {get_attr: [NodeTLSData, cert_modulus_md5]}