Merge "Don't store Nova DB credentials on compute nodes"
[apex-tripleo-heat-templates.git] / compute.yaml
1 heat_template_version: 2014-10-16
2
3 description: >
4   OpenStack hypervisor 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   CeilometerComputeAgent:
13     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
14     type: string
15     default: ''
16     constraints:
17     - allowed_values: ['', Present]
18   CeilometerDSN:
19     type: string
20   CeilometerMeteringSecret:
21     default: unset
22     description: Secret shared by the ceilometer services.
23     type: string
24     hidden: true
25   CeilometerPassword:
26     default: unset
27     description: The password for the ceilometer service account.
28     type: string
29     hidden: true
30   Debug:
31     default: ''
32     description: Set to True to enable debugging on all services.
33     type: string
34   ExtraConfig:
35     default: {}
36     description: |
37       Additional configuration to inject into the cluster. The JSON should have
38       the following structure:
39         {"FILEKEY":
40           {"config":
41             [{"section": "SECTIONNAME",
42               "values":
43                 [{"option": "OPTIONNAME",
44                   "value": "VALUENAME"
45                  }
46                 ]
47              }
48             ]
49           }
50         }
51       For instance:
52         {"nova":
53           {"config":
54             [{"section": "default",
55               "values":
56                 [{"option": "force_config_drive",
57                   "value": "always"
58                  }
59                 ]
60              },
61              {"section": "cells",
62               "values":
63                 [{"option": "driver",
64                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
65                  }
66                 ]
67              }
68             ]
69           }
70         }
71     type: json
72   Flavor:
73     description: Flavor for the nova compute node
74     type: string
75     constraints:
76       - custom_constraint: nova.flavor
77   GlanceHost:
78     type: string
79     default: ''  # Has to be here because of the ignored empty value bug
80   GlancePort:
81     default: "9292"
82     description: Glance port.
83     type: string
84   GlanceProtocol:
85     default: http
86     description: Protocol to use when connecting to glance, set to https for SSL.
87     type: string
88   Image:
89     type: string
90     default: overcloud-compute
91     constraints:
92       - custom_constraint: glance.image
93   ImageUpdatePolicy:
94     default: 'REBUILD_PRESERVE_EPHEMERAL'
95     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
96     type: string
97   KeyName:
98     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
99     type: string
100     default: default
101     constraints:
102       - custom_constraint: nova.keypair
103   KeystoneHost:
104     type: string
105     default: ''
106   NeutronBridgeMappings:
107     description: >
108       The OVS logical->physical bridge mappings to use. See the Neutron
109       documentation for details. Defaults to mapping br-ex - the external
110       bridge on hosts - to a physical name 'datacentre' which can be used
111       to create provider networks (and we use this for the default floating
112       network) - if changing this either use different post-install network
113       scripts or be sure to keep 'datacentre' as a mapping network name.
114     type: string
115     default: ""
116   NeutronDSN:
117     type: string
118   NeutronEnableTunnelling:
119     type: string
120     default: "True"
121   NeutronFlatNetworks:
122     type: string
123     default: ''
124     description: >
125       If set, flat networks to configure in neutron plugins.
126   NeutronHost:
127     type: string
128     default: ''  # Has to be here because of the ignored empty value bug
129   NeutronNetworkType:
130     type: string
131     description: The tenant network type for Neutron, either gre or vxlan.
132     default: 'gre'
133   NeutronNetworkVLANRanges:
134     default: 'datacentre'
135     description: >
136       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
137       Neutron documentation for permitted values. Defaults to permitting any
138       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
139     type: string
140   NeutronPassword:
141     default: unset
142     description: The password for the neutron service account, used by neutron agents.
143     type: string
144     hidden: true
145   NeutronPhysicalBridge:
146     default: ''
147     description: An OVS bridge to create for accessing external networks.
148     type: string
149   NeutronPublicInterface:
150     default: nic1
151     description: A port to add to the NeutronPhysicalBridge.
152     type: string
153   NeutronTunnelTypes:
154     type: string
155     description: |
156         The tunnel types for the Neutron tenant network. To specify multiple
157         values, use a comma separated string, like so: 'gre,vxlan'
158     default: 'gre'
159   NeutronPublicInterfaceRawDevice:
160     default: ''
161     type: string
162   NeutronDVR:
163     default: 'False'
164     type: string
165   NeutronMetadataProxySharedSecret:
166     default: 'unset'
167     description: Shared secret to prevent spoofing
168     type: string
169   NeutronMechanismDrivers:
170     default: 'openvswitch'
171     description: |
172         The mechanism drivers for the Neutron tenant network. To specify multiple
173         values, use a comma separated string, like so: 'openvswitch,l2_population'
174     type: string
175   NeutronAllowL3AgentFailover:
176     default: 'True'
177     description: Allow automatic l3-agent failover
178     type: string
179   NeutronAgentMode:
180     default: 'dvr_snat'
181     description: Agent mode for the neutron-l3-agent on the controller hosts
182     type: string
183   NovaApiHost:
184     type: string
185     default: ''  # Has to be here because of the ignored empty value bug
186   NovaComputeDriver:
187     type: string
188     default: libvirt.LibvirtDriver
189   NovaComputeExtraConfig:
190     default: {}
191     description: |
192       NovaCompute specific configuration to inject into the cluster. Same
193       structure as ExtraConfig.
194     type: json
195   NovaComputeLibvirtType:
196     type: string
197     default: ''
198   NovaPassword:
199     default: unset
200     description: The password for the nova service account, used by nova-api.
201     type: string
202     hidden: true
203   NovaPublicIP:
204     type: string
205     default: ''  # Has to be here because of the ignored empty value bug
206   NtpServer:
207     type: string
208     default: ''
209   RabbitHost:
210     type: string
211     default: ''  # Has to be here because of the ignored empty value bug
212   RabbitPassword:
213     default: guest
214     description: The password for RabbitMQ
215     type: string
216     hidden: true
217   RabbitUserName:
218     default: guest
219     description: The username for RabbitMQ
220     type: string
221   SnmpdReadonlyUserName:
222     default: ro_snmp_user
223     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
224     type: string
225   SnmpdReadonlyUserPassword:
226     default: unset
227     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
228     type: string
229     hidden: true
230
231
232 resources:
233
234   NovaCompute:
235     type: OS::Nova::Server
236     properties:
237       image:
238         {get_param: Image}
239       image_update_policy:
240         get_param: ImageUpdatePolicy
241       flavor: {get_param: Flavor}
242       key_name: {get_param: KeyName}
243       networks:
244         - network: ctlplane
245       user_data_format: SOFTWARE_CONFIG
246
247   NetworkConfig:
248     type: OS::TripleO::Net::SoftwareConfig
249
250   NetworkDeployment:
251     type: OS::TripleO::SoftwareDeployment
252     properties:
253       signal_transport: NO_SIGNAL
254       config: {get_attr: [NetworkConfig, config_id]}
255       server: {get_resource: NovaCompute}
256       input_values:
257         bridge_name: {get_param: NeutronPhysicalBridge}
258         interface_name: {get_param: NeutronPublicInterface}
259
260   NovaComputeConfig:
261     type: OS::TripleO::Compute::SoftwareConfig
262
263   NovaComputeDeployment:
264     type: OS::TripleO::SoftwareDeployment
265     properties:
266       signal_transport: NO_SIGNAL
267       config: {get_attr: [NovaComputeConfig, config_id]}
268       server: {get_resource: NovaCompute}
269       input_values:
270         debug: {get_param: Debug}
271         nova_compute_driver: {get_param: NovaComputeDriver}
272         nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
273         nova_public_ip: {get_param: NovaPublicIP}
274         nova_api_host: {get_param: NovaApiHost}
275         nova_password: {get_param: NovaPassword}
276         ceilometer_dsn: {get_param: CeilometerDSN}
277         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
278         ceilometer_password: {get_param: CeilometerPassword}
279         ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
280         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
281         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
282         glance_host: {get_param: GlanceHost}
283         glance_port: {get_param: GlancePort}
284         glance_protocol: {get_param: GlanceProtocol}
285         keystone_host: {get_param: KeystoneHost}
286         neutron_flat_networks: {get_param: NeutronFlatNetworks}
287         neutron_host: {get_param: NeutronHost}
288         neutron_dsn: {get_param: NeutronDSN}
289         neutron_local_ip: {get_attr: [NovaCompute, networks, ctlplane, 0]}
290         neutron_tenant_network_type: {get_param: NeutronNetworkType}
291         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
292         neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
293         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
294         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
295         neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
296         neutron_public_interface: {get_param: NeutronPublicInterface}
297         neutron_password: {get_param: NeutronPassword}
298         neutron_agent_mode: {get_param: NeutronAgentMode}
299         neutron_router_distributed: {get_param: NeutronDVR}
300         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
301         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
302         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
303         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
304         admin_password: {get_param: AdminPassword}
305         rabbit_host: {get_param: RabbitHost}
306         rabbit_username: {get_param: RabbitUserName}
307         rabbit_password: {get_param: RabbitPassword}
308         ntp_server: {get_param: NtpServer}
309
310   NovaComputePassthrough:
311     type: OS::Heat::StructuredConfig
312     properties:
313       group: os-apply-config
314       config: {get_input: passthrough_config}
315
316   NovaComputePassthroughSpecific:
317     type: OS::Heat::StructuredConfig
318     properties:
319       group: os-apply-config
320       config: {get_input: passthrough_config_specific}
321
322   NovaComputePassthroughDeployment:
323     depends_on: [NovaComputeDeployment]
324     type: OS::Heat::StructuredDeployment
325     properties:
326       config: {get_resource: NovaComputePassthrough}
327       server: {get_resource: NovaCompute}
328       signal_transport: NO_SIGNAL
329       input_values:
330         passthrough_config: {get_param: ExtraConfig}
331
332   NovaComputePassthroughDeploymentSpecific:
333     depends_on: [NovaComputePassthroughDeployment]
334     type: OS::Heat::StructuredDeployment
335     properties:
336       config: {get_resource: NovaComputePassthroughSpecific}
337       server: {get_resource: NovaCompute}
338       signal_transport: NO_SIGNAL
339       input_values:
340         passthrough_config_specific: {get_param: NovaComputeExtraConfig}
341
342 outputs:
343   ip_address:
344     description: IP address of the server in the ctlplane network
345     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
346   hostname:
347     description: Hostname of the server
348     value: {get_attr: [NovaCompute, name]}
349   hosts_entry:
350     description: >
351       Server's IP address and hostname in the /etc/hosts format
352     value:
353       str_replace:
354         template: "IP HOST HOST.novalocal"
355         params:
356           IP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
357           HOST: {get_attr: [NovaCompute, name]}
358   nova_server_resource:
359     description: Heat resource handle for the Nova compute server
360     value:
361       {get_resource: NovaCompute}