Compute: drive NW configuration via software conf
[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   NovaDSN:
199     type: string
200   NovaPassword:
201     default: unset
202     description: The password for the nova service account, used by nova-api.
203     type: string
204     hidden: true
205   NovaPublicIP:
206     type: string
207     default: ''  # Has to be here because of the ignored empty value bug
208   NtpServer:
209     type: string
210     default: ''
211   RabbitHost:
212     type: string
213     default: ''  # Has to be here because of the ignored empty value bug
214   RabbitPassword:
215     default: guest
216     description: The password for RabbitMQ
217     type: string
218     hidden: true
219   RabbitUserName:
220     default: guest
221     description: The username for RabbitMQ
222     type: string
223   SnmpdReadonlyUserName:
224     default: ro_snmp_user
225     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
226     type: string
227   SnmpdReadonlyUserPassword:
228     default: unset
229     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
230     type: string
231     hidden: true
232
233
234 resources:
235
236   NovaCompute:
237     type: OS::Nova::Server
238     properties:
239       image:
240         {get_param: Image}
241       image_update_policy:
242         get_param: ImageUpdatePolicy
243       flavor: {get_param: Flavor}
244       key_name: {get_param: KeyName}
245       networks:
246         - network: ctlplane
247       user_data_format: SOFTWARE_CONFIG
248
249   NetworkConfig:
250     type: OS::TripleO::Net::SoftwareConfig
251
252   NetworkDeployment:
253     type: OS::TripleO::SoftwareDeployment
254     properties:
255       signal_transport: NO_SIGNAL
256       config: {get_attr: [NetworkConfig, config_id]}
257       server: {get_resource: NovaCompute}
258       input_values:
259         bridge_name: {get_param: NeutronPhysicalBridge}
260         interface_name: {get_param: NeutronPublicInterface}
261
262   NovaComputeConfig:
263     type: OS::TripleO::Compute::SoftwareConfig
264
265   NovaComputeDeployment:
266     type: OS::TripleO::SoftwareDeployment
267     properties:
268       signal_transport: NO_SIGNAL
269       config: {get_attr: [NovaComputeConfig, config_id]}
270       server: {get_resource: NovaCompute}
271       input_values:
272         debug: {get_param: Debug}
273         nova_compute_driver: {get_param: NovaComputeDriver}
274         nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
275         nova_dsn: {get_param: NovaDSN}
276         nova_public_ip: {get_param: NovaPublicIP}
277         nova_api_host: {get_param: NovaApiHost}
278         nova_password: {get_param: NovaPassword}
279         ceilometer_dsn: {get_param: CeilometerDSN}
280         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
281         ceilometer_password: {get_param: CeilometerPassword}
282         ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
283         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
284         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
285         glance_host: {get_param: GlanceHost}
286         glance_port: {get_param: GlancePort}
287         glance_protocol: {get_param: GlanceProtocol}
288         keystone_host: {get_param: KeystoneHost}
289         neutron_flat_networks: {get_param: NeutronFlatNetworks}
290         neutron_host: {get_param: NeutronHost}
291         neutron_dsn: {get_param: NeutronDSN}
292         neutron_local_ip: {get_attr: [NovaCompute, networks, ctlplane, 0]}
293         neutron_tenant_network_type: {get_param: NeutronNetworkType}
294         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
295         neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
296         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
297         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
298         neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
299         neutron_public_interface: {get_param: NeutronPublicInterface}
300         neutron_password: {get_param: NeutronPassword}
301         neutron_agent_mode: {get_param: NeutronAgentMode}
302         neutron_router_distributed: {get_param: NeutronDVR}
303         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
304         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
305         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
306         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
307         admin_password: {get_param: AdminPassword}
308         rabbit_host: {get_param: RabbitHost}
309         rabbit_username: {get_param: RabbitUserName}
310         rabbit_password: {get_param: RabbitPassword}
311         ntp_server: {get_param: NtpServer}
312
313   NovaComputePassthrough:
314     type: OS::Heat::StructuredConfig
315     properties:
316       group: os-apply-config
317       config: {get_input: passthrough_config}
318
319   NovaComputePassthroughSpecific:
320     type: OS::Heat::StructuredConfig
321     properties:
322       group: os-apply-config
323       config: {get_input: passthrough_config_specific}
324
325   NovaComputePassthroughDeployment:
326     depends_on: [NovaComputeDeployment]
327     type: OS::Heat::StructuredDeployment
328     properties:
329       config: {get_resource: NovaComputePassthrough}
330       server: {get_resource: NovaCompute}
331       signal_transport: NO_SIGNAL
332       input_values:
333         passthrough_config: {get_param: ExtraConfig}
334
335   NovaComputePassthroughDeploymentSpecific:
336     depends_on: [NovaComputePassthroughDeployment]
337     type: OS::Heat::StructuredDeployment
338     properties:
339       config: {get_resource: NovaComputePassthroughSpecific}
340       server: {get_resource: NovaCompute}
341       signal_transport: NO_SIGNAL
342       input_values:
343         passthrough_config_specific: {get_param: NovaComputeExtraConfig}
344
345 outputs:
346   ip_address:
347     description: IP address of the server in the ctlplane network
348     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
349   hostname:
350     description: Hostname of the server
351     value: {get_attr: [NovaCompute, name]}
352   hosts_entry:
353     description: >
354       Server's IP address and hostname in the /etc/hosts format
355     value:
356       str_replace:
357         template: "IP HOST HOST.novalocal"
358         params:
359           IP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
360           HOST: {get_attr: [NovaCompute, name]}
361   nova_server_resource:
362     description: Heat resource handle for the Nova compute server
363     value:
364       {get_resource: NovaCompute}