Merge "Removes the NeutronScale resource from controller pcmk manifest"
[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   MysqlMaxConnections:
257     description: Configures MySQL max_connections config setting
258     type: number
259     default: 1024
260   MysqlRootPassword:
261     type: string
262     hidden: true
263     default: ''  # Has to be here because of the ignored empty value bug
264   NeutronExternalNetworkBridge:
265     description: Name of bridge used for external network traffic.
266     type: string
267     default: 'br-ex'
268   NeutronBridgeMappings:
269     description: >
270       The OVS logical->physical bridge mappings to use. See the Neutron
271       documentation for details. Defaults to mapping br-ex - the external
272       bridge on hosts - to a physical name 'datacentre' which can be used
273       to create provider networks (and we use this for the default floating
274       network) - if changing this either use different post-install network
275       scripts or be sure to keep 'datacentre' as a mapping network name.
276     type: string
277     default: "datacentre:br-ex"
278   NeutronDnsmasqOptions:
279     default: 'dhcp-option-force=26,1400'
280     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.
281     type: string
282   NeutronAgentMode:
283     default: 'dvr_snat'
284     description: Agent mode for the neutron-l3-agent on the controller hosts
285     type: string
286   NeutronDVR:
287     default: 'False'
288     description: Whether to configure Neutron Distributed Virtual Routers
289     type: string
290   NeutronMetadataProxySharedSecret:
291     default: 'unset'
292     description: Shared secret to prevent spoofing
293     type: string
294   NeutronMechanismDrivers:
295     default: 'openvswitch'
296     description: |
297         The mechanism drivers for the Neutron tenant network. To specify multiple
298         values, use a comma separated string, like so: 'openvswitch,l2_population'
299     type: string
300   NeutronAllowL3AgentFailover:
301     default: 'True'
302     description: Allow automatic l3-agent failover
303     type: string
304   NeutronL3HA:
305     default: 'False'
306     description: Whether to enable l3-agent HA
307     type: string
308   NeutronDhcpAgentsPerNetwork:
309     type: number
310     default: 3
311     description: The number of neutron dhcp agents to schedule per network
312   NeutronEnableTunnelling:
313     type: string
314     default: "True"
315   NeutronFlatNetworks:
316     type: string
317     default: 'datacentre'
318     description: If set, flat networks to configure in neutron plugins.
319   NeutronNetworkType:
320     default: 'gre'
321     description: The tenant network type for Neutron, either gre or vxlan.
322     type: string
323   NeutronNetworkVLANRanges:
324     default: 'datacentre'
325     description: >
326       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
327       Neutron documentation for permitted values. Defaults to permitting any
328       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
329     type: comma_delimited_list
330   NeutronPassword:
331     default: unset
332     description: The password for the neutron service and db account, used by neutron agents.
333     type: string
334     hidden: true
335   NeutronPublicInterface:
336     default: nic1
337     description: What interface to bridge onto br-ex for network nodes.
338     type: string
339   NeutronPublicInterfaceTag:
340     default: ''
341     description: >
342       VLAN tag for creating a public VLAN. The tag will be used to
343       create an access port on the exterior bridge for each control plane node,
344       and that port will be given the IP address returned by neutron from the
345       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
346       overcloud.yaml to include the deployment of VLAN ports to the control
347       plane.
348     type: string
349   NeutronPublicInterfaceDefaultRoute:
350     default: ''
351     description: A custom default route for the NeutronPublicInterface.
352     type: string
353   NeutronPublicInterfaceIP:
354     default: ''
355     description: A custom IP address to put onto the NeutronPublicInterface.
356     type: string
357   NeutronPublicInterfaceRawDevice:
358     default: ''
359     description: If set, the public interface is a vlan with this device as the raw device.
360     type: string
361   NeutronTunnelTypes:
362     default: 'gre'
363     description: |
364         The tunnel types for the Neutron tenant network. To specify multiple
365         values, use a comma separated string, like so: 'gre,vxlan'
366     type: string
367   NovaPassword:
368     default: unset
369     description: The password for the nova service and db account, used by nova-api.
370     type: string
371     hidden: true
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         rabbit:
681           host: {get_input: controller_virtual_ip}
682           username: {get_input: rabbit_username}
683           password: {get_input: rabbit_password}
684           cookie: {get_input: rabbit_cookie}
685           rabbit_client_use_ssl: {get_input: rabbit_client_use_ssl}
686           rabbit_port: {get_input: rabbit_client_port}
687         ntp:
688           servers:
689               - {server: {get_input: ntp_server}}
690         virtual_interfaces:
691           instances:
692             - vrrp_instance_name: VI_CONTROL
693               virtual_router_id: 51
694               keepalive_interface: {get_input: control_virtual_interface}
695               priority: 101
696               virtual_ips:
697               - ip: {get_input: controller_virtual_ip}
698                 interface: {get_input: control_virtual_interface}
699             - vrrp_instance_name: VI_PUBLIC
700               virtual_router_id: 52
701               keepalive_interface: {get_input: public_virtual_interface}
702               priority: 101
703               virtual_ips:
704               - ip: {get_input: public_virtual_ip}
705                 interface: {get_input: public_virtual_interface}
706           vrrp_sync_groups:
707             - name: VG1
708               members:
709                 - VI_CONTROL
710                 - VI_PUBLIC
711         keepalived:
712           keepalive_interface: {get_input: public_virtual_interface}
713           priority: 101
714         virtual_ips:
715             -
716               ip: {get_input: controller_virtual_ip}
717               interface: {get_input: control_virtual_interface}
718             -
719               ip: {get_input: public_virtual_ip}
720               interface: {get_input: public_virtual_interface}
721         haproxy:
722           net_binds:
723             - ip: {get_input: controller_virtual_ip}
724           options:
725             - option httpchk GET /
726           services:
727             - name: keystone_admin
728               port: 35357
729               net_binds: &public_binds
730                 - ip: {get_input: controller_virtual_ip}
731                 - ip: {get_input: public_virtual_ip}
732             - name: keystone_public
733               port: 5000
734               net_binds: *public_binds
735             - name: horizon
736               port: 80
737               net_binds: *public_binds
738             - name: neutron
739               port: 9696
740               net_binds: *public_binds
741             - name: cinder
742               port: 8776
743               net_binds: *public_binds
744             - name: glance_api
745               port: 9292
746               net_binds: *public_binds
747             - name: glance_registry
748               port: 9191
749               net_binds: *public_binds
750               options: # overwrite options as glace_reg needs auth for http req
751             - name: heat_api
752               port: 8004
753               net_binds: *public_binds
754             - name: heat_cloudwatch
755               port: 8003
756               net_binds: *public_binds
757             - name: heat_cfn
758               port: 8000
759               net_binds: *public_binds
760             - name: mysql
761               port: 3306
762               extra_server_params:
763                 - backup
764               options:
765                 - timeout client 0
766                 - timeout server 0
767             - name: nova_ec2
768               port: 8773
769             - name: nova_osapi
770               port: 8774
771               net_binds: *public_binds
772             - name: nova_metadata
773               port: 8775
774               net_binds: *public_binds
775             - name: nova_novncproxy
776               port: 6080
777               net_binds: *public_binds
778             - name: ceilometer
779               port: 8777
780               net_binds: *public_binds
781               options: # overwrite options as ceil needs auth for http req
782             - name: swift_proxy_server
783               port: 8080
784               net_binds: *public_binds
785               options:
786                 - option httpchk GET /info
787             - name: rabbitmq
788               port: 5672
789               options:
790                 - timeout client 0
791                 - timeout server 0
792                 - maxconn 1500
793
794   ControllerDeployment:
795     type: OS::TripleO::SoftwareDeployment
796     properties:
797       signal_transport: NO_SIGNAL
798       config: {get_resource: ControllerConfig}
799       server: {get_resource: Controller}
800       input_values:
801         bootstack_nodeid: {get_attr: [Controller, name]}
802         controller_host: {get_attr: [Controller, networks, ctlplane, 0]}
803         controller_virtual_ip: {get_param: VirtualIP}
804         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
805         heat.watch_server_url:
806           list_join:
807             - ''
808             - - 'http://'
809               - {get_param: VirtualIP}
810               - ':8003'
811         heat.metadata_server_url:
812           list_join:
813             - ''
814             - - 'http://'
815               - {get_param: VirtualIP}
816               - ':8000'
817         heat.waitcondition_server_url:
818           list_join:
819             - ''
820             - - 'http://'
821               - {get_param: VirtualIP}
822               - ':8000/v1/waitcondition'
823         admin_password: {get_param: AdminPassword}
824         admin_token: {get_param: AdminToken}
825         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
826         debug: {get_param: Debug}
827         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
828         cinder_password: {get_param: CinderPassword}
829         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
830         cinder_dsn:
831           list_join:
832             - ''
833             - - 'mysql://cinder:'
834               - {get_param: CinderPassword}
835               - '@'
836               - {get_param: VirtualIP}
837               - '/cinder'
838         glance_port: {get_param: GlancePort}
839         glance_protocol: {get_param: GlanceProtocol}
840         glance_password: {get_param: GlancePassword}
841         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
842         glance_log_file: {get_param: GlanceLogFile}
843         glance_dsn:
844           list_join:
845             - ''
846             - - 'mysql://glance:'
847               - {get_param: GlancePassword}
848               - '@'
849               - {get_param: VirtualIP}
850               - '/glance'
851         heat_password: {get_param: HeatPassword}
852         heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
853         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
854         heat_dsn:
855           list_join:
856             - ''
857             - - 'mysql://heat:'
858               - {get_param: HeatPassword}
859               - '@'
860               - {get_param: VirtualIP}
861               - '/heat'
862         keystone_ca_certificate: {get_param: KeystoneCACertificate}
863         keystone_signing_key: {get_param: KeystoneSigningKey}
864         keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
865         keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
866         keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
867         keystone_dsn:
868           list_join:
869             - ''
870             - - 'mysql://keystone:'
871               - {get_param: AdminToken}
872               - '@'
873               - {get_param: VirtualIP}
874               - '/keystone'
875         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
876         mysql_root_password: {get_param: MysqlRootPassword}
877         mysql_cluster_name:
878           str_replace:
879             template: tripleo-CLUSTER
880             params:
881               CLUSTER: {get_param: MysqlClusterUniquePart}
882         neutron_flat_networks: {get_param: NeutronFlatNetworks}
883         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
884         neutron_agent_mode: {get_param: NeutronAgentMode}
885         neutron_router_distributed: {get_param: NeutronDVR}
886         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
887         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
888         neutron_l3_ha: {get_param: NeutronL3HA}
889         neutron_dhcp_agents_per_network: {get_param: NeutronDhcpAgentsPerNetwork}
890         neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
891         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
892         neutron_public_interface: {get_param: NeutronPublicInterface}
893         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
894         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
895         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
896         neutron_tenant_network_type: {get_param: NeutronNetworkType}
897         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
898         neutron_password: {get_param: NeutronPassword}
899         neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
900         neutron_dsn:
901           list_join:
902             - ''
903             - - 'mysql://neutron:'
904               - {get_param: NeutronPassword}
905               - '@'
906               - {get_param: VirtualIP}
907               - '/ovs_neutron?charset=utf8'
908         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
909         ceilometer_password: {get_param: CeilometerPassword}
910         ceilometer_dsn:
911           list_join:
912             - ''
913             - - 'mysql://ceilometer:'
914               - {get_param: CeilometerPassword}
915               - '@'
916               - {get_param: VirtualIP}
917               - '/ceilometer'
918         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
919         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
920         nova_password: {get_param: NovaPassword}
921         nova_dsn:
922           list_join:
923             - ''
924             - - 'mysql://nova:'
925               - {get_param: NovaPassword}
926               - '@'
927               - {get_param: VirtualIP}
928               - '/nova'
929         rabbit_username: {get_param: RabbitUserName}
930         rabbit_password: {get_param: RabbitPassword}
931         rabbit_cookie: {get_param: RabbitCookie}
932         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
933         rabbit_client_port: {get_param: RabbitClientPort}
934         ntp_server: {get_param: NtpServer}
935         control_virtual_interface: {get_param: ControlVirtualInterface}
936         public_virtual_interface: {get_param: PublicVirtualInterface}
937         public_virtual_ip: {get_param: PublicVirtualIP}
938
939   SSLConfig:
940     type: OS::Heat::StructuredConfig
941     properties:
942       group: os-apply-config
943       config:
944         ssl:
945           ca_certificate: {get_input: ssl_ca_certificate}
946         stunnel:
947           cert: {get_input: ssl_certificate}
948           key: {get_input: ssl_key}
949           cacert: {get_input: ssl_ca_certificate}
950           ports:
951            - name: 'ec2'
952              accept: 13773
953              connect: 8773
954              connect_host: {get_input: controller_host}
955            - name: 'image'
956              accept: 13292
957              connect: 9292
958              connect_host: {get_input: controller_host}
959            - name: 'identity'
960              accept: 13000
961              connect: 5000
962              connect_host: {get_input: controller_host}
963            - name: 'network'
964              accept: 13696
965              connect: 9696
966              connect_host: {get_input: controller_host}
967            - name: 'compute'
968              accept: 13774
969              connect: 8774
970              connect_host: {get_input: controller_host}
971            - name: 'swift-proxy'
972              accept: 13080
973              connect: 8080
974              connect_host: {get_input: controller_host}
975            - name: 'cinder'
976              accept: 13776
977              connect: 8776
978              connect_host: {get_input: controller_host}
979            - name: 'ceilometer'
980              accept: 13777
981              connect: 8777
982              connect_host: {get_input: controller_host}
983
984   ControllerSSLDeployment:
985     type: OS::Heat::StructuredDeployment
986     properties:
987       config: {get_resource: SSLConfig}
988       server: {get_resource: Controller}
989       signal_transport: NO_SIGNAL
990       input_values:
991         controller_host: {get_attr: [Controller, networks, ctlplane, 0]}
992         ssl_certificate: {get_param: SSLCertificate}
993         ssl_key: {get_param: SSLKey}
994         ssl_ca_certificate: {get_param: SSLCACertificate}
995
996   ControllerPassthroughDeployment:
997     type: OS::Heat::StructuredDeployment
998     properties:
999       config: {get_resource: ControllerPassthroughConfig}
1000       server: {get_resource: Controller}
1001       signal_transport: NO_SIGNAL
1002       input_values:
1003         passthrough_config: {get_param: ExtraConfig}
1004
1005   ControllerPassthroughSpecificDeployment:
1006     depends_on: [ControllerPassthroughDeployment]
1007     type: OS::Heat::StructuredDeployment
1008     properties:
1009       config: {get_resource: ControllerPassthroughConfigSpecific}
1010       server: {get_resource: Controller}
1011       signal_transport: NO_SIGNAL
1012       input_values:
1013         passthrough_config_specific: {get_param: ControllerExtraConfig}
1014
1015   SwiftConfig:
1016     type: OS::Heat::StructuredConfig
1017     properties:
1018       group: os-apply-config
1019       config:
1020         swift:
1021           hash: { get_input: swift_hash_suffix }
1022           part-power: { get_input: swift_part_power }
1023           mount-check: { get_input: swift_mount_check }
1024           min-part-hours: { get_input: swift_min_part_hours }
1025           replicas: {get_input: swift_replicas }
1026           service-password: { get_input: swift_password }
1027
1028   SwiftStorageDeploy:
1029     type: OS::Heat::StructuredDeployment
1030     properties:
1031       server: {get_resource: Controller}
1032       config: {get_resource: SwiftConfig}
1033       signal_transport: NO_SIGNAL
1034       input_values:
1035         swift_hash_suffix: {get_param: SwiftHashSuffix}
1036         swift_mount_check: {get_param: SwiftMountCheck}
1037         swift_password: {get_param: SwiftPassword}
1038         swift_min_part_hours: {get_param: SwiftMinPartHours}
1039         swift_part_power: {get_param: SwiftPartPower}
1040         swift_replicas: { get_param: SwiftReplicas}
1041
1042 outputs:
1043   ip_address:
1044     description: IP address of the server in the ctlplane network
1045     value: {get_attr: [Controller, networks, ctlplane, 0]}
1046   external_ip_address:
1047     description: IP address of the server in the external network
1048     value: {get_attr: [ExternalPort, ip_address]}
1049   internal_api_ip_address:
1050     description: IP address of the server in the internal_api network
1051     value: {get_attr: [InternalApiPort, ip_address]}
1052   storage_ip_address:
1053     description: IP address of the server in the storage network
1054     value: {get_attr: [StoragePort, ip_address]}
1055   storage_mgmt_ip_address:
1056     description: IP address of the server in the storage_mgmt network
1057     value: {get_attr: [StorageMgmtPort, ip_address]}
1058   tenant_ip_address:
1059     description: IP address of the server in the tenant network
1060     value: {get_attr: [TenantPort, ip_address]}
1061   hostname:
1062     description: Hostname of the server
1063     value: {get_attr: [Controller, name]}
1064   corosync_node:
1065     description: >
1066       Node object in the format {ip: ..., name: ...} format that the corosync
1067       element expects
1068     value:
1069       ip: {get_attr: [Controller, networks, ctlplane, 0]}
1070       name: {get_attr: [Controller, name]}
1071   hosts_entry:
1072     description: >
1073       Server's IP address and hostname in the /etc/hosts format
1074     value:
1075       str_replace:
1076         template: IP HOST CLOUDNAME
1077         params:
1078           IP: {get_attr: [Controller, networks, ctlplane, 0]}
1079           HOST: {get_attr: [Controller, name]}
1080           CLOUDNAME: {get_param: CloudName}
1081   nova_server_resource:
1082     description: Heat resource handle for the Nova compute server
1083     value:
1084       {get_resource: Controller}
1085   swift_device:
1086     description: Swift device formatted for swift-ring-builder
1087     value:
1088       str_replace:
1089         template: 'r1z1-IP:%PORT%/d1'
1090         params:
1091           IP: {get_attr: [Controller, networks, ctlplane, 0]}
1092   swift_proxy_memcache:
1093     description: Swift proxy-memcache value
1094     value:
1095       str_replace:
1096         template: "IP:11211"
1097         params:
1098           IP: {get_attr: [Controller, networks, ctlplane, 0]}
1099   config_identifier:
1100     description: identifier which changes if the node configuration may need re-applying
1101     value: "None - NO_SIGNAL"