e46e40629e906dbe3d42bc0dff0120fa78749f8a
[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   HeatAuthEncryptionKey:
91     description: Auth encryption key for heat-engine
92     type: string
93     hidden: true
94   HorizonSecret:
95     description: Secret key for Django
96     type: string
97     hidden: true
98   controllerImage:
99     type: string
100     default: overcloud-full
101     constraints:
102       - custom_constraint: glance.image
103   ImageUpdatePolicy:
104     default: 'REBUILD_PRESERVE_EPHEMERAL'
105     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
106     type: string
107   InstanceNameTemplate:
108     default: 'instance-%08x'
109     description: Template string to be used to generate instance names
110     type: string
111   KeyName:
112     default: default
113     description: Name of an existing Nova key pair to enable SSH access to the instances
114     type: string
115     constraints:
116       - custom_constraint: nova.keypair
117   ManageFirewall:
118     default: false
119     description: Whether to manage IPtables rules.
120     type: boolean
121   MemcachedIPv6:
122     default: false
123     description: Enable IPv6 features in Memcached.
124     type: boolean
125   PurgeFirewallRules:
126     default: false
127     description: Whether IPtables rules should be purged before setting up the new ones.
128     type: boolean
129   NeutronMetadataProxySharedSecret:
130     description: Shared secret to prevent spoofing
131     type: string
132     hidden: true
133   NeutronPassword:
134     description: The password for the neutron service and db account, used by neutron agents.
135     type: string
136     hidden: true
137   NeutronPublicInterface:
138     default: nic1
139     description: What interface to bridge onto br-ex for network nodes.
140     type: string
141   NovaEnableDBPurge:
142     default: true
143     description: |
144         Whether to create cron job for purging soft deleted rows in Nova database.
145     type: boolean
146   NovaIPv6:
147     default: false
148     description: Enable IPv6 features in Nova
149     type: boolean
150   NovaPassword:
151     description: The password for the nova service and db account, used by nova-api.
152     type: string
153     hidden: true
154   PcsdPassword:
155     type: string
156     description: The password for the 'pcsd' user.
157     hidden: true
158   RedisPassword:
159     description: The password for Redis
160     type: string
161     hidden: true
162   RedisVirtualIP:
163     type: string
164     default: ''  # Has to be here because of the ignored empty value bug
165   RedisVirtualIPUri:
166     type: string
167     default: ''  # Has to be here because of the ignored empty value bug
168     description: An IP address which is wrapped in brackets in case of IPv6
169   SwiftHashSuffix:
170     description: A random string to be used as a salt when hashing to determine mappings
171       in the ring.
172     hidden: true
173     type: string
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         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
405         horizon_secret: {get_param: HorizonSecret}
406         debug: {get_param: Debug}
407         keystone_identity_uri: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
408         keystone_auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
409         keystone_ec2_uri: { get_param: [EndpointMap, KeystoneEC2, uri] }
410         enable_fencing: {get_param: EnableFencing}
411         enable_load_balancer: {get_param: EnableLoadBalancer}
412         manage_firewall: {get_param: ManageFirewall}
413         purge_firewall_rules: {get_param: PurgeFirewallRules}
414         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
415         aodh_internal_url: { get_param: [ EndpointMap, AodhInternal, uri ] }
416         aodh_public_url: { get_param: [ EndpointMap, AodhPublic, uri ] }
417         aodh_admin_url: { get_param: [ EndpointMap, AodhAdmin, uri ] }
418         ceilometer_coordination_url:
419           list_join:
420             - ''
421             - - 'redis://:'
422               - {get_param: RedisPassword}
423               - '@'
424               - {get_param: RedisVirtualIPUri}
425               - ':6379/'
426         nova_enable_db_purge: {get_param: NovaEnableDBPurge}
427         nova_ipv6: {get_param: NovaIPv6}
428         corosync_ipv6: {get_param: CorosyncIPv6}
429         memcached_ipv6: {get_param: MemcachedIPv6}
430         nova_password: {get_param: NovaPassword}
431         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
432         instance_name_template: {get_param: InstanceNameTemplate}
433         fencing_config: {get_param: FencingConfig}
434         pcsd_password: {get_param: PcsdPassword}
435         swift_hash_suffix: {get_param: SwiftHashSuffix}
436         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
437         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
438         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
439         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
440         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
441         glance_api_servers: { get_param: [EndpointMap, GlanceInternal, uri]}
442         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
443         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
444         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
445         manila_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ManilaApiNetwork]}]}
446         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongodbNetwork]}]}
447         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
448         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
449         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
450         aodh_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
451         gnocchi_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
452         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
453         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
454         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
455         horizon_subnet:
456           str_replace:
457             template: "['SUBNET']"
458             params:
459               SUBNET:
460                 get_attr:
461                   - NetIpMap
462                   - net_ip_map
463                   - str_replace:
464                       template: "NETWORK_subnet"
465                       params:
466                         NETWORK: {get_param: [ServiceNetMap, HorizonNetwork]}
467         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
468         redis_vip: {get_param: RedisVirtualIP}
469         sahara_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
470         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
471         ceph_cluster_network:
472           get_attr:
473             - NetIpMap
474             - net_ip_map
475             - str_replace:
476                 template: "NETWORK_subnet"
477                 params:
478                   NETWORK: {get_param: [ServiceNetMap, CephClusterNetwork]}
479         ceph_public_network:
480           get_attr:
481             - NetIpMap
482             - net_ip_map
483             - str_replace:
484                 template: "NETWORK_subnet"
485                 params:
486                   NETWORK: {get_param: [ServiceNetMap, CephPublicNetwork]}
487         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
488         ironic_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
489
490   # Map heat metadata into hiera datafiles
491   ControllerConfig:
492     type: OS::Heat::StructuredConfig
493     properties:
494       group: os-apply-config
495       config:
496         hiera:
497           hierarchy:
498             - '"%{::uuid}"'
499             - heat_config_%{::deploy_config_name}
500             - controller_extraconfig
501             - extraconfig
502             - service_configs
503             - service_names
504             - controller
505             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
506             - ceph_cluster # provided by CephClusterConfig
507             - ceph
508             - bootstrap_node # provided by BootstrapNodeConfig
509             - all_nodes # provided by allNodesConfig
510             - vip_data # provided by vip-config
511             - '"%{::osfamily}"'
512             - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
513             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
514             - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
515             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
516             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
517             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
518             - midonet_data #Optionally provided by AllNodesExtraConfig
519           merge_behavior: deeper
520           datafiles:
521             service_names:
522               mapped_data:
523                 service_names: {get_param: ServiceNames}
524             service_configs:
525               mapped_data:
526                 map_replace:
527                   - {get_param: ServiceConfigSettings}
528                   - values: {get_attr: [NetIpMap, net_ip_map]}
529             controller_extraconfig:
530               mapped_data:
531                 map_merge:
532                   - {get_param: controllerExtraConfig}
533                   - {get_param: ControllerExtraConfig}
534             extraconfig:
535               mapped_data: {get_param: ExtraConfig}
536             ceph:
537               mapped_data:
538                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
539                 ceph::profile::params::public_network: {get_input: ceph_public_network}
540                 ceph::profile::params::public_addr: {get_input: ceph_public_ip}
541             controller:
542               mapped_data: # data supplied directly to this deployment configuration, etc
543                 bootstack_nodeid: {get_input: bootstack_nodeid}
544
545                 # Pacemaker
546                 enable_fencing: {get_input: enable_fencing}
547                 enable_load_balancer: {get_input: enable_load_balancer}
548                 hacluster_pwd: {get_input: pcsd_password}
549                 corosync_ipv6: {get_input: corosync_ipv6}
550                 tripleo::fencing::config: {get_input: fencing_config}
551
552                 # Swift
553                 # FIXME: need to move proxy_local_net_ip into swift-proxy.yaml
554                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
555                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
556                 swift::swift_hash_path_suffix: {get_input: swift_hash_suffix}
557
558                 # Glance
559                 glance::api::bind_host: {get_input: glance_api_network}
560                 glance::registry::bind_host: {get_input: glance_registry_network}
561
562                 # Heat
563                 heat::api::bind_host: {get_input: heat_api_network}
564                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
565                 heat::api_cfn::bind_host: {get_input: heat_api_network}
566                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
567
568                 # Keystone
569                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
570                 keystone::public_bind_host: {get_input: keystone_public_api_network}
571                 keystone::wsgi::apache::bind_host: {get_input: keystone_public_api_network}
572                 keystone::wsgi::apache::admin_bind_host: {get_input: keystone_admin_api_network}
573
574                 # Manila
575                 manila::api::bind_host: {get_input: manila_api_network}
576
577                 # MongoDB
578                 mongodb::server::bind_ip: {get_input: mongo_db_network}
579
580                 # Neutron
581                 neutron::bind_host: {get_input: neutron_api_network}
582                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
583                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
584
585                 # Aodh
586                 aodh::api::host: {get_input: aodh_api_network}
587                 aodh::wsgi::apache::bind_host: {get_input: aodh_api_network}
588
589                 # Ceilometer
590                 ceilometer::api::host: {get_input: ceilometer_api_network}
591                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
592                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
593
594                 # Gnocchi
595                 gnocchi::wsgi::apache::bind_host: {get_input: gnocchi_api_network}
596                 gnocchi::api::host: {get_input: gnocchi_api_network}
597                 gnocchi::api::keystone_auth_uri: {get_input: keystone_auth_uri}
598                 gnocchi::api::keystone_identity_uri: {get_input: keystone_identity_uri}
599                 gnocchi::storage::swift::swift_authurl: {get_input: keystone_auth_uri}
600
601                 # Nova
602                 nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
603                 nova::use_ipv6: {get_input: nova_ipv6}
604                 nova::api::auth_uri: {get_input: keystone_auth_uri}
605                 nova::api::identity_uri: {get_input: keystone_identity_uri}
606                 nova::api::api_bind_address: {get_input: nova_api_network}
607                 nova::api::metadata_listen: {get_input: nova_metadata_network}
608                 nova::api::admin_password: {get_input: nova_password}
609                 nova::glance_api_servers: {get_input: glance_api_servers}
610                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
611                 nova::api::instance_name_template: {get_input: instance_name_template}
612                 nova::vncproxy::host: {get_input: nova_api_network}
613                 nova_enable_db_purge: {get_input: nova_enable_db_purge}
614
615                 # Horizon
616                 apache::mod::remoteip::proxy_ips: {get_input: horizon_subnet}
617                 apache::ip: {get_input: horizon_network}
618                 horizon::django_debug: {get_input: debug}
619                 horizon::secret_key: {get_input: horizon_secret}
620                 horizon::bind_address: {get_input: horizon_network}
621                 horizon::keystone_url: {get_input: keystone_auth_uri}
622
623                 # Sahara
624                 sahara::host: {get_input: sahara_api_network}
625
626                 # Redis
627                 redis::bind: {get_input: redis_network}
628                 redis_vip: {get_input: redis_vip}
629                 # Firewall
630                 tripleo::firewall::manage_firewall: {get_input: manage_firewall}
631                 tripleo::firewall::purge_firewall_rules: {get_input: purge_firewall_rules}
632                 # Misc
633                 memcached_ipv6: {get_input: memcached_ipv6}
634                 memcached::listen_ip: {get_input: memcached_network}
635                 tripleo::haproxy::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
636                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
637
638   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
639   ControllerExtraConfigPre:
640     depends_on: ControllerDeployment
641     type: OS::TripleO::ControllerExtraConfigPre
642     properties:
643         server: {get_resource: Controller}
644
645   # Hook for site-specific additional pre-deployment config,
646   # applying to all nodes, e.g node registration/unregistration
647   NodeExtraConfig:
648     depends_on: [ControllerExtraConfigPre, NodeTLSData]
649     type: OS::TripleO::NodeExtraConfig
650     properties:
651         server: {get_resource: Controller}
652
653   UpdateConfig:
654     type: OS::TripleO::Tasks::PackageUpdate
655
656   UpdateDeployment:
657     type: OS::Heat::SoftwareDeployment
658     properties:
659       name: UpdateDeployment
660       config: {get_resource: UpdateConfig}
661       server: {get_resource: Controller}
662       input_values:
663         update_identifier:
664           get_param: UpdateIdentifier
665
666 outputs:
667   ip_address:
668     description: IP address of the server in the ctlplane network
669     value: {get_attr: [Controller, networks, ctlplane, 0]}
670   external_ip_address:
671     description: IP address of the server in the external network
672     value: {get_attr: [ExternalPort, ip_address]}
673   internal_api_ip_address:
674     description: IP address of the server in the internal_api network
675     value: {get_attr: [InternalApiPort, ip_address]}
676   storage_ip_address:
677     description: IP address of the server in the storage network
678     value: {get_attr: [StoragePort, ip_address]}
679   storage_mgmt_ip_address:
680     description: IP address of the server in the storage_mgmt network
681     value: {get_attr: [StorageMgmtPort, ip_address]}
682   tenant_ip_address:
683     description: IP address of the server in the tenant network
684     value: {get_attr: [TenantPort, ip_address]}
685   management_ip_address:
686     description: IP address of the server in the management network
687     value: {get_attr: [ManagementPort, ip_address]}
688   hostname:
689     description: Hostname of the server
690     value: {get_attr: [Controller, name]}
691   hosts_entry:
692     description: >
693       Server's IP address and hostname in the /etc/hosts format
694     value:
695       str_replace:
696         template: |
697           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
698           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
699           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
700           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
701           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
702           TENANTIP TENANTHOST.DOMAIN TENANTHOST
703           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
704         params:
705           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
706           DOMAIN: {get_param: CloudDomain}
707           PRIMARYHOST: {get_attr: [Controller, name]}
708           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
709           EXTERNALHOST:
710             list_join:
711             - '.'
712             - - {get_attr: [Controller, name]}
713               - external
714           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
715           INTERNAL_APIHOST:
716             list_join:
717             - '.'
718             - - {get_attr: [Controller, name]}
719               - internalapi
720           STORAGEIP: {get_attr: [StoragePort, ip_address]}
721           STORAGEHOST:
722             list_join:
723             - '.'
724             - - {get_attr: [Controller, name]}
725               - storage
726           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
727           STORAGE_MGMTHOST:
728             list_join:
729             - '.'
730             - - {get_attr: [Controller, name]}
731               - storagemgmt
732           TENANTIP: {get_attr: [TenantPort, ip_address]}
733           TENANTHOST:
734             list_join:
735             - '.'
736             - - {get_attr: [Controller, name]}
737               - tenant
738           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
739           MANAGEMENTHOST:
740             list_join:
741             - '.'
742             - - {get_attr: [Controller, name]}
743               - management
744   nova_server_resource:
745     description: Heat resource handle for the Nova compute server
746     value:
747       {get_resource: Controller}
748   swift_device:
749     description: Swift device formatted for swift-ring-builder
750     value:
751       str_replace:
752         template: 'r1z1-IP:%PORT%/d1'
753         params:
754           IP:
755             get_attr:
756               - NetIpMap
757               - net_ip_map
758               - str_replace:
759                   template: "NETWORK_uri"
760                   params:
761                     NETWORK: {get_param: [ServiceNetMap, SwiftMgmtNetwork]}
762   swift_proxy_memcache:
763     description: Swift proxy-memcache value
764     value:
765       str_replace:
766         template: "IP:11211"
767         params:
768           IP:
769             get_attr:
770               - NetIpMap
771               - net_ip_map
772               - str_replace:
773                   template: "NETWORK_uri"
774                   params:
775                     NETWORK: {get_param: [ServiceNetMap, MemcachedNetwork]}
776   tls_key_modulus_md5:
777     description: MD5 checksum of the TLS Key Modulus
778     value: {get_attr: [NodeTLSData, key_modulus_md5]}
779   tls_cert_modulus_md5:
780     description: MD5 checksum of the TLS Certificate Modulus
781     value: {get_attr: [NodeTLSData, cert_modulus_md5]}