summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/css/theme/openstack.css34
-rw-r--r--src/images/CMLGQ_TVAAI_4wx.jpgbin0 -> 59291 bytes
-rw-r--r--src/images/Interest-DevopsAndOpenstack.jpgbin0 -> 33608 bytes
-rw-r--r--src/images/Interest-VirtAndCloud.jpgbin0 -> 44065 bytes
-rw-r--r--src/images/Ironic_mascot_outline.jpgbin0 -> 71372 bytes
-rw-r--r--src/images/agent-deploy-1.pngbin0 -> 27618 bytes
-rw-r--r--src/images/agent-deploy-2.pngbin0 -> 28327 bytes
-rw-r--r--src/images/deployment_architecture_2.pngbin0 -> 38252 bytes
-rw-r--r--src/images/pxe-deploy-1.pngbin0 -> 27483 bytes
-rw-r--r--src/images/pxe-deploy-2.pngbin0 -> 25439 bytes
-rw-r--r--src/talks/isnt-it-ironic.hbs517
11 files changed, 550 insertions, 1 deletions
diff --git a/src/css/theme/openstack.css b/src/css/theme/openstack.css
index ce8cf13..8b88f6d 100644
--- a/src/css/theme/openstack.css
+++ b/src/css/theme/openstack.css
@@ -33,6 +33,38 @@ body {
33 font-size: 0.5em; 33 font-size: 0.5em;
34} 34}
35 35
36.reveal pre {
37 display: block;
38 position: relative;
39 width: 90%;
40 margin: 10px auto;
41 text-align: left;
42 font-size: 0.55em;
43 font-family: monospace;
44 line-height: 1.2em;
45 word-wrap: break-word;
46}
47
48.reveal code {
49 text-align: left;
50 font-family: monospace;
51}
52
53.reveal pre code {
54 text-align: left;
55 display: block;
56 padding: 5px;
57 overflow: auto;
58 max-height: 400px;
59 word-wrap: normal;
60 background: #3F3F3F;
61 color: #DCDCDC;
62}
63
64.reveal ul li {
65 text-align: left;
66}
67
36html.cover #head-icon { 68html.cover #head-icon {
37 visibility: hidden; 69 visibility: hidden;
38} 70}
@@ -76,7 +108,7 @@ html.cover h1 {
76 text-shadow: none; } 108 text-shadow: none; }
77 109
78html.cover h1 { 110html.cover h1 {
79 text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); 111 text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2);
80} 112}
81 113
82.reveal h1 { 114.reveal h1 {
diff --git a/src/images/CMLGQ_TVAAI_4wx.jpg b/src/images/CMLGQ_TVAAI_4wx.jpg
new file mode 100644
index 0000000..10a1a5d
--- /dev/null
+++ b/src/images/CMLGQ_TVAAI_4wx.jpg
Binary files differ
diff --git a/src/images/Interest-DevopsAndOpenstack.jpg b/src/images/Interest-DevopsAndOpenstack.jpg
new file mode 100644
index 0000000..6bfd4a0
--- /dev/null
+++ b/src/images/Interest-DevopsAndOpenstack.jpg
Binary files differ
diff --git a/src/images/Interest-VirtAndCloud.jpg b/src/images/Interest-VirtAndCloud.jpg
new file mode 100644
index 0000000..3ccb438
--- /dev/null
+++ b/src/images/Interest-VirtAndCloud.jpg
Binary files differ
diff --git a/src/images/Ironic_mascot_outline.jpg b/src/images/Ironic_mascot_outline.jpg
new file mode 100644
index 0000000..078f131
--- /dev/null
+++ b/src/images/Ironic_mascot_outline.jpg
Binary files differ
diff --git a/src/images/agent-deploy-1.png b/src/images/agent-deploy-1.png
new file mode 100644
index 0000000..acd1f3e
--- /dev/null
+++ b/src/images/agent-deploy-1.png
Binary files differ
diff --git a/src/images/agent-deploy-2.png b/src/images/agent-deploy-2.png
new file mode 100644
index 0000000..8d5e9d9
--- /dev/null
+++ b/src/images/agent-deploy-2.png
Binary files differ
diff --git a/src/images/deployment_architecture_2.png b/src/images/deployment_architecture_2.png
new file mode 100644
index 0000000..6897e6a
--- /dev/null
+++ b/src/images/deployment_architecture_2.png
Binary files differ
diff --git a/src/images/pxe-deploy-1.png b/src/images/pxe-deploy-1.png
new file mode 100644
index 0000000..6e88ed9
--- /dev/null
+++ b/src/images/pxe-deploy-1.png
Binary files differ
diff --git a/src/images/pxe-deploy-2.png b/src/images/pxe-deploy-2.png
new file mode 100644
index 0000000..6169e7c
--- /dev/null
+++ b/src/images/pxe-deploy-2.png
Binary files differ
diff --git a/src/talks/isnt-it-ironic.hbs b/src/talks/isnt-it-ironic.hbs
new file mode 100644
index 0000000..b9f743f
--- /dev/null
+++ b/src/talks/isnt-it-ironic.hbs
@@ -0,0 +1,517 @@
1<!doctype html>
2<html lang="en">
3
4 <head>
5 <meta charset="utf-8">
6
7 <title>Isn't It Ironic?</title>
8 </head>
9
10 <body>
11
12 <section id="who-am-i-ibm">
13 <h1>Who am I?</h1>
14 <img style="float:right; margin-right:24pt" src="/images/ibm-logo.png"/>
15 <p> Distinguished Engineer </p>
16 <p> IBM Cloud </p>
17 </section>
18
19 <section id="who-am-i-openstack">
20 <h1>Who am I?</h1>
21 <img style="float:right; margin-right:24pt" src="/images/openstack-cloud-software-vertical-large.png" />
22 <p>Technical Committee</p>
23 <p>Foundation Board of Directors</p>
24 <p>Developer Infrastructure Core Team</p>
25 </section>
26
27 <section id="what-to-talk-about">
28 <h1>What I'm going to talk about</h1>
29 <h2><i>(unless I talk about something else)</i></h2>
30 <ul>
31 <li>Virtualization & OpenStack</li>
32 <li>Ironic's architecture</li>
33 <li>Bifrost <i>New!</i></li>
34 <li>Configuration choices</li>
35 <li>Operations</li>
36 <li>Limitations</li>
37 </ul>
38 </section>
39 <section>
40 <section id="not-a-virt-layer">
41 <h1>"OpenStack is not a virtualization layer. It is an abstraction layer."</h1>
42 <h3>- Daniel Sabbah, CTO @ IBM</h3>
43 </section>
44 <section id="trend-virtualization">
45 <h1>Google trends:</h1><h1>Virtualization & Cloud Computing</h1>
46 <image src="/images/Interest-VirtAndCloud.jpg" />
47 </section>
48 <section id="trend-devops">
49 <h1>Google trends:</h1><h1></h1>DevOps & OpenStack</h1>
50 <image src="/images/Interest-DevopsAndOpenstack.jpg" />
51 </section>
52 <section id="really-want">
53 <h1>What do developers really want?</h1>
54 <ul>
55 <li class="fragment">Separate application delivery from hardware procurement</li>
56 <li class="fragment">Self-service API for Compute [Storage [Network]] resources</li>
57 <li class="fragment">More control + More flexibility</li>
58 <li class="fragment">... Without sacrificing anything</li>
59 </ul>
60 </section>
61 </section>
62
63 <section id="why-ironic">
64 <h1>So what is this Ironic thing?</h1>
65 <br><br>
66 <ul>
67 <li class="fragment">Scalable service for hardware<br>provisioning & management</li>
68 <li class="fragment">Consistent API supports<br>many hardware manufacturers</li>
69 <li class="fragment">Enables OpenStack to provide both<br>virtual and physical Compute</li>
70 </ul>
71 <image src="/images/Ironic_mascot_outline.jpg" width="30%" align="right"/>
72 </section>
73 <section id="components">
74 <h1>Key Components</h1>
75 <ul>
76 <li><b>ironic-api: </b>RESTful API service</li>
77 <li><b>ironic-conductor: </b>interacts directly with hardware; asynchronous handling of both requested and periodic actions.</li>
78 <div class="fragment">
79 <li><b>ironic-python-agent: </b>utility service, temporarily booted on machines to provide remote access to hardware for provisioning and management.</li>
80 </div>
81 <div class="fragment">
82 <li><b>Nova driver: </b>interface for Nova; enables OpenStack to provide common abstraction for virtual and physical machines.</li>
83 </div>
84 <div class="fragment">
85 <li><b><i>discoverd ramdisk: </i></b>optional tool for hardware inventory management.</li>
86 <li><b><i>bifrost: </i></b>ansible modules for getting started with Ironic <i>outside of OpenStack.</i></li>
87 </div>
88 </ul>
89 </section>
90 <section id="addl-components">
91 <img src="/images/deployment_architecture_2.png" width="120%"/>
92 </section>
93 <section id="technologies">
94 <h1>Open Technologies</h1>
95 <ul>
96 <li><b>IPMI: </b>intelligent platform management interface,
97 for remote control of machine power state, boot device, serial console, etc.</li>
98 <li><b>DHCP: </b>dynamic host configuration protocol, used to locate the NBP on the network,
99 and provide the host OS with IP address during init</li>
100 <li><b>TFTP: </b>trivial file transfer protocol, copies the NBP over the network</li>
101 <li><b>PXE: </b>pre-boot execution environment, allows host to boot from network</li>
102 <li><b>iPXE: </b>recent enhancements make PXE more flexible, supported on most hardware</li>
103 <li><b>iSCSI: </b>used to remotely attach to HDD and copy the machine image</li>
104 </ul>
105 </section>
106 <section id="vendors">
107 <h1>What about Vendor-specific enhancements?</h1><br>
108 <div class="fragment">
109 <h1>Yes!</h1> <br>
110 SeaMicro, Dell, Fujitsu, HP, IBM, Intel, OpenCompute, Cisco, ...
111 </div>
112 </section>
113 <section id="more-technologies">
114 <h1>And so you have options...</h1>
115 <ul>
116 <li><b>! IPMI: </b>vendor-specific power management; varies by vendor</li>
117 <li><b>! DHCP: </b>static IP injection is possible, but not suitable for larger or dynamic environments</li>
118 <li><b>! PXE: </b>boot over virtual media channel; support varies by vendor</li>
119 <li><b>! iSCSI: </b>user image can be fetched directly by "agent" drivers</li>
120 </ul>
121 </section>
122 <section id="and-options">
123 <h1>... and options ...</h1>
124 <ul>
125 <li><b>Homogeneous hardware?</b>
126 <br>Easy!</li>
127 <li><b>Heterogeneous hardware?</b>
128 <br>Use nova-scheduler to match flavor <=> node.properties</li>
129 <li><b>Single tenant / small deployment?</b>
130 <br>Flat network. Maybe use Ironic stand-alone</li>
131 <li><b>Service provider for multiple tenants?</b>
132 <br>Use Keystone for auth, Nova for quota management, Neutron for net isolation (*)
133 <br>Basically, use OpenStack</li>
134 <li><b>Untrusted tenants?</b>
135 <br>Network isolation is possible via Neutron
136 <br>Secure-erase disks, flash firmware between each use
137 <br>(Some assembly required)</li>
138 </ul>
139 </section>
140 <section id="deployment-general">
141 <h1>Ironic<br><br><strike>Installs Operating System</strike><br><br>Deploys Machine Images</h1>
142 </section>
143 <section id="download-images">
144 <h1>Download an image<br>from your favorite distro</h1>
145 <br><div class="fragment">
146 <h1>Or, build your own</h1><br>
147 <pre>disk-image-create -a amd64 -o my-image -t qcow2 \
148vm ubuntu serial-console cloud-init-datasources
149
150glance image-create --name my-image --is-public True \
151--disk-format qcow2 --container-format bare < my-image.qcow2
152</pre>
153 </div>
154 </section>
155 <section id="new-in-kilo">
156 <h1>New in Kilo:</h1>
157 <ul>
158 <li>Instances may <b>boot from local disk</b> with all drivers</li>
159 <li>Local <b>configdrives</b> remove dependence on meta-data service</li>
160 <li><b>Secure-erase</b> disk drives between each use</li>
161 <li>API <b>version headers</b> improve compatibility during upgrades</li>
162 <li>Nodes may be addressed by <b>logical names</b> in addition to UUIDs</li>
163 <li>Drivers may store <b>internal attributes</b> and can register their own <b>periodic tasks</b></li>
164 </ul>
165 </section>
166 <section id="limitations">
167 <h1>Limitations</h1>
168 <ul>
169 <li class="fragment"><b>Firmware and RAID</b><br>
170 Plugin framework exists in ironic-python-agent, but...<br>Today, you must BYO plugin</li>
171 <li class="fragment"><b>NICs <-> Networks</b><br>
172 Nova only supports one-to-one mapping today</li>
173 <li class="fragment"><b>Provisiong Network <-> Tenant Network Separation</b><br>
174 Upstream only supports flat network today.<br>Out-of-tree options exist; being upstreamed <i>now</i></li>
175 <li class="fragment"><b>Per-tenant Network Isolation</b><br>
176 No official support today; several solutions proposed.<br>Work with Neutron is happening <i>now</i></li>
177
178 </ul>
179 </section>
180 <section id="bifrost-1">
181 <h1>OK, but what about that Bifrost thing?</h1>
182 <br>
183 <ul>
184 <li class="fragment">You don't need a Cloud to provision Hardware</li>
185 <li class="fragment">Self contained Ansible modules:<br>- install, enroll, provision</li>
186 <li class="fragment">Installs some things<br>(Rabbit, MySQL, Nginx, dnsmasq, tftpd)</li>
187 <li class="fragment">Starts with simple "inventory" file,<br>loads data into Ironic & sets correct driver info</li>
188 <li class="fragment">Downloads (or builds locally) a machine image,<br>and just boots it on every machine</li>
189 </ul>
190 </section>
191 <section id="so-in-openstack">
192 <h1>That's cool, but I wanted a cloud...</h1>
193 </section>
194 <section id="layers">
195 <img src="/images/ironic-nova-layer.jpg" width="100%"/>
196 </section>
197 <section>
198 <section id="config-ops">
199 <h1>Nova Configuration</h1>
200 <pre>[default]
201
202# Driver to use for controlling virtualization. Options
203compute_driver=nova.virt.ironic.IronicDriver
204
205# Firewall driver (defaults to hypervisor specific iptables driver)
206firewall_driver=nova.virt.firewall.NoopFirewallDriver
207
208# The scheduler host manager class to use (string value)
209scheduler_host_manager=nova.scheduler.ironic_host_manager.IronicHostManager
210
211# Virtual ram to physical ram allocation ratio which affects
212# all ram filters. This configuration specifies a global ratio
213ram_allocation_ratio=1.0
214
215# Amount of disk in MB to reserve for the host (integer value)
216reserved_host_memory_mb=0
217
218# Full class name for the Manager for compute (string value)
219compute_manager=ironic.nova.compute.manager.ClusteredComputeManager
220 </pre>
221 </section>
222 <section id="config-ops-2">
223 <h1>Nova Configuration pt 2</h1>
224 <pre>[ironic]
225
226# Ironic keystone admin name
227admin_username=ironic
228
229#Ironic keystone admin password.
230admin_password=IRONIC_PASSWORD
231
232# keystone API endpoint
233admin_url=http://IDENTITY_IP:35357/v2.0
234
235# Ironic keystone tenant name.
236admin_tenant_name=service
237
238# URL for Ironic API endpoint.
239api_endpoint=http://IRONIC_NODE:6385/v1</pre>
240 </section>
241 <section id="create-flavors">
242 <h1>Managing Nova Flavors</h1>
243 <h3>Create the flavor</h3>
244 <pre>nova flavor-create my-baremetal-flavor auto $RAM_MB $DISK_GB $CPU</pre>
245 <br>
246 <h3>Setting additional hints</h3>
247 <pre>ironic node-update <node-uuid> add properties/capabilities='boot_mode:uefi'
248
249nova flavor-key my-baremetal-flavor set capabilities:boot_mode="uefi"</pre>
250 </section>
251 </section>
252 <section>
253 <section id="examples">
254 <h1>Examples or Demo?</h1>
255 </section>
256 <section id="ex-enroll">
257 <h1>Enroll Hardware</h1>
258 <pre><code class="fragment">$ ironic node-create -d agent_ipmitool \
259 -i ipmi_username=admin -i ipmi_password=fake -i ipmi_address=10.1.2.3 \
260 -p cpus=4 -p memory_mb=8192 -p local_gb=500 \
261 -e note='spare server' -n mytest
262 +--------------+-------------------------------------------------------------+
263 | Property | Value |
264 +--------------+-------------------------------------------------------------+
265 | chassis_uuid | None |
266 | driver | agent_ipmitool |
267 | driver_info | {u'ipmi_address': u'10.1.2.3', u'ipmi_username': u'admin', |
268 | | u'ipmi_password': u'******'} |
269 | extra | {u'note': u'spare server'} |
270 | properties | {u'memory_mb': u'8192', u'local_gb': u'500', u'cpus': u'4'} |
271 | uuid | 7a1ce8d0-9679-4d87-8f54-b11f6e8adb8f |
272 | name | mytest |
273 +--------------+-------------------------------------------------------------+
274 </code><code class="fragment">$ ironic port-create -n 7a1ce8d0-9679-4d87-8f54-b11f6e8adb8f -a 00:11:22:00:11:22
275 +-----------+--------------------------------------+
276 | Property | Value |
277 +-----------+--------------------------------------+
278 | node_uuid | 7a1ce8d0-9679-4d87-8f54-b11f6e8adb8f |
279 | extra | {} |
280 | uuid | 024e52b2-6ae4-483b-a039-d6afae7f6a22 |
281 | address | 00:11:22:00:11:22 |
282 +-----------+--------------------------------------+</code>
283 </pre>
284 </section>
285 <section id="ex-validate">
286 <h1>Validate provided info</h1>
287 <pre><code class="fragment">$ ironic node-validate 7a1ce8d0-9679-4d87-8f54-b11f6e8adb8f
288 +------------+--------+--------------------------------------------------------------
289 | Interface | Result | Reason
290 +------------+--------+--------------------------------------------------------------
291 | console | False | Missing 'ipmi_terminal_port' parameter in node's driver_info.
292 | deploy | False | Node 7a1ce8d0-9679-4d87-8f54-b11f6e8adb8f failed to validate
293 deploy image info. Some parameters were missing. Missing are:
294 ['driver_info.deploy_kernel', 'driver_info.deploy_ramdisk', 'instance_info.image_source'] |
295 | inspect | None | not supported
296 | management | True |
297 | power | True |
298 +------------+--------+--------------------------------------------------------------</code></pre>
299 </section>
300 <section id="oops">
301 <h1>Oops</h1>
302 (I forgot a few options)
303 </section>
304 <section id="add-driver-info">
305 <h1>Add or change options</h1>
306 <pre><code>$ ironic node-update mytest add \
307 instance_info/image_source=http://192.168.1.1/myimage.qcow2 \
308 instance_info/image_checksum=e1d99d6d0ef2144a8d672b0420c547b5
309
310 $ ironic node-update mytest add \
311 driver_info/deploy_ramdisk=http://192.168.1.1/deploy.initrd \
312 driver_info/deploy_kernel=http://192.168.1.1/deploy.vmlinuz
313
314 $ ironic node-update mytest replace extra/note='database' name=db01.example
315 +------------------------+-------------------------------------------------
316 | Property | Value
317 +------------------------+-------------------------------------------------
318 | extra | {u'note': u'database'}
319 | name | db01.example
320 </code></pre>
321 </section>
322 <section id="ex-validate2">
323 <h1>Validate info (again)</h1>
324 <pre><code>$ ironic node-validate db01.example
325 +------------+--------+---------------------------------------------------------------+
326 | Interface | Result | Reason |
327 +------------+--------+---------------------------------------------------------------+
328 | console | False | Missing 'ipmi_terminal_port' parameter in node's driver_info. |
329 | deploy | True | |
330 | inspect | None | not supported |
331 | management | True | |
332 | power | True | |
333 +------------+--------+---------------------------------------------------------------+</code></pre>
334 </section>
335 <section id="node-show">
336 <h1>Show details</h1>
337 <pre><code>$ ironic node-show db01.example
338 +------------------------+------------------------------------------------------------
339 | Property | Value
340 +------------------------+------------------------------------------------------------
341 | target_power_state | None
342 | last_error |
343 | maintenance_reason |
344 | provision_state | available
345 | console_enabled | False
346 | target_provision_state | None
347 | maintenance | False
348 | power_state | power off
349 | driver | agent_ipmitool
350 | reservation | None
351 | instance_uuid | None
352 | driver_internal_info | {}
353 | chassis_uuid | </code></pre>
354 </section>
355 <section id="maintenance">
356 <h1>Maintenance Mode</h1>
357 <pre><code class="fragment">$ ironic node-set-maintenance --reason 'replacing disks' db01.example true
358 $ ironic node-show db01.example
359 +------------------------+------------------------------------------------------------
360 | Property | Value
361 +------------------------+------------------------------------------------------------
362 | target_power_state | None
363 | last_error |
364 | maintenance_reason | replacing disks
365 | provision_state | available
366 | console_enabled | False
367 | target_provision_state | None
368 | maintenance | True
369 | power_state | power off
370 | instance_uuid | None
371 | driver_internal_info | {} </code></pre>
372 </section>
373 <section id="power-sync">
374 <h1>Power Status Loop</h1>
375 <pre><code class="fragment">$ ironic node-show my.broken.node
376 +-----------------+----------------------------------------------------------------------+
377 | Property | Value |
378 +-----------------+----------------------------------------------------------------------+
379 | last_error | During sync_power_state, max retries exceeded for node |
380 | | 9729f0b2-b270-4d06-aa87-40f2b2cad6ee, node state None does not match |
381 | | expected state 'off'. Updating DB state to 'None' Switching node to |
382 | | maintenance mode. |</code>
383 <code class="fragment">$ cat /var/log/upstart/ironic-conductor.log
384 2015-03-24 04:29:19.349 26317 WARNING ironic.conductor.manager [-]
385 During sync_power_state, could not get power state for node 9729f0b2-b270-4d06-aa87-40f2b2cad6ee.
386 Error: IPMI call failed: power status.</code></pre>
387 </section>
388 <section id="deploy-1">
389 <h1>Deployment (via Ironic)</h1>
390 <pre><code class="fragment">$ ironic node-set-provision-state db01.example active
391
392 The provisioning operation can't be performed on node
393 7a1ce8d0-9679-4d87-8f54-b11f6e8adb8f because it's in maintenance mode.
394 </code><code class="fragment">$ ironic node-set-maintenance db01.example false
395 $ ironic node-set-provision-state db01.example active
396 $
397 # ... time goes on ...</code>
398 </pre>
399 </section>
400 <section id="deploy-2">
401 <h1>Deployment (via Ironic)</h1>
402 <pre><code>$ ironic node-show db01.example
403 +------------------------+-------------------------------------
404 | Property | Value
405 +------------------------+-------------------------------------
406 | target_power_state | None
407 | last_error |
408 | maintenance_reason | None
409 | provision_state | active
410 | console_enabled | False
411 | target_provision_state | None
412 | maintenance | False
413 | power_state | power on
414 | instance_uuid | None
415 | driver_internal_info | {} </code></pre>
416 </section>
417 <section id="deploy-3">
418 <h1>Deployment (via Nova)</h1>
419 <pre><code class="fragment">$ nova boot –flavor baremetal -image myimage -key-name my_ssh_key ...
420
421 $ tail -f /var/log/upsart/nova-compute.log
422 ...
423 2014-05-01 03:47:05.878 AUDIT nova.compute.resource_tracker [-] Free ram (MB): 8192
424 2014-05-01 03:47:05.878 AUDIT nova.compute.resource_tracker [-] Free disk (GB): 500
425 2014-05-01 03:47:05.878 AUDIT nova.compute.resource_tracker [-] Free VCPUS: 4
426
427 ...
428 2014-05-01 03:47:05.878 AUDIT nova.compute.resource_tracker [-] Free ram (MB): 0
429 2014-05-01 03:47:05.878 AUDIT nova.compute.resource_tracker [-] Free disk (GB): 0
430 2014-05-01 03:47:05.878 AUDIT nova.compute.resource_tracker [-] Free VCPUS: 0</code></pre>
431 </section>
432 </section>
433 <section id="end">
434 <h1>Thanks!</h1><br>
435 @devananda<br><br>
436 <a href="http://devananda.github.io/talks/isnt-it-ironic.html">devananda.github.io/talks/isnt-it-ironic.html</a>
437 <a href="http://docs.openstack.org/developer/ironic/deploy/install-guide.html">docs.openstack.org/developer/ironic/deploy/install-guide.html</a>
438 <br><br>
439 </section>
440 <section id="deploy-process">
441 <h1>Two methods for image deployment</h1>
442 <table >
443 <tr>
444 <th>Direct from source</th>
445 <th> || </th>
446 <th>Cache on conductor</th>
447 </tr>
448 <tr>
449 <td valign="top"><ul>
450 <li>agent_ipmitool</li>
451 <li>agent_pyghmi</li>
452 <li>agent_ilo</li>
453 </ul></td>
454 <td></td>
455 <td><ul>
456 <li>pxe_ipmitool</li>
457 <li>pxe_ipminative</li>
458 <li>pxe_seamicro</li>
459 <li>pxe_iboot</li>
460 <li>pxe_ilo</li>
461 <li>pxe_snmp</li>
462 <li>pxe_drac</li>
463 <li>pxe_irmc</li>
464 <li>pxe_amt</li>
465 <li>iscsi_ilo</li>
466 </ul></td>
467 </tr>
468 </table>
469 </section>
470 <section id="pxe-1">
471 <h1>PXE Deploy Process</h1>
472 <img src="/images/pxe-deploy-1.png" />
473 </section>
474 <section id="pxe-2">
475 <h1>PXE Deploy Process (cont)</h1>
476 <img src="/images/pxe-deploy-2.png" />
477 </section>
478 <section id="agent-1">
479 <h1>Agent Deploy Process</h1>
480 <img src="/images/agent-deploy-1.png" />
481 </section>
482 <section id="agent-2">
483 <h1>Agent Deploy Process (cont)</h1>
484 <img src="/images/agent-deploy-2.png" />
485 </section>
486 </div>
487 </div>
488
489 <script src="lib/js/head.min.js"></script>
490 <script src="js/reveal.js"></script>
491 <script>
492 // Full list of configuration options available here:
493 // https://github.com/hakimel/reveal.js#configuration
494 Reveal.initialize({
495 controls: true,
496 progress: true,
497 history: true,
498 center: true,
499
500 theme: Reveal.getQueryHash().theme, // available themes are in /css/theme
501 transition: Reveal.getQueryHash().transition || 'default', // default/cube/page/concave/zoom/linear/fade/none
502
503 // Optional libraries used to extend on reveal.js
504 dependencies: [
505 { src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } },
506 { src: 'plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
507 { src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
508 { src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
509 { src: 'plugin/zoom-js/zoom.js', async: true, condition: function() { return !!document.body.classList; } },
510 { src: 'plugin/notes/notes.js', async: true, condition: function() { return !!document.body.classList; } }
511 // { src: 'plugin/search/search.js', async: true, condition: function() { return !!document.body.classList; } }
512 // { src: 'plugin/remotes/remotes.js', async: true, condition: function() { return !!document.body.classList; } }
513 ]
514 });
515 </script>
516</body>
517</html>