Add Redis as a Pacemaker resource
[apex-tripleo-heat-templates.git] / puppet / controller-puppet.yaml
1 heat_template_version: 2015-04-30
2
3 description: >
4   OpenStack controller node configured by Puppet.
5
6 parameters:
7   AdminPassword:
8     default: unset
9     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
10     type: string
11     hidden: true
12   AdminToken:
13     default: unset
14     description: The keystone auth secret and db password.
15     type: string
16     hidden: true
17   CeilometerBackend:
18     default: 'mongodb'
19     description: The ceilometer backend type.
20     type: string
21   CeilometerMeteringSecret:
22     default: unset
23     description: Secret shared by the ceilometer services.
24     type: string
25     hidden: true
26   CeilometerPassword:
27     default: unset
28     description: The password for the ceilometer service  and db account.
29     type: string
30     hidden: true
31   CinderEnableIscsiBackend:
32     default: true
33     description: Whether to enable or not the Iscsi backend for Cinder
34     type: boolean
35   CinderEnableRbdBackend:
36     default: false
37     description: Whether to enable or not the Rbd backend for Cinder
38     type: boolean
39   CinderISCSIHelper:
40     default: tgtadm
41     description: The iSCSI helper to use with cinder.
42     type: string
43   CinderLVMLoopDeviceSize:
44     default: 5000
45     description: The size of the loopback file used by the cinder LVM driver.
46     type: number
47   CinderPassword:
48     default: unset
49     description: The password for the cinder service and db account, used by cinder-api.
50     type: string
51     hidden: true
52   CloudName:
53     default: ''
54     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
55     type: string
56   ControllerExtraConfig:
57     default: {}
58     description: |
59       Controller specific configuration to inject into the cluster. Same
60       structure as ExtraConfig.
61     type: json
62   ControlVirtualInterface:
63     default: 'br-ex'
64     description: Interface where virtual ip will be assigned.
65     type: string
66   Debug:
67     default: ''
68     description: Set to True to enable debugging on all services.
69     type: string
70   EnableGalera:
71     default: true
72     description: Whether to use Galera instead of regular MariaDB.
73     type: boolean
74   EnablePacemaker:
75     default: false
76     description: If enabled services will be monitored by Pacemaker; it
77       will manage VIPs as well, in place of Keepalived.
78     type: boolean
79   EnableCephStorage:
80     default: false
81     description: Whether to deploy Ceph Storage (OSD) on the Controller
82     type: boolean
83   EnableSwiftStorage:
84     default: true
85     description: Whether to enable Swift Storage on the Controller
86     type: boolean
87   ExtraConfig:
88     default: {}
89     description: |
90       Additional configuration to inject into the cluster. The JSON should have
91       the following structure:
92         {"FILEKEY":
93           {"config":
94             [{"section": "SECTIONNAME",
95               "values":
96                 [{"option": "OPTIONNAME",
97                   "value": "VALUENAME"
98                  }
99                 ]
100              }
101             ]
102           }
103         }
104       For instance:
105         {"nova":
106           {"config":
107             [{"section": "default",
108               "values":
109                 [{"option": "compute_manager",
110                   "value": "ironic.nova.compute.manager.ClusterComputeManager"
111                  }
112                 ]
113              },
114              {"section": "cells",
115               "values":
116                 [{"option": "driver",
117                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
118                  }
119                 ]
120              }
121             ]
122           }
123         }
124     type: json
125   Flavor:
126     description: Flavor for control nodes to request when deploying.
127     type: string
128     constraints:
129       - custom_constraint: nova.flavor
130   GlanceNotifierStrategy:
131     description: Strategy to use for Glance notification queue
132     type: string
133     default: noop
134   GlanceLogFile:
135     description: The filepath of the file to use for logging messages from Glance.
136     type: string
137     default: ''
138   GlancePassword:
139     default: unset
140     description: The password for the glance service and db account, used by the glance services.
141     type: string
142     hidden: true
143   GlancePort:
144     default: "9292"
145     description: Glance port.
146     type: string
147   GlanceProtocol:
148     default: http
149     description: Protocol to use when connecting to glance, set to https for SSL.
150     type: string
151   GlanceBackend:
152     default: swift
153     description: The short name of the Glance backend to use. Should be one
154       of swift, rbd, or file
155     type: string
156     constraints:
157     - allowed_values: ['swift', 'file', 'rbd']
158   HeatPassword:
159     default: unset
160     description: The password for the Heat service and db account, used by the Heat services.
161     type: string
162     hidden: true
163   HeatStackDomainAdminPassword:
164     description: Password for heat_domain_admin user.
165     type: string
166     default: ''
167     hidden: true
168   HeatAuthEncryptionKey:
169     description: Auth encryption key for heat-engine
170     type: string
171   HorizonSecret:
172     description: Secret key for Django
173     type: string
174   Image:
175     type: string
176     default: overcloud-control
177     constraints:
178       - custom_constraint: glance.image
179   ImageUpdatePolicy:
180     default: 'REBUILD_PRESERVE_EPHEMERAL'
181     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
182     type: string
183   KeyName:
184     default: default
185     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
186     type: string
187     constraints:
188       - custom_constraint: nova.keypair
189   KeystoneCACertificate:
190     default: ''
191     description: Keystone self-signed certificate authority certificate.
192     type: string
193   KeystoneSigningCertificate:
194     default: ''
195     description: Keystone certificate for verifying token validity.
196     type: string
197   KeystoneSigningKey:
198     default: ''
199     description: Keystone key for signing tokens.
200     type: string
201     hidden: true
202   KeystoneSSLCertificate:
203     default: ''
204     description: Keystone certificate for verifying token validity.
205     type: string
206   KeystoneSSLCertificateKey:
207     default: ''
208     description: Keystone key for signing tokens.
209     type: string
210     hidden: true
211   MysqlClusterUniquePart:
212     description: A unique identifier of the MySQL cluster the controller is in.
213     type: string
214     default: 'unset'  # Has to be here because of the ignored empty value bug
215     # Drop the validation: https://bugs.launchpad.net/tripleo/+bug/1405446
216     # constraints:
217     # - length: {min: 4, max: 10}
218   MysqlInnodbBufferPoolSize:
219     description: >
220         Specifies the size of the buffer pool in megabytes. Setting to
221         zero should be interpreted as "no value" and will defer to the
222         lower level default.
223     type: number
224     default: 0
225   MysqlRootPassword:
226     type: string
227     hidden: true
228     default: ''  # Has to be here because of the ignored empty value bug
229   NeutronBridgeMappings:
230     description: >
231       The OVS logical->physical bridge mappings to use. See the Neutron
232       documentation for details. Defaults to mapping br-ex - the external
233       bridge on hosts - to a physical name 'datacentre' which can be used
234       to create provider networks (and we use this for the default floating
235       network) - if changing this either use different post-install network
236       scripts or be sure to keep 'datacentre' as a mapping network name.
237     type: string
238     default: "datacentre:br-ex"
239   NeutronDnsmasqOptions:
240     default: 'dhcp-option-force=26,1400'
241     description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the gre tunnel overhead.
242     type: string
243   NeutronAgentMode:
244     default: 'dvr_snat'
245     description: Agent mode for the neutron-l3-agent on the controller hosts
246     type: string
247   NeutronL3HA:
248     default: 'False'
249     description: Whether to enable l3-agent HA
250     type: string
251   NeutronDVR:
252     default: 'False'
253     description: Whether to configure Neutron Distributed Virtual Routers
254     type: string
255   NeutronMetadataProxySharedSecret:
256     default: 'unset'
257     description: Shared secret to prevent spoofing
258     type: string
259   NeutronMechanismDrivers:
260     default: 'openvswitch'
261     description: |
262         The mechanism drivers for the Neutron tenant network. To specify multiple
263         values, use a comma separated string, like so: 'openvswitch,l2_population'
264     type: string
265   NeutronAllowL3AgentFailover:
266     default: 'True'
267     description: Allow automatic l3-agent failover
268     type: string
269   NeutronEnableTunnelling:
270     type: string
271     default: "True"
272   NeutronFlatNetworks:
273     type: string
274     default: 'datacentre'
275     description: If set, flat networks to configure in neutron plugins.
276   NeutronL3HA:
277     default: 'False'
278     description: Whether to enable l3-agent HA
279     type: string
280   NeutronNetworkType:
281     default: 'gre'
282     description: The tenant network type for Neutron, either gre or vxlan.
283     type: string
284   NeutronNetworkVLANRanges:
285     default: 'datacentre'
286     description: >
287       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
288       Neutron documentation for permitted values. Defaults to permitting any
289       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
290     type: comma_delimited_list
291   NeutronPassword:
292     default: unset
293     description: The password for the neutron service and db account, used by neutron agents.
294     type: string
295     hidden: true
296   NeutronPublicInterface:
297     default: nic1
298     description: What interface to bridge onto br-ex for network nodes.
299     type: string
300   NeutronPublicInterfaceTag:
301     default: ''
302     description: >
303       VLAN tag for creating a public VLAN. The tag will be used to
304       create an access port on the exterior bridge for each control plane node,
305       and that port will be given the IP address returned by neutron from the
306       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
307       overcloud.yaml to include the deployment of VLAN ports to the control
308       plane.
309     type: string
310   NeutronPublicInterfaceDefaultRoute:
311     default: ''
312     description: A custom default route for the NeutronPublicInterface.
313     type: string
314   NeutronPublicInterfaceIP:
315     default: ''
316     description: A custom IP address to put onto the NeutronPublicInterface.
317     type: string
318   NeutronPublicInterfaceRawDevice:
319     default: ''
320     description: If set, the public interface is a vlan with this device as the raw device.
321     type: string
322   NeutronTunnelTypes:
323     default: 'gre'
324     description: |
325         The tunnel types for the Neutron tenant network. To specify multiple
326         values, use a comma separated string, like so: 'gre,vxlan'
327     type: string
328   NovaPassword:
329     default: unset
330     description: The password for the nova service and db account, used by nova-api.
331     type: string
332     hidden: true
333   NtpServer:
334     type: string
335     default: ''
336   PcsdPassword:
337     type: string
338     description: The password for the 'pcsd' user.
339   PublicVirtualInterface:
340     default: 'br-ex'
341     description: >
342         Specifies the interface where the public-facing virtual ip will be assigned.
343         This should be int_public when a VLAN is being used.
344     type: string
345   PublicVirtualIP: # DEPRECATED: use per service settings instead
346     type: string
347     default: ''  # Has to be here because of the ignored empty value bug
348   RabbitCookie:
349     type: string
350     default: ''  # Has to be here because of the ignored empty value bug
351     hidden: true
352   RabbitPassword:
353     default: guest
354     description: The password for RabbitMQ
355     type: string
356     hidden: true
357   RabbitUserName:
358     default: guest
359     description: The username for RabbitMQ
360     type: string
361   RabbitClientUseSSL:
362     default: false
363     description: >
364         Rabbit client subscriber parameter to specify
365         an SSL connection to the RabbitMQ host.
366     type: string
367   RabbitClientPort:
368     default: 5672
369     description: Set rabbit subscriber port, change this if using SSL
370     type: number
371   RedisVirtualIP:
372     type: string
373     default: ''  # Has to be here because of the ignored empty value bug
374   SnmpdReadonlyUserName:
375     default: ro_snmp_user
376     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
377     type: string
378   SnmpdReadonlyUserPassword:
379     default: unset
380     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
381     type: string
382     hidden: true
383   SSLCACertificate:
384     default: ''
385     description: If set, the contents of an SSL certificate authority file.
386     type: string
387   SSLCertificate:
388     default: ''
389     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
390     type: string
391     hidden: true
392   SSLKey:
393     default: ''
394     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
395     type: string
396     hidden: true
397   SwiftHashSuffix:
398     default: unset
399     description: A random string to be used as a salt when hashing to determine mappings
400       in the ring.
401     hidden: true
402     type: string
403   SwiftMountCheck:
404     default: 'false'
405     description: Value of mount_check in Swift account/container/object -server.conf
406     type: boolean
407   SwiftMinPartHours:
408     type: number
409     default: 1
410     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
411   SwiftPartPower:
412     default: 10
413     description: Partition Power to use when building Swift rings
414     type: number
415   SwiftPassword:
416     default: unset
417     description: The password for the swift service account, used by the swift proxy
418       services.
419     hidden: true
420     type: string
421   SwiftReplicas:
422     type: number
423     default: 3
424     description: How many replicas to use in the swift rings.
425   VirtualIP: # DEPRECATED: use per service settings instead
426     type: string
427     default: ''  # Has to be here because of the ignored empty value bug
428   HeatApiVirtualIP:
429     type: string
430     default: ''
431   GlanceApiVirtualIP:
432     type: string
433     default: ''
434   MysqlVirtualIP:
435     type: string
436     default: ''
437   KeystonePublicApiVirtualIP:
438     type: string
439     default: ''
440   NeutronApiVirtualIP:
441     type: string
442     default: ''
443   EnablePackageInstall:
444     default: 'false'
445     description: Set to true to enable package installation via Puppet
446     type: boolean
447   ServiceNetMap:
448     default: {}
449     description: Mapping of service_name -> network name. Typically set
450                  via parameter_defaults in the resource registry.
451     type: json
452
453 resources:
454
455   Controller:
456     type: OS::Nova::Server
457     properties:
458       image: {get_param: Image}
459       image_update_policy: {get_param: ImageUpdatePolicy}
460       flavor: {get_param: Flavor}
461       key_name: {get_param: KeyName}
462       networks:
463         - network: ctlplane
464       user_data_format: SOFTWARE_CONFIG
465       user_data: {get_resource: NodeUserData}
466
467   NodeUserData:
468     type: OS::TripleO::NodeUserData
469
470   ExternalPort:
471     type: OS::TripleO::Controller::Ports::ExternalPort
472     properties:
473       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
474
475   InternalApiPort:
476     type: OS::TripleO::Controller::Ports::InternalApiPort
477     properties:
478       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
479
480   StoragePort:
481     type: OS::TripleO::Controller::Ports::StoragePort
482     properties:
483       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
484
485   StorageMgmtPort:
486     type: OS::TripleO::Controller::Ports::StorageMgmtPort
487     properties:
488       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
489
490   TenantPort:
491     type: OS::TripleO::Controller::Ports::TenantPort
492     properties:
493       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
494
495   NetIpMap:
496     type: OS::TripleO::Network::Ports::NetIpMap
497     properties:
498       ExternalIp: {get_attr: [ExternalPort, ip_address]}
499       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
500       StorageIp: {get_attr: [StoragePort, ip_address]}
501       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
502       TenantIp: {get_attr: [TenantPort, ip_address]}
503
504   NetIpSubnetMap:
505     type: OS::TripleO::Network::Ports::NetIpMap
506     properties:
507       ExternalIp: {get_attr: [ExternalPort, ip_subnet]}
508       InternalApiIp: {get_attr: [InternalApiPort, ip_subnet]}
509       StorageIp: {get_attr: [StoragePort, ip_subnet]}
510       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_subnet]}
511       TenantIp: {get_attr: [TenantPort, ip_subnet]}
512
513   NetworkConfig:
514     type: OS::TripleO::Controller::Net::SoftwareConfig
515     properties:
516       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
517       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
518       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
519       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
520       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
521
522   NetworkDeployment:
523     type: OS::TripleO::SoftwareDeployment
524     properties:
525       signal_transport: NO_SIGNAL
526       config: {get_resource: NetworkConfig}
527       server: {get_resource: Controller}
528       input_values:
529         bridge_name: br-ex
530         interface_name: {get_param: NeutronPublicInterface}
531
532   ControllerDeployment:
533     type: OS::TripleO::SoftwareDeployment
534     properties:
535       signal_transport: NO_SIGNAL
536       config: {get_resource: ControllerConfig}
537       server: {get_resource: Controller}
538       input_values:
539         bootstack_nodeid: {get_attr: [Controller, name]}
540         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
541         heat.watch_server_url:
542           list_join:
543             - ''
544             - - 'http://'
545               - {get_param: HeatApiVirtualIP}
546               - ':8003'
547         heat.metadata_server_url:
548           list_join:
549             - ''
550             - - 'http://'
551               - {get_param: HeatApiVirtualIP}
552               - ':8000'
553         heat.waitcondition_server_url:
554           list_join:
555             - ''
556             - - 'http://'
557               - {get_param: HeatApiVirtualIP}
558               - ':8000/v1/waitcondition'
559         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
560         horizon_secret: {get_param: HorizonSecret}
561         admin_password: {get_param: AdminPassword}
562         admin_token: {get_param: AdminToken}
563         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
564         debug: {get_param: Debug}
565         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
566         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
567         cinder_password: {get_param: CinderPassword}
568         cinder_enable_iscsi_backend: {get_param: CinderEnableIscsiBackend}
569         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
570         cinder_dsn:
571           list_join:
572             - ''
573             - - 'mysql://cinder:'
574               - {get_param: CinderPassword}
575               - '@'
576               - {get_param: MysqlVirtualIP}
577               - '/cinder'
578         glance_port: {get_param: GlancePort}
579         glance_password: {get_param: GlancePassword}
580         glance_backend: {get_param: GlanceBackend}
581         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
582         glance_log_file: {get_param: GlanceLogFile}
583         glance_dsn:
584           list_join:
585             - ''
586             - - 'mysql://glance:'
587               - {get_param: GlancePassword}
588               - '@'
589               - {get_param: MysqlVirtualIP}
590               - '/glance'
591         heat_password: {get_param: HeatPassword}
592         heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
593         heat_dsn:
594           list_join:
595             - ''
596             - - 'mysql://heat:'
597               - {get_param: HeatPassword}
598               - '@'
599               - {get_param: MysqlVirtualIP}
600               - '/heat'
601         keystone_auth_address: {list_join: ['', ['http://', {get_param: KeystonePublicApiVirtualIP} , ':5000/v2.0']]}
602         keystone_ca_certificate: {get_param: KeystoneCACertificate}
603         keystone_signing_key: {get_param: KeystoneSigningKey}
604         keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
605         keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
606         keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
607         keystone_dsn:
608           list_join:
609             - ''
610             - - 'mysql://keystone:'
611               - {get_param: AdminToken}
612               - '@'
613               - {get_param: MysqlVirtualIP}
614               - '/keystone'
615         keystone_identity_uri:
616           list_join:
617             - ''
618             - - 'http://'
619               - {get_param: KeystonePublicApiVirtualIP}
620               - ':35357/'
621         keystone_auth_uri:
622           list_join:
623             - ''
624             - - 'http://'
625               - {get_param: KeystonePublicApiVirtualIP}
626               - ':5000/v2.0/'
627         enable_galera: {get_param: EnableGalera}
628         enable_ceph_storage: {get_param: EnableCephStorage}
629         enable_swift_storage: {get_param: EnableSwiftStorage}
630         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
631         mysql_root_password: {get_param: MysqlRootPassword}
632         mysql_cluster_name:
633           str_replace:
634             template: tripleo-CLUSTER
635             params:
636               CLUSTER: {get_param: MysqlClusterUniquePart}
637         neutron_flat_networks: {get_param: NeutronFlatNetworks}
638         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
639         neutron_agent_mode: {get_param: NeutronAgentMode}
640         neutron_router_distributed: {get_param: NeutronDVR}
641         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
642         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
643         neutron_l3_ha: {get_param: NeutronL3HA}
644         neutron_network_vlan_ranges:
645           str_replace:
646             template: "['RANGES']"
647             params:
648               RANGES:
649                 list_join:
650                 - "','"
651                 - {get_param: NeutronNetworkVLANRanges}
652         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
653         neutron_public_interface: {get_param: NeutronPublicInterface}
654         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
655         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
656         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
657         neutron_tenant_network_type: {get_param: NeutronNetworkType}
658         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
659         neutron_password: {get_param: NeutronPassword}
660         neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
661         neutron_dsn:
662           list_join:
663             - ''
664             - - 'mysql://neutron:'
665               - {get_param: NeutronPassword}
666               - '@'
667               - {get_param: MysqlVirtualIP}
668               - '/ovs_neutron?charset=utf8'
669         neutron_url:
670           list_join:
671             - ''
672             - - 'http://'
673               - {get_param: NeutronApiVirtualIP}
674               - ':9696'
675         neutron_admin_auth_url:
676           list_join:
677             - ''
678             - - 'http://'
679               - {get_param: KeystonePublicApiVirtualIP}
680               - ':35357/v2.0'
681         ceilometer_backend: {get_param: CeilometerBackend}
682         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
683         ceilometer_password: {get_param: CeilometerPassword}
684         ceilometer_dsn:
685           list_join:
686             - ''
687             - - 'mysql://ceilometer:unset@'
688               - {get_param: MysqlVirtualIP}
689               - '/ceilometer'
690         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
691         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
692         nova_password: {get_param: NovaPassword}
693         nova_dsn:
694           list_join:
695             - ''
696             - - 'mysql://nova:'
697               - {get_param: NovaPassword}
698               - '@'
699               - {get_param: MysqlVirtualIP}
700               - '/nova'
701         pcsd_password: {get_param: PcsdPassword}
702         rabbit_username: {get_param: RabbitUserName}
703         rabbit_password: {get_param: RabbitPassword}
704         rabbit_cookie: {get_param: RabbitCookie}
705         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
706         rabbit_client_port: {get_param: RabbitClientPort}
707         ntp_servers:
708           str_replace:
709             template: '["server"]'
710             params:
711               server: {get_param: NtpServer}
712         control_virtual_interface: {get_param: ControlVirtualInterface}
713         public_virtual_interface: {get_param: PublicVirtualInterface}
714         swift_hash_suffix: {get_param: SwiftHashSuffix}
715         swift_password: {get_param: SwiftPassword}
716         swift_part_power: {get_param: SwiftPartPower}
717         swift_replicas: {get_param: SwiftReplicas}
718         swift_min_part_hours: {get_param: SwiftMinPartHours}
719         swift_mount_check: {get_param: SwiftMountCheck}
720         enable_package_install: {get_param: EnablePackageInstall}
721         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
722         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
723         cinder_iscsi_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
724         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
725         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
726         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
727         glance_api_servers:
728           list_join:
729             - ''
730             - - {get_param: GlanceProtocol}
731               - '://'
732               - {get_param: GlanceApiVirtualIP}
733               - ':'
734               - {get_param: GlancePort}
735         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
736         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
737         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
738         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
739         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
740         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronLocalIp]}]}
741         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
742         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
743         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
744         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
745         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
746         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
747         redis_vip: {get_param: RedisVirtualIP}
748         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
749         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
750         ceph_cluster_network: {get_attr: [NetIpSubnetMap, net_ip_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
751         ceph_public_network: {get_attr: [NetIpSubnetMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
752         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
753
754   # Map heat metadata into hiera datafiles
755   ControllerConfig:
756     type: OS::Heat::StructuredConfig
757     properties:
758       group: os-apply-config
759       config:
760         hiera:
761           hierarchy:
762             - heat_config_%{::deploy_config_name}
763             - controller
764             - object
765             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
766             - ceph_cluster # provided by CephClusterConfig
767             - ceph
768             - bootstrap_node # provided by BootstrapNodeConfig
769             - all_nodes # provided by allNodesConfig
770             - vip_data # provided by vip-config
771             - '"%{::osfamily}"'
772             - common
773           datafiles:
774             common:
775               raw_data: {get_file: hieradata/common.yaml}
776             ceph:
777               raw_data: {get_file: hieradata/ceph.yaml}
778               mapped_data:
779                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
780                 ceph::profile::params::public_network: {get_input: ceph_public_network}
781                 ceph::mon::public_addr: {get_input: ceph_public_ip}
782             object:
783               raw_data: {get_file: hieradata/object.yaml}
784             controller:
785               raw_data: {get_file: hieradata/controller.yaml}
786               mapped_data: # data supplied directly to this deployment configuration, etc
787                 bootstack_nodeid: {get_input: bootstack_nodeid}
788
789                 # Pacemaker
790                 hacluster_pwd: {get_input: pcsd_password}
791
792                 # Swift
793                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
794                 swift::proxy::authtoken::auth_uri: {get_input: keystone_auth_uri}
795                 swift::proxy::authtoken::identity_uri: {get_input: keystone_identity_uri}
796                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
797                 swift::swift_hash_suffix: {get_input: swift_hash_suffix}
798                 swift::proxy::authtoken::admin_password: {get_input: swift_password}
799                 tripleo::ringbuilder::part_power: {get_input: swift_part_power}
800                 tripleo::ringbuilder::replicas: {get_input: swift_replicas}
801                 tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
802                 swift_mount_check: {get_input: swift_mount_check}
803
804                 # NOTE(dprince): build_ring support is currently not wired in.
805                 # See: https://review.openstack.org/#/c/109225/
806                 tripleo::ringbuilder::build_ring: True
807
808                 # Cinder
809                 cinder_enable_rbd_backend: {get_input: cinder_enable_rbd_backend}
810                 cinder_lvm_loop_device_size: {get_input: cinder_lvm_loop_device_size}
811                 cinder_iscsi_helper: {get_input: cinder_iscsi_helper}
812                 cinder_iscsi_ip_address: {get_input: cinder_iscsi_network}
813                 cinder::database_connection: {get_input: cinder_dsn}
814                 cinder::api::keystone_password: {get_input: cinder_password}
815                 cinder::api::auth_uri: {get_input: keystone_auth_uri}
816                 cinder::api::identity_uri: {get_input: keystone_identity_uri}
817                 cinder::api::bind_host: {get_input: cinder_api_network}
818                 cinder::rabbit_userid: {get_input: rabbit_username}
819                 cinder::rabbit_password: {get_input: rabbit_password}
820                 cinder::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
821                 cinder::rabbit_port: {get_input: rabbit_client_port}
822                 cinder::debug: {get_input: debug}
823                 cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
824                 cinder::glance::glance_api_servers: {get_input: glance_api_servers}
825
826                 # Glance
827                 glance::api::bind_port: {get_input: glance_port}
828                 glance::api::bind_host: {get_input: glance_api_network}
829                 glance::api::auth_uri: {get_input: keystone_auth_uri}
830                 glance::api::identity_uri: {get_input: keystone_identity_uri}
831                 glance::api::registry_host: {get_input: glance_registry_network}
832                 glance::api::keystone_password: {get_input: glance_password}
833                 glance::api::debug: {get_input: debug}
834                 glance_notifier_strategy: {get_input: glance_notifier_strategy}
835                 glance_log_file: {get_input: glance_log_file}
836                 glance_log_file: {get_input: glance_log_file}
837                 glance::api::database_connection: {get_input: glance_dsn}
838                 glance::registry::keystone_password: {get_input: glance_password}
839                 glance::registry::database_connection: {get_input: glance_dsn}
840                 glance::registry::bind_host: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
841                 glance::registry::auth_uri: {get_input: keystone_auth_uri}
842                 glance::registry::identity_uri: {get_input: keystone_identity_uri}
843                 glance::registry::debug: {get_input: debug}
844                 glance::backend::swift::swift_store_auth_address: {get_input: keystone_auth_address}
845                 glance::backend::swift::swift_store_user: service:glance
846                 glance::backend::swift::swift_store_key: {get_input: glance_password}
847                 glance_backend: {get_input: glance_backend}
848
849                 # Heat
850                 heat_stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
851                 heat::engine::heat_watch_server_url: {get_input: heat.watch_server_url}
852                 heat::engine::heat_metadata_server_url: {get_input: heat.metadata_server_url}
853                 heat::engine::heat_waitcondition_server_url: {get_input: heat.waitcondition_server_url}
854                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
855                 heat::rabbit_userid: {get_input: rabbit_username}
856                 heat::rabbit_password: {get_input: rabbit_password}
857                 heat::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
858                 heat::rabbit_port: {get_input: rabbit_client_port}
859                 heat::auth_uri: {get_input: keystone_auth_uri}
860                 heat::identity_uri: {get_input: keystone_identity_uri}
861                 heat::keystone_password: {get_input: heat_password}
862                 heat::api::bind_host: {get_input: heat_api_network}
863                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
864                 heat::api_cfn::bind_host: {get_input: heat_api_network}
865                 heat::database_connection: {get_input: heat_dsn}
866                 heat::instance_user: heat-admin
867                 heat::debug: {get_input: debug}
868
869                 # Keystone
870                 keystone::admin_token: {get_input: admin_token}
871                 keystone_ca_certificate: {get_input: keystone_ca_certificate}
872                 keystone_signing_key: {get_input: keystone_signing_key}
873                 keystone_signing_certificate: {get_input: keystone_signing_certificate}
874                 keystone_ssl_certificate: {get_input: keystone_ssl_certificate}
875                 keystone_ssl_certificate_key: {get_input: keystone_ssl_certificate_key}
876                 keystone::database_connection: {get_input: keystone_dsn}
877                 keystone::public_bind_host: {get_input: keystone_public_api_network}
878                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
879                 keystone::debug: {get_input: debug}
880                 # MongoDB
881                 mongodb::server::bind_ip: {get_input: mongo_db_network}
882                 # MySQL
883                 admin_password: {get_input: admin_password}
884                 enable_galera: {get_input: enable_galera}
885                 enable_ceph_storage: {get_input: enable_ceph_storage}
886                 enable_swift_storage: {get_input: enable_swift_storage}
887                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
888                 mysql::server::root_password: {get_input: mysql_root_password}
889                 mysql_cluster_name: {get_input: mysql_cluster_name}
890                 mysql_bind_host: {get_input: mysql_network}
891
892                 # Neutron
893                 neutron::bind_host: {get_input: neutron_api_network}
894                 neutron::rabbit_password: {get_input: rabbit_password}
895                 neutron::rabbit_user: {get_input: rabbit_user}
896                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
897                 neutron::rabbit_port: {get_input: rabbit_client_port}
898                 neutron::debug: {get_input: debug}
899                 neutron::server::auth_uri: {get_input: keystone_auth_uri}
900                 neutron::server::identity_uri: {get_input: keystone_identity_uri}
901                 neutron::server::database_connection: {get_input: neutron_dsn}
902                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
903                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
904                 neutron_flat_networks: {get_input: neutron_flat_networks}
905                 neutron::agents::metadata::shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
906                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
907                 neutron_agent_mode: {get_input: neutron_agent_mode}
908                 neutron_router_distributed: {get_input: neutron_router_distributed}
909                 neutron_mechanism_drivers: {get_input: neutron_mechanism_drivers}
910                 neutron::server::allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
911                 neutron::server::l3_ha: {get_input: neutron_l3_ha}
912                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
913                 neutron_bridge_mappings: {get_input: neutron_bridge_mappings}
914                 neutron_public_interface: {get_input: neutron_public_interface}
915                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
916                 neutron_public_interface_default_route: {get_input: neutron_public_interface_default_route}
917                 neutron_public_interface_tag: {get_input: neutron_public_interface_tag}
918                 neutron_tenant_network_type: {get_input: neutron_tenant_network_type}
919                 neutron_tunnel_types: {get_input: neutron_tunnel_types}
920                 neutron::server::auth_password: {get_input: neutron_password}
921                 neutron::agents::metadata::auth_password: {get_input: neutron_password}
922                 neutron_dnsmasq_options: {get_input: neutron_dnsmasq_options}
923                 neutron_dsn: {get_input: neutron_dsn}
924                 neutron::agents::metadata::auth_url: {get_input: keystone_identity_uri}
925
926                 # Ceilometer
927                 ceilometer_backend: {get_input: ceilometer_backend}
928                 ceilometer_mysql_conn_string: {get_input: ceilometer_dsn}
929                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
930                 ceilometer::rabbit_userid: {get_input: rabbit_username}
931                 ceilometer::rabbit_password: {get_input: rabbit_password}
932                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
933                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
934                 ceilometer::debug: {get_input: debug}
935                 ceilometer::api::host: {get_input: ceilometer_api_network}
936                 ceilometer::api::keystone_password: {get_input: ceilometer_password}
937                 ceilometer::api::keystone_auth_uri: {get_input: keystone_auth_uri}
938                 ceilometer::api::keystone_identity_uri: {get_input: keystone_identity_uri}
939                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
940                 ceilometer::agent::auth::auth_url: {get_input: keystone_auth_address}
941                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
942                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
943
944                 # Nova
945                 nova::rabbit_userid: {get_input: rabbit_username}
946                 nova::rabbit_password: {get_input: rabbit_password}
947                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
948                 nova::rabbit_port: {get_input: rabbit_client_port}
949                 nova::debug: {get_input: debug}
950                 nova::api::auth_uri: {get_input: keystone_auth_uri}
951                 nova::api::identity_uri: {get_input: keystone_identity_uri}
952                 nova::api::api_bind_address: {get_input: nova_api_network}
953                 nova::api::metadata_listen: {get_input: nova_metadata_network}
954                 nova::api::admin_password: {get_input: nova_password}
955                 nova::database_connection: {get_input: nova_dsn}
956                 nova::glance_api_servers: {get_input: glance_api_servers}
957                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
958                 nova::network::neutron::neutron_admin_password: {get_input: neutron_password}
959                 nova::network::neutron::neutron_url: {get_input: neutron_url}
960                 nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
961
962                 # Horizon
963                 horizon::django_debug: {get_input: debug}
964                 horizon::secret_key: {get_input: horizon_secret}
965                 horizon::bind_address: {get_input: horizon_network}
966                 horizon::keystone_url: {get_input: keystone_auth_uri}
967
968                 # Rabbit
969                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
970                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
971                 # Redis
972                 redis::bind: {get_input: redis_network}
973                 redis_vip: {get_input: redis_vip}
974                 # Misc
975                 memcached::listen_ip: {get_input: memcached_network}
976                 neutron_public_interface_ip: {get_input: neutron_public_interface_ip}
977                 ntp::servers: {get_input: ntp_servers}
978                 control_virtual_interface: {get_input: control_virtual_interface}
979                 public_virtual_interface: {get_input: public_virtual_interface}
980                 tripleo::loadbalancer::control_virtual_interface: {get_input: control_virtual_interface}
981                 tripleo::loadbalancer::public_virtual_interface: {get_input: public_virtual_interface}
982                 enable_package_install: {get_input: enable_package_install}
983
984 outputs:
985   ip_address:
986     description: IP address of the server in the ctlplane network
987     value: {get_attr: [Controller, networks, ctlplane, 0]}
988   external_ip_address:
989     description: IP address of the server in the external network
990     value: {get_attr: [ExternalPort, ip_address]}
991   internal_api_ip_address:
992     description: IP address of the server in the internal_api network
993     value: {get_attr: [InternalApiPort, ip_address]}
994   storage_ip_address:
995     description: IP address of the server in the storage network
996     value: {get_attr: [StoragePort, ip_address]}
997   storage_mgmt_ip_address:
998     description: IP address of the server in the storage_mgmt network
999     value: {get_attr: [StorageMgmtPort, ip_address]}
1000   tenant_ip_address:
1001     description: IP address of the server in the tenant network
1002     value: {get_attr: [TenantPort, ip_address]}
1003   hostname:
1004     description: Hostname of the server
1005     value: {get_attr: [Controller, name]}
1006   corosync_node:
1007     description: >
1008       Node object in the format {ip: ..., name: ...} format that the corosync
1009       element expects
1010     value:
1011       ip: {get_attr: [Controller, networks, ctlplane, 0]}
1012       name: {get_attr: [Controller, name]}
1013   hosts_entry:
1014     description: >
1015       Server's IP address and hostname in the /etc/hosts format
1016     value:
1017       str_replace:
1018         template: IP HOST CLOUDNAME
1019         params:
1020           IP: {get_attr: [Controller, networks, ctlplane, 0]}
1021           HOST: {get_attr: [Controller, name]}
1022           CLOUDNAME: {get_param: CloudName}
1023   nova_server_resource:
1024     description: Heat resource handle for the Nova compute server
1025     value:
1026       {get_resource: Controller}
1027   swift_device:
1028     description: Swift device formatted for swift-ring-builder
1029     value:
1030       str_replace:
1031         template: 'r1z1-IP:%PORT%/d1'
1032         params:
1033           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1034   swift_proxy_memcache:
1035     description: Swift proxy-memcache value
1036     value:
1037       str_replace:
1038         template: "IP:11211"
1039         params:
1040           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}