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