Merge "Add services to ServiceNetMap to select hostnames resolution network"
[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   NtpServer:
369     type: string
370     default: ''
371   PcsdPassword:
372     type: string
373     description: The password for the 'pcsd' user.
374   PublicVirtualInterface:
375     default: 'br-ex'
376     description: >
377         Specifies the interface where the public-facing virtual ip will be assigned.
378         This should be int_public when a VLAN is being used.
379     type: string
380   PublicVirtualIP:
381     type: string
382     default: ''  # Has to be here because of the ignored empty value bug
383   RabbitCookie:
384     type: string
385     default: ''  # Has to be here because of the ignored empty value bug
386     hidden: true
387   RabbitPassword:
388     default: guest
389     description: The password for RabbitMQ
390     type: string
391     hidden: true
392   RabbitUserName:
393     default: guest
394     description: The username for RabbitMQ
395     type: string
396   RabbitClientUseSSL:
397     default: false
398     description: >
399         Rabbit client subscriber parameter to specify
400         an SSL connection to the RabbitMQ host.
401     type: string
402   RabbitClientPort:
403     default: 5672
404     description: Set rabbit subscriber port, change this if using SSL
405     type: number
406   RedisVirtualIP:
407     type: string
408     default: ''  # Has to be here because of the ignored empty value bug
409   SnmpdReadonlyUserName:
410     default: ro_snmp_user
411     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
412     type: string
413   SnmpdReadonlyUserPassword:
414     default: unset
415     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
416     type: string
417     hidden: true
418   SSLCACertificate:
419     default: ''
420     description: If set, the contents of an SSL certificate authority file.
421     type: string
422   SSLCertificate:
423     default: ''
424     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
425     type: string
426     hidden: true
427   SSLKey:
428     default: ''
429     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
430     type: string
431     hidden: true
432   SwiftHashSuffix:
433     default: unset
434     description: A random string to be used as a salt when hashing to determine mappings
435       in the ring.
436     hidden: true
437     type: string
438   SwiftMountCheck:
439     default: 'false'
440     description: Value of mount_check in Swift account/container/object -server.conf
441     type: boolean
442   SwiftMinPartHours:
443     type: number
444     default: 1
445     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
446   SwiftPartPower:
447     default: 10
448     description: Partition Power to use when building Swift rings
449     type: number
450   SwiftPassword:
451     default: unset
452     description: The password for the swift service account, used by the swift proxy
453       services.
454     hidden: true
455     type: string
456   SwiftReplicas:
457     type: number
458     default: 3
459     description: How many replicas to use in the swift rings.
460   VirtualIP:
461     type: string
462     default: ''  # Has to be here because of the ignored empty value bug
463   HeatApiVirtualIP:
464     type: string
465     default: ''
466   GlanceApiVirtualIP:
467     type: string
468     default: ''
469   MysqlVirtualIP:
470     type: string
471     default: ''
472   KeystonePublicApiVirtualIP:
473     type: string
474     default: ''
475   NeutronApiVirtualIP:
476     type: string
477     default: ''
478   ServiceNetMap:
479     default: {}
480     description: Mapping of service_name -> network name. Typically set
481                  via parameter_defaults in the resource registry.
482     type: json
483   UpdateIdentifier:
484     default: ''
485     type: string
486     description: >
487       Setting to a previously unused value during stack-update will trigger
488       package update on all nodes
489   Hostname:
490     type: string
491     default: '' # Defaults to Heat created hostname
492
493 resources:
494
495   Controller:
496     type: OS::Nova::Server
497     properties:
498       image: {get_param: Image}
499       image_update_policy: {get_param: ImageUpdatePolicy}
500       flavor: {get_param: Flavor}
501       key_name: {get_param: KeyName}
502       networks:
503         - network: ctlplane
504       user_data_format: SOFTWARE_CONFIG
505       user_data: {get_resource: NodeUserData}
506       name: {get_param: Hostname}
507
508   NodeUserData:
509     type: OS::TripleO::NodeUserData
510
511   ExternalPort:
512     type: OS::TripleO::Controller::Ports::ExternalPort
513     properties:
514       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
515
516   InternalApiPort:
517     type: OS::TripleO::Controller::Ports::InternalApiPort
518     properties:
519       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
520
521   StoragePort:
522     type: OS::TripleO::Controller::Ports::StoragePort
523     properties:
524       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
525
526   StorageMgmtPort:
527     type: OS::TripleO::Controller::Ports::StorageMgmtPort
528     properties:
529       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
530
531   TenantPort:
532     type: OS::TripleO::Controller::Ports::TenantPort
533     properties:
534       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
535
536   NetworkConfig:
537     type: OS::TripleO::Controller::Net::SoftwareConfig
538     properties:
539       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
540       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
541       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
542       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
543       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
544
545   NetworkDeployment:
546     type: OS::TripleO::SoftwareDeployment
547     properties:
548       signal_transport: NO_SIGNAL
549       config: {get_resource: NetworkConfig}
550       server: {get_resource: Controller}
551       input_values:
552         bridge_name: br-ex
553         interface_name: {get_param: NeutronPublicInterface}
554
555   ControllerPassthroughConfig:
556     type: OS::Heat::StructuredConfig
557     properties:
558       group: os-apply-config
559       config: {get_input: passthrough_config}
560
561   ControllerPassthroughConfigSpecific:
562     type: OS::Heat::StructuredConfig
563     properties:
564       group: os-apply-config
565       config: {get_input: passthrough_config_specific}
566
567   ControllerConfig:
568     type: OS::Heat::StructuredConfig
569     properties:
570       group: os-apply-config
571       config:
572         admin-password: {get_input: admin_password}
573         admin-token: {get_input: admin_token}
574         bootstack:
575           public_interface_ip: {get_input: neutron_public_interface_ip}
576         bootstrap_host:
577           nodeid: {get_input: bootstack_nodeid}
578         cinder:
579           db: {get_input: cinder_dsn}
580           debug: {get_input: debug}
581           volume_size_mb: {get_input: cinder_lvm_loop_device_size}
582           service-password: {get_input: cinder_password}
583           iscsi-helper: {get_input: CinderISCSIHelper}
584         controller-address: {get_input: controller_host}
585         corosync:
586           bindnetaddr: {get_input: controller_host}
587           mcastport: 5577
588         pacemaker:
589           stonith_enabled : false
590           recheck_interval : 5
591           quorum_policy : ignore
592         db-password: unset
593         glance:
594           registry:
595             host: {get_input: controller_virtual_ip}
596           backend: swift
597           db: {get_input: glance_dsn}
598           debug: {get_input: debug}
599           host: {get_input: controller_virtual_ip}
600           port: {get_input: glance_port}
601           protocol: {get_input: glance_protocol}
602           service-password: {get_input: glance_password}
603           swift-store-user: service:glance
604           swift-store-key: {get_input: glance_password}
605           notifier-strategy: {get_input: glance_notifier_strategy}
606           log-file: {get_input: glance_log_file}
607         heat:
608           admin_password: {get_input: heat_password}
609           admin_tenant_name: service
610           admin_user: heat
611           auth_encryption_key: {get_input: heat_auth_encryption_key}
612           db: {get_input: heat_dsn}
613           debug: {get_input: debug}
614           stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
615           watch_server_url: {get_input: heat.watch_server_url}
616           metadata_server_url: {get_input: heat.metadata_server_url}
617           waitcondition_server_url: {get_input: heat.waitcondition_server_url}
618         keystone:
619           db: {get_input: keystone_dsn}
620           debug: {get_input: debug}
621           host: {get_input: controller_virtual_ip}
622           ca_certificate: {get_input: keystone_ca_certificate}
623           signing_key: {get_input: keystone_signing_key}
624           signing_certificate: {get_input: keystone_signing_certificate}
625           ssl:
626               certificate: {get_input: keystone_ssl_certificate}
627               certificate_key: {get_input: keystone_ssl_certificate_key}
628         mysql:
629           innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
630           local_bind: true
631           root-password: {get_input: mysql_root_password}
632           cluster_name: {get_input: mysql_cluster_name}
633         neutron:
634           debug: {get_input: debug}
635           flat-networks: {get_input: neutron_flat_networks}
636           host: {get_input: controller_virtual_ip}
637           metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
638           agent_mode: {get_input: neutron_agent_mode}
639           router_distributed: {get_input: neutron_router_distributed}
640           mechanism_drivers: {get_input: neutron_mechanism_drivers}
641           allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
642           l3_ha: {get_input: neutron_l3_ha}
643           dhcp_agents_per_network: {get_input: neutron_dhcp_agents_per_network}
644           ovs:
645             enable_tunneling: {get_input: neutron_enable_tunneling}
646             local_ip: {get_input: controller_host}
647             network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
648             bridge_mappings: {get_input: neutron_bridge_mappings}
649             public_interface: {get_input: neutron_public_interface}
650             public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
651             public_interface_route: {get_input: neutron_public_interface_default_route}
652             public_interface_tag: {get_input: neutron_public_interface_tag}
653             physical_bridge: br-ex
654             tenant_network_type: {get_input: neutron_tenant_network_type}
655             tunnel_types: {get_input: neutron_tunnel_types}
656           ovs_db: {get_input: neutron_dsn}
657           service-password: {get_input: neutron_password}
658           dnsmasq-options: {get_input: neutron_dnsmasq_options}
659         ceilometer:
660           db: {get_input: ceilometer_dsn}
661           debug: {get_input: debug}
662           metering_secret: {get_input: ceilometer_metering_secret}
663           service-password: {get_input: ceilometer_password}
664         snmpd:
665           export_MIB: UCD-SNMP-MIB
666           readonly_user_name: {get_input: snmpd_readonly_user_name}
667           readonly_user_password: {get_input: snmpd_readonly_user_password}
668         nova:
669           compute_driver: libvirt.LibvirtDriver
670           db: {get_input: nova_dsn}
671           default_floating_pool:
672             ext-net
673           host: {get_input: controller_virtual_ip}
674           metadata-proxy: true
675           service-password: {get_input: nova_password}
676         rabbit:
677           host: {get_input: controller_virtual_ip}
678           username: {get_input: rabbit_username}
679           password: {get_input: rabbit_password}
680           cookie: {get_input: rabbit_cookie}
681           rabbit_client_use_ssl: {get_input: rabbit_client_use_ssl}
682           rabbit_port: {get_input: rabbit_client_port}
683         ntp:
684           servers:
685               - {server: {get_input: ntp_server}}
686         virtual_interfaces:
687           instances:
688             - vrrp_instance_name: VI_CONTROL
689               virtual_router_id: 51
690               keepalive_interface: {get_input: control_virtual_interface}
691               priority: 101
692               virtual_ips:
693               - ip: {get_input: controller_virtual_ip}
694                 interface: {get_input: control_virtual_interface}
695             - vrrp_instance_name: VI_PUBLIC
696               virtual_router_id: 52
697               keepalive_interface: {get_input: public_virtual_interface}
698               priority: 101
699               virtual_ips:
700               - ip: {get_input: public_virtual_ip}
701                 interface: {get_input: public_virtual_interface}
702           vrrp_sync_groups:
703             - name: VG1
704               members:
705                 - VI_CONTROL
706                 - VI_PUBLIC
707         keepalived:
708           keepalive_interface: {get_input: public_virtual_interface}
709           priority: 101
710         virtual_ips:
711             -
712               ip: {get_input: controller_virtual_ip}
713               interface: {get_input: control_virtual_interface}
714             -
715               ip: {get_input: public_virtual_ip}
716               interface: {get_input: public_virtual_interface}
717         haproxy:
718           net_binds:
719             - ip: {get_input: controller_virtual_ip}
720           options:
721             - option httpchk GET /
722           services:
723             - name: keystone_admin
724               port: 35357
725               net_binds: &public_binds
726                 - ip: {get_input: controller_virtual_ip}
727                 - ip: {get_input: public_virtual_ip}
728             - name: keystone_public
729               port: 5000
730               net_binds: *public_binds
731             - name: horizon
732               port: 80
733               net_binds: *public_binds
734             - name: neutron
735               port: 9696
736               net_binds: *public_binds
737             - name: cinder
738               port: 8776
739               net_binds: *public_binds
740             - name: glance_api
741               port: 9292
742               net_binds: *public_binds
743             - name: glance_registry
744               port: 9191
745               net_binds: *public_binds
746               options: # overwrite options as glace_reg needs auth for http req
747             - name: heat_api
748               port: 8004
749               net_binds: *public_binds
750             - name: heat_cloudwatch
751               port: 8003
752               net_binds: *public_binds
753             - name: heat_cfn
754               port: 8000
755               net_binds: *public_binds
756             - name: mysql
757               port: 3306
758               extra_server_params:
759                 - backup
760               options:
761                 - timeout client 0
762                 - timeout server 0
763             - name: nova_ec2
764               port: 8773
765             - name: nova_osapi
766               port: 8774
767               net_binds: *public_binds
768             - name: nova_metadata
769               port: 8775
770               net_binds: *public_binds
771             - name: nova_novncproxy
772               port: 6080
773               net_binds: *public_binds
774             - name: ceilometer
775               port: 8777
776               net_binds: *public_binds
777               options: # overwrite options as ceil needs auth for http req
778             - name: swift_proxy_server
779               port: 8080
780               net_binds: *public_binds
781               options:
782                 - option httpchk GET /info
783             - name: rabbitmq
784               port: 5672
785               options:
786                 - timeout client 0
787                 - timeout server 0
788                 - maxconn 1500
789
790   ControllerDeployment:
791     type: OS::TripleO::SoftwareDeployment
792     properties:
793       signal_transport: NO_SIGNAL
794       config: {get_resource: ControllerConfig}
795       server: {get_resource: Controller}
796       input_values:
797         bootstack_nodeid: {get_attr: [Controller, name]}
798         controller_host: {get_attr: [Controller, networks, ctlplane, 0]}
799         controller_virtual_ip: {get_param: VirtualIP}
800         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
801         heat.watch_server_url:
802           list_join:
803             - ''
804             - - 'http://'
805               - {get_param: VirtualIP}
806               - ':8003'
807         heat.metadata_server_url:
808           list_join:
809             - ''
810             - - 'http://'
811               - {get_param: VirtualIP}
812               - ':8000'
813         heat.waitcondition_server_url:
814           list_join:
815             - ''
816             - - 'http://'
817               - {get_param: VirtualIP}
818               - ':8000/v1/waitcondition'
819         admin_password: {get_param: AdminPassword}
820         admin_token: {get_param: AdminToken}
821         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
822         debug: {get_param: Debug}
823         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
824         cinder_password: {get_param: CinderPassword}
825         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
826         cinder_dsn:
827           list_join:
828             - ''
829             - - 'mysql://cinder:'
830               - {get_param: CinderPassword}
831               - '@'
832               - {get_param: VirtualIP}
833               - '/cinder'
834         glance_port: {get_param: GlancePort}
835         glance_protocol: {get_param: GlanceProtocol}
836         glance_password: {get_param: GlancePassword}
837         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
838         glance_log_file: {get_param: GlanceLogFile}
839         glance_dsn:
840           list_join:
841             - ''
842             - - 'mysql://glance:'
843               - {get_param: GlancePassword}
844               - '@'
845               - {get_param: VirtualIP}
846               - '/glance'
847         heat_password: {get_param: HeatPassword}
848         heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
849         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
850         heat_dsn:
851           list_join:
852             - ''
853             - - 'mysql://heat:'
854               - {get_param: HeatPassword}
855               - '@'
856               - {get_param: VirtualIP}
857               - '/heat'
858         keystone_ca_certificate: {get_param: KeystoneCACertificate}
859         keystone_signing_key: {get_param: KeystoneSigningKey}
860         keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
861         keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
862         keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
863         keystone_dsn:
864           list_join:
865             - ''
866             - - 'mysql://keystone:'
867               - {get_param: AdminToken}
868               - '@'
869               - {get_param: VirtualIP}
870               - '/keystone'
871         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
872         mysql_root_password: {get_param: MysqlRootPassword}
873         mysql_cluster_name:
874           str_replace:
875             template: tripleo-CLUSTER
876             params:
877               CLUSTER: {get_param: MysqlClusterUniquePart}
878         neutron_flat_networks: {get_param: NeutronFlatNetworks}
879         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
880         neutron_agent_mode: {get_param: NeutronAgentMode}
881         neutron_router_distributed: {get_param: NeutronDVR}
882         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
883         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
884         neutron_l3_ha: {get_param: NeutronL3HA}
885         neutron_dhcp_agents_per_network: {get_param: NeutronDhcpAgentsPerNetwork}
886         neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
887         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
888         neutron_public_interface: {get_param: NeutronPublicInterface}
889         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
890         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
891         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
892         neutron_tenant_network_type: {get_param: NeutronNetworkType}
893         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
894         neutron_password: {get_param: NeutronPassword}
895         neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
896         neutron_dsn:
897           list_join:
898             - ''
899             - - 'mysql://neutron:'
900               - {get_param: NeutronPassword}
901               - '@'
902               - {get_param: VirtualIP}
903               - '/ovs_neutron?charset=utf8'
904         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
905         ceilometer_password: {get_param: CeilometerPassword}
906         ceilometer_dsn:
907           list_join:
908             - ''
909             - - 'mysql://ceilometer:'
910               - {get_param: CeilometerPassword}
911               - '@'
912               - {get_param: VirtualIP}
913               - '/ceilometer'
914         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
915         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
916         nova_password: {get_param: NovaPassword}
917         nova_dsn:
918           list_join:
919             - ''
920             - - 'mysql://nova:'
921               - {get_param: NovaPassword}
922               - '@'
923               - {get_param: VirtualIP}
924               - '/nova'
925         rabbit_username: {get_param: RabbitUserName}
926         rabbit_password: {get_param: RabbitPassword}
927         rabbit_cookie: {get_param: RabbitCookie}
928         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
929         rabbit_client_port: {get_param: RabbitClientPort}
930         ntp_server: {get_param: NtpServer}
931         control_virtual_interface: {get_param: ControlVirtualInterface}
932         public_virtual_interface: {get_param: PublicVirtualInterface}
933         public_virtual_ip: {get_param: PublicVirtualIP}
934
935   SSLConfig:
936     type: OS::Heat::StructuredConfig
937     properties:
938       group: os-apply-config
939       config:
940         ssl:
941           ca_certificate: {get_input: ssl_ca_certificate}
942         stunnel:
943           cert: {get_input: ssl_certificate}
944           key: {get_input: ssl_key}
945           cacert: {get_input: ssl_ca_certificate}
946           ports:
947            - name: 'ec2'
948              accept: 13773
949              connect: 8773
950              connect_host: {get_input: controller_host}
951            - name: 'image'
952              accept: 13292
953              connect: 9292
954              connect_host: {get_input: controller_host}
955            - name: 'identity'
956              accept: 13000
957              connect: 5000
958              connect_host: {get_input: controller_host}
959            - name: 'network'
960              accept: 13696
961              connect: 9696
962              connect_host: {get_input: controller_host}
963            - name: 'compute'
964              accept: 13774
965              connect: 8774
966              connect_host: {get_input: controller_host}
967            - name: 'swift-proxy'
968              accept: 13080
969              connect: 8080
970              connect_host: {get_input: controller_host}
971            - name: 'cinder'
972              accept: 13776
973              connect: 8776
974              connect_host: {get_input: controller_host}
975            - name: 'ceilometer'
976              accept: 13777
977              connect: 8777
978              connect_host: {get_input: controller_host}
979
980   ControllerSSLDeployment:
981     type: OS::Heat::StructuredDeployment
982     properties:
983       config: {get_resource: SSLConfig}
984       server: {get_resource: Controller}
985       signal_transport: NO_SIGNAL
986       input_values:
987         controller_host: {get_attr: [Controller, networks, ctlplane, 0]}
988         ssl_certificate: {get_param: SSLCertificate}
989         ssl_key: {get_param: SSLKey}
990         ssl_ca_certificate: {get_param: SSLCACertificate}
991
992   ControllerPassthroughDeployment:
993     type: OS::Heat::StructuredDeployment
994     properties:
995       config: {get_resource: ControllerPassthroughConfig}
996       server: {get_resource: Controller}
997       signal_transport: NO_SIGNAL
998       input_values:
999         passthrough_config: {get_param: ExtraConfig}
1000
1001   ControllerPassthroughSpecificDeployment:
1002     depends_on: [ControllerPassthroughDeployment]
1003     type: OS::Heat::StructuredDeployment
1004     properties:
1005       config: {get_resource: ControllerPassthroughConfigSpecific}
1006       server: {get_resource: Controller}
1007       signal_transport: NO_SIGNAL
1008       input_values:
1009         passthrough_config_specific: {get_param: ControllerExtraConfig}
1010
1011   SwiftConfig:
1012     type: OS::Heat::StructuredConfig
1013     properties:
1014       group: os-apply-config
1015       config:
1016         swift:
1017           hash: { get_input: swift_hash_suffix }
1018           part-power: { get_input: swift_part_power }
1019           mount-check: { get_input: swift_mount_check }
1020           min-part-hours: { get_input: swift_min_part_hours }
1021           replicas: {get_input: swift_replicas }
1022           service-password: { get_input: swift_password }
1023
1024   SwiftStorageDeploy:
1025     type: OS::Heat::StructuredDeployment
1026     properties:
1027       server: {get_resource: Controller}
1028       config: {get_resource: SwiftConfig}
1029       signal_transport: NO_SIGNAL
1030       input_values:
1031         swift_hash_suffix: {get_param: SwiftHashSuffix}
1032         swift_mount_check: {get_param: SwiftMountCheck}
1033         swift_password: {get_param: SwiftPassword}
1034         swift_min_part_hours: {get_param: SwiftMinPartHours}
1035         swift_part_power: {get_param: SwiftPartPower}
1036         swift_replicas: { get_param: SwiftReplicas}
1037
1038 outputs:
1039   ip_address:
1040     description: IP address of the server in the ctlplane network
1041     value: {get_attr: [Controller, networks, ctlplane, 0]}
1042   external_ip_address:
1043     description: IP address of the server in the external network
1044     value: {get_attr: [ExternalPort, ip_address]}
1045   internal_api_ip_address:
1046     description: IP address of the server in the internal_api network
1047     value: {get_attr: [InternalApiPort, ip_address]}
1048   storage_ip_address:
1049     description: IP address of the server in the storage network
1050     value: {get_attr: [StoragePort, ip_address]}
1051   storage_mgmt_ip_address:
1052     description: IP address of the server in the storage_mgmt network
1053     value: {get_attr: [StorageMgmtPort, ip_address]}
1054   tenant_ip_address:
1055     description: IP address of the server in the tenant network
1056     value: {get_attr: [TenantPort, ip_address]}
1057   hostname:
1058     description: Hostname of the server
1059     value: {get_attr: [Controller, name]}
1060   corosync_node:
1061     description: >
1062       Node object in the format {ip: ..., name: ...} format that the corosync
1063       element expects
1064     value:
1065       ip: {get_attr: [Controller, networks, ctlplane, 0]}
1066       name: {get_attr: [Controller, name]}
1067   hosts_entry:
1068     description: >
1069       Server's IP address and hostname in the /etc/hosts format
1070     value:
1071       str_replace:
1072         template: IP HOST CLOUDNAME
1073         params:
1074           IP: {get_attr: [Controller, networks, ctlplane, 0]}
1075           HOST: {get_attr: [Controller, name]}
1076           CLOUDNAME: {get_param: CloudName}
1077   nova_server_resource:
1078     description: Heat resource handle for the Nova compute server
1079     value:
1080       {get_resource: Controller}
1081   swift_device:
1082     description: Swift device formatted for swift-ring-builder
1083     value:
1084       str_replace:
1085         template: 'r1z1-IP:%PORT%/d1'
1086         params:
1087           IP: {get_attr: [Controller, networks, ctlplane, 0]}
1088   swift_proxy_memcache:
1089     description: Swift proxy-memcache value
1090     value:
1091       str_replace:
1092         template: "IP:11211"
1093         params:
1094           IP: {get_attr: [Controller, networks, ctlplane, 0]}
1095   config_identifier:
1096     description: identifier which changes if the node configuration may need re-applying
1097     value: "None - NO_SIGNAL"