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