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