using updated xpath with xi:include

modified all existing files using xi:include that require the hierarchy to be striped out. dave cramer is super awesome.

bug/1226775

Change-Id: Ic4618329e9a3b4de7cfdc91701678f34f7828a9a
This commit is contained in:
Sean Roberts
2013-09-17 16:11:04 -07:00
parent ab09f986cc
commit 876af9be41
8 changed files with 72 additions and 1072 deletions

View File

@@ -5,16 +5,10 @@
version="5.0"
xml:id="bk001-ch003-associate-general">
<title>OpenStack Associate, General Material To Learn</title>
<para>User Stories are referenced here</para>
<section xml:id="install-ubuntu-section">
<title>Installation of OpenStack from Trunk</title>
<para>You will have a working version of OpenStack after this step is completed.</para>
<para><link xlink:href="https://blueprints.launchpad.net/openstack-manuals/+filebug" xlink:show="new">Submit a bug. Enter the summary as "Training, " with a few words. Be descriptive as possible in the description field. Open the tag pull-down and enter training-manuals.</link></para>
<!-- this maps to user story "As a trainee I need to be able to understand how to install Ubuntu 12.04 (or 13.04 in later versions)" -->
</section>
<xi:include href="card008.xml"></xi:include>
<xi:include href="card025.xml"></xi:include>
<xi:include href="card006.xml"></xi:include>
<xi:include href="card009.xml"></xi:include>
<xi:include href="card011.xml"></xi:include>
<xi:include href="card038.xml"></xi:include>
</chapter>

View File

