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