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