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