Allow a user to disable MongoDB journaling
[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 and db password.
15     type: string
16     hidden: true
17   CeilometerBackend:
18     default: 'mongodb'
19     description: The ceilometer backend type.
20     type: string
21   CeilometerMeteringSecret:
22     default: unset
23     description: Secret shared by the ceilometer services.
24     type: string
25     hidden: true
26   CeilometerPassword:
27     default: unset
28     description: The password for the ceilometer service and db account.
29     type: string
30     hidden: true
31   CinderEnableIscsiBackend:
32     default: true
33     description: Whether to enable or not the Iscsi backend for Cinder
34     type: boolean
35   CinderEnableRbdBackend:
36     default: false
37     description: Whether to enable or not the Rbd backend for Cinder
38     type: boolean
39   CinderISCSIHelper:
40     default: tgtadm
41     description: The iSCSI helper to use with cinder.
42     type: string
43   CinderLVMLoopDeviceSize:
44     default: 5000
45     description: The size of the loopback file used by the cinder LVM driver.
46     type: number
47   CinderPassword:
48     default: unset
49     description: The password for the cinder service and db account, used by cinder-api.
50     type: string
51     hidden: true
52   CloudName:
53     default: ''
54     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
55     type: string
56   ControllerExtraConfig:
57     default: {}
58     description: |
59       Controller specific configuration to inject into the cluster. Same
60       structure as ExtraConfig.
61     type: json
62   ControlVirtualInterface:
63     default: 'br-ex'
64     description: Interface where virtual ip will be assigned.
65     type: string
66   Debug:
67     default: ''
68     description: Set to True to enable debugging on all services.
69     type: string
70   EnableFencing:
71     default: false
72     description: Whether to enable fencing in Pacemaker or not.
73     type: boolean
74   EnableGalera:
75     default: true
76     description: Whether to use Galera instead of regular MariaDB.
77     type: boolean
78   EnableCephStorage:
79     default: false
80     description: Whether to deploy Ceph Storage (OSD) on the Controller
81     type: boolean
82   EnableSwiftStorage:
83     default: true
84     description: Whether to enable Swift Storage on the Controller
85     type: boolean
86   ExtraConfig:
87     default: {}
88     description: |
89       Additional configuration to inject into the cluster. The JSON should have
90       the following structure:
91         {"FILEKEY":
92           {"config":
93             [{"section": "SECTIONNAME",
94               "values":
95                 [{"option": "OPTIONNAME",
96                   "value": "VALUENAME"
97                  }
98                 ]
99              }
100             ]
101           }
102         }
103       For instance:
104         {"nova":
105           {"config":
106             [{"section": "default",
107               "values":
108                 [{"option": "compute_manager",
109                   "value": "ironic.nova.compute.manager.ClusterComputeManager"
110                  }
111                 ]
112              },
113              {"section": "cells",
114               "values":
115                 [{"option": "driver",
116                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
117                  }
118                 ]
119              }
120             ]
121           }
122         }
123     type: json
124   FencingConfig:
125     default: {}
126     description: |
127       Pacemaker fencing configuration. The JSON should have
128       the following structure:
129         {
130           "devices": [
131             {
132               "agent": "AGENT_NAME",
133               "host_mac": "HOST_MAC_ADDRESS",
134               "params": {"PARAM_NAME": "PARAM_VALUE"}
135             }
136           ]
137         }
138       For instance:
139         {
140           "devices": [
141             {
142               "agent": "fence_xvm",
143               "host_mac": "52:54:00:aa:bb:cc",
144               "params": {
145                 "multicast_address": "225.0.0.12",
146                 "port": "baremetal_0",
147                 "manage_fw": true,
148                 "manage_key_file": true,
149                 "key_file": "/etc/fence_xvm.key",
150                 "key_file_password": "abcdef"
151               }
152             }
153           ]
154         }
155     type: json
156   Flavor:
157     description: Flavor for control nodes to request when deploying.
158     type: string
159     constraints:
160       - custom_constraint: nova.flavor
161   GlanceNotifierStrategy:
162     description: Strategy to use for Glance notification queue
163     type: string
164     default: noop
165   GlanceLogFile:
166     description: The filepath of the file to use for logging messages from Glance.
167     type: string
168     default: ''
169   GlancePassword:
170     default: unset
171     description: The password for the glance service and db account, used by the glance services.
172     type: string
173     hidden: true
174   GlancePort:
175     default: "9292"
176     description: Glance port.
177     type: string
178   GlanceProtocol:
179     default: http
180     description: Protocol to use when connecting to glance, set to https for SSL.
181     type: string
182   GlanceBackend:
183     default: swift
184     description: The short name of the Glance backend to use. Should be one
185       of swift, rbd, or file
186     type: string
187     constraints:
188     - allowed_values: ['swift', 'file', 'rbd']
189   HeatPassword:
190     default: unset
191     description: The password for the Heat service and db account, used by the Heat services.
192     type: string
193     hidden: true
194   HeatStackDomainAdminPassword:
195     description: Password for heat_domain_admin user.
196     type: string
197     default: ''
198     hidden: true
199   HeatAuthEncryptionKey:
200     description: Auth encryption key for heat-engine
201     type: string
202   HorizonSecret:
203     description: Secret key for Django
204     type: string
205   Image:
206     type: string
207     default: overcloud-control
208     constraints:
209       - custom_constraint: glance.image
210   ImageUpdatePolicy:
211     default: 'REBUILD_PRESERVE_EPHEMERAL'
212     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
213     type: string
214   KeyName:
215     default: default
216     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
217     type: string
218     constraints:
219       - custom_constraint: nova.keypair
220   KeystoneCACertificate:
221     default: ''
222     description: Keystone self-signed certificate authority certificate.
223     type: string
224   KeystoneSigningCertificate:
225     default: ''
226     description: Keystone certificate for verifying token validity.
227     type: string
228   KeystoneSigningKey:
229     default: ''
230     description: Keystone key for signing tokens.
231     type: string
232     hidden: true
233   KeystoneSSLCertificate:
234     default: ''
235     description: Keystone certificate for verifying token validity.
236     type: string
237   KeystoneSSLCertificateKey:
238     default: ''
239     description: Keystone key for signing tokens.
240     type: string
241     hidden: true
242   MysqlClusterUniquePart:
243     description: A unique identifier of the MySQL cluster the controller is in.
244     type: string
245     default: 'unset'  # Has to be here because of the ignored empty value bug
246     # Drop the validation: https://bugs.launchpad.net/tripleo/+bug/1405446
247     # constraints:
248     # - length: {min: 4, max: 10}
249   MysqlInnodbBufferPoolSize:
250     description: >
251         Specifies the size of the buffer pool in megabytes. Setting to
252         zero should be interpreted as "no value" and will defer to the
253         lower level default.
254     type: number
255     default: 0
256   MysqlRootPassword:
257     type: string
258     hidden: true
259     default: ''  # Has to be here because of the ignored empty value bug
260   NeutronExternalNetworkBridge:
261     description: Name of bridge used for external network traffic.
262     type: string
263     default: 'br-ex'
264   NeutronBridgeMappings:
265     description: >
266       The OVS logical->physical bridge mappings to use. See the Neutron
267       documentation for details. Defaults to mapping br-ex - the external
268       bridge on hosts - to a physical name 'datacentre' which can be used
269       to create provider networks (and we use this for the default floating
270       network) - if changing this either use different post-install network
271       scripts or be sure to keep 'datacentre' as a mapping network name.
272     type: string
273     default: "datacentre:br-ex"
274   NeutronDnsmasqOptions:
275     default: 'dhcp-option-force=26,1400'
276     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.
277     type: string
278   NeutronAgentMode:
279     default: 'dvr_snat'
280     description: Agent mode for the neutron-l3-agent on the controller hosts
281     type: string
282   NeutronDVR:
283     default: 'False'
284     description: Whether to configure Neutron Distributed Virtual Routers
285     type: string
286   NeutronMetadataProxySharedSecret:
287     default: 'unset'
288     description: Shared secret to prevent spoofing
289     type: string
290   NeutronMechanismDrivers:
291     default: 'openvswitch'
292     description: |
293         The mechanism drivers for the Neutron tenant network. To specify multiple
294         values, use a comma separated string, like so: 'openvswitch,l2_population'
295     type: string
296   NeutronAllowL3AgentFailover:
297     default: 'True'
298     description: Allow automatic l3-agent failover
299     type: string
300   NeutronL3HA:
301     default: 'False'
302     description: Whether to enable l3-agent HA
303     type: string
304   NeutronDhcpAgentsPerNetwork:
305     type: number
306     default: 3
307     description: The number of neutron dhcp agents to schedule per network
308   NeutronEnableTunnelling:
309     type: string
310     default: "True"
311   NeutronFlatNetworks:
312     type: string
313     default: 'datacentre'
314     description: If set, flat networks to configure in neutron plugins.
315   NeutronNetworkType:
316     default: 'gre'
317     description: The tenant network type for Neutron, either gre or vxlan.
318     type: string
319   NeutronNetworkVLANRanges:
320     default: 'datacentre'
321     description: >
322       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
323       Neutron documentation for permitted values. Defaults to permitting any
324       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
325     type: comma_delimited_list
326   NeutronPassword:
327     default: unset
328     description: The password for the neutron service and db account, used by neutron agents.
329     type: string
330     hidden: true
331   NeutronPublicInterface:
332     default: nic1
333     description: What interface to bridge onto br-ex for network nodes.
334     type: string
335   NeutronPublicInterfaceTag:
336     default: ''
337     description: >
338       VLAN tag for creating a public VLAN. The tag will be used to
339       create an access port on the exterior bridge for each control plane node,
340       and that port will be given the IP address returned by neutron from the
341       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
342       overcloud.yaml to include the deployment of VLAN ports to the control
343       plane.
344     type: string
345   NeutronPublicInterfaceDefaultRoute:
346     default: ''
347     description: A custom default route for the NeutronPublicInterface.
348     type: string
349   NeutronPublicInterfaceIP:
350     default: ''
351     description: A custom IP address to put onto the NeutronPublicInterface.
352     type: string
353   NeutronPublicInterfaceRawDevice:
354     default: ''
355     description: If set, the public interface is a vlan with this device as the raw device.
356     type: string
357   NeutronTunnelTypes:
358     default: 'gre'
359     description: |
360         The tunnel types for the Neutron tenant network. To specify multiple
361         values, use a comma separated string, like so: 'gre,vxlan'
362     type: string
363   NovaPassword:
364     default: unset
365     description: The password for the nova service and db account, used by nova-api.
366     type: string
367     hidden: true
368   MongoDbNoJournal:
369     default: false
370     description: Should MongoDb journaling be disabled
371     type: boolean
372   NtpServer:
373     type: string
374     default: ''
375   PcsdPassword:
376     type: string
377     description: The password for the 'pcsd' user.
378   PublicVirtualInterface:
379     default: 'br-ex'
380     description: >
381         Specifies the interface where the public-facing virtual ip will be assigned.
382         This should be int_public when a VLAN is being used.
383     type: string
384   PublicVirtualIP:
385     type: string
386     default: ''  # Has to be here because of the ignored empty value bug
387   RabbitCookie:
388     type: string
389     default: ''  # Has to be here because of the ignored empty value bug
390     hidden: true
391   RabbitPassword:
392     default: guest
393     description: The password for RabbitMQ
394     type: string
395     hidden: true
396   RabbitUserName:
397     default: guest
398     description: The username for RabbitMQ
399     type: string
400   RabbitClientUseSSL:
401     default: false
402     description: >
403         Rabbit client subscriber parameter to specify
404         an SSL connection to the RabbitMQ host.
405     type: string
406   RabbitClientPort:
407     default: 5672
408     description: Set rabbit subscriber port, change this if using SSL
409     type: number
410   RedisVirtualIP:
411     type: string
412     default: ''  # Has to be here because of the ignored empty value bug
413   SnmpdReadonlyUserName:
414     default: ro_snmp_user
415     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
416     type: string
417   SnmpdReadonlyUserPassword:
418     default: unset
419     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
420     type: string
421     hidden: true
422   SSLCACertificate:
423     default: ''
424     description: If set, the contents of an SSL certificate authority file.
425     type: string
426   SSLCertificate:
427     default: ''
428     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
429     type: string
430     hidden: true
431   SSLKey:
432     default: ''
433     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
434     type: string
435     hidden: true
436   SwiftHashSuffix:
437     default: unset
438     description: A random string to be used as a salt when hashing to determine mappings
439       in the ring.
440     hidden: true
441     type: string
442   SwiftMountCheck:
443     default: 'false'
444     description: Value of mount_check in Swift account/container/object -server.conf
445     type: boolean
446   SwiftMinPartHours:
447     type: number
448     default: 1
449     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
450   SwiftPartPower:
451     default: 10
452     description: Partition Power to use when building Swift rings
453     type: number
454   SwiftPassword:
455     default: unset
456     description: The password for the swift service account, used by the swift proxy
457       services.
458     hidden: true
459     type: string
460   SwiftReplicas:
461     type: number
462     default: 3
463     description: How many replicas to use in the swift rings.
464   VirtualIP:
465     type: string
466     default: ''  # Has to be here because of the ignored empty value bug
467   HeatApiVirtualIP:
468     type: string
469     default: ''
470   GlanceApiVirtualIP:
471     type: string
472     default: ''
473   MysqlVirtualIP:
474     type: string
475     default: ''
476   KeystonePublicApiVirtualIP:
477     type: string
478     default: ''
479   NeutronApiVirtualIP:
480     type: string
481     default: ''
482   ServiceNetMap:
483     default: {}
484     description: Mapping of service_name -> network name. Typically set
485                  via parameter_defaults in the resource registry.
486     type: json
487   UpdateIdentifier:
488     default: ''
489     type: string
490     description: >
491       Setting to a previously unused value during stack-update will trigger
492       package update on all nodes
493   Hostname:
494     type: string
495     default: '' # Defaults to Heat created hostname
496
497 resources:
498
499   Controller:
500     type: OS::Nova::Server
501     properties:
502       image: {get_param: Image}
503       image_update_policy: {get_param: ImageUpdatePolicy}
504       flavor: {get_param: Flavor}
505       key_name: {get_param: KeyName}
506       networks:
507         - network: ctlplane
508       user_data_format: SOFTWARE_CONFIG
509       user_data: {get_resource: NodeUserData}
510       name: {get_param: Hostname}
511
512   NodeUserData:
513     type: OS::TripleO::NodeUserData
514
515   ExternalPort:
516     type: OS::TripleO::Controller::Ports::ExternalPort
517     properties:
518       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
519
520   InternalApiPort:
521     type: OS::TripleO::Controller::Ports::InternalApiPort
522     properties:
523       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
524
525   StoragePort:
526     type: OS::TripleO::Controller::Ports::StoragePort
527     properties:
528       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
529
530   StorageMgmtPort:
531     type: OS::TripleO::Controller::Ports::StorageMgmtPort
532     properties:
533       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
534
535   TenantPort:
536     type: OS::TripleO::Controller::Ports::TenantPort
537     properties:
538       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
539
540   NetworkConfig:
541     type: OS::TripleO::Controller::Net::SoftwareConfig
542     properties:
543       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
544       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
545       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
546       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
547       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
548
549   NetworkDeployment:
550     type: OS::TripleO::SoftwareDeployment
551     properties:
552       signal_transport: NO_SIGNAL
553       config: {get_resource: NetworkConfig}
554       server: {get_resource: Controller}
555       input_values:
556         bridge_name: br-ex
557         interface_name: {get_param: NeutronPublicInterface}
558
559   ControllerPassthroughConfig:
560     type: OS::Heat::StructuredConfig
561     properties:
562       group: os-apply-config
563       config: {get_input: passthrough_config}
564
565   ControllerPassthroughConfigSpecific:
566     type: OS::Heat::StructuredConfig
567     properties:
568       group: os-apply-config
569       config: {get_input: passthrough_config_specific}
570
571   ControllerConfig:
572     type: OS::Heat::StructuredConfig
573     properties:
574       group: os-apply-config
575       config:
576         admin-password: {get_input: admin_password}
577         admin-token: {get_input: admin_token}
578         bootstack:
579           public_interface_ip: {get_input: neutron_public_interface_ip}
580         bootstrap_host:
581           nodeid: {get_input: bootstack_nodeid}
582         cinder:
583           db: {get_input: cinder_dsn}
584           debug: {get_input: debug}
585           volume_size_mb: {get_input: cinder_lvm_loop_device_size}
586           service-password: {get_input: cinder_password}
587           iscsi-helper: {get_input: CinderISCSIHelper}
588         controller-address: {get_input: controller_host}
589         corosync:
590           bindnetaddr: {get_input: controller_host}
591           mcastport: 5577
592         pacemaker:
593           stonith_enabled : false
594           recheck_interval : 5
595           quorum_policy : ignore
596         db-password: unset
597         glance:
598           registry:
599             host: {get_input: controller_virtual_ip}
600           backend: swift
601           db: {get_input: glance_dsn}
602           debug: {get_input: debug}
603           host: {get_input: controller_virtual_ip}
604           port: {get_input: glance_port}
605           protocol: {get_input: glance_protocol}
606           service-password: {get_input: glance_password}
607           swift-store-user: service:glance
608           swift-store-key: {get_input: glance_password}
609           notifier-strategy: {get_input: glance_notifier_strategy}
610           log-file: {get_input: glance_log_file}
611         heat:
612           admin_password: {get_input: heat_password}
613           admin_tenant_name: service
614           admin_user: heat
615           auth_encryption_key: {get_input: heat_auth_encryption_key}
616           db: {get_input: heat_dsn}
617           debug: {get_input: debug}
618           stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
619           watch_server_url: {get_input: heat.watch_server_url}
620           metadata_server_url: {get_input: heat.metadata_server_url}
621           waitcondition_server_url: {get_input: heat.waitcondition_server_url}
622         keystone:
623           db: {get_input: keystone_dsn}
624           debug: {get_input: debug}
625           host: {get_input: controller_virtual_ip}
626           ca_certificate: {get_input: keystone_ca_certificate}
627           signing_key: {get_input: keystone_signing_key}
628           signing_certificate: {get_input: keystone_signing_certificate}
629           ssl:
630               certificate: {get_input: keystone_ssl_certificate}
631               certificate_key: {get_input: keystone_ssl_certificate_key}
632         mysql:
633           innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
634           local_bind: true
635           root-password: {get_input: mysql_root_password}
636           cluster_name: {get_input: mysql_cluster_name}
637         neutron:
638           debug: {get_input: debug}
639           flat-networks: {get_input: neutron_flat_networks}
640           host: {get_input: controller_virtual_ip}
641           metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
642           agent_mode: {get_input: neutron_agent_mode}
643           router_distributed: {get_input: neutron_router_distributed}
644           mechanism_drivers: {get_input: neutron_mechanism_drivers}
645           allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
646           l3_ha: {get_input: neutron_l3_ha}
647           dhcp_agents_per_network: {get_input: neutron_dhcp_agents_per_network}
648           ovs:
649             enable_tunneling: {get_input: neutron_enable_tunneling}
650             local_ip: {get_input: controller_host}
651             network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
652             bridge_mappings: {get_input: neutron_bridge_mappings}
653             public_interface: {get_input: neutron_public_interface}
654             public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
655             public_interface_route: {get_input: neutron_public_interface_default_route}
656             public_interface_tag: {get_input: neutron_public_interface_tag}
657             physical_bridge: br-ex
658             tenant_network_type: {get_input: neutron_tenant_network_type}
659             tunnel_types: {get_input: neutron_tunnel_types}
660           ovs_db: {get_input: neutron_dsn}
661           service-password: {get_input: neutron_password}
662           dnsmasq-options: {get_input: neutron_dnsmasq_options}
663         ceilometer:
664           db: {get_input: ceilometer_dsn}
665           debug: {get_input: debug}
666           metering_secret: {get_input: ceilometer_metering_secret}
667           service-password: {get_input: ceilometer_password}
668         snmpd:
669           export_MIB: UCD-SNMP-MIB
670           readonly_user_name: {get_input: snmpd_readonly_user_name}
671           readonly_user_password: {get_input: snmpd_readonly_user_password}
672         nova:
673           compute_driver: libvirt.LibvirtDriver
674           db: {get_input: nova_dsn}
675           default_floating_pool:
676             ext-net
677           host: {get_input: controller_virtual_ip}
678           metadata-proxy: true
679           service-password: {get_input: nova_password}
680         mongodb:
681           nojournal: {get_input: mongodb_no_journal}
682         rabbit:
683           host: {get_input: controller_virtual_ip}
684           username: {get_input: rabbit_username}
685           password: {get_input: rabbit_password}
686           cookie: {get_input: rabbit_cookie}
687           rabbit_client_use_ssl: {get_input: rabbit_client_use_ssl}
688           rabbit_port: {get_input: rabbit_client_port}
689         ntp:
690           servers:
691               - {server: {get_input: ntp_server}}
692         virtual_interfaces:
693           instances:
694             - vrrp_instance_name: VI_CONTROL
695               virtual_router_id: 51
696               keepalive_interface: {get_input: control_virtual_interface}
697               priority: 101
698               virtual_ips:
699               - ip: {get_input: controller_virtual_ip}
700                 interface: {get_input: control_virtual_interface}
701             - vrrp_instance_name: VI_PUBLIC
702               virtual_router_id: 52
703               keepalive_interface: {get_input: public_virtual_interface}
704               priority: 101
705               virtual_ips:
706               - ip: {get_input: public_virtual_ip}
707                 interface: {get_input: public_virtual_interface}
708           vrrp_sync_groups:
709             - name: VG1
710               members:
711                 - VI_CONTROL
712                 - VI_PUBLIC
713         keepalived:
714           keepalive_interface: {get_input: public_virtual_interface}
715           priority: 101
716         virtual_ips:
717             -
718               ip: {get_input: controller_virtual_ip}
719               interface: {get_input: control_virtual_interface}
720             -
721               ip: {get_input: public_virtual_ip}
722               interface: {get_input: public_virtual_interface}
723         haproxy:
724           net_binds:
725             - ip: {get_input: controller_virtual_ip}
726           options:
727             - option httpchk GET /
728           services:
729             - name: keystone_admin
730               port: 35357
731               net_binds: &public_binds
732                 - ip: {get_input: controller_virtual_ip}
733                 - ip: {get_input: public_virtual_ip}
734             - name: keystone_public
735               port: 5000
736               net_binds: *public_binds
737             - name: horizon
738               port: 80
739               net_binds: *public_binds
740             - name: neutron
741               port: 9696
742               net_binds: *public_binds
743             - name: cinder
744               port: 8776
745               net_binds: *public_binds
746             - name: glance_api
747               port: 9292
748               net_binds: *public_binds
749             - name: glance_registry
750               port: 9191
751               net_binds: *public_binds
752               options: # overwrite options as glace_reg needs auth for http req
753             - name: heat_api
754               port: 8004
755               net_binds: *public_binds
756             - name: heat_cloudwatch
757               port: 8003
758               net_binds: *public_binds
759             - name: heat_cfn
760               port: 8000
761               net_binds: *public_binds
762             - name: mysql
763               port: 3306
764               extra_server_params:
765                 - backup
766               options:
767                 - timeout client 0
768                 - timeout server 0
769             - name: nova_ec2
770               port: 8773
771             - name: nova_osapi
772               port: 8774
773               net_binds: *public_binds
774             - name: nova_metadata
775               port: 8775
776               net_binds: *public_binds
777             - name: nova_novncproxy
778               port: 6080
779               net_binds: *public_binds
780             - name: ceilometer
781               port: 8777
782               net_binds: *public_binds
783               options: # overwrite options as ceil needs auth for http req
784             - name: swift_proxy_server
785               port: 8080
786               net_binds: *public_binds
787               options:
788                 - option httpchk GET /info
789             - name: rabbitmq
790               port: 5672
791               options:
792                 - timeout client 0
793                 - timeout server 0
794                 - maxconn 1500
795
796   ControllerDeployment:
797     type: OS::TripleO::SoftwareDeployment
798     properties:
799       signal_transport: NO_SIGNAL
800       config: {get_resource: ControllerConfig}
801       server: {get_resource: Controller}
802       input_values:
803         bootstack_nodeid: {get_attr: [Controller, name]}
804         controller_host: {get_attr: [Controller, networks, ctlplane, 0]}
805         controller_virtual_ip: {get_param: VirtualIP}
806         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
807         heat.watch_server_url:
808           list_join:
809             - ''
810             - - 'http://'
811               - {get_param: VirtualIP}
812               - ':8003'
813         heat.metadata_server_url:
814           list_join:
815             - ''
816             - - 'http://'
817               - {get_param: VirtualIP}
818               - ':8000'
819         heat.waitcondition_server_url:
820           list_join:
821             - ''
822             - - 'http://'
823               - {get_param: VirtualIP}
824               - ':8000/v1/waitcondition'
825         admin_password: {get_param: AdminPassword}
826         admin_token: {get_param: AdminToken}
827         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
828         debug: {get_param: Debug}
829         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
830         cinder_password: {get_param: CinderPassword}
831         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
832         cinder_dsn:
833           list_join:
834             - ''
835             - - 'mysql://cinder:'
836               - {get_param: CinderPassword}
837               - '@'
838               - {get_param: VirtualIP}
839               - '/cinder'
840         glance_port: {get_param: GlancePort}
841         glance_protocol: {get_param: GlanceProtocol}
842         glance_password: {get_param: GlancePassword}
843         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
844         glance_log_file: {get_param: GlanceLogFile}
845         glance_dsn:
846           list_join:
847             - ''
848             - - 'mysql://glance:'
849               - {get_param: GlancePassword}
850               - '@'
851               - {get_param: VirtualIP}
852               - '/glance'
853         heat_password: {get_param: HeatPassword}
854         heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
855         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
856         heat_dsn:
857           list_join:
858             - ''
859             - - 'mysql://heat:'
860               - {get_param: HeatPassword}
861               - '@'
862               - {get_param: VirtualIP}
863               - '/heat'
864         keystone_ca_certificate: {get_param: KeystoneCACertificate}
865         keystone_signing_key: {get_param: KeystoneSigningKey}
866         keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
867         keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
868         keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
869         keystone_dsn:
870           list_join:
871             - ''
872             - - 'mysql://keystone:'
873               - {get_param: AdminToken}
874               - '@'
875               - {get_param: VirtualIP}
876               - '/keystone'
877         mongodb_no_journal: {get_param: MongoDbNoJournal}
878         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
879         mysql_root_password: {get_param: MysqlRootPassword}
880         mysql_cluster_name:
881           str_replace:
882             template: tripleo-CLUSTER
883             params:
884               CLUSTER: {get_param: MysqlClusterUniquePart}
885         neutron_flat_networks: {get_param: NeutronFlatNetworks}
886         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
887         neutron_agent_mode: {get_param: NeutronAgentMode}
888         neutron_router_distributed: {get_param: NeutronDVR}
889         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
890         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
891         neutron_l3_ha: {get_param: NeutronL3HA}
892         neutron_dhcp_agents_per_network: {get_param: NeutronDhcpAgentsPerNetwork}
893         neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
894         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
895         neutron_public_interface: {get_param: NeutronPublicInterface}
896         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
897         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
898         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
899         neutron_tenant_network_type: {get_param: NeutronNetworkType}
900         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
901         neutron_password: {get_param: NeutronPassword}
902         neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
903         neutron_dsn:
904           list_join:
905             - ''
906             - - 'mysql://neutron:'
907               - {get_param: NeutronPassword}
908               - '@'
909               - {get_param: VirtualIP}
910               - '/ovs_neutron?charset=utf8'
911         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
912         ceilometer_password: {get_param: CeilometerPassword}
913         ceilometer_dsn:
914           list_join:
915             - ''
916             - - 'mysql://ceilometer:'
917               - {get_param: CeilometerPassword}
918               - '@'
919               - {get_param: VirtualIP}
920               - '/ceilometer'
921         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
922         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
923         nova_password: {get_param: NovaPassword}
924         nova_dsn:
925           list_join:
926             - ''
927             - - 'mysql://nova:'
928               - {get_param: NovaPassword}
929               - '@'
930               - {get_param: VirtualIP}
931               - '/nova'
932         rabbit_username: {get_param: RabbitUserName}
933         rabbit_password: {get_param: RabbitPassword}
934         rabbit_cookie: {get_param: RabbitCookie}
935         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
936         rabbit_client_port: {get_param: RabbitClientPort}
937         ntp_server: {get_param: NtpServer}
938         control_virtual_interface: {get_param: ControlVirtualInterface}
939         public_virtual_interface: {get_param: PublicVirtualInterface}
940         public_virtual_ip: {get_param: PublicVirtualIP}
941
942   SSLConfig:
943     type: OS::Heat::StructuredConfig
944     properties:
945       group: os-apply-config
946       config:
947         ssl:
948           ca_certificate: {get_input: ssl_ca_certificate}
949         stunnel:
950           cert: {get_input: ssl_certificate}
951           key: {get_input: ssl_key}
952           cacert: {get_input: ssl_ca_certificate}
953           ports:
954            - name: 'ec2'
955              accept: 13773
956              connect: 8773
957              connect_host: {get_input: controller_host}
958            - name: 'image'
959              accept: 13292
960              connect: 9292
961              connect_host: {get_input: controller_host}
962            - name: 'identity'
963              accept: 13000
964              connect: 5000
965              connect_host: {get_input: controller_host}
966            - name: 'network'
967              accept: 13696
968              connect: 9696
969              connect_host: {get_input: controller_host}
970            - name: 'compute'
971              accept: 13774
972              connect: 8774
973              connect_host: {get_input: controller_host}
974            - name: 'swift-proxy'
975              accept: 13080
976              connect: 8080
977              connect_host: {get_input: controller_host}
978            - name: 'cinder'
979              accept: 13776
980              connect: 8776
981              connect_host: {get_input: controller_host}
982            - name: 'ceilometer'
983              accept: 13777
984              connect: 8777
985              connect_host: {get_input: controller_host}
986
987   ControllerSSLDeployment:
988     type: OS::Heat::StructuredDeployment
989     properties:
990       config: {get_resource: SSLConfig}
991       server: {get_resource: Controller}
992       signal_transport: NO_SIGNAL
993       input_values:
994         controller_host: {get_attr: [Controller, networks, ctlplane, 0]}
995         ssl_certificate: {get_param: SSLCertificate}
996         ssl_key: {get_param: SSLKey}
997         ssl_ca_certificate: {get_param: SSLCACertificate}
998
999   ControllerPassthroughDeployment:
1000     type: OS::Heat::StructuredDeployment
1001     properties:
1002       config: {get_resource: ControllerPassthroughConfig}
1003       server: {get_resource: Controller}
1004       signal_transport: NO_SIGNAL
1005       input_values:
1006         passthrough_config: {get_param: ExtraConfig}
1007
1008   ControllerPassthroughSpecificDeployment:
1009     depends_on: [ControllerPassthroughDeployment]
1010     type: OS::Heat::StructuredDeployment
1011     properties:
1012       config: {get_resource: ControllerPassthroughConfigSpecific}
1013       server: {get_resource: Controller}
1014       signal_transport: NO_SIGNAL
1015       input_values:
1016         passthrough_config_specific: {get_param: ControllerExtraConfig}
1017
1018   SwiftConfig:
1019     type: OS::Heat::StructuredConfig
1020     properties:
1021       group: os-apply-config
1022       config:
1023         swift:
1024           hash: { get_input: swift_hash_suffix }
1025           part-power: { get_input: swift_part_power }
1026           mount-check: { get_input: swift_mount_check }
1027           min-part-hours: { get_input: swift_min_part_hours }
1028           replicas: {get_input: swift_replicas }
1029           service-password: { get_input: swift_password }
1030
1031   SwiftStorageDeploy:
1032     type: OS::Heat::StructuredDeployment
1033     properties:
1034       server: {get_resource: Controller}
1035       config: {get_resource: SwiftConfig}
1036       signal_transport: NO_SIGNAL
1037       input_values:
1038         swift_hash_suffix: {get_param: SwiftHashSuffix}
1039         swift_mount_check: {get_param: SwiftMountCheck}
1040         swift_password: {get_param: SwiftPassword}
1041         swift_min_part_hours: {get_param: SwiftMinPartHours}
1042         swift_part_power: {get_param: SwiftPartPower}
1043         swift_replicas: { get_param: SwiftReplicas}
1044
1045 outputs:
1046   ip_address:
1047     description: IP address of the server in the ctlplane network
1048     value: {get_attr: [Controller, networks, ctlplane, 0]}
1049   external_ip_address:
1050     description: IP address of the server in the external network
1051     value: {get_attr: [ExternalPort, ip_address]}
1052   internal_api_ip_address:
1053     description: IP address of the server in the internal_api network
1054     value: {get_attr: [InternalApiPort, ip_address]}
1055   storage_ip_address:
1056     description: IP address of the server in the storage network
1057     value: {get_attr: [StoragePort, ip_address]}
1058   storage_mgmt_ip_address:
1059     description: IP address of the server in the storage_mgmt network
1060     value: {get_attr: [StorageMgmtPort, ip_address]}
1061   tenant_ip_address:
1062     description: IP address of the server in the tenant network
1063     value: {get_attr: [TenantPort, ip_address]}
1064   hostname:
1065     description: Hostname of the server
1066     value: {get_attr: [Controller, name]}
1067   corosync_node:
1068     description: >
1069       Node object in the format {ip: ..., name: ...} format that the corosync
1070       element expects
1071     value:
1072       ip: {get_attr: [Controller, networks, ctlplane, 0]}
1073       name: {get_attr: [Controller, name]}
1074   hosts_entry:
1075     description: >
1076       Server's IP address and hostname in the /etc/hosts format
1077     value:
1078       str_replace:
1079         template: IP HOST CLOUDNAME
1080         params:
1081           IP: {get_attr: [Controller, networks, ctlplane, 0]}
1082           HOST: {get_attr: [Controller, name]}
1083           CLOUDNAME: {get_param: CloudName}
1084   nova_server_resource:
1085     description: Heat resource handle for the Nova compute server
1086     value:
1087       {get_resource: Controller}
1088   swift_device:
1089     description: Swift device formatted for swift-ring-builder
1090     value:
1091       str_replace:
1092         template: 'r1z1-IP:%PORT%/d1'
1093         params:
1094           IP: {get_attr: [Controller, networks, ctlplane, 0]}
1095   swift_proxy_memcache:
1096     description: Swift proxy-memcache value
1097     value:
1098       str_replace:
1099         template: "IP:11211"
1100         params:
1101           IP: {get_attr: [Controller, networks, ctlplane, 0]}
1102   config_identifier:
1103     description: identifier which changes if the node configuration may need re-applying
1104     value: "None - NO_SIGNAL"