Move glance/heat hiera settings to services
[apex-tripleo-heat-templates.git] / puppet / controller.yaml
1 heat_template_version: 2016-10-14
2
3 description: >
4   OpenStack controller node configured by Puppet.
5
6 parameters:
7   AodhPassword:
8     description: The password for the aodh services.
9     type: string
10     hidden: true
11   controllerExtraConfig:
12     default: {}
13     description: |
14       Deprecated. Use ControllerExtraConfig via parameter_defaults instead.
15     type: json
16   ControllerExtraConfig:
17     default: {}
18     description: |
19       Controller specific hiera configuration data to inject into the cluster.
20     type: json
21   ControllerIPs:
22     default: {}
23     description: >
24       A network mapped list of IPs to assign to Controllers in the following form:
25       {
26         "internal_api": ["a.b.c.d", "e.f.g.h"],
27         ...
28       }
29     type: json
30   CorosyncIPv6:
31     default: false
32     description: Enable IPv6 in Corosync
33     type: boolean
34   Debug:
35     default: ''
36     description: Set to True to enable debugging on all services.
37     type: string
38   EnableFencing:
39     default: false
40     description: Whether to enable fencing in Pacemaker or not.
41     type: boolean
42   EnableLoadBalancer:
43     default: true
44     description: Whether to deploy a LoadBalancer on the Controller
45     type: boolean
46   ExtraConfig:
47     default: {}
48     description: |
49       Additional hieradata to inject into the cluster, note that
50       ControllerExtraConfig takes precedence over ExtraConfig.
51     type: json
52   FencingConfig:
53     default: {}
54     description: |
55       Pacemaker fencing configuration. The JSON should have
56       the following structure:
57         {
58           "devices": [
59             {
60               "agent": "AGENT_NAME",
61               "host_mac": "HOST_MAC_ADDRESS",
62               "params": {"PARAM_NAME": "PARAM_VALUE"}
63             }
64           ]
65         }
66       For instance:
67         {
68           "devices": [
69             {
70               "agent": "fence_xvm",
71               "host_mac": "52:54:00:aa:bb:cc",
72               "params": {
73                 "multicast_address": "225.0.0.12",
74                 "port": "baremetal_0",
75                 "manage_fw": true,
76                 "manage_key_file": true,
77                 "key_file": "/etc/fence_xvm.key",
78                 "key_file_password": "abcdef"
79               }
80             }
81           ]
82         }
83     type: json
84   OvercloudControlFlavor:
85     description: Flavor for control nodes to request when deploying.
86     default: baremetal
87     type: string
88     constraints:
89       - custom_constraint: nova.flavor
90   HorizonSecret:
91     description: Secret key for Django
92     type: string
93     hidden: true
94   controllerImage:
95     type: string
96     default: overcloud-full
97     constraints:
98       - custom_constraint: glance.image
99   ImageUpdatePolicy:
100     default: 'REBUILD_PRESERVE_EPHEMERAL'
101     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
102     type: string
103   InstanceNameTemplate:
104     default: 'instance-%08x'
105     description: Template string to be used to generate instance names
106     type: string
107   KeyName:
108     default: default
109     description: Name of an existing Nova key pair to enable SSH access to the instances
110     type: string
111     constraints:
112       - custom_constraint: nova.keypair
113   ManageFirewall:
114     default: false
115     description: Whether to manage IPtables rules.
116     type: boolean
117   MemcachedIPv6:
118     default: false
119     description: Enable IPv6 features in Memcached.
120     type: boolean
121   PurgeFirewallRules:
122     default: false
123     description: Whether IPtables rules should be purged before setting up the new ones.
124     type: boolean
125   NeutronMetadataProxySharedSecret:
126     description: Shared secret to prevent spoofing
127     type: string
128     hidden: true
129   NeutronPassword:
130     description: The password for the neutron service and db account, used by neutron agents.
131     type: string
132     hidden: true
133   NeutronPublicInterface:
134     default: nic1
135     description: What interface to bridge onto br-ex for network nodes.
136     type: string
137   NovaEnableDBPurge:
138     default: true
139     description: |
140         Whether to create cron job for purging soft deleted rows in Nova database.
141     type: boolean
142   NovaIPv6:
143     default: false
144     description: Enable IPv6 features in Nova
145     type: boolean
146   NovaPassword:
147     description: The password for the nova service and db account, used by nova-api.
148     type: string
149     hidden: true
150   PcsdPassword:
151     type: string
152     description: The password for the 'pcsd' user.
153     hidden: true
154   RedisPassword:
155     description: The password for Redis
156     type: string
157     hidden: true
158   RedisVirtualIP:
159     type: string
160     default: ''  # Has to be here because of the ignored empty value bug
161   RedisVirtualIPUri:
162     type: string
163     default: ''  # Has to be here because of the ignored empty value bug
164     description: An IP address which is wrapped in brackets in case of IPv6
165   SwiftHashSuffix:
166     description: A random string to be used as a salt when hashing to determine mappings
167       in the ring.
168     hidden: true
169     type: string
170   SwiftRawDisks:
171     default: {}
172     description: 'A hash of additional raw devices to use as Swift backend (eg. {sdb: {}})'
173     type: json
174   UpgradeLevelNovaCompute:
175     type: string
176     description: Nova Compute upgrade level
177     default: ''
178   ServiceNetMap:
179     default: {}
180     description: Mapping of service_name -> network name. Typically set
181                  via parameter_defaults in the resource registry.
182     type: json
183   EndpointMap:
184     default: {}
185     description: Mapping of service endpoint -> protocol. Typically set
186                  via parameter_defaults in the resource registry.
187     type: json
188   UpdateIdentifier:
189     default: ''
190     type: string
191     description: >
192       Setting to a previously unused value during stack-update will trigger
193       package update on all nodes
194   Hostname:
195     type: string
196     default: '' # Defaults to Heat created hostname
197   HostnameMap:
198     type: json
199     default: {}
200     description: Optional mapping to override hostnames
201   NetworkDeploymentActions:
202     type: comma_delimited_list
203     description: >
204       Heat action when to apply network configuration changes
205     default: ['CREATE']
206   NodeIndex:
207     type: number
208     default: 0
209   SoftwareConfigTransport:
210     default: POLL_SERVER_CFN
211     description: |
212       How the server should receive the metadata required for software configuration.
213     type: string
214     constraints:
215     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
216   CloudDomain:
217     type: string
218     description: >
219       The DNS domain used for the hosts. This should match the dhcp_domain
220       configured in the Undercloud neutron. Defaults to localdomain.
221   ServerMetadata:
222     default: {}
223     description: >
224       Extra properties or metadata passed to Nova for the created nodes in
225       the overcloud. It's accessible via the Nova metadata API.
226     type: json
227   ControllerSchedulerHints:
228     type: json
229     description: Optional scheduler hints to pass to nova
230     default: {}
231   ServiceConfigSettings:
232     type: json
233     default: {}
234   ServiceNames:
235     type: comma_delimited_list
236     default: []
237   ConfigCommand:
238     type: string
239     description: Command which will be run whenever configuration data changes
240     default: os-refresh-config --timeout 14400
241
242 parameter_groups:
243 - label: deprecated
244   description: Do not use deprecated params, they will be removed.
245   parameters:
246   - controllerExtraConfig
247
248 resources:
249
250   Controller:
251     type: OS::TripleO::Server
252     metadata:
253       os-collect-config:
254         command: {get_param: ConfigCommand}
255     properties:
256       image: {get_param: controllerImage}
257       image_update_policy: {get_param: ImageUpdatePolicy}
258       flavor: {get_param: OvercloudControlFlavor}
259       key_name: {get_param: KeyName}
260       networks:
261         - network: ctlplane
262       user_data_format: SOFTWARE_CONFIG
263       user_data: {get_resource: UserData}
264       name:
265         str_replace:
266             template: {get_param: Hostname}
267             params: {get_param: HostnameMap}
268       software_config_transport: {get_param: SoftwareConfigTransport}
269       metadata: {get_param: ServerMetadata}
270       scheduler_hints: {get_param: ControllerSchedulerHints}
271
272   # Combine the NodeAdminUserData and NodeUserData mime archives
273   UserData:
274     type: OS::Heat::MultipartMime
275     properties:
276       parts:
277       - config: {get_resource: NodeAdminUserData}
278         type: multipart
279       - config: {get_resource: NodeUserData}
280         type: multipart
281
282   # Creates the "heat-admin" user if configured via the environment
283   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
284   NodeAdminUserData:
285     type: OS::TripleO::NodeAdminUserData
286
287   # For optional operator additional userdata
288   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
289   NodeUserData:
290     type: OS::TripleO::NodeUserData
291
292   ExternalPort:
293     type: OS::TripleO::Controller::Ports::ExternalPort
294     properties:
295       IPPool: {get_param: ControllerIPs}
296       NodeIndex: {get_param: NodeIndex}
297       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
298
299   InternalApiPort:
300     type: OS::TripleO::Controller::Ports::InternalApiPort
301     properties:
302       IPPool: {get_param: ControllerIPs}
303       NodeIndex: {get_param: NodeIndex}
304       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
305
306   StoragePort:
307     type: OS::TripleO::Controller::Ports::StoragePort
308     properties:
309       IPPool: {get_param: ControllerIPs}
310       NodeIndex: {get_param: NodeIndex}
311       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
312
313   StorageMgmtPort:
314     type: OS::TripleO::Controller::Ports::StorageMgmtPort
315     properties:
316       IPPool: {get_param: ControllerIPs}
317       NodeIndex: {get_param: NodeIndex}
318       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
319
320   TenantPort:
321     type: OS::TripleO::Controller::Ports::TenantPort
322     properties:
323       IPPool: {get_param: ControllerIPs}
324       NodeIndex: {get_param: NodeIndex}
325       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
326
327   ManagementPort:
328     type: OS::TripleO::Controller::Ports::ManagementPort
329     properties:
330       IPPool: {get_param: ControllerIPs}
331       NodeIndex: {get_param: NodeIndex}
332       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
333
334   NetIpMap:
335     type: OS::TripleO::Network::Ports::NetIpMap
336     properties:
337       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
338       ExternalIp: {get_attr: [ExternalPort, ip_address]}
339       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
340       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
341       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
342       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
343       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
344       StorageIp: {get_attr: [StoragePort, ip_address]}
345       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
346       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
347       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
348       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
349       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
350       TenantIp: {get_attr: [TenantPort, ip_address]}
351       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
352       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
353       ManagementIp: {get_attr: [ManagementPort, ip_address]}
354       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
355       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
356
357   NetworkConfig:
358     type: OS::TripleO::Controller::Net::SoftwareConfig
359     properties:
360       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
361       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
362       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
363       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
364       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
365       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
366       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
367
368   NetworkDeployment:
369     type: OS::TripleO::SoftwareDeployment
370     properties:
371       name: NetworkDeployment
372       config: {get_resource: NetworkConfig}
373       server: {get_resource: Controller}
374       actions: {get_param: NetworkDeploymentActions}
375       input_values:
376         bridge_name: br-ex
377         interface_name: {get_param: NeutronPublicInterface}
378
379   # Resource for site-specific injection of root certificate
380   NodeTLSCAData:
381     depends_on: NetworkDeployment
382     type: OS::TripleO::NodeTLSCAData
383     properties:
384       server: {get_resource: Controller}
385
386   # Resource for site-specific passing of private keys/certificates
387   NodeTLSData:
388     depends_on: NodeTLSCAData
389     type: OS::TripleO::NodeTLSData
390     properties:
391       server: {get_resource: Controller}
392       NodeIndex: {get_param: NodeIndex}
393
394
395   ControllerDeployment:
396     type: OS::TripleO::SoftwareDeployment
397     depends_on: NetworkDeployment
398     properties:
399       name: ControllerDeployment
400       config: {get_resource: ControllerConfig}
401       server: {get_resource: Controller}
402       input_values:
403         bootstack_nodeid: {get_attr: [Controller, name]}
404         horizon_secret: {get_param: HorizonSecret}
405         debug: {get_param: Debug}
406         keystone_identity_uri: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
407         keystone_auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
408         keystone_ec2_uri: { get_param: [EndpointMap, KeystoneEC2, uri] }
409         enable_fencing: {get_param: EnableFencing}
410         enable_load_balancer: {get_param: EnableLoadBalancer}
411         manage_firewall: {get_param: ManageFirewall}
412         purge_firewall_rules: {get_param: PurgeFirewallRules}
413         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
414         aodh_internal_url: { get_param: [ EndpointMap, AodhInternal, uri ] }
415         aodh_public_url: { get_param: [ EndpointMap, AodhPublic, uri ] }
416         aodh_admin_url: { get_param: [ EndpointMap, AodhAdmin, uri ] }
417         ceilometer_coordination_url:
418           list_join:
419             - ''
420             - - 'redis://:'
421               - {get_param: RedisPassword}
422               - '@'
423               - {get_param: RedisVirtualIPUri}
424               - ':6379/'
425         nova_enable_db_purge: {get_param: NovaEnableDBPurge}
426         nova_ipv6: {get_param: NovaIPv6}
427         corosync_ipv6: {get_param: CorosyncIPv6}
428         memcached_ipv6: {get_param: MemcachedIPv6}
429         nova_password: {get_param: NovaPassword}
430         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
431         instance_name_template: {get_param: InstanceNameTemplate}
432         fencing_config: {get_param: FencingConfig}
433         pcsd_password: {get_param: PcsdPassword}
434         swift_hash_suffix: {get_param: SwiftHashSuffix}
435         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
436         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
437         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
438         glance_api_servers: { get_param: [EndpointMap, GlanceInternal, uri]}
439         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
440         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
441         manila_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ManilaApiNetwork]}]}
442         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongodbNetwork]}]}
443         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
444         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
445         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
446         aodh_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
447         gnocchi_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
448         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
449         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
450         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
451         horizon_subnet:
452           str_replace:
453             template: "['SUBNET']"
454             params:
455               SUBNET:
456                 get_attr:
457                   - NetIpMap
458                   - net_ip_map
459                   - str_replace:
460                       template: "NETWORK_subnet"
461                       params:
462                         NETWORK: {get_param: [ServiceNetMap, HorizonNetwork]}
463         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
464         redis_vip: {get_param: RedisVirtualIP}
465         sahara_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
466         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
467         ceph_cluster_network:
468           get_attr:
469             - NetIpMap
470             - net_ip_map
471             - str_replace:
472                 template: "NETWORK_subnet"
473                 params:
474                   NETWORK: {get_param: [ServiceNetMap, CephClusterNetwork]}
475         ceph_public_network:
476           get_attr:
477             - NetIpMap
478             - net_ip_map
479             - str_replace:
480                 template: "NETWORK_subnet"
481                 params:
482                   NETWORK: {get_param: [ServiceNetMap, CephPublicNetwork]}
483         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
484         ironic_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
485
486   # Map heat metadata into hiera datafiles
487   ControllerConfig:
488     type: OS::Heat::StructuredConfig
489     properties:
490       group: os-apply-config
491       config:
492         hiera:
493           hierarchy:
494             - '"%{::uuid}"'
495             - heat_config_%{::deploy_config_name}
496             - controller_extraconfig
497             - extraconfig
498             - service_configs
499             - service_names
500             - controller
501             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
502             - ceph_cluster # provided by CephClusterConfig
503             - ceph
504             - bootstrap_node # provided by BootstrapNodeConfig
505             - all_nodes # provided by allNodesConfig
506             - vip_data # provided by vip-config
507             - '"%{::osfamily}"'
508             - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
509             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
510             - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
511             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
512             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
513             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
514             - midonet_data #Optionally provided by AllNodesExtraConfig
515           merge_behavior: deeper
516           datafiles:
517             service_names:
518               mapped_data:
519                 service_names: {get_param: ServiceNames}
520             service_configs:
521               mapped_data:
522                 map_replace:
523                   - {get_param: ServiceConfigSettings}
524                   - values: {get_attr: [NetIpMap, net_ip_map]}
525             controller_extraconfig:
526               mapped_data:
527                 map_merge:
528                   - {get_param: controllerExtraConfig}
529                   - {get_param: ControllerExtraConfig}
530             extraconfig:
531               mapped_data: {get_param: ExtraConfig}
532             ceph:
533               mapped_data:
534                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
535                 ceph::profile::params::public_network: {get_input: ceph_public_network}
536                 ceph::profile::params::public_addr: {get_input: ceph_public_ip}
537             controller:
538               mapped_data: # data supplied directly to this deployment configuration, etc
539                 bootstack_nodeid: {get_input: bootstack_nodeid}
540
541                 # Pacemaker
542                 enable_fencing: {get_input: enable_fencing}
543                 enable_load_balancer: {get_input: enable_load_balancer}
544                 hacluster_pwd: {get_input: pcsd_password}
545                 corosync_ipv6: {get_input: corosync_ipv6}
546                 tripleo::fencing::config: {get_input: fencing_config}
547
548                 # Swift
549                 # FIXME: need to move proxy_local_net_ip into swift-proxy.yaml
550                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
551                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
552                 swift::swift_hash_path_suffix: {get_input: swift_hash_suffix}
553
554                 # Keystone
555                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
556                 keystone::public_bind_host: {get_input: keystone_public_api_network}
557                 keystone::wsgi::apache::bind_host: {get_input: keystone_public_api_network}
558                 keystone::wsgi::apache::admin_bind_host: {get_input: keystone_admin_api_network}
559
560                 # Manila
561                 manila::api::bind_host: {get_input: manila_api_network}
562
563                 # MongoDB
564                 mongodb::server::bind_ip: {get_input: mongo_db_network}
565
566                 # Neutron
567                 neutron::bind_host: {get_input: neutron_api_network}
568                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
569                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
570
571                 # Aodh
572                 aodh::api::host: {get_input: aodh_api_network}
573                 aodh::wsgi::apache::bind_host: {get_input: aodh_api_network}
574
575                 # Ceilometer
576                 ceilometer::api::host: {get_input: ceilometer_api_network}
577                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
578                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
579
580                 # Gnocchi
581                 gnocchi::wsgi::apache::bind_host: {get_input: gnocchi_api_network}
582                 gnocchi::api::host: {get_input: gnocchi_api_network}
583                 gnocchi::api::keystone_auth_uri: {get_input: keystone_auth_uri}
584                 gnocchi::api::keystone_identity_uri: {get_input: keystone_identity_uri}
585                 gnocchi::storage::swift::swift_authurl: {get_input: keystone_auth_uri}
586
587                 # Nova
588                 nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
589                 nova::use_ipv6: {get_input: nova_ipv6}
590                 nova::api::api_bind_address: {get_input: nova_api_network}
591                 nova::api::metadata_listen: {get_input: nova_metadata_network}
592                 nova::glance_api_servers: {get_input: glance_api_servers}
593                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
594                 nova::api::instance_name_template: {get_input: instance_name_template}
595                 nova::vncproxy::host: {get_input: nova_api_network}
596                 nova_enable_db_purge: {get_input: nova_enable_db_purge}
597
598                 # Horizon
599                 apache::mod::remoteip::proxy_ips: {get_input: horizon_subnet}
600                 apache::ip: {get_input: horizon_network}
601                 horizon::django_debug: {get_input: debug}
602                 horizon::secret_key: {get_input: horizon_secret}
603                 horizon::bind_address: {get_input: horizon_network}
604                 horizon::keystone_url: {get_input: keystone_auth_uri}
605
606                 # Sahara
607                 sahara::host: {get_input: sahara_api_network}
608
609                 # Redis
610                 redis::bind: {get_input: redis_network}
611                 redis_vip: {get_input: redis_vip}
612                 # Firewall
613                 tripleo::firewall::manage_firewall: {get_input: manage_firewall}
614                 tripleo::firewall::purge_firewall_rules: {get_input: purge_firewall_rules}
615                 # Misc
616                 memcached_ipv6: {get_input: memcached_ipv6}
617                 memcached::listen_ip: {get_input: memcached_network}
618                 tripleo::haproxy::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
619                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
620
621   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
622   ControllerExtraConfigPre:
623     depends_on: ControllerDeployment
624     type: OS::TripleO::ControllerExtraConfigPre
625     properties:
626         server: {get_resource: Controller}
627
628   # Hook for site-specific additional pre-deployment config,
629   # applying to all nodes, e.g node registration/unregistration
630   NodeExtraConfig:
631     depends_on: [ControllerExtraConfigPre, NodeTLSData]
632     type: OS::TripleO::NodeExtraConfig
633     properties:
634         server: {get_resource: Controller}
635
636   UpdateConfig:
637     type: OS::TripleO::Tasks::PackageUpdate
638
639   UpdateDeployment:
640     type: OS::Heat::SoftwareDeployment
641     properties:
642       name: UpdateDeployment
643       config: {get_resource: UpdateConfig}
644       server: {get_resource: Controller}
645       input_values:
646         update_identifier:
647           get_param: UpdateIdentifier
648
649 outputs:
650   ip_address:
651     description: IP address of the server in the ctlplane network
652     value: {get_attr: [Controller, networks, ctlplane, 0]}
653   external_ip_address:
654     description: IP address of the server in the external network
655     value: {get_attr: [ExternalPort, ip_address]}
656   internal_api_ip_address:
657     description: IP address of the server in the internal_api network
658     value: {get_attr: [InternalApiPort, ip_address]}
659   storage_ip_address:
660     description: IP address of the server in the storage network
661     value: {get_attr: [StoragePort, ip_address]}
662   storage_mgmt_ip_address:
663     description: IP address of the server in the storage_mgmt network
664     value: {get_attr: [StorageMgmtPort, ip_address]}
665   tenant_ip_address:
666     description: IP address of the server in the tenant network
667     value: {get_attr: [TenantPort, ip_address]}
668   management_ip_address:
669     description: IP address of the server in the management network
670     value: {get_attr: [ManagementPort, ip_address]}
671   hostname:
672     description: Hostname of the server
673     value: {get_attr: [Controller, name]}
674   hosts_entry:
675     description: >
676       Server's IP address and hostname in the /etc/hosts format
677     value:
678       str_replace:
679         template: |
680           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
681           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
682           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
683           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
684           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
685           TENANTIP TENANTHOST.DOMAIN TENANTHOST
686           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
687         params:
688           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
689           DOMAIN: {get_param: CloudDomain}
690           PRIMARYHOST: {get_attr: [Controller, name]}
691           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
692           EXTERNALHOST:
693             list_join:
694             - '.'
695             - - {get_attr: [Controller, name]}
696               - external
697           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
698           INTERNAL_APIHOST:
699             list_join:
700             - '.'
701             - - {get_attr: [Controller, name]}
702               - internalapi
703           STORAGEIP: {get_attr: [StoragePort, ip_address]}
704           STORAGEHOST:
705             list_join:
706             - '.'
707             - - {get_attr: [Controller, name]}
708               - storage
709           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
710           STORAGE_MGMTHOST:
711             list_join:
712             - '.'
713             - - {get_attr: [Controller, name]}
714               - storagemgmt
715           TENANTIP: {get_attr: [TenantPort, ip_address]}
716           TENANTHOST:
717             list_join:
718             - '.'
719             - - {get_attr: [Controller, name]}
720               - tenant
721           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
722           MANAGEMENTHOST:
723             list_join:
724             - '.'
725             - - {get_attr: [Controller, name]}
726               - management
727   nova_server_resource:
728     description: Heat resource handle for the Nova compute server
729     value:
730       {get_resource: Controller}
731   swift_device:
732     description: Swift device formatted for swift-ring-builder
733     value:
734       str_replace:
735         template:
736           list_join:
737             - ','
738             - ['r1z1-IP:%PORT%/d1']
739             - repeat:
740                 template: 'r1z1-IP:%PORT%/DEVICE'
741                 for_each:
742                   DEVICE: {get_param: SwiftRawDisks}
743         params:
744           IP:
745             get_attr:
746               - NetIpMap
747               - net_ip_map
748               - str_replace:
749                   template: "NETWORK_uri"
750                   params:
751                     NETWORK: {get_param: [ServiceNetMap, SwiftMgmtNetwork]}
752   swift_proxy_memcache:
753     description: Swift proxy-memcache value
754     value:
755       str_replace:
756         template: "IP:11211"
757         params:
758           IP:
759             get_attr:
760               - NetIpMap
761               - net_ip_map
762               - str_replace:
763                   template: "NETWORK_uri"
764                   params:
765                     NETWORK: {get_param: [ServiceNetMap, MemcachedNetwork]}
766   tls_key_modulus_md5:
767     description: MD5 checksum of the TLS Key Modulus
768     value: {get_attr: [NodeTLSData, key_modulus_md5]}
769   tls_cert_modulus_md5:
770     description: MD5 checksum of the TLS Certificate Modulus
771     value: {get_attr: [NodeTLSData, cert_modulus_md5]}