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