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