@@ -6,649 +6,11 @@
xml:id="configure-virtualbox">
<title>VirtualBox Basics</title>
<!-- this maps to user story "Card008 - As an associate trainee I need to be able to understand the architecture of the RefStack architecture described in the Basic Install Guide" -->
<para> "References Aptira content: lab000-virtualbox-basics.xml" </para>
<para><guilabel>Getting Started</guilabel></para>
<para>The following are the conventional methods of deploying
OpenStack on Virtual Box for the sake of a test/sandbox or just to
try out OpenStack on commodity hardware.</para>
<para>1. DevStack</para>
<para>2. Vagrant</para>
<para>But DevStack and Vagrant bring in some level of automated
deployment as running the scripts will get your VirtualBox
Instance configured as the required OpenStack deployment. We
will be manually deploying OpenStack on VirtualBox Instance to
get better view of how OpenStack works.</para>
<para><guilabel>Prerequisite:</guilabel></para>
<para>Well, its a daunting task to just cover all of OpenStacks
concepts let alone Virtualization and Networking. So some basic
idea/knowledge on Virtualization, Networking and Linux is
required. Even though I will try to keep the level as low as
possible for making it easy for Linux Newbies as well as
experts.</para>
<para>These Virtual Machines and Virtual Networks will be given
equal privilege as a physical machine on a physical
network.</para>
<para>Just for those who would want to do a deeper research or
study, for more information you may refer the following
links</para>
<para><emphasis role="bold">OpenStack:</emphasis>OpenStack
Official Documentation (docs.openstack.org)</para>
<para><emphasis role="bold">Networking:</emphasis>Computer
Networks (5th Edition) by Andrew S. Tanenbaum </para>
<para><emphasis role="bold">VirtualBox:</emphasis>Virtual Box
Manual (http://www.virtualbox.org/manual/UserManual.html)</para>
<para><emphasis role="bold">Requirements :</emphasis></para>
<para>Operating Systems - I recommend Ubuntu Server 12.04 LTS,
Ubuntu Server 13.10 or Debian Wheezy</para>
<para><emphasis role="bold">Note :</emphasis>Ubuntu 12.10 is not
supporting OpenStack Grizzly Packages. Ubuntu team has decided not
to package Grizzly Packages for Ubuntu 12.10.</para>
<itemizedlist>
<listitem>
<para>Recommended Requirements.</para>
</listitem>
</itemizedlist>
<informaltable class="c25">
<tbody>
<tr>
<td rowspan="1" colspan="1">VT Enabled PC:</td>
<td rowspan="1" colspan="1">Intel ix or Amd QuadCore</td>
</tr>
<tr>
<td rowspan="1" colspan="1">4GB Ram:</td>
<td rowspan="1" colspan="1">DDR2/DDR3</td>
</tr>
</tbody>
</informaltable>
<itemizedlist>
<listitem>
<para>Minimum Requirements.</para>
</listitem>
</itemizedlist>
<informaltable class="c25">
<tbody>
<tr>
<td rowspan="1" colspan="1">Non-VT PC's:</td>
<td rowspan="1" colspan="1">Intel Core 2 Duo or Amd Dual
Core</td>
</tr>
<tr>
<td rowspan="1" colspan="1">2GB Ram:</td>
<td rowspan="1" colspan="1">DDR2/DDR3</td>
</tr>
</tbody>
</informaltable>
<para>If you don't know whether your processor is VT enabled, you
could check it by installing cpu checker</para>
<informaltable class="c25">
<tbody>
<tr>
<td rowspan="1" colspan="1">$sudo apt-get install
cpu-checker$sudo kvm-ok</td>
</tr>
</tbody>
</informaltable>
<para>If your device does not support VT it will show</para>
<para>INFO:Your CPU does not support KVM extensions</para>
<para>KVM acceleration can NOT be used</para>
<para>You will still be able to use Virtual Box but the instances
will be very slow.</para>
<para>There are many ways to configure your OpenStack Setup, we
will be deploying OpenStack Multi Node using OVS as the Network
Plugin and QEMU/ KVM as the hypervisor.</para>
<para><emphasis role="bold">Host Only Connections:</emphasis></para>
<itemizedlist>
<listitem>
<para>Host only connections provide an Internal network
between your host and the Virtual Machine instances up and
running on your host machine.This network is not traceable
by other networks.</para>
</listitem>
<listitem>
<para>You may even use Bridged connection if you have a
router/switch. I am assuming the worst case (one IP without
any router), so that it is simple to get the required
networks running without the hassle of IP tables.</para>
</listitem>
<listitem>
<para>The following are the host only connections that you
will be setting up later on :</para>
</listitem>
</itemizedlist>
<orderedlist>
<listitem>
<para>vboxnet0 - OpenStack Management Network - Host static IP
10.10.10.1</para>
</listitem>
<listitem>
<para>vboxnet1 - VM Conf.Network - Host Static IP
10.20.20.1</para>
</listitem>
<listitem>
<para>vboxnet2 - VM External Network Access (Host
Machine)</para>
<para><emphasis role="bold">Network Diagram :</emphasis></para>
</listitem>
</orderedlist>
<figure>
<title>Network Diagram</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/lab000-virtual-box/image03.png"/>
</imageobject>
</mediaobject>
</figure>
<para>Vboxnet0, Vboxnet1, Vboxnet2 - are virtual networks setup up
by virtual box with your host machine. This is the way your host
can communicate with the virtual machines. These networks are in
turn used by virtual box VMs for OpenStack networks, so that
OpenStacks services can communicate with each other.</para>
<para><guilabel>Setup Your VM Environment</guilabel></para>
<para>Before you can start configuring your Environment you need to
download some of the following stuff:</para>
<orderedlist>
<listitem>
<para><link xlink:href="https://www.virtualbox.org/wiki/Downloads">
Oracle Virtual Box</link></para>
</listitem>
</orderedlist>
<para>Note:You cannot set up a amd64 VM on a x86 machine.</para>
<orderedlist>
<listitem>
<para><link xlink:href="http://www.ubuntu.com/download/server">
Ubuntu 12.04 Server or Ubuntu 13.04 Server</link></para>
</listitem>
</orderedlist>
<para>Note:You need a x86 image for VM's if kvm-ok fails, even
though you are on amd64 machine.</para>
<para>Note: Even Though I'm using Ubuntu as Host, the same is
applicable to Windows, Mac and other Linux Hosts.</para>
<itemizedlist>
<listitem>
<para>If you have i5 or i7 2nd gen processor you can have VT
technology inside VM's provided by VmWare. This means that
your OpenStack nodes(Which are in turn VM's) will give
positive result on KVM-OK. (I call it - Nesting of type-2
Hypervisors). Rest of the configurations remain same except
for the UI and few other trivial differences.</para>
</listitem>
</itemizedlist>
<para><guilabel>Configure Virtual Networks</guilabel></para>
<itemizedlist>
<listitem>
<para>This section of the guide will help you setup your
networks for your Virtual Machine.</para>
</listitem>
<listitem>
<para>Launch Virtual Box</para>
</listitem>
</itemizedlist>
<itemizedlist>
<listitem>
<para>Click on <emphasis role="bold"
>File>Preferences</emphasis> present on the menu bar of
Virtual Box.</para>
</listitem>
<listitem>
<para>Select the <emphasis role="bold">Network
tab</emphasis>.</para>
</listitem>
<listitem>
<para>On the right side you will see an option to add
Host-Only networks.</para>
</listitem>
</itemizedlist>
<figure>
<title>Create Host Only Networks</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/lab000-virtual-box/image13.png"/>
</imageobject>
</mediaobject>
</figure>
<itemizedlist>
<listitem>
<para>Create three Host-Only Network Connections. As shown
above.</para>
</listitem>
<listitem>
<para>Edit the Host-Only Connections to have the following
settings.</para>
</listitem>
</itemizedlist>
<para><emphasis role="bold">Vboxnet0</emphasis></para>
<informaltable class="c25">
<tbody>
<tr>
<th rowspan="1" colspan="1">Option</th>
<th rowspan="1" colspan="1">Value</th>
</tr>
<tr>
<td rowspan="1" colspan="1">IPv4 Address:</td>
<td rowspan="1" colspan="1">10.10.10.1</td>
</tr>
<tr>
<td rowspan="1" colspan="1">IPv4 Network Mask:</td>
<td rowspan="1" colspan="1">255.255.255.0</td>
</tr>
<tr>
<td rowspan="1" colspan="1">IPv6 Address:</td>
<td rowspan="1" colspan="1">Can be Left Blank</td>
</tr>
<tr>
<td rowspan="1" colspan="1">IPv6 Network Mask Length :</td>
<td rowspan="1" colspan="1">Can be Left Blank</td>
</tr>
</tbody>
</informaltable>
<figure>
<title>Vboxnet0</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/lab000-virtual-box/image19.png"/>
</imageobject>
</mediaobject>
</figure>
<para><emphasis role="bold">Vboxnet1</emphasis></para>
<informaltable class="c25">
<tbody>
<tr>
<th rowspan="1" colspan="1">Option</th>
<th rowspan="1" colspan="1">Value</th>
</tr>
<tr>
<td rowspan="1" colspan="1">IPv4 Address:</td>
<td rowspan="1" colspan="1">10.20.20.1</td>
</tr>
<tr>
<td rowspan="1" colspan="1">IPv4 Network Mask:</td>
<td rowspan="1" colspan="1">255.255.255.0</td>
</tr>
<tr>
<td rowspan="1" colspan="1">IPv6 Address:</td>
<td rowspan="1" colspan="1">Can be Left Blank</td>
</tr>
<tr>
<td rowspan="1" colspan="1">IPv6 Network Mask Length :</td>
<td rowspan="1" colspan="1">Can be Left Blank</td>
</tr>
</tbody>
</informaltable>
<figure>
<title>Vboxnet1</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/lab000-virtual-box/image16.png"/>
</imageobject>
</mediaobject>
</figure>
<para><emphasis role="bold">Vboxnet2</emphasis></para>
<informaltable class="c25">
<tbody>
<tr>
<th rowspan="1" colspan="1">Option</th>
<th rowspan="1" colspan="1">Value</th>
</tr>
<tr>
<td rowspan="1" colspan="1">IPv4 Address:</td>
<td rowspan="1" colspan="1">192.168.100.1</td>
</tr>
<tr>
<td rowspan="1" colspan="1">IPv4 Network Mask:</td>
<td rowspan="1" colspan="1">255.255.255.0</td>
</tr>
<tr>
<td rowspan="1" colspan="1">IPv6 Address:</td>
<td rowspan="1" colspan="1">Can be Left Blank</td>
</tr>
<tr>
<td rowspan="1" colspan="1">IPv6 Network Mask Length :</td>
<td rowspan="1" colspan="1">Can be Left Blank</td>
</tr>
</tbody>
</informaltable>
<figure>
<title>Image: Vboxnet2</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/lab000-virtual-box/image08.png"/>
</imageobject>
</mediaobject>
</figure>
<para><guilabel>Install SSH and FTP</guilabel></para>
<itemizedlist>
<listitem>
<para>You may benefit by installing SSH and FTP so that you
could use your remote shell to login into the machine and
use your terminal which is more convenient that using the
Virtual Machines tty through the Virtual Box's UI. You get a
few added comforts like copy - paste commands into the
remote terminal which is not possible directly on VM.</para>
</listitem>
<listitem>
<para>FTP is for transferring files to and fro ... you can
also use SFTP or install FTPD on both HOST and VM's.</para>
</listitem>
<listitem>
<para>Installation of SSH and FTP with its configuration is
out of scope of this GUIDE and I may put it up but it
depends upon my free time. If someone wants to contribute to
this - please do so.</para>
</listitem>
</itemizedlist>
<para><emphasis role="bold">Note:</emphasis>Please set up the
Networks from inside the VM before trying to SSH and FTP into the
machines. I would suggest setting it up at once just after the
installation of the Server on VM's is over.</para>
<para><guilabel>Install Your VM's Instances</guilabel></para>
<itemizedlist>
<listitem>
<para>During Installation of The Operating Systems you will be
asked for Custom Software to Install , if you are confused
or not sure about this, just skip this step by pressing
Enter Key without selecting any of the given Options.</para>
</listitem>
</itemizedlist>
<para><emphasis role="bold">Warning</emphasis> - Please do not
install any of the other packages except for which are mentioned
below unless you know what you are doing. There is a good chance
that you may end up getting unwanted errors, package conflicts ...
due to the same.</para>
<para><guilabel>Control Node:</guilabel></para>
<para>Create a new virtual machine. Select Ubuntu Server</para>
<figure>
<title>Create New Virtual Machine</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/lab000-virtual-box/image11.png"/>
</imageobject>
</mediaobject>
</figure>
<para>Select appropriate RAM, minimum 512 MB of RAM for Control
Node. Rest all can be default settings. The hard disk size can
be 8GB as default.</para>
<para>Configure the networks</para>
<para>(Ignore the IP Address for now, you will set it up from
inside the VM)</para>
<informaltable class="c25">
<tbody>
<tr>
<th rowspan="1" colspan="1">Network Adapter</th>
<th rowspan="1" colspan="1">Host-Only Adapter Name</th>
<th rowspan="1" colspan="1">IP Address</th>
</tr>
<tr>
<td rowspan="1" colspan="1">eth0</td>
<td rowspan="1" colspan="1">Vboxnet0</td>
<td rowspan="1" colspan="1">10.10.10.51</td>
</tr>
<tr>
<td rowspan="1" colspan="1">eth1</td>
<td rowspan="1" colspan="1">Vboxnet2</td>
<td rowspan="1" colspan="1">10.20.20.51</td>
</tr>
<tr>
<td rowspan="1" colspan="1">eth2</td>
<td rowspan="1" colspan="1">NAT</td>
<td rowspan="1" colspan="1">DHCP</td>
</tr>
</tbody>
</informaltable>
<para><emphasis role="bold">Adapter 1 (Vboxnet0)</emphasis></para>
<figure>
<title>Adapter1 - Vboxnet0</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/lab000-virtual-box/image07.png"/>
</imageobject>
</mediaobject>
</figure>
<para><emphasis role="bold">Adapter 2 (Vboxnet2)</emphasis></para>
<figure>
<title>Adapter2 - Vboxnet2</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/lab000-virtual-box/image18.png"/>
</imageobject>
</mediaobject>
</figure>
<para><emphasis role="bold">Adapter 3 (NAT)</emphasis></para>
<figure>
<title>Adapter3 - NAT</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/lab000-virtual-box/image14.png"/>
</imageobject>
</mediaobject>
</figure>
<para>Now Install Ubuntu Server 12.04 or 13.04 on this
machine.</para>
<para><emphasis role="bold">Note :</emphasis>Install SSH server
when asked for Custom Software to Install. Rest of the packages
are not required and may come in the way of OpenStack packages -
like DNS servers etc. (not necessary). Unless you know what you
are doing.</para>
<para><guilabel>Network Node:</guilabel></para>
<para>Create a new Virtual Machine,</para>
<para>Minimum RAM is 512MB. Rest all can be left default. Minimum
HDD space 8GB.</para>
<figure>
<title>Create New Virtual Machine</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/lab000-virtual-box/image12.png"/>
</imageobject>
</mediaobject>
</figure>
<para>Configure the networks</para>
<para>(Ignore the IP Address for now, you will set it up from
inside the VM)</para>
<informaltable class="c25">
<tbody>
<tr>
<th rowspan="1" colspan="1">Network Adapter</th>
<th rowspan="1" colspan="1">Host-Only Adapter Name</th>
<th rowspan="1" colspan="1">IP Address</th>
</tr>
<tr>
<td rowspan="1" colspan="1">eth0</td>
<td rowspan="1" colspan="1">Vboxnet0</td>
<td rowspan="1" colspan="1">10.10.10.52</td>
</tr>
<tr>
<td rowspan="1" colspan="1">eth1</td>
<td rowspan="1" colspan="1">Vboxnet1</td>
<td rowspan="1" colspan="1">10.20.20.52</td>
</tr>
<tr>
<td rowspan="1" colspan="1">eth2</td>
<td rowspan="1" colspan="1">Vboxnet2</td>
<td rowspan="1" colspan="1">192.168.100.51</td>
</tr>
<tr>
<td rowspan="1" colspan="1">eth3</td>
<td rowspan="1" colspan="1">NAT</td>
<td rowspan="1" colspan="1">DHCP</td>
</tr>
</tbody>
</informaltable>
<para><emphasis role="bold">Adapter 1 (Vboxnet0)</emphasis></para>
<figure>
<title>Adapter 1 - Vboxnet0</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/lab000-virtual-box/image05.png"/>
</imageobject>
</mediaobject>
</figure>
<para><emphasis role="bold">Adapter 2 (Vboxnet1)</emphasis></para>
<figure>
<title>Adapter2 - Vboxnet1</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/lab000-virtual-box/image17.png"/>
</imageobject>
</mediaobject>
</figure>
<para><emphasis role="bold">Adapter 3 (Vboxnet2)</emphasis></para>
<figure>
<title>Adapter3 - Vboxnet2</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/lab000-virtual-box/image02.png"/>
</imageobject>
</mediaobject>
</figure>
<para><emphasis role="bold">Adapter 4 (NAT)</emphasis></para>
<figure>
<title>Adapter4 - NAT</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/lab000-virtual-box/image00.png"/>
</imageobject>
</mediaobject>
</figure>
<para>Now Install Ubuntu Server 12.04 or 13.04 on this
machine.</para>
<para><emphasis role="bold">Note :</emphasis>Install SSH server
when asked for Custom Software to Install. Rest of the packages
are not required and may come in the way of OpenStack packages -
like DNS servers etc. (not necessary). Unless you know what you
are doing.</para>
<para><guilabel>Compute Node:</guilabel></para>
<para>Create a new virtual machine, give it atleast 1,000 MB RAM.
Rest all can be left as defaults. Give atleast 8GB HDD.</para>
<figure>
<title>Create New Virtual Machine</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/lab000-virtual-box/image04.png"/>
</imageobject>
</mediaobject>
</figure>
<para>Configure the networks</para>
<para>(Ignore the IP Address for now, you will set it up from
inside the VM)</para>
<informaltable class="c25">
<tbody>
<tr>
<th rowspan="1" colspan="1">Network Adapter</th>
<th rowspan="1" colspan="1">Host-Only Adapter Name</th>
<th rowspan="1" colspan="1">IP Address</th>
</tr>
<tr>
<td rowspan="1" colspan="1">eth0</td>
<td rowspan="1" colspan="1">Vboxnet0</td>
<td rowspan="1" colspan="1">10.10.10.53</td>
</tr>
<tr>
<td rowspan="1" colspan="1">eth1</td>
<td rowspan="1" colspan="1">Vboxnet1</td>
<td rowspan="1" colspan="1">10.20.20.53</td>
</tr>
<tr>
<td rowspan="1" colspan="1">eth2</td>
<td rowspan="1" colspan="1">NAT</td>
<td rowspan="1" colspan="1">DHCP</td>
</tr>
</tbody>
</informaltable>
<para><emphasis role="bold">Adapter 1 (Vboxnet0)</emphasis></para>
<figure>
<title>Adapter1 - Vboxnet0</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/lab000-virtual-box/image15.png"/>
</imageobject>
</mediaobject>
</figure>
<para><emphasis role="bold">Adapter 2 (Vboxnet1)</emphasis></para>
<figure>
<title>Adapter2 - Vboxnet1</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/lab000-virtual-box/image10.png"/>
</imageobject>
</mediaobject>
</figure>
<para><emphasis role="bold">Adapter 3 (NAT)</emphasis></para>
<figure>
<title>Adapter3 - NAT</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/lab000-virtual-box/image01.png"/>
</imageobject>
</mediaobject>
</figure>
<para>Now Install Ubuntu Server 12.04 or 13.04 on this
machine.</para>
<para><emphasis role="bold">Note :</emphasis>Install SSH server
when asked for Custom Software to Install. Rest of the packages
are not required and may come in the way of OpenStack packages -
like DNS servers etc. (not necessary). Unless you know what you
are doing.</para>
<para><guilabel>Warnings/Advice :</guilabel></para>
<itemizedlist>
<listitem>
<para>Well there are a few warnings that I must give you out
of experience due to common habits that most people may
have :</para>
</listitem>
</itemizedlist>
<para>Sometimes shutting down your Virtual Machine may lead to
malfunctioning of OpenStack Services. Try not to direct
shutdown your 3. In case your VM's don't get internet.</para>
<itemizedlist>
<listitem>
<para>From your VM Instance, Use ping command to see whether
Internet is on.</para>
</listitem>
</itemizedlist>
<programlisting>$ping www.google.com</programlisting>
<itemizedlist>
<listitem>
<para>If its not connected, restart networking
service-</para>
</listitem>
</itemizedlist>
<programlisting>$sudo service networking restart
$ping www.google.com</programlisting>
<itemizedlist>
<listitem>
<para>If this doesn't work, you need to check your network
settings from Virtual Box, you may have left something or
misconfigured it.</para>
</listitem>
<listitem>
<para>This should reconnect your network about 99% of the
times. If you are really unlucky you must be having some
other problems or your Internet connection itself is not
functioning.</para>
</listitem>
<listitem>
<para>Note :There are known bugs with the ping under NAT.
Although the latest versions of Virtual Box have better
performance, sometimes ping may not work even if your
Network is connected to internet.</para>
</listitem>
</itemizedlist>
<para>Congrats, you are ready with the infrastructure for
deploying OpenStack. Just make sure that you have installed
Ubuntu Server on the above setup Virtual Box Instances. In the
next section we will go through deploying OpenStack using the
above created Virtual Box instances.</para>
<xi:include href="lab000-virtualbox-basics.xml"
xpointer="xmlns(db=http://docbook.org/ns/docbook) xpath(/*/*[not(self::db:title)])">
<xi:fallback><para><mediaobject><imageobject><imagedata fileref="figures/openstack-training-remote-content-not-available.png" format="PNG"/></imageobject></mediaobject>Remote content not available</para><para>image source</para><para><link xlink:href="https://docs.google.com/drawings/d/1J2LZSxmc06xKyxMgPjv5fC0blV7qK6956-AeTmFOZD4/edit?usp=sharing">https://docs.google.com/drawings/d/1J2LZSxmc06xKyxMgPjv5fC0blV7qK6956-AeTmFOZD4/edit?usp=sharing</link></para></xi:fallback>
</xi:include>
<para><link xlink:href="https://blueprints.launchpad.net/openstack-manuals/+filebug" xlink:show="new">Submit a bug on
the section above. Short description for the bug summary. Paragraph for the description and
then tag with training-manuals.</link></para>
</section>

View File

@@ -6,377 +6,11 @@
xml:id="card008-Understand_refstack_architecture">
<title>Understanding the RefStack Architecture</title>
<!-- this maps to user story "Card008 - As an associate trainee I need to be able to understand the architecture of the RefStack architecture described in the Basic Install Guide" -->
<para> "References Aptira content: module001-ch004-openstack-architecture.xml" </para>
<para><guilabel>Conceptual Architecture</guilabel></para>
<para>The OpenStack project as a whole is designed to deliver a
massively scalable cloud operating system. To achieve this, each
of the constituent services are designed to work together to
provide a complete Infrastructure as a Service (IaaS). This
integration is facilitated through public application
programming interfaces (APIs) that each service offers (and in
turn can consume). While these APIs allow each of the services
to use another service, it also allows an implementer to switch
out any service as long as they maintain the API. These are
(mostly) the same APIs that are available to end users of the
cloud.</para>
<para>Conceptually, you can picture the relationships between the
services as so:</para>
<figure>
<title>Conceptual Diagram</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/image13.jpg"/>
</imageobject>
</mediaobject>
</figure>
<itemizedlist>
<listitem>
<para>Dashboard ("Horizon") provides a web front end to the
other OpenStack services</para>
</listitem>
<listitem>
<para>Compute ("Nova") stores and retrieves virtual disks
("images") and associated metadata in Image
("Glance")</para>
</listitem>
<listitem>
<para>Network ("Quantum") provides virtual networking for
Compute.</para>
</listitem>
<listitem>
<para>Block Storage ("Cinder") provides storage volumes for
Compute.</para>
</listitem>
<listitem>
<para>Image ("Glance") can store the actual virtual disk files
in the Object Store("Swift")</para>
</listitem>
<listitem>
<para>All the services authenticate with Identity
("Keystone")</para>
</listitem>
</itemizedlist>
<para>This is a stylized and simplified view of the architecture,
assuming that the implementer is using all of the services
together in the most common configuration. It also only shows
the "operator" side of the cloud -- it does not picture how
consumers of the cloud may actually use it. For example, many
users will access object storage heavily (and directly).</para>
<para><guilabel>Logical Architecture</guilabel></para>
<para>This picture is consistent with the conceptual architecture
above:</para>
<figure>
<title>Logical Diagram</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/image31.jpg"/>
</imageobject>
</mediaobject>
</figure>
<itemizedlist>
<listitem>
<para>End users can interact through a common web interface
(Horizon) or directly to each service through their
API</para>
</listitem>
<listitem>
<para>All services authenticate through a common source
(facilitated through keystone)</para>
</listitem>
<listitem>
<para>Individual services interact with each other through
their public APIs (except where privileged administrator
commands are necessary)</para>
</listitem>
</itemizedlist>
<para>In the sections below, we'll delve into the architecture for
each of the services.</para>
<para><guilabel>Dashboard</guilabel></para>
<para>Horizon is a modular Django web application that provides
an end user and administrator interface to OpenStack
services.</para>
<figure>
<title>Horizon Dashboard</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/image10.jpg"/>
</imageobject>
</mediaobject>
</figure>
<para>As with most web applications, the architecture is fairly
simple:</para>
<itemizedlist>
<listitem>
<para>Horizon is usually deployed via mod_wsgi in Apache.
The code itself is separated into a reusable python module
with most of the logic (interactions with various
OpenStack APIs) and presentation (to make it easily
customizable for different sites).</para>
</listitem>
<listitem>
<para>A database (configurable as to which one). As it
relies mostly on the other services for data, it stores
very little data of its own.</para>
</listitem>
</itemizedlist>
<para>From a network architecture point of view, this service
will need to be customer accessible as well as be able to talk
to each service's public APIs. If you wish to use the
administrator functionality (i.e. for other services), it will
also need connectivity to their Admin API endpoints (which
should be non-customer accessible).</para>
<para><guilabel>Compute</guilabel></para>
<para>Nova is the most complicated and distributed component of
OpenStack. A large number of processes cooperate to turn end
user API requests into running virtual machines. Below is a
list of these processes and their functions:</para>
<itemizedlist>
<listitem>
<para>nova-api accepts and responds to end user compute API
calls. It supports OpenStack Compute API, Amazon's EC2 API
and a special Admin API (for privileged users to perform
administrative actions). It also initiates most of the
orchestration activities (such as running an instance) as
well as enforces some policy (mostly quota checks).</para>
</listitem>
<listitem>
<para>The nova-compute process is primarily a worker daemon
that creates and terminates virtual machine instances via
hypervisor's APIs (XenAPI for XenServer/XCP, libvirt for
KVM or QEMU, VMwareAPI for VMware, etc.). The process by
which it does so is fairly complex but the basics are
simple: accept actions from the queue and then perform a
series of system commands (like launching a KVM instance)
to carry them out while updating state in the
database.</para>
</listitem>
<listitem>
<para>nova-volume manages the creation, attaching and
detaching of z volumes to compute instances (similar
functionality to Amazons Elastic Block Storage). It can
use volumes from a variety of providers such as iSCSI or
Rados Block Device in Ceph. A new OpenStack project,
Cinder, will eventually replace nova-volume functionality.
In the Folsom release, nova-volume and the Block Storage
service will have similar functionality.</para>
</listitem>
<listitem>
<para>The nova-network worker daemon is very similar to
nova-compute and nova-volume. It accepts networking tasks
from the queue and then performs tasks to manipulate the
network (such as setting up bridging interfaces or
changing iptables rules). This functionality is being
migrated to Quantum, a separate OpenStack service. In the
Folsom release, much of the functionality will be
duplicated between nova-network and Quantum.</para>
</listitem>
<listitem>
<para>The nova-schedule process is conceptually the simplest
piece of code in OpenStack Nova: take a virtual machine
instance request from the queue and determines where it
should run (specifically, which compute server host it
should run on).</para>
</listitem>
<listitem>
<para>The queue provides a central hub for passing messages
between daemons. This is usually implemented with RabbitMQ
today, but could be any AMPQ message queue (such as Apache
Qpid). New to the Folsom release is support for Zero
MQ.</para>
</listitem>
<listitem>
<para>The SQL database stores most of the build-time and
runtime state for a cloud infrastructure. This includes
the instance types that are available for use, instances
in use, networks available and projects. Theoretically,
OpenStack Nova can support any database supported by
SQL-Alchemy but the only databases currently being widely
used are sqlite3 (only appropriate for test and
development work), MySQL and PostgreSQL.</para>
</listitem>
<listitem>
<para>Nova also provides console services to allow end users
to access their virtual instance's console through a
proxy. This involves several daemons (nova-console,
nova-novncproxy and nova-consoleauth).</para>
</listitem>
</itemizedlist>
<para>Nova interacts with many other OpenStack services:
Keystone for authentication, Glance for images and Horizon for
web interface. The Glance interactions are central. The API
process can upload and query Glance while nova-compute will
download images for use in launching images.</para>
<para><guilabel>Object Store</guilabel></para>
<para>The swift architecture is very distributed to prevent any
single point of failure as well as to scale horizontally. It
includes the following components:</para>
<itemizedlist>
<listitem>
<para>Proxy server (swift-proxy-server) accepts incoming
requests via the OpenStack Object API or just raw HTTP. It
accepts files to upload, modifications to metadata or
container creation. In addition, it will also serve files
or container listing to web browsers. The proxy server may
utilize an optional cache (usually deployed with memcache)
to improve performance.</para>
</listitem>
<listitem>
<para>Account servers manage accounts defined with the
object storage service.</para>
</listitem>
<listitem>
<para>Container servers manage a mapping of containers (i.e
folders) within the object store service.</para>
</listitem>
<listitem>
<para>Object servers manage actual objects (i.e. files) on
the storage nodes.</para>
</listitem>
<listitem>
<para>There are also a number of periodic process which run
to perform housekeeping tasks on the large data store. The
most important of these is the replication services, which
ensures consistency and availability through the cluster.
Other periodic processes include auditors, updaters and
reapers.</para>
</listitem>
</itemizedlist>
<para>Authentication is handled through configurable WSGI
middleware (which will usually be Keystone).</para>
<para><guilabel>Image Store</guilabel></para>
<para>The Glance architecture has stayed relatively stable since
the Cactus release. The biggest architectural change has been
the addition of authentication, which was added in the Diablo
release. Just as a quick reminder, Glance has four main parts
to it:</para>
<itemizedlist>
<listitem>
<para>glance-api accepts Image API calls for image
discovery, image retrieval and image storage.</para>
</listitem>
<listitem>
<para>glance-registry stores, processes and retrieves
metadata about images (size, type, etc.).</para>
</listitem>
<listitem>
<para>A database to store the image metadata. Like Nova, you
can choose your database depending on your preference (but
most people use MySQL or SQlite).</para>
</listitem>
<listitem>
<para>A storage repository for the actual image files. In
the diagram above, Swift is shown as the image repository,
but this is configurable. In addition to Swift, Glance
supports normal filesystems, RADOS block devices, Amazon
S3 and HTTP. Be aware that some of these choices are
limited to read-only usage.</para>
</listitem>
</itemizedlist>
<para>There are also a number of periodic process which run on
Glance to support caching. The most important of these is the
replication services, which ensures consistency and
availability through the cluster. Other periodic processes
include auditors, updaters and reapers.</para>
<para>As you can see from the diagram in the Conceptual
Architecture section, Glance serves a central role to the
overall IaaS picture. It accepts API requests for images (or
image metadata) from end users or Nova components and can
store its disk files in the object storage service,
Swift.</para>
<para><guilabel>Identity</guilabel></para>
<para>Keystone provides a single point of integration for
OpenStack policy, catalog, token and authentication.</para>
<itemizedlist>
<listitem>
<para>keystone handles API requests as well as providing
configurable catalog, policy, token and identity
services.</para>
</listitem>
<listitem>
<para>Each Keystone function has a pluggable backend which
allows different ways to use the particular service. Most
support standard backends like LDAP or SQL, as well as Key
Value Stores (KVS).</para>
</listitem>
</itemizedlist>
<para>Most people will use this as a point of customization for
their current authentication services.</para>
<para><guilabel>Network</guilabel></para>
<para>Quantum provides "network connectivity as a service"
between interface devices managed by other OpenStack services
(most likely Nova). The service works by allowing users to
create their own networks and then attach interfaces to them.
Like many of the OpenStack services, Quantum is highly
configurable due to it's plug-in architecture. These plug-ins
accommodate different networking equipment and software. As
such, the architecture and deployment can vary dramatically.
In the above architecture, a simple Linux networking plug-in
is shown.</para>
<itemizedlist>
<listitem>
<para>quantum-server accepts API requests and then routes
them to the appropriate quantum plugin for action.</para>
</listitem>
<listitem>
<para>Quantum plugins and agents perform the actual actions
such as plugging and unplugging ports, creating networks
or subnets and IP addressing. These plugins and agents
differ depending on the vendor and technologies used in
the particular cloud. Quantum ships with plugins and
agents for: Cisco virtual and physical switches, Nicira
NVP product, NEC OpenFlow products, Openvswitch, Linux
bridging and the Ryu Network Operating System.</para>
</listitem>
<listitem>
<para>The common agents are L3 (layer 3), DHCP (dynamic host
IP addressing) and the specific plug-in agent.</para>
</listitem>
<listitem>
<para>Most Quantum installations will also make use of a
messaging queue to route information between the
quantum-server and various agents as well as a database to
store networking state for particular plugins.</para>
</listitem>
</itemizedlist>
<para>Quantum will interact mainly with Nova, where it will
provide networks and connectivity for its instances.</para>
<para><guilabel>Block Storage</guilabel></para>
<para>Cinder separates out the persistent block storage
functionality that was previously part of Openstack Compute
(in the form of nova-volume) into it's own service. The
OpenStack Block Storage API allows for manipulation of
volumes, volume types (similar to compute flavors) and volume
snapshots.</para>
<itemizedlist>
<listitem>
<para>cinder-api accepts API requests and routes them to
cinder-volume for action.</para>
</listitem>
<listitem>
<para>cinder-volume acts upon the requests by reading or
writing to the Cinder database to maintain state,
interacting with other processes (like cinder-scheduler)
through a message queue and directly upon block storage
providing hardware or software. It can interact with a
variety of storage providers through a driver
architecture. Currently, there are drivers for IBM,
SolidFire, NetApp, Nexenta, Zadara, linux iSCSI and other
storage providers.</para>
</listitem>
<listitem>
<para>Much like nova-scheduler, the cinder-scheduler daemon
picks the optimal block storage provider node to create
the volume on.</para>
</listitem>
<listitem>
<para>Cinder deployments will also make use of a messaging
queue to route information between the cinder processes as
well as a database to store volume state.</para>
</listitem>
</itemizedlist>
<para>Like Quantum, Cinder will mainly interact with Nova,
providing volumes for its instances.</para>
<para><link xlink:href="https://blueprints.launchpad.net/openstack-manuals/+filebug" xlink:show="new">Submit a bug on
the section above. Short description for the bug summary. Paragraph for the description and
then tag with training-manuals.</link></para>
<xi:include href="module001-ch004-openstack-architecture.xml"
xpointer="xmlns(db=http://docbook.org/ns/docbook) xpath(/*/*[not(self::db:title)])">
<xi:fallback><para><mediaobject><imageobject><imagedata fileref="figures/openstack-training-remote-content-not-available.png" format="PNG"/></imageobject></mediaobject>Remote content not available</para><para>image source</para><para><link xlink:href="https://docs.google.com/drawings/d/1J2LZSxmc06xKyxMgPjv5fC0blV7qK6956-AeTmFOZD4/edit?usp=sharing">https://docs.google.com/drawings/d/1J2LZSxmc06xKyxMgPjv5fC0blV7qK6956-AeTmFOZD4/edit?usp=sharing</link></para></xi:fallback>
</xi:include>
<para><link xlink:href="https://blueprints.launchpad.net/openstack-manuals/+filebug" xlink:show="new">Submit a bug on
the section above. Short description for the bug summary. Paragraph for the description and
then tag with training-manuals.</link></para>
</section>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
xml:id="install-ubuntu">
<title>Install Ubuntu</title>
<!-- this maps to user story "Card009 - As a trainee I need to be able to understand how to install Ubuntu 12.04 (or 13.04 in later versions) -->
<!-- <xi:include href="../install-guide/basic-install-files/basic-install_controller-common.xml"
xpointer="xmlns(db=http://docbook.org/ns/docbook) xpath(//*[@xml:id = 'controller-os']/*[not(self::db:title)])">
<xi:fallback><para><mediaobject><imageobject><imagedata fileref="figures/openstack-training-remote-content-not-available.png" format="PNG"/></imageobject></mediaobject>Remote content not available</para><para>image source</para><para><link xlink:href="https://docs.google.com/drawings/d/1J2LZSxmc06xKyxMgPjv5fC0blV7qK6956-AeTmFOZD4/edit?usp=sharing">https://docs.google.com/drawings/d/1J2LZSxmc06xKyxMgPjv5fC0blV7qK6956-AeTmFOZD4/edit?usp=sharing</link></para></xi:fallback>
</xi:include> --> <para>../install-guide/basic-install-files/basic-install_controller-common.xml
line 30
Severity: error
Description: IDREF "basic-install_common_repo" without matching ID
</para>
<para><link xlink:href="https://blueprints.launchpad.net/openstack-manuals/+filebug" xlink:show="new">Submit a bug on
the section above. Short description for the bug summary. Paragraph for the description and
then tag with training-manuals.</link></para>
</section>

View File

@@ -5,6 +5,11 @@
version="5.0"
xml:id="card011-Installing_MySQL_Database_service">
<title>Installing MySQL</title>
<xi:include href="../install-guide/section_installing-mysql.xml">
<xi:include href="../install-guide/basic-install-files/basic-install_controller-common.xml"
xpointer="xmlns(db=http://docbook.org/ns/docbook) xpath(//*[@xml:id = 'controller-mysql']/*[not(self::db:info)])">
<xi:fallback><para><mediaobject><imageobject><imagedata fileref="figures/openstack-training-remote-content-not-available.png" format="PNG"/></imageobject></mediaobject>Remote content not available</para><para>image source</para><para><link xlink:href="https://docs.google.com/drawings/d/1J2LZSxmc06xKyxMgPjv5fC0blV7qK6956-AeTmFOZD4/edit?usp=sharing">https://docs.google.com/drawings/d/1J2LZSxmc06xKyxMgPjv5fC0blV7qK6956-AeTmFOZD4/edit?usp=sharing</link></para></xi:fallback>
</xi:include>
<para><link xlink:href="https://blueprints.launchpad.net/openstack-manuals/+filebug" xlink:show="new">Submit a bug on
the section above. Short description for the bug summary. Paragraph for the description and
then tag with training-manuals.</link></para>
</section>

View File

@@ -5,9 +5,10 @@
xml:id="role-controller-node">
<title>Role of the Controller Node</title>
<!-- this maps to user story "Card025 - As an associate trainee I need to be able to understand the role of the Controller Node in The RefStack architecture described in the basic install guide -->
<!-- <xi:include href="../install-guide/basic-install-files/basic-install_architecture.xml"></xi:include> -->
<xi:include href="../install-guide/basic-install-files/basic-install_architecture.xml"
xpointer="xpath(/*/*[not(local-name(.)='title')])"/>
xpointer="xmlns(db=http://docbook.org/ns/docbook) xpath(/*/*[not(self::db:title)])">
<xi:fallback><para><mediaobject><imageobject><imagedata fileref="figures/openstack-training-remote-content-not-available.png" format="PNG"/></imageobject></mediaobject>Remote content not available</para><para>image source</para><para><link xlink:href="https://docs.google.com/drawings/d/1J2LZSxmc06xKyxMgPjv5fC0blV7qK6956-AeTmFOZD4/edit?usp=sharing">https://docs.google.com/drawings/d/1J2LZSxmc06xKyxMgPjv5fC0blV7qK6956-AeTmFOZD4/edit?usp=sharing</link></para></xi:fallback>
</xi:include>
<para><link xlink:href="https://blueprints.launchpad.net/openstack-manuals/+filebug" xlink:show="new">Submit a bug on
the section above. Short description for the bug summary. Paragraph for the description and
then tag with training-manuals.</link></para>

View File

@@ -5,6 +5,11 @@
version="5.0"
xml:id="card038-Install-and-configure-OpenStack-Identity-Service-in-the-Controller-Node">
<title>Install and configure OpenStack Identity Service in the Controller Node</title>
<xi:include href="../install-guide/basic-install-files/basic-install_controller-keystone.xml">
<xi:include href="../install-guide/basic-install-files/basic-install_controller-keystone.xml"
xpointer="xmlns(db=http://docbook.org/ns/docbook) xpath(/*/*[not(self::db:title)])">
<xi:fallback><para><mediaobject><imageobject><imagedata fileref="figures/openstack-training-remote-content-not-available.png" format="PNG"/></imageobject></mediaobject>Remote content not available</para><para>image source</para><para><link xlink:href="https://docs.google.com/drawings/d/1J2LZSxmc06xKyxMgPjv5fC0blV7qK6956-AeTmFOZD4/edit?usp=sharing">https://docs.google.com/drawings/d/1J2LZSxmc06xKyxMgPjv5fC0blV7qK6956-AeTmFOZD4/edit?usp=sharing</link></para></xi:fallback>
</xi:include>
<para><link xlink:href="https://blueprints.launchpad.net/openstack-manuals/+filebug" xlink:show="new">Submit a bug on
the section above. Short description for the bug summary. Paragraph for the description and
then tag with training-manuals.</link></para>
</section>

View File

@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<chapter xmlns="http://docbook.org/ns/docbook"
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="userstory-includes-template_version_1.0">
<title>Including external content for user stories, version 1.0</title>
xml:id="userstory-includes-template_version_1.1">
<title>Including external content for user stories, version 1.1</title>
<para>Save your user story file as associate-my-user-story-name, operator-my-user-story, etc. For
example my user story that I assigned myself is operator bug fix so the file name would be
operator-fix-documentation-bug.xml. See the operator-fix-documentation-bug.xml file in the
@@ -21,46 +21,26 @@
big dummy example image</para>
<para>image source</para>
<para><link xlink:href="https://docs.google.com/drawings/d/1Tdn4SZLBdvQybW_nK_lO380YRIe5T6PsI0IyLH5XE3M/edit?usp=sharing">https://docs.google.com/drawings/d/1Tdn4SZLBdvQybW_nK_lO380YRIe5T6PsI0IyLH5XE3M/edit?usp=sharing</link></para>
<section xml:id="foobar-section">
<title>Descriptive Section Title</title>
<para>Including a whole file. Include as much description about what is being taught
here.</para>
<para><emphasis role="bold">Including a whole file. Include as much description about what is
being taught here.</emphasis></para>
<!-- this maps to cardXXX user story title "blah blah" -->
<xi:include href="../install-guide/basic-install-files/basic-install_architecture.xml"
xpointer="xmlns(db=http://docbook.org/ns/docbook) xpath(/*/*[not(self::db:title)])">
<xi:fallback><para><mediaobject><imageobject><imagedata fileref="figures/openstack-training-remote-content-not-available.png" format="PNG"/></imageobject></mediaobject>Remote content not available</para><para>image source</para><para><link xlink:href="https://docs.google.com/drawings/d/1J2LZSxmc06xKyxMgPjv5fC0blV7qK6956-AeTmFOZD4/edit?usp=sharing">https://docs.google.com/drawings/d/1J2LZSxmc06xKyxMgPjv5fC0blV7qK6956-AeTmFOZD4/edit?usp=sharing</link></para></xi:fallback>
</xi:include>
<para><link xlink:href="https://blueprints.launchpad.net/openstack-manuals/+filebug" xlink:show="new">Submit a bug on
the section above. Short description for the bug summary. Paragraph for the description and
then tag with training-manuals.</link></para>
<para><emphasis role="bold">Including a section of a file. Include as much description about
what is being taught here.</emphasis></para>
<!-- this maps to cardXXX user story title "blah blah" -->
<xi:include href="../install-guide/basic-install-files/basic-install_controller-common.xml"
xpointer="xmlns(db=http://docbook.org/ns/docbook) xpath(//*[@xml:id = 'controller-os']/*[not(self::db:title)])">
<xi:fallback><para><mediaobject><imageobject><imagedata fileref="figures/openstack-training-remote-content-not-available.png" format="PNG"/></imageobject></mediaobject>Remote content not available</para><para>image source</para><para><link xlink:href="https://docs.google.com/drawings/d/1J2LZSxmc06xKyxMgPjv5fC0blV7qK6956-AeTmFOZD4/edit?usp=sharing">https://docs.google.com/drawings/d/1J2LZSxmc06xKyxMgPjv5fC0blV7qK6956-AeTmFOZD4/edit?usp=sharing</link></para></xi:fallback>
</xi:include>
<para><link xlink:href="https://blueprints.launchpad.net/openstack-manuals/+filebug" xlink:show="new">Submit a bug on
the section above. Short description for the bug summary. Paragraph for the description and
then tag with training-manuals.</link></para>
<!-- this maps to user story "blah blah" -->
<xi:include href="../install-guide/ch_installing-openstack-overview.xml">
<xi:fallback>
<para>
<mediaobject>
<imageobject>
<imagedata fileref="figures/openstack-training-remote-content-not-available.png" format="PNG"/>
</imageobject>
</mediaobject>
Remote content not available</para>
<para>image source</para><para><link xlink:href="https://docs.google.com/drawings/d/1J2LZSxmc06xKyxMgPjv5fC0blV7qK6956-AeTmFOZD4/edit?usp=sharing">https://docs.google.com/drawings/d/1J2LZSxmc06xKyxMgPjv5fC0blV7qK6956-AeTmFOZD4/edit?usp=sharing</link></para>
</xi:fallback>
</xi:include>
</section>
<section xml:id="fubar-section">
<title>Descriptive Section Title</title>
<para>Including a section of a file. Include as much description about what is being taught
here.</para>
<para><link xlink:href="https://blueprints.launchpad.net/openstack-manuals/+filebug" xlink:show="new">Submit a bug on
the section above. Short description for the bug summary. Paragraph for the description and
then tag with training-manuals.</link></para>
<!-- this maps to user story "blah blah" -->
<xi:include href="../install-guide/install_controller-common.xml" xpointer="xmlns(db=http://docbook.org/ns/docbook) xpath(//*[@xml:id = 'controller-os'])">
<xi:fallback>
<para>
<mediaobject>
<imageobject>
<imagedata fileref="figures/openstack-training-remote-content-not-available.png" format="PNG"/>
</imageobject>
</mediaobject>
Remote content not available</para>
<para>image source</para><para><link xlink:href="https://docs.google.com/drawings/d/1J2LZSxmc06xKyxMgPjv5fC0blV7qK6956-AeTmFOZD4/edit?usp=sharing">https://docs.google.com/drawings/d/1J2LZSxmc06xKyxMgPjv5fC0blV7qK6956-AeTmFOZD4/edit?usp=sharing</link></para>
</xi:fallback>
</xi:include>
</section>
</chapter>
</section>