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