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