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