overcloud stepped deployment environment
[apex-tripleo-heat-templates.git] / controller.yaml
1 heat_template_version: 2015-04-30
2
3 description: >
4   OpenStack control plane node. Can be wrapped in a ResourceGroup for scaling.
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   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 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 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 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 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   NeutronDVR:
248     default: 'False'
249     description: Whether to configure Neutron Distributed Virtual Routers
250     type: string
251   NeutronMetadataProxySharedSecret:
252     default: 'unset'
253     description: Shared secret to prevent spoofing
254     type: string
255   NeutronMechanismDrivers:
256     default: 'openvswitch'
257     description: |
258         The mechanism drivers for the Neutron tenant network. To specify multiple
259         values, use a comma separated string, like so: 'openvswitch,l2_population'
260     type: string
261   NeutronAllowL3AgentFailover:
262     default: 'True'
263     description: Allow automatic l3-agent failover
264     type: string
265   NeutronL3HA:
266     default: 'False'
267     description: Whether to enable l3-agent HA
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   NeutronNetworkType:
277     default: 'gre'
278     description: The tenant network type for Neutron, either gre or vxlan.
279     type: string
280   NeutronNetworkVLANRanges:
281     default: 'datacentre'
282     description: >
283       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
284       Neutron documentation for permitted values. Defaults to permitting any
285       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
286     type: string
287   NeutronPassword:
288     default: unset
289     description: The password for the neutron service account, used by neutron agents.
290     type: string
291     hidden: true
292   NeutronPublicInterface:
293     default: nic1
294     description: What interface to bridge onto br-ex for network nodes.
295     type: string
296   NeutronPublicInterfaceTag:
297     default: ''
298     description: >
299       VLAN tag for creating a public VLAN. The tag will be used to
300       create an access port on the exterior bridge for each control plane node,
301       and that port will be given the IP address returned by neutron from the
302       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
303       overcloud.yaml to include the deployment of VLAN ports to the control
304       plane.
305     type: string
306   NeutronPublicInterfaceDefaultRoute:
307     default: ''
308     description: A custom default route for the NeutronPublicInterface.
309     type: string
310   NeutronPublicInterfaceIP:
311     default: ''
312     description: A custom IP address to put onto the NeutronPublicInterface.
313     type: string
314   NeutronPublicInterfaceRawDevice:
315     default: ''
316     description: If set, the public interface is a vlan with this device as the raw device.
317     type: string
318   NeutronTunnelTypes:
319     default: 'gre'
320     description: |
321         The tunnel types for the Neutron tenant network. To specify multiple
322         values, use a comma separated string, like so: 'gre,vxlan'
323     type: string
324   NovaPassword:
325     default: unset
326     description: The password for the nova service account, used by nova-api.
327     type: string
328     hidden: true
329   NtpServer:
330     type: string
331     default: ''
332   PcsdPassword:
333     type: string
334     description: The password for the 'pcsd' user.
335   PublicVirtualInterface:
336     default: 'br-ex'
337     description: >
338         Specifies the interface where the public-facing virtual ip will be assigned.
339         This should be int_public when a VLAN is being used.
340     type: string
341   PublicVirtualIP:
342     type: string
343     default: ''  # Has to be here because of the ignored empty value bug
344   RabbitCookie:
345     type: string
346     default: ''  # Has to be here because of the ignored empty value bug
347     hidden: true
348   RabbitPassword:
349     default: guest
350     description: The password for RabbitMQ
351     type: string
352     hidden: true
353   RabbitUserName:
354     default: guest
355     description: The username for RabbitMQ
356     type: string
357   RabbitClientUseSSL:
358     default: false
359     description: >
360         Rabbit client subscriber parameter to specify
361         an SSL connection to the RabbitMQ host.
362     type: string
363   RabbitClientPort:
364     default: 5672
365     description: Set rabbit subscriber port, change this if using SSL
366     type: number
367   SnmpdReadonlyUserName:
368     default: ro_snmp_user
369     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
370     type: string
371   SnmpdReadonlyUserPassword:
372     default: unset
373     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
374     type: string
375     hidden: true
376   SSLCACertificate:
377     default: ''
378     description: If set, the contents of an SSL certificate authority file.
379     type: string
380   SSLCertificate:
381     default: ''
382     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
383     type: string
384     hidden: true
385   SSLKey:
386     default: ''
387     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
388     type: string
389     hidden: true
390   SwiftHashSuffix:
391     default: unset
392     description: A random string to be used as a salt when hashing to determine mappings
393       in the ring.
394     hidden: true
395     type: string
396   SwiftMountCheck:
397     default: 'false'
398     description: Value of mount_check in Swift account/container/object -server.conf
399     type: boolean
400   SwiftMinPartHours:
401     type: number
402     default: 1
403     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
404   SwiftPartPower:
405     default: 10
406     description: Partition Power to use when building Swift rings
407     type: number
408   SwiftPassword:
409     default: unset
410     description: The password for the swift service account, used by the swift proxy
411       services.
412     hidden: true
413     type: string
414   SwiftReplicas:
415     type: number
416     default: 3
417     description: How many replicas to use in the swift rings.
418   VirtualIP:
419     type: string
420     default: ''  # Has to be here because of the ignored empty value bug
421
422
423 resources:
424
425   Controller:
426     type: OS::Nova::Server
427     properties:
428       image: {get_param: Image}
429       image_update_policy: {get_param: ImageUpdatePolicy}
430       flavor: {get_param: Flavor}
431       key_name: {get_param: KeyName}
432       networks:
433         - network: ctlplane
434       user_data_format: SOFTWARE_CONFIG
435       user_data: {get_resource: NodeUserData}
436
437   NodeUserData:
438     type: OS::TripleO::NodeUserData
439
440   NetworkConfig:
441     type: OS::TripleO::Controller::Net::SoftwareConfig
442
443   NetworkDeployment:
444     type: OS::TripleO::SoftwareDeployment
445     properties:
446       signal_transport: NO_SIGNAL
447       config: {get_attr: [NetworkConfig, config_id]}
448       server: {get_resource: Controller}
449       input_values:
450         bridge_name: br-ex
451         interface_name: {get_param: NeutronPublicInterface}
452
453   ControllerPassthroughConfig:
454     type: OS::Heat::StructuredConfig
455     properties:
456       group: os-apply-config
457       config: {get_input: passthrough_config}
458
459   ControllerPassthroughConfigSpecific:
460     type: OS::Heat::StructuredConfig
461     properties:
462       group: os-apply-config
463       config: {get_input: passthrough_config_specific}
464
465   ControllerConfig:
466     type: OS::Heat::StructuredConfig
467     properties:
468       group: os-apply-config
469       config:
470         admin-password: {get_input: admin_password}
471         admin-token: {get_input: admin_token}
472         bootstack:
473           public_interface_ip: {get_input: neutron_public_interface_ip}
474         bootstrap_host:
475           nodeid: {get_input: bootstack_nodeid}
476         cinder:
477           db: {get_input: cinder_dsn}
478           debug: {get_input: debug}
479           volume_size_mb: {get_input: cinder_lvm_loop_device_size}
480           service-password: {get_input: cinder_password}
481           iscsi-helper: {get_input: CinderISCSIHelper}
482         controller-address: {get_input: controller_host}
483         corosync:
484           bindnetaddr: {get_input: controller_host}
485           mcastport: 5577
486         pacemaker:
487           stonith_enabled : false
488           recheck_interval : 5
489           quorum_policy : ignore
490         db-password: unset
491         glance:
492           registry:
493             host: {get_input: controller_virtual_ip}
494           backend: swift
495           db: {get_input: glance_dsn}
496           debug: {get_input: debug}
497           host: {get_input: controller_virtual_ip}
498           port: {get_input: glance_port}
499           protocol: {get_input: glance_protocol}
500           service-password: {get_input: glance_password}
501           swift-store-user: service:glance
502           swift-store-key: {get_input: glance_password}
503           notifier-strategy: {get_input: glance_notifier_strategy}
504           log-file: {get_input: glance_log_file}
505         heat:
506           admin_password: {get_input: heat_password}
507           admin_tenant_name: service
508           admin_user: heat
509           auth_encryption_key: {get_input: heat_auth_encryption_key}
510           db: {get_input: heat_dsn}
511           debug: {get_input: debug}
512           stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
513           watch_server_url: {get_input: heat.watch_server_url}
514           metadata_server_url: {get_input: heat.metadata_server_url}
515           waitcondition_server_url: {get_input: heat.waitcondition_server_url}
516         keystone:
517           db: {get_input: keystone_dsn}
518           debug: {get_input: debug}
519           host: {get_input: controller_virtual_ip}
520           ca_certificate: {get_input: keystone_ca_certificate}
521           signing_key: {get_input: keystone_signing_key}
522           signing_certificate: {get_input: keystone_signing_certificate}
523           ssl:
524               certificate: {get_input: keystone_ssl_certificate}
525               certificate_key: {get_input: keystone_ssl_certificate_key}
526         mysql:
527           innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
528           local_bind: true
529           root-password: {get_input: mysql_root_password}
530           cluster_name: {get_input: mysql_cluster_name}
531         neutron:
532           debug: {get_input: debug}
533           flat-networks: {get_input: neutron_flat_networks}
534           host: {get_input: controller_virtual_ip}
535           metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
536           agent_mode: {get_input: neutron_agent_mode}
537           router_distributed: {get_input: neutron_router_distributed}
538           mechanism_drivers: {get_input: neutron_mechanism_drivers}
539           allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
540           l3_ha: {get_input: neutron_l3_ha}
541           ovs:
542             enable_tunneling: {get_input: neutron_enable_tunneling}
543             local_ip: {get_input: controller_host}
544             network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
545             bridge_mappings: {get_input: neutron_bridge_mappings}
546             public_interface: {get_input: neutron_public_interface}
547             public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
548             public_interface_route: {get_input: neutron_public_interface_default_route}
549             public_interface_tag: {get_input: neutron_public_interface_tag}
550             physical_bridge: br-ex
551             tenant_network_type: {get_input: neutron_tenant_network_type}
552             tunnel_types: {get_input: neutron_tunnel_types}
553           ovs_db: {get_input: neutron_dsn}
554           service-password: {get_input: neutron_password}
555           dnsmasq-options: {get_input: neutron_dnsmasq_options}
556         ceilometer:
557           db: {get_input: ceilometer_dsn}
558           debug: {get_input: debug}
559           metering_secret: {get_input: ceilometer_metering_secret}
560           service-password: {get_input: ceilometer_password}
561         snmpd:
562           export_MIB: UCD-SNMP-MIB
563           readonly_user_name: {get_input: snmpd_readonly_user_name}
564           readonly_user_password: {get_input: snmpd_readonly_user_password}
565         nova:
566           compute_driver: libvirt.LibvirtDriver
567           db: {get_input: nova_dsn}
568           default_floating_pool:
569             ext-net
570           host: {get_input: controller_virtual_ip}
571           metadata-proxy: true
572           service-password: {get_input: nova_password}
573         rabbit:
574           host: {get_input: controller_virtual_ip}
575           username: {get_input: rabbit_username}
576           password: {get_input: rabbit_password}
577           cookie: {get_input: rabbit_cookie}
578           rabbit_client_use_ssl: {get_input: rabbit_client_use_ssl}
579           rabbit_port: {get_input: rabbit_client_port}
580         ntp:
581           servers:
582               - {server: {get_input: ntp_server}}
583         virtual_interfaces:
584           instances:
585             - vrrp_instance_name: VI_CONTROL
586               virtual_router_id: 51
587               keepalive_interface: {get_input: control_virtual_interface}
588               priority: 101
589               virtual_ips:
590               - ip: {get_input: controller_virtual_ip}
591                 interface: {get_input: control_virtual_interface}
592             - vrrp_instance_name: VI_PUBLIC
593               virtual_router_id: 52
594               keepalive_interface: {get_input: public_virtual_interface}
595               priority: 101
596               virtual_ips:
597               - ip: {get_input: public_virtual_ip}
598                 interface: {get_input: public_virtual_interface}
599           vrrp_sync_groups:
600             - name: VG1
601               members:
602                 - VI_CONTROL
603                 - VI_PUBLIC
604         keepalived:
605           keepalive_interface: {get_input: public_virtual_interface}
606           priority: 101
607         virtual_ips:
608             -
609               ip: {get_input: controller_virtual_ip}
610               interface: {get_input: control_virtual_interface}
611             -
612               ip: {get_input: public_virtual_ip}
613               interface: {get_input: public_virtual_interface}
614         haproxy:
615           net_binds:
616             - ip: {get_input: controller_virtual_ip}
617           options:
618             - option httpchk GET /
619           services:
620             - name: keystone_admin
621               port: 35357
622               net_binds: &public_binds
623                 - ip: {get_input: controller_virtual_ip}
624                 - ip: {get_input: public_virtual_ip}
625             - name: keystone_public
626               port: 5000
627               net_binds: *public_binds
628             - name: horizon
629               port: 80
630               net_binds: *public_binds
631             - name: neutron
632               port: 9696
633               net_binds: *public_binds
634             - name: cinder
635               port: 8776
636               net_binds: *public_binds
637             - name: glance_api
638               port: 9292
639               net_binds: *public_binds
640             - name: glance_registry
641               port: 9191
642               net_binds: *public_binds
643               options: # overwrite options as glace_reg needs auth for http req
644             - name: heat_api
645               port: 8004
646               net_binds: *public_binds
647             - name: heat_cloudwatch
648               port: 8003
649               net_binds: *public_binds
650             - name: heat_cfn
651               port: 8000
652               net_binds: *public_binds
653             - name: mysql
654               port: 3306
655               extra_server_params:
656                 - backup
657               options:
658                 - timeout client 0
659                 - timeout server 0
660             - name: nova_ec2
661               port: 8773
662             - name: nova_osapi
663               port: 8774
664               net_binds: *public_binds
665             - name: nova_metadata
666               port: 8775
667               net_binds: *public_binds
668             - name: nova_novncproxy
669               port: 6080
670               net_binds: *public_binds
671             - name: ceilometer
672               port: 8777
673               net_binds: *public_binds
674               options: # overwrite options as ceil needs auth for http req
675             - name: swift_proxy_server
676               port: 8080
677               net_binds: *public_binds
678               options:
679                 - option httpchk GET /info
680             - name: rabbitmq
681               port: 5672
682               options:
683                 - timeout client 0
684                 - timeout server 0
685                 - maxconn 1500
686
687   ControllerDeployment:
688     type: OS::TripleO::SoftwareDeployment
689     properties:
690       signal_transport: NO_SIGNAL
691       config: {get_resource: ControllerConfig}
692       server: {get_resource: Controller}
693       input_values:
694         bootstack_nodeid: {get_attr: [Controller, name]}
695         controller_host: {get_attr: [Controller, networks, ctlplane, 0]}
696         controller_virtual_ip: {get_param: VirtualIP}
697         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
698         heat.watch_server_url:
699           list_join:
700             - ''
701             - - 'http://'
702               - {get_param: VirtualIP}
703               - ':8003'
704         heat.metadata_server_url:
705           list_join:
706             - ''
707             - - 'http://'
708               - {get_param: VirtualIP}
709               - ':8000'
710         heat.waitcondition_server_url:
711           list_join:
712             - ''
713             - - 'http://'
714               - {get_param: VirtualIP}
715               - ':8000/v1/waitcondition'
716         admin_password: {get_param: AdminPassword}
717         admin_token: {get_param: AdminToken}
718         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
719         debug: {get_param: Debug}
720         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
721         cinder_password: {get_param: CinderPassword}
722         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
723         cinder_dsn:
724           list_join:
725             - ''
726             - - 'mysql://cinder:unset@'
727               - {get_param: VirtualIP}
728               - '/cinder'
729         glance_port: {get_param: GlancePort}
730         glance_protocol: {get_param: GlanceProtocol}
731         glance_password: {get_param: GlancePassword}
732         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
733         glance_log_file: {get_param: GlanceLogFile}
734         glance_dsn:
735           list_join:
736             - ''
737             - - 'mysql://glance:unset@'
738               - {get_param: VirtualIP}
739               - '/glance'
740         heat_password: {get_param: HeatPassword}
741         heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
742         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
743         heat_dsn:
744           list_join:
745             - ''
746             - - 'mysql://heat:unset@'
747               - {get_param: VirtualIP}
748               - '/heat'
749         keystone_ca_certificate: {get_param: KeystoneCACertificate}
750         keystone_signing_key: {get_param: KeystoneSigningKey}
751         keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
752         keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
753         keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
754         keystone_dsn:
755           list_join:
756             - ''
757             - - 'mysql://keystone:unset@'
758               - {get_param: VirtualIP}
759               - '/keystone'
760         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
761         mysql_root_password: {get_param: MysqlRootPassword}
762         mysql_cluster_name:
763           str_replace:
764             template: tripleo-CLUSTER
765             params:
766               CLUSTER: {get_param: MysqlClusterUniquePart}
767         neutron_flat_networks: {get_param: NeutronFlatNetworks}
768         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
769         neutron_agent_mode: {get_param: NeutronAgentMode}
770         neutron_router_distributed: {get_param: NeutronDVR}
771         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
772         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
773         neutron_l3_ha: {get_param: NeutronL3HA}
774         neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
775         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
776         neutron_public_interface: {get_param: NeutronPublicInterface}
777         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
778         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
779         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
780         neutron_tenant_network_type: {get_param: NeutronNetworkType}
781         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
782         neutron_password: {get_param: NeutronPassword}
783         neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
784         neutron_dsn:
785           list_join:
786             - ''
787             - - 'mysql://neutron:unset@'
788               - {get_param: VirtualIP}
789               - '/ovs_neutron?charset=utf8'
790         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
791         ceilometer_password: {get_param: CeilometerPassword}
792         ceilometer_dsn:
793           list_join:
794             - ''
795             - - 'mysql://ceilometer:unset@'
796               - {get_param: VirtualIP}
797               - '/ceilometer'
798         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
799         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
800         nova_password: {get_param: NovaPassword}
801         nova_dsn:
802           list_join:
803             - ''
804             - - 'mysql://nova:unset@'
805               - {get_param: VirtualIP}
806               - '/nova'
807         rabbit_username: {get_param: RabbitUserName}
808         rabbit_password: {get_param: RabbitPassword}
809         rabbit_cookie: {get_param: RabbitCookie}
810         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
811         rabbit_client_port: {get_param: RabbitClientPort}
812         ntp_server: {get_param: NtpServer}
813         control_virtual_interface: {get_param: ControlVirtualInterface}
814         public_virtual_interface: {get_param: PublicVirtualInterface}
815         public_virtual_ip: {get_param: PublicVirtualIP}
816
817   SSLConfig:
818     type: OS::Heat::StructuredConfig
819     properties:
820       group: os-apply-config
821       config:
822         ssl:
823           ca_certificate: {get_input: ssl_ca_certificate}
824         stunnel:
825           cert: {get_input: ssl_certificate}
826           key: {get_input: ssl_key}
827           cacert: {get_input: ssl_ca_certificate}
828           ports:
829            - name: 'ec2'
830              accept: 13773
831              connect: 8773
832              connect_host: {get_input: controller_host}
833            - name: 'image'
834              accept: 13292
835              connect: 9292
836              connect_host: {get_input: controller_host}
837            - name: 'identity'
838              accept: 13000
839              connect: 5000
840              connect_host: {get_input: controller_host}
841            - name: 'network'
842              accept: 13696
843              connect: 9696
844              connect_host: {get_input: controller_host}
845            - name: 'compute'
846              accept: 13774
847              connect: 8774
848              connect_host: {get_input: controller_host}
849            - name: 'swift-proxy'
850              accept: 13080
851              connect: 8080
852              connect_host: {get_input: controller_host}
853            - name: 'cinder'
854              accept: 13776
855              connect: 8776
856              connect_host: {get_input: controller_host}
857            - name: 'ceilometer'
858              accept: 13777
859              connect: 8777
860              connect_host: {get_input: controller_host}
861
862   ControllerSSLDeployment:
863     type: OS::Heat::StructuredDeployment
864     properties:
865       config: {get_resource: SSLConfig}
866       server: {get_resource: Controller}
867       signal_transport: NO_SIGNAL
868       input_values:
869         controller_host: {get_attr: [Controller, networks, ctlplane, 0]}
870         ssl_certificate: {get_param: SSLCertificate}
871         ssl_key: {get_param: SSLKey}
872         ssl_ca_certificate: {get_param: SSLCACertificate}
873
874   ControllerPassthroughDeployment:
875     type: OS::Heat::StructuredDeployment
876     properties:
877       config: {get_resource: ControllerPassthroughConfig}
878       server: {get_resource: Controller}
879       signal_transport: NO_SIGNAL
880       input_values:
881         passthrough_config: {get_param: ExtraConfig}
882
883   ControllerPassthroughSpecificDeployment:
884     depends_on: [ControllerPassthroughDeployment]
885     type: OS::Heat::StructuredDeployment
886     properties:
887       config: {get_resource: ControllerPassthroughConfigSpecific}
888       server: {get_resource: Controller}
889       signal_transport: NO_SIGNAL
890       input_values:
891         passthrough_config_specific: {get_param: ControllerExtraConfig}
892
893   SwiftConfig:
894     type: OS::Heat::StructuredConfig
895     properties:
896       group: os-apply-config
897       config:
898         swift:
899           hash: { get_input: swift_hash_suffix }
900           part-power: { get_input: swift_part_power }
901           mount-check: { get_input: swift_mount_check }
902           min-part-hours: { get_input: swift_min_part_hours }
903           replicas: {get_input: swift_replicas }
904           service-password: { get_input: swift_password }
905
906   SwiftStorageDeploy:
907     type: OS::Heat::StructuredDeployment
908     properties:
909       server: {get_resource: Controller}
910       config: {get_resource: SwiftConfig}
911       signal_transport: NO_SIGNAL
912       input_values:
913         swift_hash_suffix: {get_param: SwiftHashSuffix}
914         swift_mount_check: {get_param: SwiftMountCheck}
915         swift_password: {get_param: SwiftPassword}
916         swift_min_part_hours: {get_param: SwiftMinPartHours}
917         swift_part_power: {get_param: SwiftPartPower}
918         swift_replicas: { get_param: SwiftReplicas}
919
920 outputs:
921   ip_address:
922     description: IP address of the server in the ctlplane network
923     value: {get_attr: [Controller, networks, ctlplane, 0]}
924   hostname:
925     description: Hostname of the server
926     value: {get_attr: [Controller, name]}
927   corosync_node:
928     description: >
929       Node object in the format {ip: ..., name: ...} format that the corosync
930       element expects
931     value:
932       ip: {get_attr: [Controller, networks, ctlplane, 0]}
933       name: {get_attr: [Controller, name]}
934   hosts_entry:
935     description: >
936       Server's IP address and hostname in the /etc/hosts format
937     value:
938       str_replace:
939         template: IP HOST CLOUDNAME
940         params:
941           IP: {get_attr: [Controller, networks, ctlplane, 0]}
942           HOST: {get_attr: [Controller, name]}
943           CLOUDNAME: {get_param: CloudName}
944   nova_server_resource:
945     description: Heat resource handle for the Nova compute server
946     value:
947       {get_resource: Controller}
948   swift_device:
949     description: Swift device formatted for swift-ring-builder
950     value:
951       str_replace:
952         template: 'r1z1-IP:%PORT%/d1'
953         params:
954           IP: {get_attr: [Controller, networks, ctlplane, 0]}
955   swift_proxy_memcache:
956     description: Swift proxy-memcache value
957     value:
958       str_replace:
959         template: "IP:11211"
960         params:
961           IP: {get_attr: [Controller, networks, ctlplane, 0]}