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