Merge "Move resource registry override to enable-tls.yaml"
[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   SwiftRawDisks:
175     default: {}
176     description: 'A hash of additional raw devices to use as Swift backend (eg. {sdb: {}})'
177     type: json
178   UpgradeLevelNovaCompute:
179     type: string
180     description: Nova Compute upgrade level
181     default: ''
182   ServiceNetMap:
183     default: {}
184     description: Mapping of service_name -> network name. Typically set
185                  via parameter_defaults in the resource registry.
186     type: json
187   EndpointMap:
188     default: {}
189     description: Mapping of service endpoint -> protocol. Typically set
190                  via parameter_defaults in the resource registry.
191     type: json
192   UpdateIdentifier:
193     default: ''
194     type: string
195     description: >
196       Setting to a previously unused value during stack-update will trigger
197       package update on all nodes
198   Hostname:
199     type: string
200     default: '' # Defaults to Heat created hostname
201   HostnameMap:
202     type: json
203     default: {}
204     description: Optional mapping to override hostnames
205   NetworkDeploymentActions:
206     type: comma_delimited_list
207     description: >
208       Heat action when to apply network configuration changes
209     default: ['CREATE']
210   NodeIndex:
211     type: number
212     default: 0
213   SoftwareConfigTransport:
214     default: POLL_SERVER_CFN
215     description: |
216       How the server should receive the metadata required for software configuration.
217     type: string
218     constraints:
219     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
220   CloudDomain:
221     type: string
222     description: >
223       The DNS domain used for the hosts. This should match the dhcp_domain
224       configured in the Undercloud neutron. Defaults to localdomain.
225   ServerMetadata:
226     default: {}
227     description: >
228       Extra properties or metadata passed to Nova for the created nodes in
229       the overcloud. It's accessible via the Nova metadata API.
230     type: json
231   ControllerSchedulerHints:
232     type: json
233     description: Optional scheduler hints to pass to nova
234     default: {}
235   ServiceConfigSettings:
236     type: json
237     default: {}
238   ServiceNames:
239     type: comma_delimited_list
240     default: []
241   ConfigCommand:
242     type: string
243     description: Command which will be run whenever configuration data changes
244     default: os-refresh-config --timeout 14400
245
246 parameter_groups:
247 - label: deprecated
248   description: Do not use deprecated params, they will be removed.
249   parameters:
250   - controllerExtraConfig
251
252 resources:
253
254   Controller:
255     type: OS::TripleO::Server
256     metadata:
257       os-collect-config:
258         command: {get_param: ConfigCommand}
259     properties:
260       image: {get_param: controllerImage}
261       image_update_policy: {get_param: ImageUpdatePolicy}
262       flavor: {get_param: OvercloudControlFlavor}
263       key_name: {get_param: KeyName}
264       networks:
265         - network: ctlplane
266       user_data_format: SOFTWARE_CONFIG
267       user_data: {get_resource: UserData}
268       name:
269         str_replace:
270             template: {get_param: Hostname}
271             params: {get_param: HostnameMap}
272       software_config_transport: {get_param: SoftwareConfigTransport}
273       metadata: {get_param: ServerMetadata}
274       scheduler_hints: {get_param: ControllerSchedulerHints}
275
276   # Combine the NodeAdminUserData and NodeUserData mime archives
277   UserData:
278     type: OS::Heat::MultipartMime
279     properties:
280       parts:
281       - config: {get_resource: NodeAdminUserData}
282         type: multipart
283       - config: {get_resource: NodeUserData}
284         type: multipart
285
286   # Creates the "heat-admin" user if configured via the environment
287   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
288   NodeAdminUserData:
289     type: OS::TripleO::NodeAdminUserData
290
291   # For optional operator additional userdata
292   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
293   NodeUserData:
294     type: OS::TripleO::NodeUserData
295
296   ExternalPort:
297     type: OS::TripleO::Controller::Ports::ExternalPort
298     properties:
299       IPPool: {get_param: ControllerIPs}
300       NodeIndex: {get_param: NodeIndex}
301       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
302
303   InternalApiPort:
304     type: OS::TripleO::Controller::Ports::InternalApiPort
305     properties:
306       IPPool: {get_param: ControllerIPs}
307       NodeIndex: {get_param: NodeIndex}
308       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
309
310   StoragePort:
311     type: OS::TripleO::Controller::Ports::StoragePort
312     properties:
313       IPPool: {get_param: ControllerIPs}
314       NodeIndex: {get_param: NodeIndex}
315       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
316
317   StorageMgmtPort:
318     type: OS::TripleO::Controller::Ports::StorageMgmtPort
319     properties:
320       IPPool: {get_param: ControllerIPs}
321       NodeIndex: {get_param: NodeIndex}
322       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
323
324   TenantPort:
325     type: OS::TripleO::Controller::Ports::TenantPort
326     properties:
327       IPPool: {get_param: ControllerIPs}
328       NodeIndex: {get_param: NodeIndex}
329       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
330
331   ManagementPort:
332     type: OS::TripleO::Controller::Ports::ManagementPort
333     properties:
334       IPPool: {get_param: ControllerIPs}
335       NodeIndex: {get_param: NodeIndex}
336       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
337
338   NetIpMap:
339     type: OS::TripleO::Network::Ports::NetIpMap
340     properties:
341       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
342       ExternalIp: {get_attr: [ExternalPort, ip_address]}
343       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
344       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
345       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
346       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
347       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
348       StorageIp: {get_attr: [StoragePort, ip_address]}
349       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
350       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
351       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
352       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
353       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
354       TenantIp: {get_attr: [TenantPort, ip_address]}
355       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
356       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
357       ManagementIp: {get_attr: [ManagementPort, ip_address]}
358       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
359       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
360
361   NetworkConfig:
362     type: OS::TripleO::Controller::Net::SoftwareConfig
363     properties:
364       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
365       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
366       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
367       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
368       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
369       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
370       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
371
372   NetworkDeployment:
373     type: OS::TripleO::SoftwareDeployment
374     properties:
375       name: NetworkDeployment
376       config: {get_resource: NetworkConfig}
377       server: {get_resource: Controller}
378       actions: {get_param: NetworkDeploymentActions}
379       input_values:
380         bridge_name: br-ex
381         interface_name: {get_param: NeutronPublicInterface}
382
383   # Resource for site-specific injection of root certificate
384   NodeTLSCAData:
385     depends_on: NetworkDeployment
386     type: OS::TripleO::NodeTLSCAData
387     properties:
388       server: {get_resource: Controller}
389
390   # Resource for site-specific passing of private keys/certificates
391   NodeTLSData:
392     depends_on: NodeTLSCAData
393     type: OS::TripleO::NodeTLSData
394     properties:
395       server: {get_resource: Controller}
396       NodeIndex: {get_param: NodeIndex}
397
398
399   ControllerDeployment:
400     type: OS::TripleO::SoftwareDeployment
401     depends_on: NetworkDeployment
402     properties:
403       name: ControllerDeployment
404       config: {get_resource: ControllerConfig}
405       server: {get_resource: Controller}
406       input_values:
407         bootstack_nodeid: {get_attr: [Controller, name]}
408         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
409         horizon_secret: {get_param: HorizonSecret}
410         debug: {get_param: Debug}
411         keystone_identity_uri: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
412         keystone_auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
413         keystone_ec2_uri: { get_param: [EndpointMap, KeystoneEC2, uri] }
414         enable_fencing: {get_param: EnableFencing}
415         enable_load_balancer: {get_param: EnableLoadBalancer}
416         manage_firewall: {get_param: ManageFirewall}
417         purge_firewall_rules: {get_param: PurgeFirewallRules}
418         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
419         aodh_internal_url: { get_param: [ EndpointMap, AodhInternal, uri ] }
420         aodh_public_url: { get_param: [ EndpointMap, AodhPublic, uri ] }
421         aodh_admin_url: { get_param: [ EndpointMap, AodhAdmin, uri ] }
422         ceilometer_coordination_url:
423           list_join:
424             - ''
425             - - 'redis://:'
426               - {get_param: RedisPassword}
427               - '@'
428               - {get_param: RedisVirtualIPUri}
429               - ':6379/'
430         nova_enable_db_purge: {get_param: NovaEnableDBPurge}
431         nova_ipv6: {get_param: NovaIPv6}
432         corosync_ipv6: {get_param: CorosyncIPv6}
433         memcached_ipv6: {get_param: MemcachedIPv6}
434         nova_password: {get_param: NovaPassword}
435         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
436         instance_name_template: {get_param: InstanceNameTemplate}
437         fencing_config: {get_param: FencingConfig}
438         pcsd_password: {get_param: PcsdPassword}
439         swift_hash_suffix: {get_param: SwiftHashSuffix}
440         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
441         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
442         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
443         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
444         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
445         glance_api_servers: { get_param: [EndpointMap, GlanceInternal, uri]}
446         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
447         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
448         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
449         manila_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ManilaApiNetwork]}]}
450         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongodbNetwork]}]}
451         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
452         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
453         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
454         aodh_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
455         gnocchi_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
456         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
457         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
458         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
459         horizon_subnet:
460           str_replace:
461             template: "['SUBNET']"
462             params:
463               SUBNET:
464                 get_attr:
465                   - NetIpMap
466                   - net_ip_map
467                   - str_replace:
468                       template: "NETWORK_subnet"
469                       params:
470                         NETWORK: {get_param: [ServiceNetMap, HorizonNetwork]}
471         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
472         redis_vip: {get_param: RedisVirtualIP}
473         sahara_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
474         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
475         ceph_cluster_network:
476           get_attr:
477             - NetIpMap
478             - net_ip_map
479             - str_replace:
480                 template: "NETWORK_subnet"
481                 params:
482                   NETWORK: {get_param: [ServiceNetMap, CephClusterNetwork]}
483         ceph_public_network:
484           get_attr:
485             - NetIpMap
486             - net_ip_map
487             - str_replace:
488                 template: "NETWORK_subnet"
489                 params:
490                   NETWORK: {get_param: [ServiceNetMap, CephPublicNetwork]}
491         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
492         ironic_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
493
494   # Map heat metadata into hiera datafiles
495   ControllerConfig:
496     type: OS::Heat::StructuredConfig
497     properties:
498       group: os-apply-config
499       config:
500         hiera:
501           hierarchy:
502             - '"%{::uuid}"'
503             - heat_config_%{::deploy_config_name}
504             - controller_extraconfig
505             - extraconfig
506             - service_configs
507             - service_names
508             - controller
509             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
510             - ceph_cluster # provided by CephClusterConfig
511             - ceph
512             - bootstrap_node # provided by BootstrapNodeConfig
513             - all_nodes # provided by allNodesConfig
514             - vip_data # provided by vip-config
515             - '"%{::osfamily}"'
516             - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
517             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
518             - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
519             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
520             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
521             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
522             - midonet_data #Optionally provided by AllNodesExtraConfig
523           merge_behavior: deeper
524           datafiles:
525             service_names:
526               mapped_data:
527                 service_names: {get_param: ServiceNames}
528             service_configs:
529               mapped_data:
530                 map_replace:
531                   - {get_param: ServiceConfigSettings}
532                   - values: {get_attr: [NetIpMap, net_ip_map]}
533             controller_extraconfig:
534               mapped_data:
535                 map_merge:
536                   - {get_param: controllerExtraConfig}
537                   - {get_param: ControllerExtraConfig}
538             extraconfig:
539               mapped_data: {get_param: ExtraConfig}
540             ceph:
541               mapped_data:
542                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
543                 ceph::profile::params::public_network: {get_input: ceph_public_network}
544                 ceph::profile::params::public_addr: {get_input: ceph_public_ip}
545             controller:
546               mapped_data: # data supplied directly to this deployment configuration, etc
547                 bootstack_nodeid: {get_input: bootstack_nodeid}
548
549                 # Pacemaker
550                 enable_fencing: {get_input: enable_fencing}
551                 enable_load_balancer: {get_input: enable_load_balancer}
552                 hacluster_pwd: {get_input: pcsd_password}
553                 corosync_ipv6: {get_input: corosync_ipv6}
554                 tripleo::fencing::config: {get_input: fencing_config}
555
556                 # Swift
557                 # FIXME: need to move proxy_local_net_ip into swift-proxy.yaml
558                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
559                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
560                 swift::swift_hash_path_suffix: {get_input: swift_hash_suffix}
561
562                 # Glance
563                 glance::api::bind_host: {get_input: glance_api_network}
564                 glance::registry::bind_host: {get_input: glance_registry_network}
565
566                 # Heat
567                 heat::api::bind_host: {get_input: heat_api_network}
568                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
569                 heat::api_cfn::bind_host: {get_input: heat_api_network}
570                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
571
572                 # Keystone
573                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
574                 keystone::public_bind_host: {get_input: keystone_public_api_network}
575                 keystone::wsgi::apache::bind_host: {get_input: keystone_public_api_network}
576                 keystone::wsgi::apache::admin_bind_host: {get_input: keystone_admin_api_network}
577
578                 # Manila
579                 manila::api::bind_host: {get_input: manila_api_network}
580
581                 # MongoDB
582                 mongodb::server::bind_ip: {get_input: mongo_db_network}
583
584                 # Neutron
585                 neutron::bind_host: {get_input: neutron_api_network}
586                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
587                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
588
589                 # Aodh
590                 aodh::api::host: {get_input: aodh_api_network}
591                 aodh::wsgi::apache::bind_host: {get_input: aodh_api_network}
592
593                 # Ceilometer
594                 ceilometer::api::host: {get_input: ceilometer_api_network}
595                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
596                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
597
598                 # Gnocchi
599                 gnocchi::wsgi::apache::bind_host: {get_input: gnocchi_api_network}
600                 gnocchi::api::host: {get_input: gnocchi_api_network}
601                 gnocchi::api::keystone_auth_uri: {get_input: keystone_auth_uri}
602                 gnocchi::api::keystone_identity_uri: {get_input: keystone_identity_uri}
603                 gnocchi::storage::swift::swift_authurl: {get_input: keystone_auth_uri}
604
605                 # Nova
606                 nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
607                 nova::use_ipv6: {get_input: nova_ipv6}
608                 nova::api::auth_uri: {get_input: keystone_auth_uri}
609                 nova::api::identity_uri: {get_input: keystone_identity_uri}
610                 nova::api::api_bind_address: {get_input: nova_api_network}
611                 nova::api::metadata_listen: {get_input: nova_metadata_network}
612                 nova::api::admin_password: {get_input: nova_password}
613                 nova::glance_api_servers: {get_input: glance_api_servers}
614                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
615                 nova::api::instance_name_template: {get_input: instance_name_template}
616                 nova::vncproxy::host: {get_input: nova_api_network}
617                 nova_enable_db_purge: {get_input: nova_enable_db_purge}
618
619                 # Horizon
620                 apache::mod::remoteip::proxy_ips: {get_input: horizon_subnet}
621                 apache::ip: {get_input: horizon_network}
622                 horizon::django_debug: {get_input: debug}
623                 horizon::secret_key: {get_input: horizon_secret}
624                 horizon::bind_address: {get_input: horizon_network}
625                 horizon::keystone_url: {get_input: keystone_auth_uri}
626
627                 # Sahara
628                 sahara::host: {get_input: sahara_api_network}
629
630                 # Redis
631                 redis::bind: {get_input: redis_network}
632                 redis_vip: {get_input: redis_vip}
633                 # Firewall
634                 tripleo::firewall::manage_firewall: {get_input: manage_firewall}
635                 tripleo::firewall::purge_firewall_rules: {get_input: purge_firewall_rules}
636                 # Misc
637                 memcached_ipv6: {get_input: memcached_ipv6}
638                 memcached::listen_ip: {get_input: memcached_network}
639                 tripleo::haproxy::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
640                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
641
642   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
643   ControllerExtraConfigPre:
644     depends_on: ControllerDeployment
645     type: OS::TripleO::ControllerExtraConfigPre
646     properties:
647         server: {get_resource: Controller}
648
649   # Hook for site-specific additional pre-deployment config,
650   # applying to all nodes, e.g node registration/unregistration
651   NodeExtraConfig:
652     depends_on: [ControllerExtraConfigPre, NodeTLSData]
653     type: OS::TripleO::NodeExtraConfig
654     properties:
655         server: {get_resource: Controller}
656
657   UpdateConfig:
658     type: OS::TripleO::Tasks::PackageUpdate
659
660   UpdateDeployment:
661     type: OS::Heat::SoftwareDeployment
662     properties:
663       name: UpdateDeployment
664       config: {get_resource: UpdateConfig}
665       server: {get_resource: Controller}
666       input_values:
667         update_identifier:
668           get_param: UpdateIdentifier
669
670 outputs:
671   ip_address:
672     description: IP address of the server in the ctlplane network
673     value: {get_attr: [Controller, networks, ctlplane, 0]}
674   external_ip_address:
675     description: IP address of the server in the external network
676     value: {get_attr: [ExternalPort, ip_address]}
677   internal_api_ip_address:
678     description: IP address of the server in the internal_api network
679     value: {get_attr: [InternalApiPort, ip_address]}
680   storage_ip_address:
681     description: IP address of the server in the storage network
682     value: {get_attr: [StoragePort, ip_address]}
683   storage_mgmt_ip_address:
684     description: IP address of the server in the storage_mgmt network
685     value: {get_attr: [StorageMgmtPort, ip_address]}
686   tenant_ip_address:
687     description: IP address of the server in the tenant network
688     value: {get_attr: [TenantPort, ip_address]}
689   management_ip_address:
690     description: IP address of the server in the management network
691     value: {get_attr: [ManagementPort, ip_address]}
692   hostname:
693     description: Hostname of the server
694     value: {get_attr: [Controller, name]}
695   hosts_entry:
696     description: >
697       Server's IP address and hostname in the /etc/hosts format
698     value:
699       str_replace:
700         template: |
701           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
702           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
703           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
704           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
705           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
706           TENANTIP TENANTHOST.DOMAIN TENANTHOST
707           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
708         params:
709           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
710           DOMAIN: {get_param: CloudDomain}
711           PRIMARYHOST: {get_attr: [Controller, name]}
712           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
713           EXTERNALHOST:
714             list_join:
715             - '.'
716             - - {get_attr: [Controller, name]}
717               - external
718           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
719           INTERNAL_APIHOST:
720             list_join:
721             - '.'
722             - - {get_attr: [Controller, name]}
723               - internalapi
724           STORAGEIP: {get_attr: [StoragePort, ip_address]}
725           STORAGEHOST:
726             list_join:
727             - '.'
728             - - {get_attr: [Controller, name]}
729               - storage
730           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
731           STORAGE_MGMTHOST:
732             list_join:
733             - '.'
734             - - {get_attr: [Controller, name]}
735               - storagemgmt
736           TENANTIP: {get_attr: [TenantPort, ip_address]}
737           TENANTHOST:
738             list_join:
739             - '.'
740             - - {get_attr: [Controller, name]}
741               - tenant
742           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
743           MANAGEMENTHOST:
744             list_join:
745             - '.'
746             - - {get_attr: [Controller, name]}
747               - management
748   nova_server_resource:
749     description: Heat resource handle for the Nova compute server
750     value:
751       {get_resource: Controller}
752   swift_device:
753     description: Swift device formatted for swift-ring-builder
754     value:
755       str_replace:
756         template:
757           list_join:
758             - ','
759             - ['r1z1-IP:%PORT%/d1']
760             - repeat:
761                 template: 'r1z1-IP:%PORT%/DEVICE'
762                 for_each:
763                   DEVICE: {get_param: SwiftRawDisks}
764         params:
765           IP:
766             get_attr:
767               - NetIpMap
768               - net_ip_map
769               - str_replace:
770                   template: "NETWORK_uri"
771                   params:
772                     NETWORK: {get_param: [ServiceNetMap, SwiftMgmtNetwork]}
773   swift_proxy_memcache:
774     description: Swift proxy-memcache value
775     value:
776       str_replace:
777         template: "IP:11211"
778         params:
779           IP:
780             get_attr:
781               - NetIpMap
782               - net_ip_map
783               - str_replace:
784                   template: "NETWORK_uri"
785                   params:
786                     NETWORK: {get_param: [ServiceNetMap, MemcachedNetwork]}
787   tls_key_modulus_md5:
788     description: MD5 checksum of the TLS Key Modulus
789     value: {get_attr: [NodeTLSData, key_modulus_md5]}
790   tls_cert_modulus_md5:
791     description: MD5 checksum of the TLS Certificate Modulus
792     value: {get_attr: [NodeTLSData, cert_modulus_md5]}