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