Add missing Neutron DVR params to without-mergepy
[apex-tripleo-heat-templates.git] / controller.yaml
1 heat_template_version: 2014-10-16
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.
15     type: string
16     hidden: true
17   CeilometerMeteringSecret:
18     default: unset
19     description: Secret shared by the ceilometer services.
20     type: string
21     hidden: true
22   CeilometerPassword:
23     default: unset
24     description: The password for the ceilometer service account.
25     type: string
26     hidden: true
27   CinderISCSIHelper:
28     default: tgtadm
29     description: The iSCSI helper to use with cinder.
30     type: string
31   CinderLVMLoopDeviceSize:
32     default: 5000
33     description: The size of the loopback file used by the cinder LVM driver.
34     type: number
35   CinderPassword:
36     default: unset
37     description: The password for the cinder service account, used by cinder-api.
38     type: string
39     hidden: true
40   CloudName:
41     default: ''
42     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
43     type: string
44   ControllerExtraConfig:
45     default: {}
46     description: |
47       Controller specific configuration to inject into the cluster. Same
48       structure as ExtraConfig.
49     type: json
50   ControlVirtualInterface:
51     default: 'br-ex'
52     description: Interface where virtual ip will be assigned.
53     type: string
54   Debug:
55     default: ''
56     description: Set to True to enable debugging on all services.
57     type: string
58   ExtraConfig:
59     default: {}
60     description: |
61       Additional configuration to inject into the cluster. The JSON should have
62       the following structure:
63         {"FILEKEY":
64           {"config":
65             [{"section": "SECTIONNAME",
66               "values":
67                 [{"option": "OPTIONNAME",
68                   "value": "VALUENAME"
69                  }
70                 ]
71              }
72             ]
73           }
74         }
75       For instance:
76         {"nova":
77           {"config":
78             [{"section": "default",
79               "values":
80                 [{"option": "compute_manager",
81                   "value": "ironic.nova.compute.manager.ClusterComputeManager"
82                  }
83                 ]
84              },
85              {"section": "cells",
86               "values":
87                 [{"option": "driver",
88                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
89                  }
90                 ]
91              }
92             ]
93           }
94         }
95     type: json
96   Flavor:
97     default: baremetal
98     description: Flavor for control nodes to request when deploying.
99     type: string
100     constraints:
101       - custom_constraint: nova.flavor
102   GlanceNotifierStrategy:
103     description: Strategy to use for Glance notification queue
104     type: string
105     default: noop
106   GlanceLogFile:
107     description: The filepath of the file to use for logging messages from Glance.
108     type: string
109     default: ''
110   GlancePassword:
111     default: unset
112     description: The password for the glance service account, used by the glance services.
113     type: string
114     hidden: true
115   GlancePort:
116     default: "9292"
117     description: Glance port.
118     type: string
119   GlanceProtocol:
120     default: http
121     description: Protocol to use when connecting to glance, set to https for SSL.
122     type: string
123   HeatPassword:
124     default: unset
125     description: The password for the Heat service account, used by the Heat services.
126     type: string
127     hidden: true
128   HeatStackDomainAdminPassword:
129     description: Password for heat_domain_admin user.
130     type: string
131     default: ''
132     hidden: true
133   Image:
134     type: string
135     default: overcloud-control
136     constraints:
137       - custom_constraint: glance.image
138   ImageUpdatePolicy:
139     default: 'REBUILD_PRESERVE_EPHEMERAL'
140     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
141     type: string
142   KeyName:
143     default: default
144     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
145     type: string
146     constraints:
147       - custom_constraint: nova.keypair
148   KeystoneCACertificate:
149     default: ''
150     description: Keystone self-signed certificate authority certificate.
151     type: string
152   KeystoneSigningCertificate:
153     default: ''
154     description: Keystone certificate for verifying token validity.
155     type: string
156   KeystoneSigningKey:
157     default: ''
158     description: Keystone key for signing tokens.
159     type: string
160     hidden: true
161   KeystoneSSLCertificate:
162     default: ''
163     description: Keystone certificate for verifying token validity.
164     type: string
165   KeystoneSSLCertificateKey:
166     default: ''
167     description: Keystone key for signing tokens.
168     type: string
169     hidden: true
170   MysqlClusterUniquePart:
171     description: A unique identifier of the MySQL cluster the controller is in.
172     type: string
173     default: 'unset'  # Has to be here because of the ignored empty value bug
174     constraints:
175     - length: {min: 4, max: 10}
176   MysqlInnodbBufferPoolSize:
177     description: >
178         Specifies the size of the buffer pool in megabytes. Setting to
179         zero should be interpreted as "no value" and will defer to the
180         lower level default.
181     type: number
182     default: 0
183   MysqlRootPassword:
184     type: string
185     hidden: true
186     default: ''  # Has to be here because of the ignored empty value bug
187   NeutronBridgeMappings:
188     description: >
189       The OVS logical->physical bridge mappings to use. See the Neutron
190       documentation for details. Defaults to mapping br-ex - the external
191       bridge on hosts - to a physical name 'datacentre' which can be used
192       to create provider networks (and we use this for the default floating
193       network) - if changing this either use different post-install network
194       scripts or be sure to keep 'datacentre' as a mapping network name.
195     type: string
196     default: ""
197   NeutronDnsmasqOptions:
198     default: 'dhcp-option-force=26,1400'
199     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.
200     type: string
201   NeutronAgentMode:
202     default: 'dvr_snat'
203     description: Agent mode for the neutron-l3-agent on the controller hosts
204     type: string
205   NeutronDVR:
206     default: 'False'
207     description: Whether to configure Neutron Distributed Virtual Routers
208     type: string
209   NeutronMetadataProxySharedSecret:
210     default: 'unset'
211     description: Shared secret to prevent spoofing
212     type: string
213   NeutronMechanismDrivers:
214     default: 'openvswitch'
215     description: |
216         The mechanism drivers for the Neutron tenant network. To specify multiple
217         values, use a comma separated string, like so: 'openvswitch,l2_population'
218     type: string
219   NeutronAllowL3AgentFailover:
220     default: 'True'
221     description: Allow automatic l3-agent failover
222     type: string
223   NeutronEnableTunnelling:
224     type: string
225     default: "True"
226   NeutronFlatNetworks:
227     type: string
228     default: ''
229     description: If set, flat networks to configure in neutron plugins.
230   NeutronNetworkType:
231     default: 'gre'
232     description: The tenant network type for Neutron, either gre or vxlan.
233     type: string
234   NeutronNetworkVLANRanges:
235     default: 'datacentre'
236     description: >
237       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
238       Neutron documentation for permitted values. Defaults to permitting any
239       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
240     type: string
241   NeutronPassword:
242     default: unset
243     description: The password for the neutron service account, used by neutron agents.
244     type: string
245     hidden: true
246   NeutronPublicInterface:
247     default: eth0
248     description: What interface to bridge onto br-ex for network nodes.
249     type: string
250   NeutronPublicInterfaceTag:
251     default: ''
252     description: >
253       VLAN tag for creating a public VLAN. The tag will be used to
254       create an access port on the exterior bridge for each control plane node,
255       and that port will be given the IP address returned by neutron from the
256       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
257       overcloud.yaml to include the deployment of VLAN ports to the control
258       plane.
259     type: string
260   NeutronPublicInterfaceDefaultRoute:
261     default: ''
262     description: A custom default route for the NeutronPublicInterface.
263     type: string
264   NeutronPublicInterfaceIP:
265     default: ''
266     description: A custom IP address to put onto the NeutronPublicInterface.
267     type: string
268   NeutronPublicInterfaceRawDevice:
269     default: ''
270     description: If set, the public interface is a vlan with this device as the raw device.
271     type: string
272   NeutronTunnelTypes:
273     default: 'gre'
274     description: |
275         The tunnel types for the Neutron tenant network. To specify multiple
276         values, use a comma separated string, like so: 'gre,vxlan'
277     type: string
278   NovaPassword:
279     default: unset
280     description: The password for the nova service account, used by nova-api.
281     type: string
282     hidden: true
283   NtpServer:
284     type: string
285     default: ''
286   PublicVirtualInterface:
287     default: 'br-ex'
288     description: >
289         Specifies the interface where the public-facing virtual ip will be assigned.
290         This should be int_public when a VLAN is being used.
291     type: string
292   PublicVirtualIP:
293     type: string
294     default: ''  # Has to be here because of the ignored empty value bug
295   RabbitCookie:
296     type: string
297     default: ''  # Has to be here because of the ignored empty value bug
298     hidden: true
299   RabbitPassword:
300     default: guest
301     description: The password for RabbitMQ
302     type: string
303     hidden: true
304   RabbitUserName:
305     default: guest
306     description: The username for RabbitMQ
307     type: string
308   RabbitClientUseSSL:
309     default: false
310     description: >
311         Rabbit client subscriber parameter to specify
312         an SSL connection to the RabbitMQ host.
313     type: string
314   RabbitClientPort:
315     default: 5672
316     description: Set rabbit subscriber port, change this if using SSL
317     type: number
318   SnmpdReadonlyUserName:
319     default: ro_snmp_user
320     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
321     type: string
322   SnmpdReadonlyUserPassword:
323     default: unset
324     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
325     type: string
326     hidden: true
327   SSLCACertificate:
328     default: ''
329     description: If set, the contents of an SSL certificate authority file.
330     type: string
331   SSLCertificate:
332     default: ''
333     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
334     type: string
335     hidden: true
336   SSLKey:
337     default: ''
338     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
339     type: string
340     hidden: true
341   SwiftHashSuffix:
342     default: unset
343     description: A random string to be used as a salt when hashing to determine mappings
344       in the ring.
345     hidden: true
346     type: string
347   SwiftPartPower:
348     default: 10
349     description: Partition Power to use when building Swift rings
350     type: number
351   SwiftPassword:
352     default: unset
353     description: The password for the swift service account, used by the swift proxy
354       services.
355     hidden: true
356     type: string
357   SwiftReplicas:
358     type: number
359     default: 1
360     description: How many replicas to use in the swift rings.
361   VirtualIP:
362     type: string
363     default: ''  # Has to be here because of the ignored empty value bug
364
365
366 resources:
367
368   Controller:
369     type: OS::Nova::Server
370     properties:
371       image: {get_param: Image}
372       image_update_policy: {get_param: ImageUpdatePolicy}
373       flavor: {get_param: Flavor}
374       key_name: {get_param: KeyName}
375       networks:
376         - network: ctlplane
377       user_data_format: SOFTWARE_CONFIG
378
379   ControllerConfig:
380     type: OS::Heat::StructuredConfig
381     properties:
382       group: os-apply-config
383       config:
384         admin-password: {get_param: AdminPassword}
385         admin-token: {get_param: AdminToken}
386         bootstack:
387           public_interface_ip: {get_param: NeutronPublicInterfaceIP}
388         bootstrap_host:
389           nodeid: {get_input: bootstack_nodeid}
390         database:
391           host: &database_host
392             {get_param: VirtualIP}
393         cinder:
394           db:
395             list_join:
396               - ''
397               - - mysql://cinder:unset@
398                 - *database_host
399                 - /cinder
400           debug: {get_param: Debug}
401           volume_size_mb: {get_param: CinderLVMLoopDeviceSize}
402           service-password: {get_param: CinderPassword}
403           iscsi-helper: {get_param: CinderISCSIHelper}
404         controller-address: {get_input: controller_host}
405         corosync:
406           bindnetaddr: {get_input: controller_host}
407           mcastport: 5577
408         pacemaker:
409           stonith_enabled : false
410           recheck_interval : 5
411           quorum_policy : ignore
412         db-password: unset
413         glance:
414           registry:
415             host: {get_input: controller_virtual_ip}
416           backend: swift
417           db:
418             list_join:
419               - ''
420               - - mysql://glance:unset@
421                 - *database_host
422                 - /glance
423           debug: {get_param: Debug}
424           host: {get_input: controller_virtual_ip}
425           port: {get_param: GlancePort}
426           protocol: {get_param: GlanceProtocol}
427           service-password: {get_param: GlancePassword}
428           swift-store-user: service:glance
429           swift-store-key: {get_param: GlancePassword}
430           notifier-strategy: {get_param: GlanceNotifierStrategy}
431           log-file: {get_param: GlanceLogFile}
432         heat:
433           admin_password: {get_param: HeatPassword}
434           admin_tenant_name: service
435           admin_user: heat
436           auth_encryption_key: unset___________
437           db:
438             list_join:
439               - ''
440               - - mysql://heat:unset@
441                 - *database_host
442                 - /heat
443           debug: {get_param: Debug}
444           stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
445           watch_server_url: {get_input: heat.watch_server_url}
446           metadata_server_url: {get_input: heat.metadata_server_url}
447           waitcondition_server_url: {get_input: heat.waitcondition_server_url}
448         keystone:
449           db:
450             list_join:
451               - ''
452               - - mysql://keystone:unset@
453                 - *database_host
454                 - /keystone
455           debug: {get_param: Debug}
456           host: {get_input: controller_virtual_ip}
457           ca_certificate: {get_param: KeystoneCACertificate}
458           signing_key: {get_param: KeystoneSigningKey}
459           signing_certificate: {get_param: KeystoneSigningCertificate}
460           ssl:
461               certificate: {get_param: KeystoneSSLCertificate}
462               certificate_key: {get_param: KeystoneSSLCertificateKey}
463         mysql:
464           innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
465           local_bind: true
466           root-password: {get_param: MysqlRootPassword}
467           cluster_name:
468             str_replace:
469               template: tripleo-CLUSTER
470               params:
471                 CLUSTER: {get_param: MysqlClusterUniquePart}
472         neutron:
473           debug: {get_param: Debug}
474           flat-networks: {get_param: NeutronFlatNetworks}
475           host: {get_input: controller_virtual_ip}
476           metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
477           agent_mode: {get_param: NeutronAgentMode}
478           router_distributed: {get_param: NeutronDVR}
479           mechanism_drivers: {get_param: NeutronMechanismDrivers}
480           allow_automatic_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
481           ovs:
482             enable_tunneling: {get_input: neutron_enable_tunneling}
483             local_ip: {get_input: controller_host}
484             network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
485             bridge_mappings: {get_param: NeutronBridgeMappings}
486             public_interface: {get_param: NeutronPublicInterface}
487             public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
488             public_interface_route: {get_param: NeutronPublicInterfaceDefaultRoute}
489             public_interface_tag: {get_param: NeutronPublicInterfaceTag}
490             physical_bridge: br-ex
491             tenant_network_type: {get_param: NeutronNetworkType}
492             tunnel_types: {get_param: NeutronTunnelTypes}
493           ovs_db:
494             list_join:
495               - ''
496               - - mysql://neutron:unset@
497                 - *database_host
498                 - /ovs_neutron?charset=utf8
499           service-password: {get_param: NeutronPassword}
500           dnsmasq-options: {get_param: NeutronDnsmasqOptions}
501         ceilometer:
502           db:
503             list_join:
504               - ''
505               - - mysql://ceilometer:unset@
506                 - *database_host
507                 - /ceilometer
508           debug: {get_param: Debug}
509           metering_secret: {get_param: CeilometerMeteringSecret}
510           service-password: {get_param: CeilometerPassword}
511         snmpd:
512           export_MIB: UCD-SNMP-MIB
513           readonly_user_name: {get_param: SnmpdReadonlyUserName}
514           readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
515         nova:
516           compute_driver: libvirt.LibvirtDriver
517           db:
518             list_join:
519               - ''
520               - - mysql://nova:unset@
521                 - *database_host
522                 - /nova
523           default_floating_pool:
524             ext-net
525           host: {get_input: controller_virtual_ip}
526           metadata-proxy: true
527           service-password: {get_param: NovaPassword}
528         rabbit:
529           host: {get_input: controller_virtual_ip}
530           username: {get_param: RabbitUserName}
531           password: {get_param: RabbitPassword}
532           cookie: {get_param: RabbitCookie}
533           rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
534           rabbit_port: {get_param: RabbitClientPort}
535         ntp:
536           servers:
537               - {server: {get_param: NtpServer}, fudge: "stratum 0"}
538         virtual_interfaces:
539           instances:
540             - vrrp_instance_name: VI_CONTROL
541               virtual_router_id: 51
542               keepalive_interface: {get_param: ControlVirtualInterface}
543               priority: 101
544               virtual_ips:
545               - ip: {get_param: VirtualIP}
546                 interface: {get_param: ControlVirtualInterface}
547             - vrrp_instance_name: VI_PUBLIC
548               virtual_router_id: 52
549               keepalive_interface: {get_param: PublicVirtualInterface}
550               priority: 101
551               virtual_ips:
552               - ip: {get_param: PublicVirtualIP}
553                 interface: {get_param: PublicVirtualInterface}
554           vrrp_sync_groups:
555             - name: VG1
556               members:
557                 - VI_CONTROL
558                 - VI_PUBLIC
559         keepalived:
560           keepalive_interface: {get_param: PublicVirtualInterface}
561           priority: 101
562         virtual_ips:
563             -
564               ip: {get_param: VirtualIP}
565               interface: {get_param: ControlVirtualInterface}
566             -
567               ip: {get_param: PublicVirtualIP}
568               interface: {get_param: PublicVirtualInterface}
569         haproxy:
570           net_binds:
571             - ip: {get_param: VirtualIP}
572           services:
573             - name: keystone_admin
574               port: 35357
575               net_binds: &public_binds
576                 - ip: {get_param: VirtualIP}
577                 - ip: {get_param: PublicVirtualIP}
578             - name: keystone_public
579               port: 5000
580               net_binds: *public_binds
581             - name: horizon
582               port: 80
583               net_binds: *public_binds
584             - name: neutron
585               port: 9696
586               net_binds: *public_binds
587             - name: cinder
588               port: 8776
589               net_binds: *public_binds
590             - name: glance_api
591               port: 9292
592               net_binds: *public_binds
593             - name: glance_registry
594               port: 9191
595               net_binds: *public_binds
596             - name: heat_api
597               port: 8004
598               net_binds: *public_binds
599             - name: heat_cloudwatch
600               port: 8003
601               net_binds: *public_binds
602             - name: heat_cfn
603               port: 8000
604               net_binds: *public_binds
605             - name: mysql
606               port: 3306
607               extra_server_params:
608                 - backup
609               options:
610                 - timeout client 0
611                 - timeout server 0
612             - name: nova_ec2
613               port: 8773
614             - name: nova_osapi
615               port: 8774
616               net_binds: *public_binds
617             - name: nova_metadata
618               port: 8775
619               net_binds: *public_binds
620             - name: ceilometer
621               port: 8777
622               net_binds: *public_binds
623             - name: swift_proxy_server
624               port: 8080
625               net_binds: *public_binds
626             - name: rabbitmq
627               port: 5672
628               options:
629                 - timeout client 0
630                 - timeout server 0
631
632   ControllerPassthroughConfig:
633     type: OS::Heat::StructuredConfig
634     properties:
635       group: os-apply-config
636       config: {get_input: passthrough_config}
637
638   ControllerPassthroughConfigSpecific:
639     type: OS::Heat::StructuredConfig
640     properties:
641       group: os-apply-config
642       config: {get_input: passthrough_config_specific}
643
644   ControllerDeployment:
645     type: OS::Heat::StructuredDeployment
646     properties:
647       signal_transport: NO_SIGNAL
648       config: {get_resource: ControllerConfig}
649       server: {get_resource: Controller}
650       input_values:
651         bootstack_nodeid: {get_attr: [Controller, name]}
652         controller_host: {get_attr: [Controller, networks, ctlplane, 0]}
653         controller_virtual_ip: {get_param: VirtualIP}
654         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
655         heat.watch_server_url:
656           list_join:
657             - ''
658             - - 'http://'
659               - {get_param: VirtualIP}
660               - ':8003'
661         heat.metadata_server_url:
662           list_join:
663             - ''
664             - - 'http://'
665               - {get_param: VirtualIP}
666               - ':8000'
667         heat.waitcondition_server_url:
668           list_join:
669             - ''
670             - - 'http://'
671               - {get_param: VirtualIP}
672               - ':8000/v1/waitcondition'
673
674   SSLConfig:
675     type: OS::Heat::StructuredConfig
676     properties:
677       group: os-apply-config
678       config:
679         ssl:
680           ca_certificate: {get_input: ssl_ca_certificate}
681         stunnel:
682           cert: {get_input: ssl_certificate}
683           key: {get_input: ssl_key}
684           cacert: {get_input: ssl_ca_certificate}
685           ports:
686            - name: 'ec2'
687              accept: 13773
688              connect: 8773
689              connect_host: {get_input: controller_host}
690            - name: 'image'
691              accept: 13292
692              connect: 9292
693              connect_host: {get_input: controller_host}
694            - name: 'identity'
695              accept: 13000
696              connect: 5000
697              connect_host: {get_input: controller_host}
698            - name: 'network'
699              accept: 13696
700              connect: 9696
701              connect_host: {get_input: controller_host}
702            - name: 'compute'
703              accept: 13774
704              connect: 8774
705              connect_host: {get_input: controller_host}
706            - name: 'swift-proxy'
707              accept: 13080
708              connect: 8080
709              connect_host: {get_input: controller_host}
710            - name: 'cinder'
711              accept: 13776
712              connect: 8776
713              connect_host: {get_input: controller_host}
714            - name: 'ceilometer'
715              accept: 13777
716              connect: 8777
717              connect_host: {get_input: controller_host}
718
719   ControllerSSLDeployment:
720     type: OS::Heat::StructuredDeployment
721     properties:
722       config: {get_resource: SSLConfig}
723       server: {get_resource: Controller}
724       signal_transport: NO_SIGNAL
725       input_values:
726         controller_host: {get_attr: [Controller, networks, ctlplane, 0]}
727         ssl_certificate: {get_param: SSLCertificate}
728         ssl_key: {get_param: SSLKey}
729         ssl_ca_certificate: {get_param: SSLCACertificate}
730
731   ControllerPassthroughDeployment:
732     type: OS::Heat::StructuredDeployment
733     properties:
734       config: {get_resource: ControllerPassthroughConfig}
735       server: {get_resource: Controller}
736       signal_transport: NO_SIGNAL
737       input_values:
738         passthrough_config: {get_param: ExtraConfig}
739
740   ControllerPassthroughSpecificDeployment:
741     depends_on: [ControllerPassthroughDeployment]
742     type: OS::Heat::StructuredDeployment
743     properties:
744       config: {get_resource: ControllerPassthroughConfigSpecific}
745       server: {get_resource: Controller}
746       signal_transport: NO_SIGNAL
747       input_values:
748         passthrough_config_specific: {get_param: ControllerExtraConfig}
749
750   SwiftConfig:
751     type: OS::Heat::StructuredConfig
752     properties:
753       group: os-apply-config
754       config:
755         swift:
756           hash: { get_input: swift_hash_suffix }
757           part-power: { get_input: swift_part_power }
758           replicas: {get_input: swift_replicas }
759           service-password: { get_input: swift_password }
760
761   SwiftStorageDeploy:
762     type: OS::Heat::StructuredDeployment
763     properties:
764       server: {get_resource: Controller}
765       config: {get_resource: SwiftConfig}
766       signal_transport: NO_SIGNAL
767       input_values:
768         swift_hash_suffix: {get_param: SwiftHashSuffix}
769         swift_password: {get_param: SwiftPassword}
770         swift_part_power: {get_param: SwiftPartPower}
771         swift_replicas: { get_param: SwiftReplicas}
772
773 outputs:
774   ip_address:
775     description: IP address of the server in the ctlplane network
776     value: {get_attr: [Controller, networks, ctlplane, 0]}
777   hostname:
778     description: Hostname of the server
779     value: {get_attr: [Controller, name]}
780   corosync_node:
781     description: >
782       Node object in the format {ip: ..., name: ...} format that the corosync
783       element expects
784     value:
785       ip: {get_attr: [Controller, networks, ctlplane, 0]}
786       name: {get_attr: [Controller, name]}
787   hosts_entry:
788     description: >
789       Server's IP address and hostname in the /etc/hosts format
790     value:
791       str_replace:
792         template: IP HOST HOST.novalocal CLOUDNAME
793         params:
794           IP: {get_attr: [Controller, networks, ctlplane, 0]}
795           HOST: {get_attr: [Controller, name]}
796           CLOUDNAME: {get_param: CloudName}
797   nova_server_resource:
798     description: Heat resource handle for the Nova compute server
799     value:
800       {get_resource: Controller}
801   swift_device:
802     description: Swift device formatted for swift-ring-builder
803     value:
804       str_replace:
805         template: 'r1z1-IP:%PORT%/d1'
806         params:
807           IP: {get_attr: [Controller, networks, ctlplane, 0]}
808   swift_proxy_memcache:
809     description: Swift proxy-memcache value
810     value:
811       str_replace:
812         template: "IP:11211"
813         params:
814           IP: {get_attr: [Controller, networks, ctlplane, 0]}