Ceilometer composable roles for controller
[apex-tripleo-heat-templates.git] / overcloud.yaml
1 heat_template_version: 2016-04-08
2
3 description: >
4   Deploy an OpenStack environment, consisting of several node types (roles),
5   Controller, Compute, BlockStorage, SwiftStorage and CephStorage.  The Storage
6   roles enable independent scaling of the storage components, but the minimal
7   deployment is one Controller and one Compute node.
8
9
10 # TODO(shadower): we should probably use the parameter groups to put
11 # some order in here.
12 parameters:
13
14   # Common parameters (not specific to a role)
15   AdminPassword:
16     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
17     type: string
18     hidden: true
19   AodhPassword:
20     description: The password for the aodh services.
21     type: string
22     hidden: true
23   # This has to be an UUID so for now we generate it outside the template
24   CephClusterFSID:
25     default: ''
26     type: string
27     description: The Ceph cluster FSID. Must be a UUID.
28   CephMonKey:
29     default: ''
30     description: The Ceph monitors key. Can be created with ceph-authtool --gen-print-key.
31     type: string
32     hidden: true
33   CephAdminKey:
34     default: ''
35     description: The Ceph admin client key. Can be created with ceph-authtool --gen-print-key.
36     type: string
37     hidden: true
38   CinderEnableNfsBackend:
39     default: false
40     description: Whether to enable or not the NFS backend for Cinder
41     type: boolean
42   CephClientKey:
43     default: ''
44     description: The Ceph client key. Can be created with ceph-authtool --gen-print-key. Currently only used for external Ceph deployments to create the openstack user keyring.
45     type: string
46     hidden: true
47   CephExternalMonHost:
48     default: ''
49     type: string
50     description: List of externally managed Ceph Mon Host IPs. Only used for external Ceph deployments.
51   CinderEnableIscsiBackend:
52     default: true
53     description: Whether to enable or not the Iscsi backend for Cinder
54     type: boolean
55   CinderEnableRbdBackend:
56     default: false
57     description: Whether to enable or not the Rbd backend for Cinder
58     type: boolean
59   CloudName:
60     default: overcloud
61     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
62     type: string
63   ControlFixedIPs:
64     default: []
65     description: Should be used for arbitrary ips.
66     type: json
67   CorosyncIPv6:
68     default: false
69     description: Enable IPv6 in Corosync
70     type: boolean
71   Debug:
72     default: ''
73     description: Set to True to enable debugging on all services.
74     type: string
75   HAProxySyslogAddress:
76     default: /dev/log
77     description: Syslog address where HAproxy will send its log
78     type: string
79   HorizonAllowedHosts:
80     default: '*'
81     description: A list of IP/Hostname allowed to connect to horizon
82     type: comma_delimited_list
83   ImageUpdatePolicy:
84     default: 'REBUILD_PRESERVE_EPHEMERAL'
85     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
86     type: string
87   InternalApiVirtualFixedIPs:
88     default: []
89     description: >
90         Control the IP allocation for the InternalApiVirtualInterface port. E.g.
91         [{'ip_address':'1.2.3.4'}]
92     type: json
93   KeyName:
94     default: default
95     description: Name of an existing Nova key pair to enable SSH access to the instances
96     type: string
97     constraints:
98       - custom_constraint: nova.keypair
99   MemcachedIPv6:
100     default: false
101     description: Enable IPv6 features in Memcached.
102     type: boolean
103   NeutronBridgeMappings:
104     description: >
105       The OVS logical->physical bridge mappings to use. See the Neutron
106       documentation for details. Defaults to mapping br-ex - the external
107       bridge on hosts - to a physical name 'datacentre' which can be used
108       to create provider networks (and we use this for the default floating
109       network) - if changing this either use different post-install network
110       scripts or be sure to keep 'datacentre' as a mapping network name.
111     type: comma_delimited_list
112     default: "datacentre:br-ex"
113   NeutronControlPlaneID:
114     default: 'ctlplane'
115     type: string
116     description: Neutron ID or name for ctlplane network.
117   NeutronEnableTunnelling:
118     type: string
119     default: "True"
120   NeutronEnableL2Pop:
121     type: string
122     description: >
123         Enable/disable the L2 population feature in the Neutron agents.
124     default: "False"
125   NeutronFlatNetworks:
126     type: comma_delimited_list
127     default: 'datacentre'
128     description: >
129       If set, flat networks to configure in neutron plugins. Defaults to
130       'datacentre' to permit external network creation.
131   NeutronNetworkType:
132     default: 'vxlan'
133     description: The tenant network type for Neutron.
134     type: comma_delimited_list
135   NeutronPassword:
136     description: The password for the neutron service account, used by neutron agents.
137     type: string
138     hidden: true
139   NeutronPublicInterface:
140     default: nic1
141     description: What interface to bridge onto br-ex for network nodes.
142     type: string
143   NeutronMetadataProxySharedSecret:
144     description: Shared secret to prevent spoofing
145     type: string
146     hidden: true
147   NeutronTenantMtu:
148     description: >
149       The default MTU for tenant networks. For VXLAN/GRE tunneling, this should
150       be at least 50 bytes smaller than the MTU on the physical network. This
151       value will be used to set the MTU on the virtual Ethernet device.
152       This value will be used to construct the NeutronDnsmasqOptions, since that
153       will determine the MTU that is assigned to the VM host through DHCP.
154     default: "1400"
155     type: string
156   NeutronTunnelTypes:
157     default: 'vxlan'
158     description: |
159         The tunnel types for the Neutron tenant network.
160     type: comma_delimited_list
161     type: comma_delimited_list
162   NeutronCorePlugin:
163     default: 'ml2'
164     description: |
165         The core plugin for Neutron. The value should be the entrypoint to be loaded
166         from neutron.core_plugins namespace.
167     type: string
168   NeutronServicePlugins:
169     default: "router,qos"
170     description: |
171         Comma-separated list of service plugin entrypoints to be loaded from the
172         neutron.service_plugins namespace.
173     type: comma_delimited_list
174   NeutronTypeDrivers:
175     default: "vxlan,vlan,flat,gre"
176     description: |
177         Comma-separated list of network type driver entrypoints to be loaded.
178     type: comma_delimited_list
179   NeutronMechanismDrivers:
180     default: 'openvswitch'
181     description: |
182         The mechanism drivers for the Neutron tenant network.
183     type: comma_delimited_list
184     type: comma_delimited_list
185   NeutronAgentExtensions:
186     default: "qos"
187     description: |
188         Comma-separated list of extensions enabled for the Neutron agents.
189     type: comma_delimited_list
190   NeutronAllowL3AgentFailover:
191     default: 'False'
192     description: Allow automatic l3-agent failover
193     type: string
194   NeutronL3HA:
195     default: 'False'
196     description: Whether to enable l3-agent HA
197     type: string
198   NovaIPv6:
199     default: false
200     description: Enable IPv6 features in Nova
201     type: boolean
202   NovaPassword:
203     description: The password for the nova service account, used by nova-api.
204     type: string
205     hidden: true
206   #TODO(ccamacho): Remove after landing Ntp in all roles
207   NtpServer:
208     default: ''
209     description: Comma-separated list of ntp servers
210     type: comma_delimited_list
211   PublicVirtualFixedIPs:
212     default: []
213     description: >
214         Control the IP allocation for the PublicVirtualInterface port. E.g.
215         [{'ip_address':'1.2.3.4'}]
216     type: json
217   RabbitCookieSalt:
218     type: string
219     default: unset
220     description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
221   RabbitUserName:
222     default: guest
223     description: The username for RabbitMQ
224     type: string
225   RabbitPassword:
226     description: The password for RabbitMQ
227     type: string
228     hidden: true
229   RabbitClientUseSSL:
230     default: false
231     description: >
232         Rabbit client subscriber parameter to specify
233         an SSL connection to the RabbitMQ host.
234     type: string
235   RabbitClientPort:
236     default: 5672
237     description: Set rabbit subscriber port, change this if using SSL
238     type: number
239   RedisPassword:
240     description: The password for Redis
241     type: string
242     hidden: true
243   SnmpdReadonlyUserName:
244     default: ro_snmp_user
245     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
246     type: string
247   SnmpdReadonlyUserPassword:
248     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
249     type: string
250     hidden: true
251   StorageVirtualFixedIPs:
252     default: []
253     description: >
254         Control the IP allocation for the StorageVirtualInterface port. E.g.
255         [{'ip_address':'1.2.3.4'}]
256     type: json
257   StorageMgmtVirtualFixedIPs:
258     default: []
259     description: >
260         Control the IP allocation for the StorageMgmgVirtualInterface port. E.g.
261         [{'ip_address':'1.2.3.4'}]
262     type: json
263   TimeZone:
264     default: 'UTC'
265     description: The timezone to be set on nodes.
266     type: string
267   CloudDomain:
268     default: 'localdomain'
269     type: string
270     description: >
271       The DNS domain used for the hosts. This should match the dhcp_domain
272       configured in the Undercloud neutron. Defaults to localdomain.
273   ServerMetadata:
274     default: {}
275     description: >
276       Extra properties or metadata passed to Nova for the created nodes in
277       the overcloud. It's accessible via the Nova metadata API.
278     type: json
279
280   # Controller-specific params
281   CinderLVMLoopDeviceSize:
282     default: 10280
283     description: The size of the loopback file used by the cinder LVM driver.
284     type: number
285   CinderPassword:
286     description: The password for the cinder service account, used by cinder-api.
287     type: string
288     hidden: true
289   CinderISCSIHelper:
290     default: lioadm
291     description: The iSCSI helper to use with cinder.
292     type: string
293   ControllerCount:
294     type: number
295     default: 1
296     constraints:
297       - range: {min: 1}
298   controllerExtraConfig:
299     default: {}
300     description: |
301       Deprecated. Use ControllerExtraConfig via parameter_defaults instead.
302     type: json
303   controllerImage:
304     type: string
305     default: overcloud-full
306     constraints:
307       - custom_constraint: glance.image
308   OvercloudControlFlavor:
309     description: Flavor for control nodes to request when deploying.
310     default: baremetal
311     type: string
312     constraints:
313       - custom_constraint: nova.flavor
314   ControlVirtualInterface:
315     default: 'br-ex'
316     description: Interface where virtual ip will be assigned.
317     type: string
318   EnableFencing:
319     default: false
320     description: Whether to enable fencing in Pacemaker or not.
321     type: boolean
322   EnableGalera:
323     default: true
324     description: Whether to use Galera instead of regular MariaDB.
325     type: boolean
326   ControllerEnableCephStorage:
327     default: false
328     description: Whether to deploy Ceph Storage (OSD) on the Controller
329     type: boolean
330   ControllerEnableSwiftStorage:
331     default: true
332     description: Whether to enable Swift Storage on the Controller
333     type: boolean
334   ControllerSchedulerHints:
335     type: json
336     description: Optional scheduler hints to pass to nova
337     default: {}
338   ExtraConfig:
339     default: {}
340     description: |
341       Additional configuration to inject into the cluster. The format required
342       may be implementation specific, e.g puppet hieradata.  Any role specific
343       ExtraConfig, e.g controllerExtraConfig takes precedence over ExtraConfig.
344     type: json
345   FencingConfig:
346     default: {}
347     description: |
348       Pacemaker fencing configuration. The JSON should have
349       the following structure:
350         {
351           "devices": [
352             {
353               "agent": "AGENT_NAME",
354               "host_mac": "HOST_MAC_ADDRESS",
355               "params": {"PARAM_NAME": "PARAM_VALUE"}
356             }
357           ]
358         }
359       For instance:
360         {
361           "devices": [
362             {
363               "agent": "fence_xvm",
364               "host_mac": "52:54:00:aa:bb:cc",
365               "params": {
366                 "multicast_address": "225.0.0.12",
367                 "port": "baremetal_0",
368                 "manage_fw": true,
369                 "manage_key_file": true,
370                 "key_file": "/etc/fence_xvm.key",
371                 "key_file_password": "abcdef"
372               }
373             }
374           ]
375         }
376     type: json
377   GnocchiBackend:
378     default: file
379     description: The short name of the Gnocchi backend to use. Should be one
380       of swift, rbd or file
381     type: string
382     constraints:
383     - allowed_values: ['swift', 'file', 'rbd']
384   GnocchiIndexerBackend:
385     default: 'mysql'
386     description: The short name of the Gnocchi indexer backend to use.
387     type: string
388   GnocchiPassword:
389     description: The password for the gnocchi service account.
390     type: string
391     hidden: true
392   InstanceNameTemplate:
393     default: 'instance-%08x'
394     description: Template string to be used to generate instance names
395     type: string
396   ManageFirewall:
397     default: true
398     description: Whether to manage IPtables rules.
399     type: boolean
400   PurgeFirewallRules:
401     default: false
402     description: Whether IPtables rules should be purged before setting up the ones.
403     type: boolean
404   MysqlInnodbBufferPoolSize:
405     description: >
406         Specifies the size of the buffer pool in megabytes. Setting to
407         zero should be interpreted as "no value" and will defer to the
408         lower level default.
409     type: number
410     default: 0
411   MysqlMaxConnections:
412     description: Configures MySQL max_connections config setting
413     type: number
414     default: 4096
415   PublicVirtualInterface:
416     default: 'br-ex'
417     description: >
418         Specifies the interface where the public-facing virtual ip will be assigned.
419         This should be int_public when a VLAN is being used.
420     type: string
421   SwiftHashSuffix:
422     description: A random string to be used as a salt when hashing to determine mappings in the ring.
423     type: string
424     hidden: true
425   SwiftMountCheck:
426     default: 'false'
427     description: Value of mount_check in Swift account/container/object -server.conf
428     type: boolean
429   SwiftMinPartHours:
430     type: number
431     default: 1
432     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
433   SwiftPartPower:
434     default: 10
435     description: Partition Power to use when building Swift rings
436     type: number
437   SwiftReplicas:
438     type: number
439     default: 3
440     description: How many replicas to use in the swift rings.
441
442 # Compute-specific params
443   CeilometerComputeAgent:
444     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
445     type: string
446     default: ''
447     constraints:
448     - allowed_values: ['', Present]
449   ComputeCount:
450     type: number
451     default: 1
452   HypervisorNeutronPhysicalBridge:
453     default: 'br-ex'
454     description: >
455       An OVS bridge to create on each hypervisor. This defaults to br-ex the
456       same as the control plane nodes, as we have a uniform configuration of
457       the openvswitch agent. Typically should not need to be changed.
458     type: string
459   HypervisorNeutronPublicInterface:
460     default: nic1
461     description: What interface to add to the HypervisorNeutronPhysicalBridge.
462     type: string
463   NeutronNetworkVLANRanges:
464     default: 'datacentre:1:1000'
465     description: >
466       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
467       Neutron documentation for permitted values. Defaults to permitting any
468       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
469     type: comma_delimited_list
470   NovaComputeDriver:
471     type: string
472     default: libvirt.LibvirtDriver
473   NovaComputeExtraConfig:
474     default: {}
475     description: |
476       NovaCompute specific configuration to inject into the cluster. Same
477       structure as ExtraConfig.
478     type: json
479   NovaComputeLibvirtType:
480     default: kvm
481     type: string
482   NovaComputeLibvirtVifDriver:
483     default: ''
484     description: Libvirt VIF driver configuration for the network
485     type: string
486   NovaComputeSchedulerHints:
487     type: json
488     description: Optional scheduler hints to pass to nova
489     default: {}
490   NovaEnableRbdBackend:
491     default: false
492     description: Whether to enable or not the Rbd backend for Nova
493     type: boolean
494   NovaImage:
495     type: string
496     default: overcloud-full
497     constraints:
498       - custom_constraint: glance.image
499   NovaOVSBridge:
500     default: 'br-int'
501     description: Name of integration bridge used by Open vSwitch
502     type: string
503   NovaSecurityGroupAPI:
504     default: 'neutron'
505     description: The full class name of the security API class
506     type: string
507   OvercloudComputeFlavor:
508     description: Use this flavor
509     default: baremetal
510     type: string
511     constraints:
512       - custom_constraint: nova.flavor
513   ServiceNetMap:
514     default:
515       NeutronTenantNetwork: tenant
516       CeilometerApiNetwork: internal_api
517       AodhApiNetwork: internal_api
518       GnocchiApiNetwork: internal_api
519       MongoDbNetwork: internal_api
520       CinderApiNetwork: internal_api
521       CinderIscsiNetwork: storage
522       GlanceApiNetwork: storage
523       GlanceRegistryNetwork: internal_api
524       KeystoneAdminApiNetwork: ctlplane # allows undercloud to config endpoints
525       KeystonePublicApiNetwork: internal_api
526       NeutronApiNetwork: internal_api
527       HeatApiNetwork: internal_api
528       NovaApiNetwork: internal_api
529       NovaMetadataNetwork: internal_api
530       NovaVncProxyNetwork: internal_api
531       SwiftMgmtNetwork: storage_mgmt
532       SwiftProxyNetwork: storage
533       SaharaApiNetwork: internal_api
534       HorizonNetwork: internal_api
535       MemcachedNetwork: internal_api
536       RabbitMqNetwork: internal_api
537       RedisNetwork: internal_api
538       MysqlNetwork: internal_api
539       CephClusterNetwork: storage_mgmt
540       CephPublicNetwork: storage
541       ControllerHostnameResolveNetwork: internal_api
542       ComputeHostnameResolveNetwork: internal_api
543       BlockStorageHostnameResolveNetwork: internal_api
544       ObjectStorageHostnameResolveNetwork: internal_api
545       CephStorageHostnameResolveNetwork: storage
546     description: Mapping of service_name -> network name. Typically set
547                  via parameter_defaults in the resource registry.
548     type: json
549
550   ControllerServices:
551     default:
552       - OS::TripleO::Services::CinderApi
553       - OS::TripleO::Services::CinderScheduler
554       - OS::TripleO::Services::CinderVolume
555       - OS::TripleO::Services::Keystone
556       - OS::TripleO::Services::GlanceApi
557       - OS::TripleO::Services::GlanceRegistry
558       - OS::TripleO::Services::HeatApi
559       - OS::TripleO::Services::HeatApiCfn
560       - OS::TripleO::Services::HeatApiCloudwatch
561       - OS::TripleO::Services::HeatEngine
562       - OS::TripleO::Services::NeutronDhcpAgent
563       - OS::TripleO::Services::NeutronL3Agent
564       - OS::TripleO::Services::NeutronMetadataAgent
565       - OS::TripleO::Services::NeutronServer
566       - OS::TripleO::Services::NeutronCorePlugin
567       - OS::TripleO::Services::NeutronOvsAgent
568       - OS::TripleO::Services::RabbitMQ
569       - OS::TripleO::Services::HAproxy
570       - OS::TripleO::Services::Keepalived
571       - OS::TripleO::Services::Memcached
572       - OS::TripleO::Services::SwiftProxy
573       - OS::TripleO::Services::Redis
574       - OS::TripleO::Services::NovaConductor
575       - OS::TripleO::Services::MongoDb
576       - OS::TripleO::Services::NovaApi
577       - OS::TripleO::Services::NovaScheduler
578       - OS::TripleO::Services::NovaConsoleauth
579       - OS::TripleO::Services::NovaVncproxy
580       - OS::TripleO::Services::Ntp
581       - OS::TripleO::Services::CeilometerApi
582       - OS::TripleO::Services::CeilometerCollector
583       - OS::TripleO::Services::CeilometerExpirer
584       - OS::TripleO::Services::CeilometerAgentCentral
585       - OS::TripleO::Services::CeilometerAgentNotification
586     description: A list of service resources (configured in the Heat
587                  resource_registry) which represent nested stacks
588                  for each service that should get installed on the Controllers.
589     type: comma_delimited_list
590
591   ComputeServices:
592     default:
593       - OS::TripleO::Services::NovaCompute
594       - OS::TripleO::Services::Ntp
595     description: A list of service resources (configured in the Heat
596                  resource_registry) which represent nested stacks
597                  for each service that should get installed on the Compute Nodes.
598     type: comma_delimited_list
599
600 # Block storage specific parameters
601   BlockStorageCount:
602     type: number
603     default: 0
604   BlockStorageImage:
605     default: overcloud-full
606     type: string
607   OvercloudBlockStorageFlavor:
608     description: Flavor for block storage nodes to request when deploying.
609     default: baremetal
610     type: string
611     constraints:
612       - custom_constraint: nova.flavor
613   BlockStorageExtraConfig:
614     default: {}
615     description: |
616       BlockStorage specific configuration to inject into the cluster. Same
617       structure as ExtraConfig.
618     type: json
619   BlockStorageSchedulerHints:
620     type: json
621     description: Optional scheduler hints to pass to nova
622     default: {}
623
624
625 # Object storage specific parameters
626   ObjectStorageCount:
627     type: number
628     default: 0
629   OvercloudSwiftStorageFlavor:
630     description: Flavor for Swift storage nodes to request when deploying.
631     default: baremetal
632     type: string
633     constraints:
634       - custom_constraint: nova.flavor
635   SwiftStorageImage:
636     default: overcloud-full
637     type: string
638   ObjectStorageExtraConfig:
639     default: {}
640     description: |
641       ObjectStorage specific configuration to inject into the cluster. Same
642       structure as ExtraConfig.
643     type: json
644   ObjectStorageSchedulerHints:
645     type: json
646     description: Optional scheduler hints to pass to nova
647     default: {}
648   ObjectStorageServices:
649     default:
650       - OS::TripleO::Services::Ntp
651     description: A list of service resources (configured in the Heat
652                  resource_registry) which represent nested stacks
653                  for each service that should get installed on the ObjectStorage nodes.
654                  Note this role currently only supports steps 2, 3 and 4 configuration.
655     type: comma_delimited_list
656
657
658 # Ceph storage specific parameters
659   CephStorageCount:
660     type: number
661     default: 0
662   CephStorageImage:
663     default: overcloud-full
664     type: string
665   OvercloudCephStorageFlavor:
666     default: baremetal
667     description: Flavor for Ceph storage nodes to request when deploying.
668     type: string
669     constraints:
670       - custom_constraint: nova.flavor
671   CephStorageExtraConfig:
672     default: {}
673     description: |
674       CephStorage specific configuration to inject into the cluster. Same
675       structure as ExtraConfig.
676     type: json
677   CephStorageSchedulerHints:
678     type: json
679     description: Optional scheduler hints to pass to nova
680     default: {}
681   CephStorageServices:
682     default:
683       - OS::TripleO::Services::Ntp
684     description: A list of service resources (configured in the Heat
685                  resource_registry) which represent nested stacks
686                  for each service that should get installed on the CephStorage nodes.
687     type: comma_delimited_list
688
689   # Hostname format for each role
690   # Note %index% is translated into the index of the node, e.g 0/1/2 etc
691   # and %stackname% is replaced with OS::stack_name in the template below.
692   # If you want to use the heat generated names, pass '' (empty string).
693   ControllerHostnameFormat:
694     type: string
695     description: Format for Controller node hostnames
696     default: '%stackname%-controller-%index%'
697   ComputeHostnameFormat:
698     type: string
699     description: Format for Compute node hostnames
700     default: '%stackname%-novacompute-%index%'
701   BlockStorageHostnameFormat:
702     type: string
703     description: Format for BlockStorage node hostnames
704     default: '%stackname%-blockstorage-%index%'
705   ObjectStorageHostnameFormat:
706     type: string
707     description: Format for SwiftStorage node hostnames
708     default: '%stackname%-objectstorage-%index%'
709   CephStorageHostnameFormat:
710     type: string
711     description: Format for CephStorage node hostnames
712     default: '%stackname%-cephstorage-%index%'
713
714   # Identifiers to trigger tasks on nodes
715   UpdateIdentifier:
716     default: ''
717     type: string
718     description: >
719       Setting to a previously unused value during stack-update will trigger
720       package update on all nodes
721   DeployIdentifier:
722     default: ''
723     type: string
724     description: >
725       Setting this to a unique value will re-run any deployment tasks which
726       perform configuration on a Heat stack-update.
727
728   # If you want to remove a specific node from a resource group, you can pass
729   # the node name or id as a <Group>RemovalPolicies parameter, for example:
730   # ComputeRemovalPolicies: [{'resource_list': ['0']}]
731   ControllerRemovalPolicies:
732     default: []
733     type: json
734     description: >
735       List of resources to be removed from ControllerResourceGroup when
736       doing an update which requires removal of specific resources.
737   ComputeRemovalPolicies:
738     default: []
739     type: json
740     description: >
741       List of resources to be removed from ComputeResourceGroup when
742       doing an update which requires removal of specific resources.
743   BlockStorageRemovalPolicies:
744     default: []
745     type: json
746     description: >
747       List of resources to be removed from BlockStorageResourceGroup when
748       doing an update which requires removal of specific resources.
749   ObjectStorageRemovalPolicies:
750     default: []
751     type: json
752     description: >
753       List of resources to be removed from ObjectStorageResourceGroup when
754       doing an update which requires removal of specific resources.
755   CephStorageRemovalPolicies:
756     default: []
757     type: json
758     description: >
759       List of resources to be removed from CephStorageResourceGroup when
760       doing an update which requires removal of specific resources.
761
762 parameter_groups:
763 - label: deprecated
764   description: Do not use deprecated params, they will be removed.
765   parameters:
766   - controllerExtraConfig
767
768
769 resources:
770
771   HeatAuthEncryptionKey:
772     type: OS::Heat::RandomString
773
774   PcsdPassword:
775     type: OS::Heat::RandomString
776     properties:
777       length: 16
778
779   HorizonSecret:
780     type: OS::Heat::RandomString
781     properties:
782       length: 10
783
784   EndpointMap:
785     type: OS::TripleO::EndpointMap
786     properties:
787       CloudName: {get_param: CloudName}
788       CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
789       AodhApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
790       CinderApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
791       GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
792       GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
793       GnocchiApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
794       HeatApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
795       KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
796       KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
797       MysqlVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
798       NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
799       NovaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
800       SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
801       SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
802       PublicVirtualIP: {get_attr: [VipMap, net_ip_uri_map, external]}
803
804   ControllerServiceChain:
805     type: OS::TripleO::Services
806     depends_on: Networks
807     properties:
808       Services: {get_param: ControllerServices}
809       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
810
811   Controller:
812     type: OS::Heat::ResourceGroup
813     depends_on: Networks
814     properties:
815       count: {get_param: ControllerCount}
816       removal_policies: {get_param: ControllerRemovalPolicies}
817       resource_def:
818         type: OS::TripleO::Controller
819         properties:
820           AdminPassword: {get_param: AdminPassword}
821           AodhPassword: {get_param: AodhPassword}
822           CloudDomain: {get_param: CloudDomain}
823           ControlVirtualInterface: {get_param: ControlVirtualInterface}
824           controllerExtraConfig: {get_param: controllerExtraConfig}
825           CorosyncIPv6: {get_param: CorosyncIPv6}
826           Debug: {get_param: Debug}
827           EnableFencing: {get_param: EnableFencing}
828           ManageFirewall: {get_param: ManageFirewall}
829           PurgeFirewallRules: {get_param: PurgeFirewallRules}
830           EnableGalera: {get_param: EnableGalera}
831           EnableCephStorage: {get_param: ControllerEnableCephStorage}
832           EnableSwiftStorage: {get_param: ControllerEnableSwiftStorage}
833           ExtraConfig: {get_param: ExtraConfig}
834           FencingConfig: {get_param: FencingConfig}
835           Flavor: {get_param: OvercloudControlFlavor}
836           GnocchiPassword: {get_param: GnocchiPassword}
837           GnocchiBackend: {get_param: GnocchiBackend}
838           GnocchiIndexerBackend: {get_param: GnocchiIndexerBackend}
839           HAProxySyslogAddress: {get_param: HAProxySyslogAddress}
840           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
841           HorizonAllowedHosts: {get_param: HorizonAllowedHosts}
842           HorizonSecret: {get_resource: HorizonSecret}
843           Image: {get_param: controllerImage}
844           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
845           InstanceNameTemplate: {get_param: InstanceNameTemplate}
846           KeyName: {get_param: KeyName}
847           MemcachedIPv6: {get_param: MemcachedIPv6}
848           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
849           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
850           MysqlMaxConnections: {get_param: MysqlMaxConnections}
851           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
852           NeutronTenantMtu: {get_param: NeutronTenantMtu}
853           NeutronPublicInterface: {get_param: NeutronPublicInterface}
854           NeutronPassword: {get_param: NeutronPassword}
855           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
856           NovaIPv6: {get_param: NovaIPv6}
857           NovaPassword: {get_param: NovaPassword}
858           PcsdPassword: {get_resource: PcsdPassword}
859           PublicVirtualInterface: {get_param: PublicVirtualInterface}
860           RabbitPassword: {get_param: RabbitPassword}
861           RabbitUserName: {get_param: RabbitUserName}
862           RabbitCookie: {get_attr: [RabbitCookie, value]}
863           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
864           RabbitClientPort: {get_param: RabbitClientPort}
865           RedisPassword: {get_param: RedisPassword}
866           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
867           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
868           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
869           RedisVirtualIPUri: {get_attr: [RedisVirtualIP, ip_address_uri]}
870           SwiftHashSuffix: {get_param: SwiftHashSuffix}
871           SwiftMountCheck: {get_param: SwiftMountCheck}
872           SwiftMinPartHours: {get_param: SwiftMinPartHours}
873           SwiftPartPower: {get_param: SwiftPartPower}
874           SwiftReplicas: { get_param: SwiftReplicas}
875           TimeZone: {get_param: TimeZone}
876           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]} # deprecated. Use per service VIP settings instead now.
877           PublicVirtualIP: {get_attr: [VipMap, net_ip_map, external]}
878           ServiceNetMap: {get_param: ServiceNetMap}
879           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
880           CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
881           AodhApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
882           GnocchiApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
883           CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
884           HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
885           HeatApiVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
886           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
887           SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
888           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
889           NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
890           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
891           SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
892           UpdateIdentifier: {get_param: UpdateIdentifier}
893           Hostname:
894             str_replace:
895               template: {get_param: ControllerHostnameFormat}
896               params:
897                 '%stackname%': {get_param: 'OS::stack_name'}
898           NodeIndex: '%index%'
899           ServerMetadata: {get_param: ServerMetadata}
900           SchedulerHints: {get_param: ControllerSchedulerHints}
901           ServiceConfigSettings: {get_attr: [ControllerServiceChain, config_settings]}
902
903   ComputeServiceChain:
904     type: OS::TripleO::Services
905     properties:
906       Services: {get_param: ComputeServices}
907       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
908
909   Compute:
910     type: OS::Heat::ResourceGroup
911     depends_on: Networks
912     properties:
913       count: {get_param: ComputeCount}
914       removal_policies: {get_param: ComputeRemovalPolicies}
915       resource_def:
916         type: OS::TripleO::Compute
917         properties:
918           AdminPassword: {get_param: AdminPassword}
919           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
920           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
921           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
922           Debug: {get_param: Debug}
923           ExtraConfig: {get_param: ExtraConfig}
924           Flavor: {get_param: OvercloudComputeFlavor}
925           GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
926           Image: {get_param: NovaImage}
927           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
928           KeyName: {get_param: KeyName}
929           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
930           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
931           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
932           NeutronTenantMtu: {get_param: NeutronTenantMtu}
933           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
934           NeutronEnableL2Pop : {get_param: NeutronEnableL2Pop}
935           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
936           NeutronHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
937           NeutronNetworkType: {get_param: NeutronNetworkType}
938           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
939           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
940           NeutronPassword: {get_param: NeutronPassword}
941           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
942           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
943           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
944           NeutronCorePlugin: {get_param: NeutronCorePlugin}
945           NeutronServicePlugins: {get_param: NeutronServicePlugins}
946           NeutronTypeDrivers: {get_param: NeutronTypeDrivers}
947           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
948           NeutronAgentExtensions: {get_param: NeutronAgentExtensions}
949           # L3 HA and Failover is not relevant for Computes, should be removed
950           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
951           NeutronL3HA: {get_param: NeutronL3HA}
952           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
953           NovaComputeDriver: {get_param: NovaComputeDriver}
954           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
955           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
956           NovaComputeLibvirtVifDriver: {get_param: NovaComputeLibvirtVifDriver}
957           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
958           NovaIPv6: {get_param: NovaIPv6}
959           NovaPublicIP: {get_attr: [VipMap, net_ip_map, external]}
960           NovaPassword: {get_param: NovaPassword}
961           NovaOVSBridge: {get_param: NovaOVSBridge}
962           NovaSecurityGroupAPI: {get_param: NovaSecurityGroupAPI}
963           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
964           RabbitPassword: {get_param: RabbitPassword}
965           RabbitUserName: {get_param: RabbitUserName}
966           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
967           RabbitClientPort: {get_param: RabbitClientPort}
968           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
969           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
970           ServiceNetMap: {get_param: ServiceNetMap}
971           TimeZone: {get_param: TimeZone}
972           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
973           UpdateIdentifier: {get_param: UpdateIdentifier}
974           Hostname:
975             str_replace:
976               template: {get_param: ComputeHostnameFormat}
977               params:
978                 '%stackname%': {get_param: 'OS::stack_name'}
979           CloudDomain: {get_param: CloudDomain}
980           ServerMetadata: {get_param: ServerMetadata}
981           SchedulerHints: {get_param: NovaComputeSchedulerHints}
982           NodeIndex: '%index%'
983           ServiceConfigSettings: {get_attr: [ComputeServiceChain, config_settings]}
984
985
986   BlockStorage:
987     type: OS::Heat::ResourceGroup
988     depends_on: Networks
989     properties:
990       count: {get_param: BlockStorageCount}
991       removal_policies: {get_param: BlockStorageRemovalPolicies}
992       resource_def:
993         type: OS::TripleO::BlockStorage
994         properties:
995           Debug: {get_param: Debug}
996           Image: {get_param: BlockStorageImage}
997           CinderISCSIHelper: {get_param: CinderISCSIHelper}
998           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
999           # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
1000           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
1001           CinderPassword: {get_param: CinderPassword}
1002           KeyName: {get_param: KeyName}
1003           Flavor: {get_param: OvercloudBlockStorageFlavor}
1004           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]}
1005           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1006           RabbitPassword: {get_param: RabbitPassword}
1007           RabbitUserName: {get_param: RabbitUserName}
1008           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
1009           RabbitClientPort: {get_param: RabbitClientPort}
1010           TimeZone: {get_param: TimeZone}
1011           NtpServer: {get_param: NtpServer}
1012           UpdateIdentifier: {get_param: UpdateIdentifier}
1013           Hostname:
1014             str_replace:
1015               template: {get_param: BlockStorageHostnameFormat}
1016               params:
1017                 '%stackname%': {get_param: 'OS::stack_name'}
1018           ServiceNetMap: {get_param: ServiceNetMap}
1019           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1020           ExtraConfig: {get_param: ExtraConfig}
1021           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
1022           CloudDomain: {get_param: CloudDomain}
1023           ServerMetadata: {get_param: ServerMetadata}
1024           SchedulerHints: {get_param: BlockStorageSchedulerHints}
1025           NodeIndex: '%index%'
1026
1027   ObjectStorageServiceChain:
1028     type: OS::TripleO::Services
1029     properties:
1030       Services: {get_param: ObjectStorageServices}
1031       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1032
1033   ObjectStorage:
1034     type: OS::Heat::ResourceGroup
1035     depends_on: Networks
1036     properties:
1037       count: {get_param: ObjectStorageCount}
1038       removal_policies: {get_param: ObjectStorageRemovalPolicies}
1039       resource_def:
1040         type: OS::TripleO::ObjectStorage
1041         properties:
1042           KeyName: {get_param: KeyName}
1043           Flavor: {get_param: OvercloudSwiftStorageFlavor}
1044           HashSuffix: {get_param: SwiftHashSuffix}
1045           MountCheck: {get_param: SwiftMountCheck}
1046           MinPartHours: {get_param: SwiftMinPartHours}
1047           PartPower: {get_param: SwiftPartPower}
1048           Image: {get_param: SwiftStorageImage}
1049           Replicas: { get_param: SwiftReplicas}
1050           TimeZone: {get_param: TimeZone}
1051           UpdateIdentifier: {get_param: UpdateIdentifier}
1052           ServiceNetMap: {get_param: ServiceNetMap}
1053           Hostname:
1054             str_replace:
1055               template: {get_param: ObjectStorageHostnameFormat}
1056               params:
1057                 '%stackname%': {get_param: 'OS::stack_name'}
1058           ExtraConfig: {get_param: ExtraConfig}
1059           ObjectStorageExtraConfig: {get_param: ObjectStorageExtraConfig}
1060           CloudDomain: {get_param: CloudDomain}
1061           ServerMetadata: {get_param: ServerMetadata}
1062           SchedulerHints: {get_param: ObjectStorageSchedulerHints}
1063           NodeIndex: '%index%'
1064           ServiceConfigSettings: {get_attr: [ObjectStorageServiceChain, config_settings]}
1065
1066   CephStorageServiceChain:
1067     type: OS::TripleO::Services
1068     properties:
1069       Services: {get_param: CephStorageServices}
1070       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1071
1072   CephStorage:
1073     type: OS::Heat::ResourceGroup
1074     depends_on: Networks
1075     properties:
1076       count: {get_param: CephStorageCount}
1077       removal_policies: {get_param: CephStorageRemovalPolicies}
1078       resource_def:
1079         type: OS::TripleO::CephStorage
1080         properties:
1081           Image: {get_param: CephStorageImage}
1082           KeyName: {get_param: KeyName}
1083           Flavor: {get_param: OvercloudCephStorageFlavor}
1084           ServiceNetMap: {get_param: ServiceNetMap}
1085           TimeZone: {get_param: TimeZone}
1086           UpdateIdentifier: {get_param: UpdateIdentifier}
1087           Hostname:
1088             str_replace:
1089               template: {get_param: CephStorageHostnameFormat}
1090               params:
1091                 '%stackname%': {get_param: 'OS::stack_name'}
1092           ExtraConfig: {get_param: ExtraConfig}
1093           CephStorageExtraConfig: {get_param: CephStorageExtraConfig}
1094           CloudDomain: {get_param: CloudDomain}
1095           ServerMetadata: {get_param: ServerMetadata}
1096           SchedulerHints: {get_param: CephStorageSchedulerHints}
1097           NodeIndex: '%index%'
1098           ServiceConfigSettings: {get_attr: [CephStorageServiceChain, config_settings]}
1099
1100   ControllerIpListMap:
1101     type: OS::TripleO::Network::Ports::NetIpListMap
1102     properties:
1103       ControlPlaneIpList: {get_attr: [Controller, ip_address]}
1104       ExternalIpList: {get_attr: [Controller, external_ip_address]}
1105       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
1106       StorageIpList: {get_attr: [Controller, storage_ip_address]}
1107       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
1108       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
1109       ManagementIpList: {get_attr: [Controller, management_ip_address]}
1110
1111   allNodesConfig:
1112     type: OS::TripleO::AllNodes::SoftwareConfig
1113     properties:
1114       compute_hosts: {get_attr: [Compute, hosts_entry]}
1115       controller_hosts: {get_attr: [Controller, hosts_entry]}
1116       controller_ips: {get_attr: [Controller, ip_address]}
1117       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
1118       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
1119       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
1120       controller_names: {get_attr: [Controller, hostname]}
1121       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1122       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
1123       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
1124       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1125       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1126       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1127       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1128       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1129       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1130       aodh_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1131       gnocchi_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1132       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1133       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1134       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1135       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1136       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1137       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1138       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1139       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1140       sahara_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1141       DeployIdentifier: {get_param: DeployIdentifier}
1142       UpdateIdentifier: {get_param: UpdateIdentifier}
1143
1144   MysqlRootPassword:
1145     type: OS::Heat::RandomString
1146     properties:
1147       length: 10
1148
1149   MysqlClusterUniquePart:
1150     type: OS::Heat::RandomString
1151     properties:
1152       length: 10
1153
1154   RabbitCookie:
1155     type: OS::Heat::RandomString
1156     properties:
1157       length: 20
1158       salt: {get_param: RabbitCookieSalt}
1159
1160   # creates the network architecture
1161   Networks:
1162     type: OS::TripleO::Network
1163
1164   ControlVirtualIP:
1165     type: OS::Neutron::Port
1166     depends_on: Networks
1167     properties:
1168       name: control_virtual_ip
1169       network: {get_param: NeutronControlPlaneID}
1170       fixed_ips: {get_param: ControlFixedIPs}
1171       replacement_policy: AUTO
1172
1173   RedisVirtualIP:
1174     depends_on: Networks
1175     type: OS::TripleO::Network::Ports::RedisVipPort
1176     properties:
1177       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1178       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1179       PortName: redis_virtual_ip
1180       NetworkName: {get_param: [ServiceNetMap, RedisNetwork]}
1181       ServiceName: redis
1182
1183   # The public VIP is on the External net, falls back to ctlplane
1184   PublicVirtualIP:
1185     depends_on: Networks
1186     type: OS::TripleO::Network::Ports::ExternalVipPort
1187     properties:
1188       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1189       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1190       PortName: public_virtual_ip
1191       FixedIPs: {get_param: PublicVirtualFixedIPs}
1192
1193   InternalApiVirtualIP:
1194     depends_on: Networks
1195     type: OS::TripleO::Network::Ports::InternalApiVipPort
1196     properties:
1197       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1198       PortName: internal_api_virtual_ip
1199       FixedIPs: {get_param: InternalApiVirtualFixedIPs}
1200
1201   StorageVirtualIP:
1202     depends_on: Networks
1203     type: OS::TripleO::Network::Ports::StorageVipPort
1204     properties:
1205       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1206       PortName: storage_virtual_ip
1207       FixedIPs: {get_param: StorageVirtualFixedIPs}
1208
1209   StorageMgmtVirtualIP:
1210     depends_on: Networks
1211     type: OS::TripleO::Network::Ports::StorageMgmtVipPort
1212     properties:
1213       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1214       PortName: storage_management_virtual_ip
1215       FixedIPs: {get_param: StorageMgmtVirtualFixedIPs}
1216
1217   VipMap:
1218     type: OS::TripleO::Network::Ports::NetVipMap
1219     properties:
1220       ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1221       ExternalIp: {get_attr: [PublicVirtualIP, ip_address]}
1222       ExternalIpUri: {get_attr: [PublicVirtualIP, ip_address_uri]}
1223       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
1224       InternalApiIpUri: {get_attr: [InternalApiVirtualIP, ip_address_uri]}
1225       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
1226       StorageIpUri: {get_attr: [StorageVirtualIP, ip_address_uri]}
1227       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
1228       StorageMgmtIpUri: {get_attr: [StorageMgmtVirtualIP, ip_address_uri]}
1229       # No tenant or management VIP required
1230
1231   VipConfig:
1232     type: OS::TripleO::VipConfig
1233
1234   VipDeployment:
1235     type: OS::Heat::StructuredDeployments
1236     properties:
1237       name: VipDeployment
1238       config: {get_resource: VipConfig}
1239       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1240       input_values:
1241         # service VIP mappings
1242         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1243         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1244         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1245         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1246         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1247         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1248         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1249         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1250         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1251         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1252         aodh_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1253         gnocchi_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1254         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1255         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1256         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
1257         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1258         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1259         # direct configuration of Virtual IPs for each network
1260         control_virtual_ip: {get_attr: [VipMap, net_ip_map, ctlplane]}
1261         public_virtual_ip: {get_attr: [VipMap, net_ip_map, external]}
1262         internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
1263         sahara_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1264         storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
1265         storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
1266
1267   ControllerBootstrapNodeConfig:
1268     type: OS::TripleO::BootstrapNode::SoftwareConfig
1269     properties:
1270       bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
1271       bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
1272
1273   ControllerBootstrapNodeDeployment:
1274     type: OS::Heat::StructuredDeployments
1275     properties:
1276       name: ControllerBootstrapNodeDeployment
1277       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
1278       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1279
1280   ControllerSwiftDeployment:
1281     type: OS::Heat::StructuredDeployments
1282     properties:
1283       name: ControllerSwiftDeployment
1284       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1285       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1286
1287   ObjectStorageSwiftDeployment:
1288     type: OS::Heat::StructuredDeployments
1289     properties:
1290       name: ObjectStorageSwiftDeployment
1291       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1292       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1293
1294   SwiftDevicesAndProxyConfig:
1295     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
1296     properties:
1297       controller_swift_devices: {get_attr: [Controller, swift_device]}
1298       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
1299       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
1300
1301   ComputeCephDeployment:
1302     type: OS::Heat::StructuredDeployments
1303     properties:
1304       name: ComputeCephDeployment
1305       config: {get_attr: [CephClusterConfig, config_id]}
1306       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1307
1308   ControllerCephDeployment:
1309     type: OS::Heat::StructuredDeployments
1310     properties:
1311       name: ControllerCephDeployment
1312       config: {get_attr: [CephClusterConfig, config_id]}
1313       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1314
1315   CephStorageCephDeployment:
1316     type: OS::Heat::StructuredDeployments
1317     properties:
1318       name: CephStorageCephDeployment
1319       config: {get_attr: [CephClusterConfig, config_id]}
1320       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1321
1322   CephClusterConfig:
1323     type: OS::TripleO::CephClusterConfig::SoftwareConfig
1324     properties:
1325       ceph_storage_count: {get_param: CephStorageCount}
1326       ceph_fsid: {get_param: CephClusterFSID}
1327       ceph_mon_key: {get_param: CephMonKey}
1328       ceph_admin_key: {get_param: CephAdminKey}
1329       ceph_client_key: {get_param: CephClientKey}
1330       ceph_external_mon_ips: {get_param: CephExternalMonHost}
1331       ceph_mon_names: {get_attr: [Controller, hostname]}
1332       ceph_mon_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1333
1334   ControllerAllNodesDeployment:
1335     type: OS::Heat::StructuredDeployments
1336     properties:
1337       name: ControllerAllNodesDeployment
1338       config: {get_attr: [allNodesConfig, config_id]}
1339       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1340
1341   ComputeAllNodesDeployment:
1342     type: OS::Heat::StructuredDeployments
1343     properties:
1344       name: ComputeAllNodesDeployment
1345       config: {get_attr: [allNodesConfig, config_id]}
1346       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1347
1348   BlockStorageAllNodesDeployment:
1349     type: OS::Heat::StructuredDeployments
1350     properties:
1351       name: BlockStorageAllNodesDeployment
1352       config: {get_attr: [allNodesConfig, config_id]}
1353       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1354
1355   ObjectStorageAllNodesDeployment:
1356     type: OS::Heat::StructuredDeployments
1357     properties:
1358       name: ObjectStorageAllNodesDeployment
1359       config: {get_attr: [allNodesConfig, config_id]}
1360       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1361
1362   CephStorageAllNodesDeployment:
1363     type: OS::Heat::StructuredDeployments
1364     properties:
1365       name: CephStorageAllNodesDeployment
1366       config: {get_attr: [allNodesConfig, config_id]}
1367       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1368
1369   # All Nodes Validations
1370   AllNodesValidationConfig:
1371     type: OS::TripleO::AllNodes::Validation
1372     properties:
1373       PingTestIps:
1374         list_join:
1375         - ' '
1376         - - {get_attr: [Controller, resource.0.external_ip_address]}
1377           - {get_attr: [Controller, resource.0.internal_api_ip_address]}
1378           - {get_attr: [Controller, resource.0.storage_ip_address]}
1379           - {get_attr: [Controller, resource.0.storage_mgmt_ip_address]}
1380           - {get_attr: [Controller, resource.0.tenant_ip_address]}
1381
1382   ControllerAllNodesValidationDeployment:
1383     type: OS::Heat::StructuredDeployments
1384     depends_on: ControllerAllNodesDeployment
1385     properties:
1386       name: ControllerAllNodesValidationDeployment
1387       config: {get_resource: AllNodesValidationConfig}
1388       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1389
1390   ComputeAllNodesValidationDeployment:
1391     type: OS::Heat::StructuredDeployments
1392     depends_on: ComputeAllNodesDeployment
1393     properties:
1394       name: ComputeAllNodesValidationDeployment
1395       config: {get_resource: AllNodesValidationConfig}
1396       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1397
1398   BlockStorageAllNodesValidationDeployment:
1399     type: OS::Heat::StructuredDeployments
1400     depends_on: BlockStorageAllNodesDeployment
1401     properties:
1402       name: BlockStorageAllNodesValidationDeployment
1403       config: {get_resource: AllNodesValidationConfig}
1404       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1405
1406   ObjectStorageAllNodesValidationDeployment:
1407     type: OS::Heat::StructuredDeployments
1408     depends_on: ObjectStorageAllNodesDeployment
1409     properties:
1410       name: ObjectStorageAllNodesValidationDeployment
1411       config: {get_resource: AllNodesValidationConfig}
1412       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1413
1414   CephStorageAllNodesValidationDeployment:
1415     type: OS::Heat::StructuredDeployments
1416     depends_on: CephStorageAllNodesDeployment
1417     properties:
1418       name: CephStorageAllNodesValidationDeployment
1419       config: {get_resource: AllNodesValidationConfig}
1420       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1421
1422   UpdateWorkflow:
1423     type: OS::TripleO::Tasks::UpdateWorkflow
1424     properties:
1425       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1426       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1427       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1428       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1429       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1430       input_values:
1431         deploy_identifier: {get_param: DeployIdentifier}
1432         update_identifier: {get_param: UpdateIdentifier}
1433
1434   # Optional ExtraConfig for all nodes - all roles are passed in here, but
1435   # the nested template may configure each role differently (or not at all)
1436   AllNodesExtraConfig:
1437     type: OS::TripleO::AllNodesExtraConfig
1438     depends_on:
1439       - UpdateWorkflow
1440       - ComputeAllNodesValidationDeployment
1441       - BlockStorageAllNodesValidationDeployment
1442       - ObjectStorageAllNodesValidationDeployment
1443       - CephStorageAllNodesValidationDeployment
1444       - ControllerAllNodesValidationDeployment
1445     properties:
1446       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1447       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1448       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1449       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1450       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1451
1452   # Nested stack deployment runs after all other controller deployments
1453   ControllerNodesPostDeployment:
1454     type: OS::TripleO::ControllerPostDeployment
1455     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
1456     properties:
1457       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1458       NodeConfigIdentifiers:
1459         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1460         controller_config: {get_attr: [Controller, attributes, config_identifier]}
1461         deployment_identifier: {get_param: DeployIdentifier}
1462       StepConfig: {get_attr: [ControllerServiceChain, step_config]}
1463
1464   ComputeNodesPostDeployment:
1465     type: OS::TripleO::ComputePostDeployment
1466     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
1467     properties:
1468       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1469       NodeConfigIdentifiers:
1470         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1471         compute_config: {get_attr: [Compute, attributes, config_identifier]}
1472         deployment_identifier: {get_param: DeployIdentifier}
1473       StepConfig: {get_attr: [ComputeServiceChain, step_config]}
1474
1475   ObjectStorageNodesPostDeployment:
1476     type: OS::TripleO::ObjectStoragePostDeployment
1477     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
1478     properties:
1479       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1480       NodeConfigIdentifiers:
1481         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1482         objectstorage_config: {get_attr: [ObjectStorage, attributes, config_identifier]}
1483         deployment_identifier: {get_param: DeployIdentifier}
1484       StepConfig: {get_attr: [ObjectStorageServiceChain, step_config]}
1485
1486   BlockStorageNodesPostDeployment:
1487     type: OS::TripleO::BlockStoragePostDeployment
1488     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
1489     properties:
1490       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1491       NodeConfigIdentifiers:
1492         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1493         blockstorage_config: {get_attr: [BlockStorage, attributes, config_identifier]}
1494         deployment_identifier: {get_param: DeployIdentifier}
1495
1496   CephStorageNodesPostDeployment:
1497     type: OS::TripleO::CephStoragePostDeployment
1498     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
1499     properties:
1500       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1501       NodeConfigIdentifiers:
1502         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1503         cephstorage_config: {get_attr: [CephStorage, attributes, config_identifier]}
1504         deployment_identifier: {get_param: DeployIdentifier}
1505       StepConfig: {get_attr: [CephStorageServiceChain, step_config]}
1506
1507 outputs:
1508   KeystoneURL:
1509     description: URL for the Overcloud Keystone service
1510     value: {get_attr: [EndpointMap, endpoint_map, KeystonePublic, uri]}
1511   KeystoneAdminVip:
1512     description: Keystone Admin VIP endpoint
1513     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1514   PublicVip:
1515     description: Controller VIP for public API endpoints
1516     value: {get_attr: [VipMap, net_ip_map, external]}
1517   AodhInternalVip:
1518     description: VIP for Aodh API internal endpoint
1519     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1520   CeilometerInternalVip:
1521     description: VIP for Ceilometer API internal endpoint
1522     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1523   CinderInternalVip:
1524     description: VIP for Cinder API internal endpoint
1525     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1526   GlanceInternalVip:
1527     description: VIP for Glance API internal endpoint
1528     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1529   GnocchiInternalVip:
1530     description: VIP for Gnocchi API internal endpoint
1531     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1532   HeatInternalVip:
1533     description: VIP for Heat API internal endpoint
1534     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1535   KeystoneInternalVip:
1536     description: VIP for Keystone API internal endpoint
1537     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1538   NeutronInternalVip:
1539     description: VIP for Neutron API internal endpoint
1540     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1541   NovaInternalVip:
1542     description: VIP for Nova API internal endpoint
1543     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1544   SaharaInternalVip:
1545     description: VIP for Sahara API internal endpoint
1546     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1547   SwiftInternalVip:
1548     description: VIP for Swift Proxy internal endpoint
1549     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1550   EndpointMap:
1551     description: |
1552       Mapping of the resources with the needed info for their endpoints.
1553       This includes the protocol used, the IP, port and also a full
1554       representation of the URI.
1555     value: {get_attr: [EndpointMap, endpoint_map]}
1556   HostsEntry:
1557     description: |
1558       The content that should be appended to your /etc/hosts if you want to get
1559       hostname-based access to the deployed nodes (useful for testing without
1560       setting up a DNS).
1561     value: {get_attr: [allNodesConfig, hosts_entries]}