Puppet: Ceilometer controller support
[apex-tripleo-heat-templates.git] / controller-puppet.yaml
1 heat_template_version: 2014-10-16
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.
15     type: string
16     hidden: true
17   CeilometerMeteringSecret:
18     default: unset
19     description: Secret shared by the ceilometer services.
20     type: string
21     hidden: true
22   CeilometerPassword:
23     default: unset
24     description: The password for the ceilometer service account.
25     type: string
26     hidden: true
27   CinderISCSIHelper:
28     default: tgtadm
29     description: The iSCSI helper to use with cinder.
30     type: string
31   CinderLVMLoopDeviceSize:
32     default: 5000
33     description: The size of the loopback file used by the cinder LVM driver.
34     type: number
35   CinderPassword:
36     default: unset
37     description: The password for the cinder service account, used by cinder-api.
38     type: string
39     hidden: true
40   CloudName:
41     default: ''
42     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
43     type: string
44   ControllerExtraConfig:
45     default: {}
46     description: |
47       Controller specific configuration to inject into the cluster. Same
48       structure as ExtraConfig.
49     type: json
50   ControlVirtualInterface:
51     default: 'br-ex'
52     description: Interface where virtual ip will be assigned.
53     type: string
54   Debug:
55     default: ''
56     description: Set to True to enable debugging on all services.
57     type: string
58   ExtraConfig:
59     default: {}
60     description: |
61       Additional configuration to inject into the cluster. The JSON should have
62       the following structure:
63         {"FILEKEY":
64           {"config":
65             [{"section": "SECTIONNAME",
66               "values":
67                 [{"option": "OPTIONNAME",
68                   "value": "VALUENAME"
69                  }
70                 ]
71              }
72             ]
73           }
74         }
75       For instance:
76         {"nova":
77           {"config":
78             [{"section": "default",
79               "values":
80                 [{"option": "compute_manager",
81                   "value": "ironic.nova.compute.manager.ClusterComputeManager"
82                  }
83                 ]
84              },
85              {"section": "cells",
86               "values":
87                 [{"option": "driver",
88                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
89                  }
90                 ]
91              }
92             ]
93           }
94         }
95     type: json
96   Flavor:
97     description: Flavor for control nodes to request when deploying.
98     type: string
99     constraints:
100       - custom_constraint: nova.flavor
101   GlanceNotifierStrategy:
102     description: Strategy to use for Glance notification queue
103     type: string
104     default: noop
105   GlanceLogFile:
106     description: The filepath of the file to use for logging messages from Glance.
107     type: string
108     default: ''
109   GlancePassword:
110     default: unset
111     description: The password for the glance service account, used by the glance services.
112     type: string
113     hidden: true
114   GlancePort:
115     default: "9292"
116     description: Glance port.
117     type: string
118   GlanceProtocol:
119     default: http
120     description: Protocol to use when connecting to glance, set to https for SSL.
121     type: string
122   HeatPassword:
123     default: unset
124     description: The password for the Heat service account, used by the Heat services.
125     type: string
126     hidden: true
127   HeatStackDomainAdminPassword:
128     description: Password for heat_domain_admin user.
129     type: string
130     default: ''
131     hidden: true
132   Image:
133     type: string
134     default: overcloud-control
135     constraints:
136       - custom_constraint: glance.image
137   ImageUpdatePolicy:
138     default: 'REBUILD_PRESERVE_EPHEMERAL'
139     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
140     type: string
141   KeyName:
142     default: default
143     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
144     type: string
145     constraints:
146       - custom_constraint: nova.keypair
147   KeystoneCACertificate:
148     default: ''
149     description: Keystone self-signed certificate authority certificate.
150     type: string
151   KeystoneSigningCertificate:
152     default: ''
153     description: Keystone certificate for verifying token validity.
154     type: string
155   KeystoneSigningKey:
156     default: ''
157     description: Keystone key for signing tokens.
158     type: string
159     hidden: true
160   KeystoneSSLCertificate:
161     default: ''
162     description: Keystone certificate for verifying token validity.
163     type: string
164   KeystoneSSLCertificateKey:
165     default: ''
166     description: Keystone key for signing tokens.
167     type: string
168     hidden: true
169   MysqlClusterUniquePart:
170     description: A unique identifier of the MySQL cluster the controller is in.
171     type: string
172     default: 'unset'  # Has to be here because of the ignored empty value bug
173     # Drop the validation: https://bugs.launchpad.net/tripleo/+bug/1405446
174     # constraints:
175     # - length: {min: 4, max: 10}
176   MysqlInnodbBufferPoolSize:
177     description: >
178         Specifies the size of the buffer pool in megabytes. Setting to
179         zero should be interpreted as "no value" and will defer to the
180         lower level default.
181     type: number
182     default: 0
183   MysqlRootPassword:
184     type: string
185     hidden: true
186     default: ''  # Has to be here because of the ignored empty value bug
187   NeutronBridgeMappings:
188     description: >
189       The OVS logical->physical bridge mappings to use. See the Neutron
190       documentation for details. Defaults to mapping br-ex - the external
191       bridge on hosts - to a physical name 'datacentre' which can be used
192       to create provider networks (and we use this for the default floating
193       network) - if changing this either use different post-install network
194       scripts or be sure to keep 'datacentre' as a mapping network name.
195     type: string
196     default: ""
197   NeutronDnsmasqOptions:
198     default: 'dhcp-option-force=26,1400'
199     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.
200     type: string
201   NeutronAgentMode:
202     default: 'dvr_snat'
203     description: Agent mode for the neutron-l3-agent on the controller hosts
204     type: string
205   NeutronL3HA: #FIXME this isn't wired in
206     default: 'False'
207     description: Whether to enable l3-agent HA
208     type: string
209   NeutronDVR:
210     default: 'False'
211     description: Whether to configure Neutron Distributed Virtual Routers
212     type: string
213   NeutronMetadataProxySharedSecret:
214     default: 'unset'
215     description: Shared secret to prevent spoofing
216     type: string
217   NeutronMechanismDrivers:
218     default: 'openvswitch'
219     description: |
220         The mechanism drivers for the Neutron tenant network. To specify multiple
221         values, use a comma separated string, like so: 'openvswitch,l2_population'
222     type: string
223   NeutronAllowL3AgentFailover:
224     default: 'True'
225     description: Allow automatic l3-agent failover
226     type: string
227   NeutronEnableTunnelling:
228     type: string
229     default: "True"
230   NeutronFlatNetworks:
231     type: string
232     default: ''
233     description: If set, flat networks to configure in neutron plugins.
234   NeutronNetworkType:
235     default: 'gre'
236     description: The tenant network type for Neutron, either gre or vxlan.
237     type: string
238   NeutronNetworkVLANRanges:
239     default: 'datacentre'
240     description: >
241       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
242       Neutron documentation for permitted values. Defaults to permitting any
243       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
244     type: string
245   NeutronPassword:
246     default: unset
247     description: The password for the neutron service account, used by neutron agents.
248     type: string
249     hidden: true
250   NeutronPublicInterface:
251     default: nic1
252     description: What interface to bridge onto br-ex for network nodes.
253     type: string
254   NeutronPublicInterfaceTag:
255     default: ''
256     description: >
257       VLAN tag for creating a public VLAN. The tag will be used to
258       create an access port on the exterior bridge for each control plane node,
259       and that port will be given the IP address returned by neutron from the
260       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
261       overcloud.yaml to include the deployment of VLAN ports to the control
262       plane.
263     type: string
264   NeutronPublicInterfaceDefaultRoute:
265     default: ''
266     description: A custom default route for the NeutronPublicInterface.
267     type: string
268   NeutronPublicInterfaceIP:
269     default: ''
270     description: A custom IP address to put onto the NeutronPublicInterface.
271     type: string
272   NeutronPublicInterfaceRawDevice:
273     default: ''
274     description: If set, the public interface is a vlan with this device as the raw device.
275     type: string
276   NeutronTunnelTypes:
277     default: 'gre'
278     description: |
279         The tunnel types for the Neutron tenant network. To specify multiple
280         values, use a comma separated string, like so: 'gre,vxlan'
281     type: string
282   NovaPassword:
283     default: unset
284     description: The password for the nova service account, used by nova-api.
285     type: string
286     hidden: true
287   NtpServer:
288     type: string
289     default: ''
290   PublicVirtualInterface:
291     default: 'br-ex'
292     description: >
293         Specifies the interface where the public-facing virtual ip will be assigned.
294         This should be int_public when a VLAN is being used.
295     type: string
296   PublicVirtualIP:
297     type: string
298     default: ''  # Has to be here because of the ignored empty value bug
299   RabbitCookie:
300     type: string
301     default: ''  # Has to be here because of the ignored empty value bug
302     hidden: true
303   RabbitPassword:
304     default: guest
305     description: The password for RabbitMQ
306     type: string
307     hidden: true
308   RabbitUserName:
309     default: guest
310     description: The username for RabbitMQ
311     type: string
312   RabbitClientUseSSL:
313     default: false
314     description: >
315         Rabbit client subscriber parameter to specify
316         an SSL connection to the RabbitMQ host.
317     type: string
318   RabbitClientPort:
319     default: 5672
320     description: Set rabbit subscriber port, change this if using SSL
321     type: number
322   SnmpdReadonlyUserName:
323     default: ro_snmp_user
324     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
325     type: string
326   SnmpdReadonlyUserPassword:
327     default: unset
328     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
329     type: string
330     hidden: true
331   SSLCACertificate:
332     default: ''
333     description: If set, the contents of an SSL certificate authority file.
334     type: string
335   SSLCertificate:
336     default: ''
337     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
338     type: string
339     hidden: true
340   SSLKey:
341     default: ''
342     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
343     type: string
344     hidden: true
345   SwiftHashSuffix:
346     default: unset
347     description: A random string to be used as a salt when hashing to determine mappings
348       in the ring.
349     hidden: true
350     type: string
351   SwiftMountCheck:
352     default: 'false'
353     description: Value of mount_check in Swift account/container/object -server.conf
354     type: boolean
355   SwiftMinPartHours:
356     type: number
357     default: 1
358     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
359   SwiftPartPower:
360     default: 10
361     description: Partition Power to use when building Swift rings
362     type: number
363   SwiftPassword:
364     default: unset
365     description: The password for the swift service account, used by the swift proxy
366       services.
367     hidden: true
368     type: string
369   SwiftReplicas:
370     type: number
371     default: 3
372     description: How many replicas to use in the swift rings.
373   VirtualIP:
374     type: string
375     default: ''  # Has to be here because of the ignored empty value bug
376
377
378 resources:
379
380   Controller:
381     type: OS::Nova::Server
382     properties:
383       image: {get_param: Image}
384       image_update_policy: {get_param: ImageUpdatePolicy}
385       flavor: {get_param: Flavor}
386       key_name: {get_param: KeyName}
387       networks:
388         - network: ctlplane
389       user_data_format: SOFTWARE_CONFIG
390
391   NetworkConfig:
392     type: OS::TripleO::Net::SoftwareConfig
393
394   NetworkDeployment:
395     type: OS::TripleO::SoftwareDeployment
396     properties:
397       signal_transport: NO_SIGNAL
398       config: {get_attr: [NetworkConfig, config_id]}
399       server: {get_resource: Controller}
400       input_values:
401         bridge_name: br-ex
402         interface_name: {get_param: NeutronPublicInterface}
403
404   ControllerDeployment:
405     type: OS::TripleO::SoftwareDeployment
406     properties:
407       signal_transport: NO_SIGNAL
408       config: {get_resource: ControllerConfig}
409       server: {get_resource: Controller}
410       input_values:
411         bootstack_nodeid: {get_attr: [Controller, name]}
412         controller_host: {get_attr: [Controller, networks, ctlplane, 0]}
413         controller_virtual_ip: {get_param: VirtualIP}
414         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
415         heat.watch_server_url:
416           list_join:
417             - ''
418             - - 'http://'
419               - {get_param: VirtualIP}
420               - ':8003'
421         heat.metadata_server_url:
422           list_join:
423             - ''
424             - - 'http://'
425               - {get_param: VirtualIP}
426               - ':8000'
427         heat.waitcondition_server_url:
428           list_join:
429             - ''
430             - - 'http://'
431               - {get_param: VirtualIP}
432               - ':8000/v1/waitcondition'
433         admin_password: {get_param: AdminPassword}
434         admin_token: {get_param: AdminToken}
435         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
436         debug: {get_param: Debug}
437         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
438         cinder_password: {get_param: CinderPassword}
439         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
440         cinder_dsn:
441           list_join:
442             - ''
443             - - 'mysql://cinder:unset@'
444               - {get_param: VirtualIP}
445               - '/cinder'
446         glance_port: {get_param: GlancePort}
447         glance_protocol: {get_param: GlanceProtocol}
448         glance_password: {get_param: GlancePassword}
449         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
450         glance_log_file: {get_param: GlanceLogFile}
451         glance_dsn:
452           list_join:
453             - ''
454             - - 'mysql://glance:unset@'
455               - {get_param: VirtualIP}
456               - '/glance'
457         heat_password: {get_param: HeatPassword}
458         heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
459         heat_dsn:
460           list_join:
461             - ''
462             - - 'mysql://heat:unset@'
463               - {get_param: VirtualIP}
464               - '/heat'
465         keystone_ca_certificate: {get_param: KeystoneCACertificate}
466         keystone_signing_key: {get_param: KeystoneSigningKey}
467         keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
468         keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
469         keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
470         keystone_dsn:
471           list_join:
472             - ''
473             - - 'mysql://keystone:unset@'
474               - {get_param: VirtualIP}
475               - '/keystone'
476         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
477         mysql_root_password: {get_param: MysqlRootPassword}
478         mysql_cluster_name:
479           str_replace:
480             template: tripleo-CLUSTER
481             params:
482               CLUSTER: {get_param: MysqlClusterUniquePart}
483         neutron_flat_networks: {get_param: NeutronFlatNetworks}
484         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
485         neutron_agent_mode: {get_param: NeutronAgentMode}
486         neutron_router_distributed: {get_param: NeutronDVR}
487         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
488         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
489         neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
490         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
491         neutron_public_interface: {get_param: NeutronPublicInterface}
492         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
493         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
494         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
495         neutron_tenant_network_type: {get_param: NeutronNetworkType}
496         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
497         neutron_password: {get_param: NeutronPassword}
498         neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
499         neutron_dsn:
500           list_join:
501             - ''
502             - - 'mysql://neutron:unset@'
503               - {get_param: VirtualIP}
504               - '/ovs_neutron?charset=utf8'
505         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
506         ceilometer_password: {get_param: CeilometerPassword}
507         ceilometer_dsn:
508           list_join:
509             - ''
510             - - 'mysql://ceilometer:unset@'
511               - {get_param: VirtualIP}
512               - '/ceilometer'
513         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
514         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
515         nova_password: {get_param: NovaPassword}
516         nova_dsn:
517           list_join:
518             - ''
519             - - 'mysql://nova:unset@'
520               - {get_param: VirtualIP}
521               - '/nova'
522         rabbit_username: {get_param: RabbitUserName}
523         rabbit_password: {get_param: RabbitPassword}
524         rabbit_cookie: {get_param: RabbitCookie}
525         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
526         rabbit_client_port: {get_param: RabbitClientPort}
527         ntp_server: {get_param: NtpServer}
528         control_virtual_interface: {get_param: ControlVirtualInterface}
529         public_virtual_interface: {get_param: PublicVirtualInterface}
530         public_virtual_ip: {get_param: PublicVirtualIP}
531         swift_hash_suffix: {get_param: SwiftHashSuffix}
532         swift_password: {get_param: SwiftPassword}
533         swift_part_power: {get_param: SwiftPartPower}
534         swift_replicas: {get_param: SwiftReplicas}
535         swift_min_part_hours: {get_param: SwiftMinPartHours}
536         swift_mount_check: {get_param: SwiftMountCheck}
537
538   # Map heat metadata into hiera datafiles
539   ControllerConfig:
540     type: OS::Heat::StructuredConfig
541     properties:
542       group: os-apply-config
543       config:
544         hiera:
545           hierarchy:
546             - heat_config_%{::deploy_config_name}
547             - controller
548             - object
549             - common
550           datafiles:
551             common:
552               raw_data: {get_file: puppet/hieradata/common.yaml}
553             object:
554               raw_data: {get_file: puppet/hieradata/object.yaml}
555             controller:
556               raw_data: {get_file: puppet/hieradata/controller.yaml}
557               oac_data: # data we map in from other OAC configurations
558                 bootstrap_nodeid: bootstrap_host.bootstrap_nodeid
559                 # Swift
560                 tripleo::ringbuilder::devices: swift.devices
561               mapped_data: # data supplied directly to this deployment configuration, etc
562                 debug: {get_input: debug}
563                 bootstack_nodeid: {get_input: bootstack_nodeid}
564                 controller_host: {get_input: controller_host} #local-ipv4
565                 # Swift
566                 swift::proxy::proxy_local_net_ip: {get_input: controller_host}
567                 swift::proxy::authtoken::auth_host: {get_input: controller_virtual_ip}
568                 swift::storage::all::storage_local_net_ip: {get_input: controller_host}
569                 swift::swift_hash_suffix: {get_input: swift_hash_suffix}
570                 swift::proxy::authtoken::admin_password: {get_input: swift_password}
571                 tripleo::ringbuilder::part_power: {get_input: swift_part_power}
572                 tripleo::ringbuilder::replicas: {get_input: swift_replicas}
573                 tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
574                 swift_mount_check: {get_input: swift_mount_check}
575
576                 # NOTE(dprince): build_ring support is currently not wired in.
577                 # See: https://review.openstack.org/#/c/109225/
578                 tripleo::ringbuilder::build_ring: True
579                 # Cinder
580                 cinder_lvm_loop_device_size: {get_input: cinder_lvm_loop_device_size}
581                 cinder::volume::iscsi::iscsi_helper: {get_input: cinder_iscsi_helper}
582                 cinder::volume::iscsi::iscsi_ip_address: {get_input: controller_host}
583                 cinder::database_connection: {get_input: cinder_dsn}
584                 cinder::api::keystone_password: {get_input: cinder_password}
585                 cinder::api::keystone_auth_host: {get_input: controller_virtual_ip}
586                 cinder::api::bind_host: {get_input: controller_host}
587                 cinder::rabbit_userid: {get_input: rabbit_username}
588                 cinder::rabbit_password: {get_input: rabbit_password}
589                 #cinder::debug: {get_input: debug}
590                 # Glance
591                 glance::api::bind_port: {get_input: glance_port}
592                 glance::api::bind_host: {get_input: controller_host}
593                 glance::api::auth_host: {get_input: controller_virtual_ip}
594                 glance::api::registry_host: {get_input: controller_host}
595                 glance::api::keystone_password: {get_input: glance_password}
596                 # used to construct glance_api_servers
597                 glance_port: {get_input: glance_port}
598                 glance_protocol: {get_input: glance_protocol}
599                 glance_notifier_strategy: {get_input: glance_notifier_strategy}
600                 glance_log_file: {get_input: glance_log_file}
601                 glance_log_file: {get_input: glance_log_file}
602                 glance::api::database_connection: {get_input: glance_dsn}
603                 glance::registry::keystone_password: {get_input: glance_password}
604                 glance::registry::database_connection: {get_input: glance_dsn}
605                 glance::registry::bind_host: {get_input: controller_host}
606                 glance::registry::auth_host: {get_input: controller_virtual_ip}
607                 glance::backend::swift::swift_store_user: service:glance
608                 glance::backend::swift::swift_store_key: {get_input: glance_password}
609                 # Heat
610                 heat_password: {get_input: heat_password}
611                 heat_stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
612                 heat_dsn: {get_input: heat_dsn}
613                 heat.watch_server_url: {get_input: heat.watch_server_url}
614                 heat.metadata_server_url: {get_input: heat.metadata_server_url}
615                 heat.waitcondition_server_url: {get_input: heat.waitcondition_server_url}
616                 # Keystone
617                 keystone::admin_token: {get_input: admin_token}
618                 keystone_ca_certificate: {get_input: keystone_ca_certificate}
619                 keystone_signing_key: {get_input: keystone_signing_key}
620                 keystone_signing_certificate: {get_input: keystone_signing_certificate}
621                 keystone_ssl_certificate: {get_input: keystone_ssl_certificate}
622                 keystone_ssl_certificate_key: {get_input: keystone_ssl_certificate_key}
623                 keystone::database_connection: {get_input: keystone_dsn}
624                 keystone::public_bind_host: {get_input: controller_host}
625                 keystone::admin_bind_host: {get_input: controller_host}
626                 #keystone::debug: {get_input: debug}
627                 # MySQL
628                 admin_password: {get_input: admin_password}
629                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
630                 mysql_root_password: {get_input: mysql_root_password}
631                 mysql_cluster_name: {get_input: mysql_cluster_name}
632                 # Neutron
633                 neutron::bind_host: {get_input: controller_host}
634                 neutron::rabbit_password: {get_input: rabbit_password}
635                 neutron::rabbit_user: {get_input: rabbit_user}
636                 #neutron::debug: {get_input: debug}
637                 neutron::server::auth_host: {get_input: controller_virtual_ip}
638                 neutron::server::database_connection: {get_input: neutron_dsn}
639                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
640                 neutron::agents::ml2::ovs::local_ip: {get_input: controller_host}
641                 neutron_flat_networks: {get_input: neutron_flat_networks}
642                 neutron::agents::metadata::shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
643                 neutron_agent_mode: {get_input: neutron_agent_mode}
644                 neutron_router_distributed: {get_input: neutron_router_distributed}
645                 neutron_mechanism_drivers: {get_input: neutron_mechanism_drivers}
646                 neutron_allow_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
647                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
648                 neutron_bridge_mappings: {get_input: neutron_bridge_mappings}
649                 neutron_public_interface: {get_input: neutron_public_interface}
650                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
651                 neutron_public_interface_default_route: {get_input: neutron_public_interface_default_route}
652                 neutron_public_interface_tag: {get_input: neutron_public_interface_tag}
653                 neutron_tenant_network_type: {get_input: neutron_tenant_network_type}
654                 neutron_tunnel_types: {get_input: neutron_tunnel_types}
655                 neutron::server::auth_password: {get_input: neutron_password}
656                 neutron::agents::metadata::auth_password: {get_input: neutron_password}
657                 neutron_dnsmasq_options: {get_input: neutron_dnsmasq_options}
658                 neutron_dsn: {get_input: neutron_dsn}
659                 # Ceilometer
660                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
661                 ceilometer::rabbit_userid: {get_input: rabbit_username}
662                 ceilometer::rabbit_password: {get_input: rabbit_password}
663                 ceilometer::rabbit_host: {get_input: controller_virtual_ip}
664                 ceilometer::api::host: {get_input: controller_host}
665                 ceilometer::api::keystone_password: {get_input: ceilometer_password}
666                 ceilometer::api::keystone_host: {get_input: controller_virtual_ip}
667                 ceilometer::db::database_connection: {get_input: ceilometer_dsn}
668                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
669                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
670                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
671                 # Nova
672                 nova::rabbit_userid: {get_input: rabbit_username}
673                 nova::rabbit_password: {get_input: rabbit_password}
674                 nova::api::auth_host: {get_input: controller_virtual_ip}
675                 nova::api::api_bind_address: {get_input: controller_host}
676                 nova::api::metadata_listen: {get_input: controller_host}
677                 nova::api::admin_password: {get_input: nova_password}
678                 nova::database_connection: {get_input: nova_dsn}
679                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
680                 # Rabbit
681                 rabbit_username: {get_input: rabbit_username}
682                 rabbit_password: {get_input: rabbit_password}
683                 rabbit_cookie: {get_input: rabbit_cookie}
684                 rabbit_client_use_ssl: {get_input: rabbit_client_use_ssl}
685                 rabbit_client_port: {get_input: rabbit_client_port}
686                 # Misc
687                 neutron_public_interface_ip: {get_input: neutron_public_interface_ip}
688                 ntp_server: {get_input: ntp_server}
689                 control_virtual_interface: {get_input: control_virtual_interface}
690                 controller_virtual_ip: {get_input: controller_virtual_ip}
691                 public_virtual_interface: {get_input: public_virtual_interface}
692                 public_virtual_ip: {get_input: public_virtual_ip}
693                 # Load Balancer (composition class parameters)
694                 tripleo::loadbalancer::keystone_admin: true
695                 tripleo::loadbalancer::keystone_public: true
696                 tripleo::loadbalancer::neutron: true
697                 tripleo::loadbalancer::cinder: true
698                 tripleo::loadbalancer::glance_api: true
699                 tripleo::loadbalancer::glance_registry: true
700                 tripleo::loadbalancer::nova_ec2: true
701                 tripleo::loadbalancer::nova_osapi: true
702                 tripleo::loadbalancer::nova_metadata: true
703                 tripleo::loadbalancer::nova_novncproxy: true
704                 tripleo::loadbalancer::mysql: true
705                 tripleo::loadbalancer::rabbitmq: true
706                 tripleo::loadbalancer::swift_proxy_server: true
707                 tripleo::loadbalancer::ceilometer: true
708
709   # NOTE(dprince): this example uses a composition class
710   # on the puppet side (loadbalancer.pp). This seemed like the
711   # cleanest way to encapulate the puppet resources definitions
712   # for HAProxy and Keepalived.
713   ControllerLoadbalancerPuppetConfig:
714     type: OS::Heat::SoftwareConfig
715     properties:
716       group: puppet
717       options:
718         enable_hiera: True
719         enable_facter: False
720       inputs:
721       outputs:
722       - name: result
723       config:
724         get_file: puppet/loadbalancer.pp
725
726   ControllerLoadbalancerPuppetDeployment:
727     type: OS::Heat::StructuredDeployment
728     properties:
729       name: puppet_1
730       server: {get_resource: Controller}
731       config: {get_resource: ControllerLoadbalancerPuppetConfig}
732
733   ControllerPuppetConfig:
734     type: OS::Heat::SoftwareConfig
735     properties:
736       group: puppet
737       options:
738         enable_hiera: True
739         enable_facter: False
740       inputs:
741       - name: step
742       outputs:
743       - name: result
744       config:
745         get_file: puppet/overcloud_controller.pp
746
747   # Step through a series of Puppet runs using the same manifest.
748   # NOTE(dprince): Heat breakpoints would make for a really cool way to step
749   # through breakpoints in a controlled manner across the entire cluster
750   ControllerPuppetDeploymentServicesBase:
751     type: OS::Heat::StructuredDeployment
752     properties:
753       name: puppet_2
754       server: {get_resource: Controller}
755       config: {get_resource: ControllerPuppetConfig}
756       input_values:
757         step: 1
758       actions: ['CREATE'] # no need for two passes on an UPDATE
759
760   ControllerRingbuilderPuppetConfig:
761     type: OS::Heat::SoftwareConfig
762     properties:
763       group: puppet
764       options:
765         enable_hiera: True
766         enable_facter: False
767       inputs:
768       outputs:
769       - name: result
770       config:
771         get_file: puppet/ringbuilder.pp
772
773   ControllerRingbuilderPuppetDeployment:
774     type: OS::Heat::StructuredDeployment
775     properties:
776       name: puppet_3
777       server: {get_resource: Controller}
778       config: {get_resource: ControllerRingbuilderPuppetConfig}
779
780   ControllerPuppetDeploymentOvercloudServices:
781     type: OS::Heat::StructuredDeployment
782     properties:
783       name: puppet_4
784       server: {get_resource: Controller}
785       config: {get_resource: ControllerPuppetConfig}
786       input_values:
787         step: 2
788
789 outputs:
790   ip_address:
791     description: IP address of the server in the ctlplane network
792     value: {get_attr: [Controller, networks, ctlplane, 0]}
793   hostname:
794     description: Hostname of the server
795     value: {get_attr: [Controller, name]}
796   corosync_node:
797     description: >
798       Node object in the format {ip: ..., name: ...} format that the corosync
799       element expects
800     value:
801       ip: {get_attr: [Controller, networks, ctlplane, 0]}
802       name: {get_attr: [Controller, name]}
803   hosts_entry:
804     description: >
805       Server's IP address and hostname in the /etc/hosts format
806     value:
807       str_replace:
808         template: IP HOST HOST.novalocal CLOUDNAME
809         params:
810           IP: {get_attr: [Controller, networks, ctlplane, 0]}
811           HOST: {get_attr: [Controller, name]}
812           CLOUDNAME: {get_param: CloudName}
813   nova_server_resource:
814     description: Heat resource handle for the Nova compute server
815     value:
816       {get_resource: Controller}
817   swift_device:
818     description: Swift device formatted for swift-ring-builder
819     value:
820       str_replace:
821         template: 'r1z1-IP:%PORT%/d1'
822         params:
823           IP: {get_attr: [Controller, networks, ctlplane, 0]}
824   swift_proxy_memcache:
825     description: Swift proxy-memcache value
826     value:
827       str_replace:
828         template: "IP:11211"
829         params:
830           IP: {get_attr: [Controller, networks, ctlplane, 0]}