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