Isolate the Ceph storage and storage_mgmt nets
[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: string
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   SnmpdReadonlyUserName:
372     default: ro_snmp_user
373     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
374     type: string
375   SnmpdReadonlyUserPassword:
376     default: unset
377     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
378     type: string
379     hidden: true
380   SSLCACertificate:
381     default: ''
382     description: If set, the contents of an SSL certificate authority file.
383     type: string
384   SSLCertificate:
385     default: ''
386     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
387     type: string
388     hidden: true
389   SSLKey:
390     default: ''
391     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
392     type: string
393     hidden: true
394   SwiftHashSuffix:
395     default: unset
396     description: A random string to be used as a salt when hashing to determine mappings
397       in the ring.
398     hidden: true
399     type: string
400   SwiftMountCheck:
401     default: 'false'
402     description: Value of mount_check in Swift account/container/object -server.conf
403     type: boolean
404   SwiftMinPartHours:
405     type: number
406     default: 1
407     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
408   SwiftPartPower:
409     default: 10
410     description: Partition Power to use when building Swift rings
411     type: number
412   SwiftPassword:
413     default: unset
414     description: The password for the swift service account, used by the swift proxy
415       services.
416     hidden: true
417     type: string
418   SwiftReplicas:
419     type: number
420     default: 3
421     description: How many replicas to use in the swift rings.
422   VirtualIP: # DEPRECATED: use per service settings instead
423     type: string
424     default: ''  # Has to be here because of the ignored empty value bug
425   HeatApiVirtualIP:
426     type: string
427     default: ''
428   GlanceApiVirtualIP:
429     type: string
430     default: ''
431   MysqlVirtualIP:
432     type: string
433     default: ''
434   KeystonePublicApiVirtualIP:
435     type: string
436     default: ''
437   NeutronApiVirtualIP:
438     type: string
439     default: ''
440   EnablePackageInstall:
441     default: 'false'
442     description: Set to true to enable package installation via Puppet
443     type: boolean
444   ServiceNetMap:
445     default: {}
446     description: Mapping of service_name -> network name. Typically set
447                  via parameter_defaults in the resource registry.
448     type: json
449
450 resources:
451
452   Controller:
453     type: OS::Nova::Server
454     properties:
455       image: {get_param: Image}
456       image_update_policy: {get_param: ImageUpdatePolicy}
457       flavor: {get_param: Flavor}
458       key_name: {get_param: KeyName}
459       networks:
460         - network: ctlplane
461       user_data_format: SOFTWARE_CONFIG
462       user_data: {get_resource: NodeUserData}
463
464   NodeUserData:
465     type: OS::TripleO::NodeUserData
466
467   ExternalPort:
468     type: OS::TripleO::Controller::Ports::ExternalPort
469     properties:
470       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
471
472   InternalApiPort:
473     type: OS::TripleO::Controller::Ports::InternalApiPort
474     properties:
475       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
476
477   StoragePort:
478     type: OS::TripleO::Controller::Ports::StoragePort
479     properties:
480       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
481
482   StorageMgmtPort:
483     type: OS::TripleO::Controller::Ports::StorageMgmtPort
484     properties:
485       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
486
487   TenantPort:
488     type: OS::TripleO::Controller::Ports::TenantPort
489     properties:
490       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
491
492   NetIpMap:
493     type: OS::TripleO::Network::Ports::NetIpMap
494     properties:
495       ExternalIp: {get_attr: [ExternalPort, ip_address]}
496       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
497       StorageIp: {get_attr: [StoragePort, ip_address]}
498       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
499       TenantIp: {get_attr: [TenantPort, ip_address]}
500
501   NetIpSubnetMap:
502     type: OS::TripleO::Network::Ports::NetIpMap
503     properties:
504       ExternalIp: {get_attr: [ExternalPort, ip_subnet]}
505       InternalApiIp: {get_attr: [InternalApiPort, ip_subnet]}
506       StorageIp: {get_attr: [StoragePort, ip_subnet]}
507       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_subnet]}
508       TenantIp: {get_attr: [TenantPort, ip_subnet]}
509
510   NetworkConfig:
511     type: OS::TripleO::Controller::Net::SoftwareConfig
512     properties:
513       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
514       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
515       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
516       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
517       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
518
519   NetworkDeployment:
520     type: OS::TripleO::SoftwareDeployment
521     properties:
522       signal_transport: NO_SIGNAL
523       config: {get_resource: NetworkConfig}
524       server: {get_resource: Controller}
525       input_values:
526         bridge_name: br-ex
527         interface_name: {get_param: NeutronPublicInterface}
528
529   ControllerDeployment:
530     type: OS::TripleO::SoftwareDeployment
531     properties:
532       signal_transport: NO_SIGNAL
533       config: {get_resource: ControllerConfig}
534       server: {get_resource: Controller}
535       input_values:
536         bootstack_nodeid: {get_attr: [Controller, name]}
537         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
538         heat.watch_server_url:
539           list_join:
540             - ''
541             - - 'http://'
542               - {get_param: HeatApiVirtualIP}
543               - ':8003'
544         heat.metadata_server_url:
545           list_join:
546             - ''
547             - - 'http://'
548               - {get_param: HeatApiVirtualIP}
549               - ':8000'
550         heat.waitcondition_server_url:
551           list_join:
552             - ''
553             - - 'http://'
554               - {get_param: HeatApiVirtualIP}
555               - ':8000/v1/waitcondition'
556         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
557         horizon_secret: {get_param: HorizonSecret}
558         admin_password: {get_param: AdminPassword}
559         admin_token: {get_param: AdminToken}
560         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
561         debug: {get_param: Debug}
562         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
563         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
564         cinder_password: {get_param: CinderPassword}
565         cinder_enable_iscsi_backend: {get_param: CinderEnableIscsiBackend}
566         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
567         cinder_dsn:
568           list_join:
569             - ''
570             - - 'mysql://cinder:'
571               - {get_param: CinderPassword}
572               - '@'
573               - {get_param: MysqlVirtualIP}
574               - '/cinder'
575         glance_port: {get_param: GlancePort}
576         glance_password: {get_param: GlancePassword}
577         glance_backend: {get_param: GlanceBackend}
578         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
579         glance_log_file: {get_param: GlanceLogFile}
580         glance_dsn:
581           list_join:
582             - ''
583             - - 'mysql://glance:'
584               - {get_param: GlancePassword}
585               - '@'
586               - {get_param: MysqlVirtualIP}
587               - '/glance'
588         heat_password: {get_param: HeatPassword}
589         heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
590         heat_dsn:
591           list_join:
592             - ''
593             - - 'mysql://heat:'
594               - {get_param: HeatPassword}
595               - '@'
596               - {get_param: MysqlVirtualIP}
597               - '/heat'
598         keystone_auth_address: {list_join: ['', ['http://', {get_param: KeystonePublicApiVirtualIP} , ':5000/v2.0']]}
599         keystone_ca_certificate: {get_param: KeystoneCACertificate}
600         keystone_signing_key: {get_param: KeystoneSigningKey}
601         keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
602         keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
603         keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
604         keystone_dsn:
605           list_join:
606             - ''
607             - - 'mysql://keystone:'
608               - {get_param: AdminToken}
609               - '@'
610               - {get_param: MysqlVirtualIP}
611               - '/keystone'
612         keystone_identity_uri:
613           list_join:
614             - ''
615             - - 'http://'
616               - {get_param: KeystonePublicApiVirtualIP}
617               - ':35357/'
618         keystone_auth_uri:
619           list_join:
620             - ''
621             - - 'http://'
622               - {get_param: KeystonePublicApiVirtualIP}
623               - ':5000/v2.0/'
624         enable_galera: {get_param: EnableGalera}
625         enable_ceph_storage: {get_param: EnableCephStorage}
626         enable_swift_storage: {get_param: EnableSwiftStorage}
627         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
628         mysql_root_password: {get_param: MysqlRootPassword}
629         mysql_cluster_name:
630           str_replace:
631             template: tripleo-CLUSTER
632             params:
633               CLUSTER: {get_param: MysqlClusterUniquePart}
634         neutron_flat_networks: {get_param: NeutronFlatNetworks}
635         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
636         neutron_agent_mode: {get_param: NeutronAgentMode}
637         neutron_router_distributed: {get_param: NeutronDVR}
638         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
639         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
640         neutron_l3_ha: {get_param: NeutronL3HA}
641         neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
642         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
643         neutron_public_interface: {get_param: NeutronPublicInterface}
644         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
645         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
646         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
647         neutron_tenant_network_type: {get_param: NeutronNetworkType}
648         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
649         neutron_password: {get_param: NeutronPassword}
650         neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
651         neutron_dsn:
652           list_join:
653             - ''
654             - - 'mysql://neutron:'
655               - {get_param: NeutronPassword}
656               - '@'
657               - {get_param: MysqlVirtualIP}
658               - '/ovs_neutron?charset=utf8'
659         neutron_url:
660           list_join:
661             - ''
662             - - 'http://'
663               - {get_param: NeutronApiVirtualIP}
664               - ':9696'
665         neutron_admin_auth_url:
666           list_join:
667             - ''
668             - - 'http://'
669               - {get_param: KeystonePublicApiVirtualIP}
670               - ':35357/v2.0'
671         ceilometer_backend: {get_param: CeilometerBackend}
672         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
673         ceilometer_password: {get_param: CeilometerPassword}
674         ceilometer_dsn:
675           list_join:
676             - ''
677             - - 'mysql://ceilometer:unset@'
678               - {get_param: MysqlVirtualIP}
679               - '/ceilometer'
680         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
681         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
682         nova_password: {get_param: NovaPassword}
683         nova_dsn:
684           list_join:
685             - ''
686             - - 'mysql://nova:'
687               - {get_param: NovaPassword}
688               - '@'
689               - {get_param: MysqlVirtualIP}
690               - '/nova'
691         pcsd_password: {get_param: PcsdPassword}
692         rabbit_username: {get_param: RabbitUserName}
693         rabbit_password: {get_param: RabbitPassword}
694         rabbit_cookie: {get_param: RabbitCookie}
695         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
696         rabbit_client_port: {get_param: RabbitClientPort}
697         ntp_servers:
698           str_replace:
699             template: '["server"]'
700             params:
701               server: {get_param: NtpServer}
702         control_virtual_interface: {get_param: ControlVirtualInterface}
703         public_virtual_interface: {get_param: PublicVirtualInterface}
704         swift_hash_suffix: {get_param: SwiftHashSuffix}
705         swift_password: {get_param: SwiftPassword}
706         swift_part_power: {get_param: SwiftPartPower}
707         swift_replicas: {get_param: SwiftReplicas}
708         swift_min_part_hours: {get_param: SwiftMinPartHours}
709         swift_mount_check: {get_param: SwiftMountCheck}
710         enable_package_install: {get_param: EnablePackageInstall}
711         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
712         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
713         cinder_iscsi_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
714         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
715         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
716         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
717         glance_api_servers:
718           list_join:
719             - ''
720             - - {get_param: GlanceProtocol}
721               - '://'
722               - {get_param: GlanceApiVirtualIP}
723               - ':'
724               - {get_param: GlancePort}
725         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
726         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
727         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
728         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
729         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
730         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronLocalIp]}]}
731         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
732         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
733         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
734         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
735         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
736         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
737         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
738         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
739         ceph_cluster_network: {get_attr: [NetIpSubnetMap, net_ip_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
740         ceph_public_network: {get_attr: [NetIpSubnetMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
741         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
742
743   # Map heat metadata into hiera datafiles
744   ControllerConfig:
745     type: OS::Heat::StructuredConfig
746     properties:
747       group: os-apply-config
748       config:
749         hiera:
750           hierarchy:
751             - heat_config_%{::deploy_config_name}
752             - controller
753             - object
754             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
755             - ceph_cluster # provided by CephClusterConfig
756             - ceph
757             - bootstrap_node # provided by BootstrapNodeConfig
758             - all_nodes # provided by allNodesConfig
759             - vip_data # provided by vip-config
760             - '"%{::osfamily}"'
761             - common
762           datafiles:
763             common:
764               raw_data: {get_file: hieradata/common.yaml}
765             ceph:
766               raw_data: {get_file: hieradata/ceph.yaml}
767               mapped_data:
768                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
769                 ceph::profile::params::public_network: {get_input: ceph_public_network}
770                 ceph::mon::public_addr: {get_input: ceph_public_ip}
771             object:
772               raw_data: {get_file: hieradata/object.yaml}
773             controller:
774               raw_data: {get_file: hieradata/controller.yaml}
775               mapped_data: # data supplied directly to this deployment configuration, etc
776                 bootstack_nodeid: {get_input: bootstack_nodeid}
777
778                 # Pacemaker
779                 hacluster_pwd: {get_input: pcsd_password}
780
781                 # Swift
782                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
783                 swift::proxy::authtoken::auth_uri: {get_input: keystone_auth_uri}
784                 swift::proxy::authtoken::identity_uri: {get_input: keystone_identity_uri}
785                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
786                 swift::swift_hash_suffix: {get_input: swift_hash_suffix}
787                 swift::proxy::authtoken::admin_password: {get_input: swift_password}
788                 tripleo::ringbuilder::part_power: {get_input: swift_part_power}
789                 tripleo::ringbuilder::replicas: {get_input: swift_replicas}
790                 tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
791                 swift_mount_check: {get_input: swift_mount_check}
792
793                 # NOTE(dprince): build_ring support is currently not wired in.
794                 # See: https://review.openstack.org/#/c/109225/
795                 tripleo::ringbuilder::build_ring: True
796
797                 # Cinder
798                 cinder_enable_rbd_backend: {get_input: cinder_enable_rbd_backend}
799                 cinder_lvm_loop_device_size: {get_input: cinder_lvm_loop_device_size}
800                 cinder_iscsi_helper: {get_input: cinder_iscsi_helper}
801                 cinder_iscsi_ip_address: {get_input: cinder_iscsi_network}
802                 cinder::database_connection: {get_input: cinder_dsn}
803                 cinder::api::keystone_password: {get_input: cinder_password}
804                 cinder::api::auth_uri: {get_input: keystone_auth_uri}
805                 cinder::api::identity_uri: {get_input: keystone_identity_uri}
806                 cinder::api::bind_host: {get_input: cinder_api_network}
807                 cinder::rabbit_userid: {get_input: rabbit_username}
808                 cinder::rabbit_password: {get_input: rabbit_password}
809                 cinder::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
810                 cinder::rabbit_port: {get_input: rabbit_client_port}
811                 cinder::debug: {get_input: debug}
812                 cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
813                 cinder::glance::glance_api_servers: {get_input: glance_api_servers}
814
815                 # Glance
816                 glance::api::bind_port: {get_input: glance_port}
817                 glance::api::bind_host: {get_input: glance_api_network}
818                 glance::api::auth_uri: {get_input: keystone_auth_uri}
819                 glance::api::identity_uri: {get_input: keystone_identity_uri}
820                 glance::api::registry_host: {get_input: glance_registry_network}
821                 glance::api::keystone_password: {get_input: glance_password}
822                 glance::api::debug: {get_input: debug}
823                 glance_notifier_strategy: {get_input: glance_notifier_strategy}
824                 glance_log_file: {get_input: glance_log_file}
825                 glance_log_file: {get_input: glance_log_file}
826                 glance::api::database_connection: {get_input: glance_dsn}
827                 glance::registry::keystone_password: {get_input: glance_password}
828                 glance::registry::database_connection: {get_input: glance_dsn}
829                 glance::registry::bind_host: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
830                 glance::registry::auth_uri: {get_input: keystone_auth_uri}
831                 glance::registry::identity_uri: {get_input: keystone_identity_uri}
832                 glance::registry::debug: {get_input: debug}
833                 glance::backend::swift::swift_store_auth_address: {get_input: keystone_auth_address}
834                 glance::backend::swift::swift_store_user: service:glance
835                 glance::backend::swift::swift_store_key: {get_input: glance_password}
836                 glance_backend: {get_input: glance_backend}
837
838                 # Heat
839                 heat_stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
840                 heat::engine::heat_watch_server_url: {get_input: heat.watch_server_url}
841                 heat::engine::heat_metadata_server_url: {get_input: heat.metadata_server_url}
842                 heat::engine::heat_waitcondition_server_url: {get_input: heat.waitcondition_server_url}
843                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
844                 heat::rabbit_userid: {get_input: rabbit_username}
845                 heat::rabbit_password: {get_input: rabbit_password}
846                 heat::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
847                 heat::rabbit_port: {get_input: rabbit_client_port}
848                 heat::auth_uri: {get_input: keystone_auth_uri}
849                 heat::identity_uri: {get_input: keystone_identity_uri}
850                 heat::keystone_password: {get_input: heat_password}
851                 heat::api::bind_host: {get_input: heat_api_network}
852                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
853                 heat::api_cfn::bind_host: {get_input: heat_api_network}
854                 heat::database_connection: {get_input: heat_dsn}
855                 heat::instance_user: heat-admin
856                 heat::debug: {get_input: debug}
857
858                 # Keystone
859                 keystone::admin_token: {get_input: admin_token}
860                 keystone_ca_certificate: {get_input: keystone_ca_certificate}
861                 keystone_signing_key: {get_input: keystone_signing_key}
862                 keystone_signing_certificate: {get_input: keystone_signing_certificate}
863                 keystone_ssl_certificate: {get_input: keystone_ssl_certificate}
864                 keystone_ssl_certificate_key: {get_input: keystone_ssl_certificate_key}
865                 keystone::database_connection: {get_input: keystone_dsn}
866                 keystone::public_bind_host: {get_input: keystone_public_api_network}
867                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
868                 keystone::debug: {get_input: debug}
869                 # MongoDB
870                 mongodb::server::bind_ip: {get_input: mongo_db_network}
871                 # MySQL
872                 admin_password: {get_input: admin_password}
873                 enable_galera: {get_input: enable_galera}
874                 enable_ceph_storage: {get_input: enable_ceph_storage}
875                 enable_swift_storage: {get_input: enable_swift_storage}
876                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
877                 mysql::server::root_password: {get_input: mysql_root_password}
878                 mysql_cluster_name: {get_input: mysql_cluster_name}
879                 mysql_bind_host: {get_input: mysql_network}
880
881                 # Neutron
882                 neutron::bind_host: {get_input: neutron_api_network}
883                 neutron::rabbit_password: {get_input: rabbit_password}
884                 neutron::rabbit_user: {get_input: rabbit_user}
885                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
886                 neutron::rabbit_port: {get_input: rabbit_client_port}
887                 neutron::debug: {get_input: debug}
888                 neutron::server::auth_uri: {get_input: keystone_auth_uri}
889                 neutron::server::identity_uri: {get_input: keystone_identity_uri}
890                 neutron::server::database_connection: {get_input: neutron_dsn}
891                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
892                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
893                 neutron_flat_networks: {get_input: neutron_flat_networks}
894                 neutron::agents::metadata::shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
895                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
896                 neutron_agent_mode: {get_input: neutron_agent_mode}
897                 neutron_router_distributed: {get_input: neutron_router_distributed}
898                 neutron_mechanism_drivers: {get_input: neutron_mechanism_drivers}
899                 neutron::server::allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
900                 neutron::server::l3_ha: {get_input: neutron_l3_ha}
901                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
902                 neutron_bridge_mappings: {get_input: neutron_bridge_mappings}
903                 neutron_public_interface: {get_input: neutron_public_interface}
904                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
905                 neutron_public_interface_default_route: {get_input: neutron_public_interface_default_route}
906                 neutron_public_interface_tag: {get_input: neutron_public_interface_tag}
907                 neutron_tenant_network_type: {get_input: neutron_tenant_network_type}
908                 neutron_tunnel_types: {get_input: neutron_tunnel_types}
909                 neutron::server::auth_password: {get_input: neutron_password}
910                 neutron::agents::metadata::auth_password: {get_input: neutron_password}
911                 neutron_dnsmasq_options: {get_input: neutron_dnsmasq_options}
912                 neutron_dsn: {get_input: neutron_dsn}
913                 neutron::agents::metadata::auth_url: {get_input: keystone_identity_uri}
914
915                 # Ceilometer
916                 ceilometer_backend: {get_input: ceilometer_backend}
917                 ceilometer_mysql_conn_string: {get_input: ceilometer_dsn}
918                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
919                 ceilometer::rabbit_userid: {get_input: rabbit_username}
920                 ceilometer::rabbit_password: {get_input: rabbit_password}
921                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
922                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
923                 ceilometer::debug: {get_input: debug}
924                 ceilometer::api::host: {get_input: ceilometer_api_network}
925                 ceilometer::api::keystone_password: {get_input: ceilometer_password}
926                 ceilometer::api::keystone_auth_uri: {get_input: keystone_auth_uri}
927                 ceilometer::api::keystone_identity_uri: {get_input: keystone_identity_uri}
928                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
929                 ceilometer::agent::auth::auth_url: {get_input: keystone_auth_address}
930                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
931                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
932
933                 # Nova
934                 nova::rabbit_userid: {get_input: rabbit_username}
935                 nova::rabbit_password: {get_input: rabbit_password}
936                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
937                 nova::rabbit_port: {get_input: rabbit_client_port}
938                 nova::debug: {get_input: debug}
939                 nova::api::auth_uri: {get_input: keystone_auth_uri}
940                 nova::api::identity_uri: {get_input: keystone_identity_uri}
941                 nova::api::api_bind_address: {get_input: nova_api_network}
942                 nova::api::metadata_listen: {get_input: nova_metadata_network}
943                 nova::api::admin_password: {get_input: nova_password}
944                 nova::database_connection: {get_input: nova_dsn}
945                 nova::glance_api_servers: {get_input: glance_api_servers}
946                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
947                 nova::network::neutron::neutron_admin_password: {get_input: neutron_password}
948                 nova::network::neutron::neutron_url: {get_input: neutron_url}
949                 nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
950
951                 # Horizon
952                 horizon::django_debug: {get_input: debug}
953                 horizon::secret_key: {get_input: horizon_secret}
954                 horizon::bind_address: {get_input: horizon_network}
955                 horizon::keystone_url: {get_input: keystone_auth_uri}
956
957                 # Rabbit
958                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
959                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
960                 # Redis
961                 redis::bind: {get_input: redis_network}
962                 # Misc
963                 memcached::listen_ip: {get_input: memcached_network}
964                 neutron_public_interface_ip: {get_input: neutron_public_interface_ip}
965                 ntp::servers: {get_input: ntp_servers}
966                 control_virtual_interface: {get_input: control_virtual_interface}
967                 public_virtual_interface: {get_input: public_virtual_interface}
968                 tripleo::loadbalancer::control_virtual_interface: {get_input: control_virtual_interface}
969                 tripleo::loadbalancer::public_virtual_interface: {get_input: public_virtual_interface}
970                 enable_package_install: {get_input: enable_package_install}
971
972 outputs:
973   ip_address:
974     description: IP address of the server in the ctlplane network
975     value: {get_attr: [Controller, networks, ctlplane, 0]}
976   external_ip_address:
977     description: IP address of the server in the external network
978     value: {get_attr: [ExternalPort, ip_address]}
979   internal_api_ip_address:
980     description: IP address of the server in the internal_api network
981     value: {get_attr: [InternalApiPort, ip_address]}
982   storage_ip_address:
983     description: IP address of the server in the storage network
984     value: {get_attr: [StoragePort, ip_address]}
985   storage_mgmt_ip_address:
986     description: IP address of the server in the storage_mgmt network
987     value: {get_attr: [StorageMgmtPort, ip_address]}
988   tenant_ip_address:
989     description: IP address of the server in the tenant network
990     value: {get_attr: [TenantPort, ip_address]}
991   hostname:
992     description: Hostname of the server
993     value: {get_attr: [Controller, name]}
994   corosync_node:
995     description: >
996       Node object in the format {ip: ..., name: ...} format that the corosync
997       element expects
998     value:
999       ip: {get_attr: [Controller, networks, ctlplane, 0]}
1000       name: {get_attr: [Controller, name]}
1001   hosts_entry:
1002     description: >
1003       Server's IP address and hostname in the /etc/hosts format
1004     value:
1005       str_replace:
1006         template: IP HOST CLOUDNAME
1007         params:
1008           IP: {get_attr: [Controller, networks, ctlplane, 0]}
1009           HOST: {get_attr: [Controller, name]}
1010           CLOUDNAME: {get_param: CloudName}
1011   nova_server_resource:
1012     description: Heat resource handle for the Nova compute server
1013     value:
1014       {get_resource: Controller}
1015   swift_device:
1016     description: Swift device formatted for swift-ring-builder
1017     value:
1018       str_replace:
1019         template: 'r1z1-IP:%PORT%/d1'
1020         params:
1021           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1022   swift_proxy_memcache:
1023     description: Swift proxy-memcache value
1024     value:
1025       str_replace:
1026         template: "IP:11211"
1027         params:
1028           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}