Ambiente » History » Version 75

Beraldo Leal, 24 Aug 2012 15:16

1 1 Beraldo Leal
h1. Ambiente de Desenvolvimento
2 1 Beraldo Leal
3 1 Beraldo Leal
h2. Lista de Servidores
4 1 Beraldo Leal
5 14 Beraldo Leal
* educloud00 - 200.145.46.166
6 14 Beraldo Leal
* educloud01 - 200.145.46.167
7 14 Beraldo Leal
* educloud02 - 200.145.46.168
8 14 Beraldo Leal
* educloud03 - 200.145.46.169
9 14 Beraldo Leal
* educloud04 - 200.145.46.170
10 14 Beraldo Leal
* educloud05 - 200.145.46.174
11 1 Beraldo Leal
* educloud06 - 200.145.46.175
12 1 Beraldo Leal
* educloud07 - 200.145.46.173
13 15 Beraldo Leal
14 16 Beraldo Leal
h3. Desabilitados
15 16 Beraldo Leal
16 15 Beraldo Leal
* educloud05 - 200.145.46.171
17 15 Beraldo Leal
* educloud06 - 200.145.46.172
18 3 Beraldo Leal
19 53 Beraldo Leal
h1. Introduction
20 59 Beraldo Leal
21 55 Beraldo Leal
This document refers to the installation manual of the main components of
22 55 Beraldo Leal
OpenStack. The version of each component used can be found in the respective
23 55 Beraldo Leal
sections of the components.
24 1 Beraldo Leal
25 55 Beraldo Leal
This document was produced by the Center for Scientific Computing, UNESP, with
26 55 Beraldo Leal
funding from Intel and UNESP.
27 1 Beraldo Leal
28 1 Beraldo Leal
OpenStack OpenStack is a global collaboration of developers and cloud computing
29 58 Beraldo Leal
technologists producing the ubiquitous open source cloud computing platform for 
30 55 Beraldo Leal
public and private clouds. The project aims to deliver solutions for all types
31 55 Beraldo Leal
of clouds by being simple to implement, massively scalable, and feature rich.
32 55 Beraldo Leal
The technology consists of a series of interrelated projects delivering various
33 55 Beraldo Leal
components for a cloud infrastructure solution.
34 1 Beraldo Leal
35 1 Beraldo Leal
The OpenStack project is divided into sub projects that have a specific role in
36 55 Beraldo Leal
the big picture.
37 1 Beraldo Leal
38 58 Beraldo Leal
The main components are: Cloud Compute (Nova) Cloud Storage (Swift), Image 
39 55 Beraldo Leal
registration and delivery (Glance), Identity (Keystone) and Dashboard
40 55 Beraldo Leal
(Horizon).
41 1 Beraldo Leal
42 1 Beraldo Leal
Each component is independent of each other and can be installed on separate
43 1 Beraldo Leal
machines, or all in one. In the environment of UNESP, OpenStack was installed in
44 55 Beraldo Leal
seven machines, described in section "Environment used."
45 56 Beraldo Leal
46 58 Beraldo Leal
This document is modified version of OpenStack Install and Deploy Manual [1] 
47 58 Beraldo Leal
with minor adjustments and changes to resolve problems encountered during 
48 58 Beraldo Leal
installation and adjustment to the environment in which it was installed.
49 55 Beraldo Leal
50 58 Beraldo Leal
51 55 Beraldo Leal
h1. OpenStack Core Components
52 55 Beraldo Leal
53 55 Beraldo Leal
OpenStack is a collection of open source technology that provides massively
54 55 Beraldo Leal
scalable open source cloud computing software. Currently OpenStack develops two
55 55 Beraldo Leal
related projects: OpenStack Compute, which offers computing power through
56 55 Beraldo Leal
virtual machine and network management, and OpenStack Object Storage which is
57 55 Beraldo Leal
software for redundant, scalable object storage capacity. Closely related to the
58 55 Beraldo Leal
OpenStack Compute project is the Image Service project, named Glance. OpenStack
59 55 Beraldo Leal
can be used by corporations, service providers, VARS, SMBs, researchers, and
60 55 Beraldo Leal
global data centers looking to deploy large-scale cloud deployments for private
61 55 Beraldo Leal
or public clouds.
62 55 Beraldo Leal
63 55 Beraldo Leal
The main components are: Cloud Compute (Nova) Cloud Storage (Swift), Image
64 1 Beraldo Leal
registration and delivery (Glance), Identity (Keystone) and Dashboard
65 1 Beraldo Leal
(Horizon).
66 1 Beraldo Leal
67 1 Beraldo Leal
They are presented here in an order for educational purposes only to a 
68 1 Beraldo Leal
straightforward procedure for installation. But following a brief description of
69 1 Beraldo Leal
each component.
70 1 Beraldo Leal
71 58 Beraldo Leal
h2. Keystone
72 58 Beraldo Leal
73 58 Beraldo Leal
Keystone is an OpenStack project that provides Identity, Token, Catalog and 
74 58 Beraldo Leal
Policy services for use specifically by projects in the OpenStack family. It
75 58 Beraldo Leal
implements OpenStack’s Identity API.
76 58 Beraldo Leal
77 58 Beraldo Leal
78 55 Beraldo Leal
h2. Cloud Compute (Nova)
79 55 Beraldo Leal
80 55 Beraldo Leal
Nova is the project name for OpenStack Compute, a cloud computing fabric
81 55 Beraldo Leal
controller, the main part of an IaaS system. Individuals and organizations can
82 55 Beraldo Leal
use Nova to host and manage their own cloud computing systems. Nova originated
83 55 Beraldo Leal
as a project out of NASA Ames Research Laboratory.
84 55 Beraldo Leal
85 55 Beraldo Leal
h2. Object Storage (Swift)
86 55 Beraldo Leal
87 55 Beraldo Leal
OpenStack Object Storage (Swift) is a system to store objects in a massively
88 55 Beraldo Leal
scalable large capacity system with built-in redundancy and failover. Object
89 55 Beraldo Leal
Storage has a variety of applications, such as backing up or archiving data,
90 55 Beraldo Leal
serving graphics or videos (streaming data to a user's browser), storing
91 55 Beraldo Leal
secondary or tertiary static data, developing new applications with data
92 55 Beraldo Leal
storage integration, storing data when predicting storage capacity is difficult,
93 55 Beraldo Leal
and creating the elasticity and flexibility of cloud-based storage for your web
94 55 Beraldo Leal
applications.
95 1 Beraldo Leal
96 1 Beraldo Leal
h2. Image Service (Glance)
97 1 Beraldo Leal
98 1 Beraldo Leal
OpenStack Image Service (Glance) is a lookup and retrieval system for virtual
99 1 Beraldo Leal
machine images. It can be configured in three ways: using OpenStack Object Store
100 1 Beraldo Leal
to store images; using Amazon's Simple Storage Solution (S3) storage directly;
101 1 Beraldo Leal
or using S3 storage with Object Store as the intermediate for S3 access.
102 58 Beraldo Leal
103 58 Beraldo Leal
104 58 Beraldo Leal
h1. Environment Proposed
105 58 Beraldo Leal
106 58 Beraldo Leal
This document aims to guide you in setting up a test environment or development.
107 58 Beraldo Leal
The original documentation suggests many machines. To install OpenStack here,
108 58 Beraldo Leal
you will need only one or two machines.
109 58 Beraldo Leal
110 58 Beraldo Leal
You can install all services on one machine only (all-in-one). Or you can
111 58 Beraldo Leal
install OpenStack controller (all services except the nova-compute) on machine A
112 58 Beraldo Leal
and a compute cloud controller on machine B.
113 58 Beraldo Leal
114 58 Beraldo Leal
For a production environment it is advisable to separate the elements to ensure
115 58 Beraldo Leal
a high availability and redundancy.
116 58 Beraldo Leal
117 58 Beraldo Leal
Settings used in this document:
118 58 Beraldo Leal
119 58 Beraldo Leal
 - Cloud Controller:
120 58 Beraldo Leal
121 58 Beraldo Leal
122 58 Beraldo Leal
 - Cloud Computer Node:
123 58 Beraldo Leal
124 58 Beraldo Leal
All machines are installed with Ubuntu Server 12.04 LTS.
125 58 Beraldo Leal
126 58 Beraldo Leal
h1. Initial configuration
127 58 Beraldo Leal
128 58 Beraldo Leal
Before starting the installation and configuration of each component must first
129 58 Beraldo Leal
to make some adjustments.
130 58 Beraldo Leal
131 58 Beraldo Leal
h2. Network Configuration
132 58 Beraldo Leal
133 58 Beraldo Leal
For both conserving network resources and ensuring that network administrators
134 58 Beraldo Leal
understand the needs for networks and public IP addresses for accessing the APIs
135 58 Beraldo Leal
and VMs as necessary, this section offers recommendations and required minimum
136 58 Beraldo Leal
sizes. Throughput of at least 1000 Mbps is suggested.
137 58 Beraldo Leal
138 58 Beraldo Leal
For OpenStack Compute, networking is configured on multi-node installations
139 58 Beraldo Leal
between the physical machines on a single subnet. For networking between virtual
140 58 Beraldo Leal
machine instances, three network options are available: flat, DHCP, and VLAN.
141 58 Beraldo Leal
Two NICs (Network Interface Cards) are recommended on the server running
142 58 Beraldo Leal
nova-network.
143 58 Beraldo Leal
144 58 Beraldo Leal
Management Network (RFC1918 IP Range, not publicly routable): This network is
145 58 Beraldo Leal
utilized for all inter-server communications within the cloud infrastructure.
146 58 Beraldo Leal
Recommended size: 255 IPs (CIDR /24)
147 58 Beraldo Leal
148 58 Beraldo Leal
Public Network (Publicly routable IP range): This network is utilized for
149 58 Beraldo Leal
providing Public IP accessibility to the API endpoints within the cloud
150 58 Beraldo Leal
infrastructure. Minimum size: 8 IPs (CIDR /29)
151 58 Beraldo Leal
152 58 Beraldo Leal
VM Network (RFC1918 IP Range, not publicly routable): This network is utilized
153 58 Beraldo Leal
for providing primary IP addresses to the cloud instances. Recommended size:
154 58 Beraldo Leal
1024 IPs (CIDR /22)
155 58 Beraldo Leal
156 58 Beraldo Leal
Floating IP network (Publicly routable IP Range): This network is utilized for
157 58 Beraldo Leal
providing Public IP accessibility to selected cloud instances. Minimum size:
158 58 Beraldo Leal
16 IPs (CIDR /28)
159 58 Beraldo Leal
160 58 Beraldo Leal
In this installation we will use eth0 to public interface and eth1 for
161 58 Beraldo Leal
management interface.
162 58 Beraldo Leal
163 58 Beraldo Leal
h2. Installing Network Time Protocol (NTP)
164 58 Beraldo Leal
165 58 Beraldo Leal
To keep all the services in sync, you need to install NTP, and if you do a
166 58 Beraldo Leal
multi-node configuration you will configure one server to be the reference
167 58 Beraldo Leal
server.
168 58 Beraldo Leal
169 58 Beraldo Leal
# apt-get install -y ntp
170 58 Beraldo Leal
171 58 Beraldo Leal
Set up the NTP server on your controller node so that it receives data by
172 58 Beraldo Leal
modifying the ntp.conf file and restarting the service. As root:
173 58 Beraldo Leal
174 58 Beraldo Leal
# sed -i 's/server ntp.ubuntu.com/server ntp.ubuntu.com\nserver 127.127.1.0\
175 58 Beraldo Leal
nfudge 127.127.1.0 stratum 10/g' /etc/ntp.conf
176 58 Beraldo Leal
# service ntp restart
177 58 Beraldo Leal
178 58 Beraldo Leal
Set up the NTP client on your compute node so that the time between controller
179 58 Beraldo Leal
node and compute node is synchronized. Do the following as a cron job on compute
180 58 Beraldo Leal
node.
181 58 Beraldo Leal
182 58 Beraldo Leal
# ntpdate 'controllernode ip'
183 58 Beraldo Leal
# hwclock -w
184 58 Beraldo Leal
185 58 Beraldo Leal
h2. Storage
186 58 Beraldo Leal
187 58 Beraldo Leal
Many cloud computing use cases require persistent remote storage. Storage
188 58 Beraldo Leal
solutions are often divided into three categories: object storage, block
189 58 Beraldo Leal
storage, and file storage.
190 58 Beraldo Leal
191 58 Beraldo Leal
Here we will use a "object storage" and a "block storage".
192 58 Beraldo Leal
193 58 Beraldo Leal
h3. Object storage (swift)
194 58 Beraldo Leal
195 58 Beraldo Leal
With object storage, files are exposed through an HTTP interface, typically with
196 58 Beraldo Leal
a REST API. All client data access is done at the user level: the operating
197 58 Beraldo Leal
system is unaware of the presence of the remote storage system. In OpenStack,
198 58 Beraldo Leal
the Object Storage service provides this type of functionality. Users access and
199 58 Beraldo Leal
modify files by making HTTP requests. Because the data accesss interface provided
200 58 Beraldo Leal
by an object storage system is at a low level of abstraction, people often build
201 58 Beraldo Leal
on top of object storage to build file-based applications that provide a higher
202 58 Beraldo Leal
level of abstraction. For example, the OpenStack Image service can be configured
203 58 Beraldo Leal
to use the Object Storage service as a backend. Another use for object storage
204 58 Beraldo Leal
solutions is as a content delivery network (CDN) for hosting static web content
205 58 Beraldo Leal
(e.g., images, and media files), since object storage already provides an HTTP
206 58 Beraldo Leal
interface.
207 58 Beraldo Leal
208 58 Beraldo Leal
h3. Block storage (SAN)
209 58 Beraldo Leal
210 58 Beraldo Leal
With block storage, files are exposed through a low-level computer bus interface
211 58 Beraldo Leal
such as SCSI or ATA, that is accessible over the network. Block storage is
212 58 Beraldo Leal
synonymous with SAN (storage area network). Clients access data through the
213 58 Beraldo Leal
operating system at the device level: users access the data by mounting the
214 58 Beraldo Leal
remote device in a similar manner to how they would mount a local, physical disk
215 58 Beraldo Leal
(e.g., using the "mount" command in Linux). In OpenStack, the nova-volume
216 58 Beraldo Leal
service that forms part of the Compute service provides this type of
217 58 Beraldo Leal
functionality, and uses iSCSI to expose remote data as a SCSI disk that is
218 58 Beraldo Leal
attached to the network.
219 58 Beraldo Leal
220 58 Beraldo Leal
Because the data is exposed as a physical device, the end-user is responsible
221 58 Beraldo Leal
for creating partitions and formatting the exposed disk device. In addition,
222 58 Beraldo Leal
in OpenStack Compute a device can only be attached to one server at a time, so
223 58 Beraldo Leal
block storage cannot be used for to share data across virtual machine instances
224 58 Beraldo Leal
concurrently.
225 58 Beraldo Leal
226 58 Beraldo Leal
h1. Installation Assumptions
227 58 Beraldo Leal
228 58 Beraldo Leal
OpenStack Compute has a large number of configuration options. To simplify this
229 58 Beraldo Leal
installation guide, we make a number of assumptions about the target
230 58 Beraldo Leal
installation:
231 58 Beraldo Leal
232 58 Beraldo Leal
 * You have a collection of compute nodes, each installed with Ubuntu Server
233 58 Beraldo Leal
12.04
234 58 Beraldo Leal
235 58 Beraldo Leal
 * You have designated one of the nodes as the Cloud Controller, which will run
236 58 Beraldo Leal
all of the services (RabbitMQ, MySQL, Identity, Image, nova-api, nova-network,
237 58 Beraldo Leal
nova-scheduler, nova-volume) except for nova-compute.
238 58 Beraldo Leal
239 58 Beraldo Leal
 * The disk partitions on your cloud controller are being managed by the Logical
240 58 Beraldo Leal
Volume Manager (LVM)
241 58 Beraldo Leal
242 58 Beraldo Leal
 * Your Cloud Controller has an LVM volume group named "nova-volumes" to provide
243 58 Beraldo Leal
persistent storage to guest VMs. Either create this during the installation or
244 58 Beraldo Leal
leave some free space to create it prior to installing nova services.
245 58 Beraldo Leal
246 58 Beraldo Leal
 * Ensure that the server can resolve its own hostname, otherwise you may have
247 58 Beraldo Leal
problems if you are using RabbitMQ as the messaging backend (RabbitMQ is the default
248 58 Beraldo Leal
messaging back-end on Ubuntu, on Fedora the default backend is Qpid).
249 58 Beraldo Leal
250 58 Beraldo Leal
 * 192.168.69.1 is the primary IP for our controller host on eth0 and
251 58 Beraldo Leal
192.168.69.2 is the primary IP for our computer node on eth0.
252 58 Beraldo Leal
253 58 Beraldo Leal
 * FlatDHCP with a single network interface.
254 58 Beraldo Leal
255 58 Beraldo Leal
 * KVM as the hypervisor.
256 58 Beraldo Leal
257 58 Beraldo Leal
 * Ensure the operating system is up-to-date by running apt-get update and
258 58 Beraldo Leal
apt-get upgrade prior to the installation.
259 58 Beraldo Leal
260 58 Beraldo Leal
 * Ensure that all hosts are with ntp and correct time.
261 58 Beraldo Leal
262 58 Beraldo Leal
263 58 Beraldo Leal
This installation process walks through installing a cloud controller node and a
264 58 Beraldo Leal
compute node using a set of packages that are known to work with each other.
265 58 Beraldo Leal
The cloud controller node contains all the nova- services including the API
266 58 Beraldo Leal
server and the database server. The compute node needs to run only the
267 58 Beraldo Leal
nova-compute service. You only need one nova-network service running in a
268 58 Beraldo Leal
multi-node install.
269 53 Beraldo Leal
270 60 Beraldo Leal
h1. Keystone
271 1 Beraldo Leal
272 60 Beraldo Leal
The OpenStack Identity service manages users, tenants (accounts or projects) and
273 60 Beraldo Leal
offers a common identity system for all the OpenStack components.
274 60 Beraldo Leal
275 60 Beraldo Leal
The Identity services has two primary functions:
276 60 Beraldo Leal
277 60 Beraldo Leal
 1. User management: keep track of users and what they are permitted to do
278 60 Beraldo Leal
 2. Service catalog: Provide a catalog of what services are available and where
279 60 Beraldo Leal
their API endpoints are located.
280 60 Beraldo Leal
281 60 Beraldo Leal
h2. User management
282 60 Beraldo Leal
283 60 Beraldo Leal
The three main concepts of Identity user management are:
284 60 Beraldo Leal
285 60 Beraldo Leal
* Users
286 60 Beraldo Leal
* Tenants
287 60 Beraldo Leal
* Roles
288 60 Beraldo Leal
289 60 Beraldo Leal
A user represents a human user, and has associated information such as username,
290 60 Beraldo Leal
password and email.
291 60 Beraldo Leal
292 60 Beraldo Leal
293 60 Beraldo Leal
A tenant can be thought of as a project, group, or organization. Whenever you
294 60 Beraldo Leal
make requests to OpenStack services, you must specify a tenant. For example, if
295 60 Beraldo Leal
you query the Compute service for a list of running instances, you will receive
296 60 Beraldo Leal
a list of all of the running instances in the tenant you specified in your
297 60 Beraldo Leal
query.
298 60 Beraldo Leal
299 60 Beraldo Leal
A role captures what operations a user is permitted to perform in a given tenant.
300 60 Beraldo Leal
301 60 Beraldo Leal
h3. Service management
302 60 Beraldo Leal
303 60 Beraldo Leal
The two main concepts of Identity service management are:
304 60 Beraldo Leal
305 60 Beraldo Leal
* Services
306 60 Beraldo Leal
* Endpoints
307 60 Beraldo Leal
308 60 Beraldo Leal
The Identity service also maintains a user that corresponds to each service
309 60 Beraldo Leal
(e.g., a user named nova, for the Compute service) and a special service tenant,
310 60 Beraldo Leal
which is called service.
311 60 Beraldo Leal
312 60 Beraldo Leal
313 60 Beraldo Leal
h3. Installing Keystone
314 30 Beraldo Leal
315 1 Beraldo Leal
<pre>
316 18 Beraldo Leal
# apt-get install keystone
317 18 Beraldo Leal
</pre>
318 18 Beraldo Leal
319 18 Beraldo Leal
Delete the keystone.db file created in the /var/lib/keystone directory.
320 18 Beraldo Leal
321 18 Beraldo Leal
<pre>
322 18 Beraldo Leal
# rm /var/lib/keystone/keystone.db
323 18 Beraldo Leal
</pre>
324 18 Beraldo Leal
325 18 Beraldo Leal
Install mysql:
326 18 Beraldo Leal
327 18 Beraldo Leal
<pre>
328 18 Beraldo Leal
# apt-get install python-mysqldb mysql-server
329 11 Beraldo Leal
</pre>
330 19 Beraldo Leal
331 19 Beraldo Leal
Use sed to edit /etc/mysql/my.cnf to change bind-address from localhost
332 19 Beraldo Leal
(127.0.0.1) to any (0.0.0.0) and restart the mysql service, as root:
333 19 Beraldo Leal
334 19 Beraldo Leal
<pre>
335 19 Beraldo Leal
# sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf
336 19 Beraldo Leal
# service mysql restart
337 19 Beraldo Leal
</pre>
338 19 Beraldo Leal
339 19 Beraldo Leal
To configure the MySQL database, create the keystone database.
340 19 Beraldo Leal
341 19 Beraldo Leal
<pre>
342 19 Beraldo Leal
# mysql -u root -p
343 19 Beraldo Leal
mysql> CREATE DATABASE keystone;
344 74 Beraldo Leal
mysql> CREATE USER keystone;
345 71 Beraldo Leal
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystonepass';
346 19 Beraldo Leal
mysql> FLUSH PRIVILEGES;
347 19 Beraldo Leal
mysql> quit;
348 19 Beraldo Leal
</pre>
349 20 Beraldo Leal
350 20 Beraldo Leal
Edit _*keystone.conf*_ to use mysql:
351 20 Beraldo Leal
352 20 Beraldo Leal
<pre>
353 1 Beraldo Leal
[sql]
354 20 Beraldo Leal
connection = mysql://keystone:keystonepass@192.168.69.1/keystone
355 20 Beraldo Leal
</pre>
356 21 Beraldo Leal
357 21 Beraldo Leal
Change in _*keystone.conf*_ the ADMIN_TOKEN:
358 21 Beraldo Leal
359 21 Beraldo Leal
<pre>
360 20 Beraldo Leal
admin_token = 012345SECRET99TOKEN012345
361 21 Beraldo Leal
</pre>
362 1 Beraldo Leal
363 61 Beraldo Leal
Restart the keystone service and populate with initial data:
364 22 Beraldo Leal
365 22 Beraldo Leal
<pre>
366 22 Beraldo Leal
# service keystone restart
367 22 Beraldo Leal
# keystone-manage db_sync
368 1 Beraldo Leal
</pre>
369 1 Beraldo Leal
370 1 Beraldo Leal
h2. Configuring Services to work with Keystone
371 23 Beraldo Leal
372 61 Beraldo Leal
Create the file _*/root/openstackrc*_, with theses lines
373 23 Beraldo Leal
374 23 Beraldo Leal
<pre>
375 1 Beraldo Leal
export SERVICE_ENDPOINT=http://192.168.69.1:35357/v2.0/
376 23 Beraldo Leal
export SERVICE_TOKEN=012345SECRET99TOKEN012345
377 23 Beraldo Leal
</pre>
378 23 Beraldo Leal
379 61 Beraldo Leal
Theses environment variables are useful to avoid execute commands with long args, like --token or --endpoint.
380 1 Beraldo Leal
381 61 Beraldo Leal
Reload the file:
382 23 Beraldo Leal
383 23 Beraldo Leal
<pre>
384 23 Beraldo Leal
# source /root/openstackrc
385 1 Beraldo Leal
</pre>
386 23 Beraldo Leal
387 61 Beraldo Leal
Create the *tenants*: _openstackDemo_ and _service_:
388 24 Beraldo Leal
389 24 Beraldo Leal
<pre>
390 24 Beraldo Leal
# keystone tenant-create --name openstackDemo --description "Default Tenant"  --enabled true
391 1 Beraldo Leal
# keystone tenant-create --name service --description "Service Tenant"  --enabled true
392 24 Beraldo Leal
</pre>
393 24 Beraldo Leal
394 61 Beraldo Leal
Create the *user* _admin_, replace the tenant_id by openStackDemo tenant_id:
395 27 Beraldo Leal
396 1 Beraldo Leal
<pre>
397 25 Beraldo Leal
# keystone user-create --tenant_id 9c401c9d2b9d41bcabda6919d4aec63a --name admin --pass adminpass --enabled true
398 1 Beraldo Leal
</pre>
399 1 Beraldo Leal
400 61 Beraldo Leal
Create the *roles*: _admin_ and _user_:
401 26 Beraldo Leal
402 26 Beraldo Leal
<pre>
403 1 Beraldo Leal
# keystone role-create --name admin
404 26 Beraldo Leal
# keystone role-create --name user
405 1 Beraldo Leal
</pre>
406 27 Beraldo Leal
407 61 Beraldo Leal
Grant _admin_ *role* to *user* _admin_:
408 27 Beraldo Leal
409 27 Beraldo Leal
<pre>
410 27 Beraldo Leal
# keystone user-role-add --user [admin_user_id] --tenant_id [openstackDemo_tenant_id] --role [admin_role]
411 29 Beraldo Leal
</pre>
412 29 Beraldo Leal
413 61 Beraldo Leal
Create an user to each service, replace the tenant_id by the service tenant id:
414 29 Beraldo Leal
415 29 Beraldo Leal
<pre>
416 29 Beraldo Leal
# keystone user-create --tenant_id 92920816c7704a8a95c916d34dc7a05c --name glance --pass glancepass --enabled true
417 29 Beraldo Leal
# keystone user-create --tenant_id 92920816c7704a8a95c916d34dc7a05c --name nova --pass novapass --enabled true
418 29 Beraldo Leal
# keystone user-create --tenant_id 92920816c7704a8a95c916d34dc7a05c --name swift --pass swiftpass --enabled true
419 29 Beraldo Leal
</pre>
420 29 Beraldo Leal
421 61 Beraldo Leal
Add the users of each service to admin *role*:
422 29 Beraldo Leal
423 29 Beraldo Leal
<pre>
424 29 Beraldo Leal
# keystone user-role-add --user [glance_user_id] --tenant_id [service_tenant_id] --role [admin_role]
425 1 Beraldo Leal
# keystone user-role-add --user [nova_user_id] --tenant_id [service_tenant_id] --role [admin_role]
426 29 Beraldo Leal
# keystone user-role-add --user [swift_user_id] --tenant_id [service_tenant_id] --role [admin_role]
427 25 Beraldo Leal
</pre>
428 31 Beraldo Leal
429 62 Beraldo Leal
h2. Creating the services:
430 31 Beraldo Leal
431 62 Beraldo Leal
Until now, we just created: tenants, users and roles. The Keystone manage the services and yours endpoints too. In this way, the OpenStack components query to keystone where each service is located:
432 31 Beraldo Leal
433 62 Beraldo Leal
Run the follow commands, to create the services:
434 31 Beraldo Leal
435 31 Beraldo Leal
<pre>
436 31 Beraldo Leal
# keystone service-create --name keystone --type identity --description "Keystone Identity Service" 
437 31 Beraldo Leal
# keystone service-create --name nova --type compute --description "Nova Compute Service"
438 31 Beraldo Leal
# keystone service-create --name volume --type volume --description "Nova Volume Service"
439 31 Beraldo Leal
# keystone service-create --name glance --type image --description "Glance Image Service"
440 41 Beraldo Leal
# keystone service-create --name swift --type object-store --description "Object Storage Service"
441 31 Beraldo Leal
</pre>
442 32 Beraldo Leal
443 62 Beraldo Leal
Run the follow commands, to create the endpoints of each service:
444 32 Beraldo Leal
445 32 Beraldo Leal
<pre>
446 33 Beraldo Leal
# keystone endpoint-create --region RegionOne --service_id [keystone_service_id] --publicurl http://192.168.69.1:5000/v2.0 --internalurl http://192.168.69.1:5000/v2.0 --adminurl http://192.168.69.1:35357/v2.0
447 33 Beraldo Leal
# keystone endpoint-create --region RegionOne --service_id [compute_service_id] --publicurl 'http://192.168.69.1:8774/v2/%(tenant_id)s' --internalurl 'http://192.168.69.1:8774/v2/%(tenant_id)s' --adminurl 'http://192.168.69.1:8774/v2/%(tenant_id)s'
448 1 Beraldo Leal
# keystone endpoint-create --region RegionOne --service_id [volume_service_id] --publicurl 'http://192.168.69.1:8776/v1/%(tenant_id)s' --internalurl 'http://192.168.69.1:8776/v1/%(tenant_id)s' --adminurl 'http://192.168.69.1:8776/v1/%(tenant_id)s'
449 33 Beraldo Leal
# keystone endpoint-create --region RegionOne --service_id [glance_service_id] --publicurl http://192.168.69.1:9292/v1 --internalurl http://192.168.69.1:9292/v1 --adminurl http://192.168.69.1:9292/v1
450 33 Beraldo Leal
# keystone endpoint-create --region RegionOne --service_id [swift_service_id] --publicurl 'http://192.168.69.1:8888/v1/AUTH_%(tenant_id)s' --adminurl 'http://192.168.69.1:8888/' --internalurl 'http://192.168.69.1:8888/v1/AUTH_%(tenant_id)s'
451 32 Beraldo Leal
</pre>
452 34 Beraldo Leal
453 62 Beraldo Leal
h2. Checking the keystone installation:w
454 34 Beraldo Leal
455 34 Beraldo Leal
<pre>
456 34 Beraldo Leal
# sudo apt-get install curl openssl
457 34 Beraldo Leal
</pre>
458 34 Beraldo Leal
459 62 Beraldo Leal
Do a REST request to keystone-api using curl:
460 34 Beraldo Leal
461 34 Beraldo Leal
<pre>
462 34 Beraldo Leal
# curl -d '{"auth": {"tenantName": "openstackDemo", "passwordCredentials": {"username": "admin", "password": "adminpass"}}}' -H "Content-type: application/json" http://192.168.69.1:35357/v2.0/tokens  | python -mjson.tool
463 34 Beraldo Leal
</pre>
464 34 Beraldo Leal
465 62 Beraldo Leal
The output should have the services, endpoints and a valid token for 24 hours:
466 34 Beraldo Leal
467 34 Beraldo Leal
<pre>
468 34 Beraldo Leal
{
469 34 Beraldo Leal
    "access": {
470 34 Beraldo Leal
        "serviceCatalog": [
471 34 Beraldo Leal
            {
472 34 Beraldo Leal
                "endpoints": [
473 34 Beraldo Leal
                    {
474 34 Beraldo Leal
                        "adminURL": "http://192.168.69.1:8776/v1/9c401c9d2b9d41bcabda6919d4aec63a", 
475 34 Beraldo Leal
                        "internalURL": "http://192.168.69.1:8776/v1/9c401c9d2b9d41bcabda6919d4aec63a", 
476 34 Beraldo Leal
                        "publicURL": "http://192.168.69.1:8776/v1/9c401c9d2b9d41bcabda6919d4aec63a", 
477 34 Beraldo Leal
                        "region": "RegionOne"
478 34 Beraldo Leal
                    }
479 34 Beraldo Leal
                ], 
480 34 Beraldo Leal
                "endpoints_links": [], 
481 34 Beraldo Leal
                "name": "volume", 
482 34 Beraldo Leal
                "type": "volume"
483 34 Beraldo Leal
            }, 
484 34 Beraldo Leal
            {
485 34 Beraldo Leal
                "endpoints": [
486 34 Beraldo Leal
                    {
487 34 Beraldo Leal
                        "adminURL": "http://192.168.69.1:9292/v1", 
488 34 Beraldo Leal
                        "internalURL": "http://192.168.69.1:9292/v1", 
489 34 Beraldo Leal
                        "publicURL": "http://192.168.69.1:9292/v1", 
490 34 Beraldo Leal
                        "region": "RegionOne"
491 34 Beraldo Leal
                    }
492 34 Beraldo Leal
                ], 
493 34 Beraldo Leal
                "endpoints_links": [], 
494 34 Beraldo Leal
                "name": "glance", 
495 34 Beraldo Leal
                "type": "image"
496 34 Beraldo Leal
            }, 
497 34 Beraldo Leal
            {
498 34 Beraldo Leal
                "endpoints": [
499 34 Beraldo Leal
                    {
500 34 Beraldo Leal
                        "adminURL": "http://192.168.69.1:8774/v2/9c401c9d2b9d41bcabda6919d4aec63a", 
501 34 Beraldo Leal
                        "internalURL": "http://192.168.69.1:8774/v2/9c401c9d2b9d41bcabda6919d4aec63a", 
502 34 Beraldo Leal
                        "publicURL": "http://192.168.69.1:8774/v2/9c401c9d2b9d41bcabda6919d4aec63a", 
503 34 Beraldo Leal
                        "region": "RegionOne"
504 34 Beraldo Leal
                    }
505 34 Beraldo Leal
                ], 
506 34 Beraldo Leal
                "endpoints_links": [], 
507 34 Beraldo Leal
                "name": "nova", 
508 34 Beraldo Leal
                "type": "compute"
509 34 Beraldo Leal
            }, 
510 34 Beraldo Leal
            {
511 34 Beraldo Leal
                "endpoints": [
512 34 Beraldo Leal
                    {
513 34 Beraldo Leal
                        "adminURL": "http://192.168.69.1:35357/v2.0", 
514 34 Beraldo Leal
                        "internalURL": "http://192.168.69.1:5000/v2.0", 
515 34 Beraldo Leal
                        "publicURL": "http://192.168.69.1:5000/v2.0", 
516 34 Beraldo Leal
                        "region": "RegionOne"
517 34 Beraldo Leal
                    }
518 34 Beraldo Leal
                ], 
519 34 Beraldo Leal
                "endpoints_links": [], 
520 34 Beraldo Leal
                "name": "keystone", 
521 34 Beraldo Leal
                "type": "identity"
522 34 Beraldo Leal
            }, 
523 34 Beraldo Leal
            {
524 34 Beraldo Leal
                "endpoints": [
525 34 Beraldo Leal
                    {
526 34 Beraldo Leal
                        "adminURL": "http://192.168.69.1:8888/", 
527 34 Beraldo Leal
                        "internalURL": "http://192.168.69.1:8888/v1/AUTH_9c401c9d2b9d41bcabda6919d4aec63a", 
528 34 Beraldo Leal
                        "publicURL": "http://192.168.69.1:8888/v1/AUTH_9c401c9d2b9d41bcabda6919d4aec63a", 
529 34 Beraldo Leal
                        "region": "RegionOne"
530 34 Beraldo Leal
                    }
531 34 Beraldo Leal
                ], 
532 34 Beraldo Leal
                "endpoints_links": [], 
533 34 Beraldo Leal
                "name": "swift", 
534 41 Beraldo Leal
                "type": "object-store"
535 34 Beraldo Leal
            }
536 34 Beraldo Leal
        ], 
537 34 Beraldo Leal
        "token": {
538 34 Beraldo Leal
            "expires": "2012-06-08T15:31:46Z", 
539 34 Beraldo Leal
            "id": "05b818ff23564d5599c97ea5e1df7bbe", 
540 34 Beraldo Leal
            "tenant": {
541 34 Beraldo Leal
                "description": "Default Tenant", 
542 34 Beraldo Leal
                "enabled": true, 
543 34 Beraldo Leal
                "id": "9c401c9d2b9d41bcabda6919d4aec63a", 
544 34 Beraldo Leal
                "name": "openstackDemo"
545 34 Beraldo Leal
            }
546 34 Beraldo Leal
        }, 
547 34 Beraldo Leal
        "user": {
548 34 Beraldo Leal
            "id": "1fcfbe778fc3428aa30db782056b34d7", 
549 34 Beraldo Leal
            "name": "admin", 
550 34 Beraldo Leal
            "roles": [
551 34 Beraldo Leal
                {
552 34 Beraldo Leal
                    "id": "a2d6da77c0a54105aab94484e0d2088b", 
553 34 Beraldo Leal
                    "name": "admin"
554 34 Beraldo Leal
                }
555 34 Beraldo Leal
            ], 
556 34 Beraldo Leal
            "roles_links": [], 
557 34 Beraldo Leal
            "username": "admin"
558 34 Beraldo Leal
        }
559 34 Beraldo Leal
    }
560 34 Beraldo Leal
}
561 34 Beraldo Leal
562 34 Beraldo Leal
</pre>
563 36 Beraldo Leal
564 62 Beraldo Leal
You can list users, roles, tenants and services:
565 36 Beraldo Leal
566 36 Beraldo Leal
<pre>
567 36 Beraldo Leal
# keystone user-list
568 39 Beraldo Leal
+----------------------------------+---------+-------+--------+
569 39 Beraldo Leal
|                id                | enabled | email |  name  |
570 39 Beraldo Leal
+----------------------------------+---------+-------+--------+
571 39 Beraldo Leal
| 029c5749548946f7b560b2706d31d488 | True    | None  | glance |
572 39 Beraldo Leal
| 1fcfbe778fc3428aa30db782056b34d7 | True    | None  | admin  |
573 39 Beraldo Leal
| 4b75079aeb1b408ebdb286bfb85e719f | True    | None  | swift  |
574 39 Beraldo Leal
| e25f81d50eb84bdb92907adbd0e41f25 | True    | None  | nova   |
575 39 Beraldo Leal
+----------------------------------+---------+-------+--------+
576 40 Beraldo Leal
</pre>
577 39 Beraldo Leal
578 40 Beraldo Leal
<pre>
579 36 Beraldo Leal
# keystone role-list
580 39 Beraldo Leal
+----------------------------------+-------+
581 39 Beraldo Leal
|                id                |  name |
582 39 Beraldo Leal
+----------------------------------+-------+
583 39 Beraldo Leal
| 845e83e4d9bf4d8d8188b1e261dfe103 | user  |
584 39 Beraldo Leal
| a2d6da77c0a54105aab94484e0d2088b | admin |
585 39 Beraldo Leal
+----------------------------------+-------+
586 40 Beraldo Leal
</pre>
587 1 Beraldo Leal
588 40 Beraldo Leal
<pre>
589 36 Beraldo Leal
# keystone tenant-list
590 39 Beraldo Leal
+----------------------------------+---------------+---------+
591 39 Beraldo Leal
|                id                |      name     | enabled |
592 39 Beraldo Leal
+----------------------------------+---------------+---------+
593 39 Beraldo Leal
| 92920816c7704a8a95c916d34dc7a05c | service       | True    |
594 39 Beraldo Leal
| 9c401c9d2b9d41bcabda6919d4aec63a | openstackDemo | True    |
595 1 Beraldo Leal
+----------------------------------+---------------+---------+
596 40 Beraldo Leal
</pre>
597 1 Beraldo Leal
598 40 Beraldo Leal
<pre>
599 36 Beraldo Leal
# keystone service-list
600 39 Beraldo Leal
+----------------------------------+----------+----------------+---------------------------+
601 39 Beraldo Leal
|                id                |   name   |      type      |        description        |
602 39 Beraldo Leal
+----------------------------------+----------+----------------+---------------------------+
603 39 Beraldo Leal
| 00486163c7c64c6a86f577627071aafc | nova     | compute        | Nova Compute Service      |
604 39 Beraldo Leal
| 69d3a6b21c9348acb1042d7d9386ff81 | volume   | volume         | Nova Volume Service       |
605 39 Beraldo Leal
| 7b09782f9faf448781f5a460acabe258 | swift    | object-store   | Object Storage Service    |
606 39 Beraldo Leal
| d6b32583a6694e9b828b2a50037623ba | keystone | identity       | Keystone Identity Service |
607 39 Beraldo Leal
| f7f964a71e2a45119dcaede68fafbd78 | glance   | image          | Glance Image Service      |
608 36 Beraldo Leal
+----------------------------------+----------+----------------+---------------------------+
609 38 Beraldo Leal
</pre>
610 38 Beraldo Leal
611 42 Beraldo Leal
h1. Installing OpenStack Object Storage - Swift
612 1 Beraldo Leal
613 63 Beraldo Leal
OpenStack Object Storage (Swift) is a system to store objects in a massively
614 63 Beraldo Leal
scalable large capacity system with built-in redundancy and failover. Object
615 63 Beraldo Leal
Storage has a variety of applications, such as backing up or archiving data,
616 63 Beraldo Leal
serving graphics or videos (streaming data to a user's browser), storing
617 63 Beraldo Leal
secondary or tertiary static data, developing new applications with data
618 63 Beraldo Leal
storage integration, storing data when predicting storage capacity is difficult,
619 63 Beraldo Leal
and creating the elasticity and flexibility of cloud-based storage for your web
620 63 Beraldo Leal
applications.
621 1 Beraldo Leal
622 63 Beraldo Leal
In this environment we use the same controller node as storage too. So the swift and swift-proxy is installed in the controller-node.
623 44 Beraldo Leal
624 63 Beraldo Leal
Install the swift and dependencies:
625 44 Beraldo Leal
626 1 Beraldo Leal
<pre>
627 1 Beraldo Leal
# apt-get install swift python-xattr python-memcache rsync memcached python-netifaces
628 44 Beraldo Leal
</pre>
629 44 Beraldo Leal
630 44 Beraldo Leal
631 63 Beraldo Leal
Unfortunately at the time of writing this manual swift package not automates some tasks, such as the creation of configuration files. We have to do this manually:
632 63 Beraldo Leal
633 44 Beraldo Leal
<pre>
634 44 Beraldo Leal
# mkdir /etc/swift
635 44 Beraldo Leal
</pre>
636 44 Beraldo Leal
637 63 Beraldo Leal
Create the config file _/etc/swift/swift.conf_:
638 1 Beraldo Leal
639 44 Beraldo Leal
<pre>
640 1 Beraldo Leal
[swift-hash]
641 1 Beraldo Leal
# random unique string that can never change (DO NOT LOSE)
642 44 Beraldo Leal
swift_hash_path_suffix = fLIbertYgibbitZ
643 44 Beraldo Leal
</pre>
644 44 Beraldo Leal
645 63 Beraldo Leal
h2. Install and configure the "object-nodes"
646 44 Beraldo Leal
647 63 Beraldo Leal
In this case, the object-nodes (computer when data are stored) is the same cloud-controller.
648 63 Beraldo Leal
649 44 Beraldo Leal
<pre>
650 44 Beraldo Leal
# apt-get install swift-account swift-container swift-object xfsprogs
651 44 Beraldo Leal
</pre>
652 1 Beraldo Leal
653 63 Beraldo Leal
Each "Object node" can have many devices Is a requisite use xfs file system.
654 44 Beraldo Leal
655 44 Beraldo Leal
<pre>
656 44 Beraldo Leal
# fdisk /dev/sdb (set up a single partition)
657 44 Beraldo Leal
# mkfs.xfs -i size=1024 /dev/sdb1
658 44 Beraldo Leal
</pre>
659 44 Beraldo Leal
660 1 Beraldo Leal
661 63 Beraldo Leal
This device should be mount at /srv/node/
662 44 Beraldo Leal
663 44 Beraldo Leal
<pre>
664 44 Beraldo Leal
echo "/dev/sdb1 /srv/node/sdb1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0" >> /etc/fstab
665 44 Beraldo Leal
mkdir -p /srv/node/sdb1
666 44 Beraldo Leal
mount /srv/node/sdb1
667 44 Beraldo Leal
chown -R swift:swift /srv/node
668 44 Beraldo Leal
</pre>
669 44 Beraldo Leal
670 63 Beraldo Leal
h2. Configure the _rsyncd.conf_
671 44 Beraldo Leal
672 44 Beraldo Leal
<pre>
673 44 Beraldo Leal
uid = swift
674 44 Beraldo Leal
gid = swift
675 44 Beraldo Leal
log file = /var/log/rsyncd.log
676 44 Beraldo Leal
pid file = /var/run/rsyncd.pid
677 44 Beraldo Leal
address = 192.168.69.1
678 44 Beraldo Leal
679 44 Beraldo Leal
[account]
680 44 Beraldo Leal
max connections = 2
681 44 Beraldo Leal
path = /srv/node/
682 44 Beraldo Leal
read only = false
683 44 Beraldo Leal
lock file = /var/lock/account.lock
684 44 Beraldo Leal
685 44 Beraldo Leal
[container]
686 44 Beraldo Leal
max connections = 2
687 1 Beraldo Leal
path = /srv/node/
688 44 Beraldo Leal
read only = false
689 44 Beraldo Leal
lock file = /var/lock/container.lock
690 44 Beraldo Leal
691 44 Beraldo Leal
[object]
692 1 Beraldo Leal
max connections = 2
693 44 Beraldo Leal
path = /srv/node/
694 44 Beraldo Leal
read only = false
695 44 Beraldo Leal
lock file = /var/lock/object.lock
696 44 Beraldo Leal
</pre>
697 1 Beraldo Leal
698 63 Beraldo Leal
Edit the _/etc/default/rsync_:
699 44 Beraldo Leal
700 44 Beraldo Leal
<pre>
701 44 Beraldo Leal
RSYNC_ENABLE = true
702 44 Beraldo Leal
</pre>
703 44 Beraldo Leal
704 63 Beraldo Leal
Restart the rsync:
705 44 Beraldo Leal
706 44 Beraldo Leal
<pre>
707 44 Beraldo Leal
service rsync restart
708 44 Beraldo Leal
</pre>
709 44 Beraldo Leal
710 63 Beraldo Leal
Create the _/etc/swift/account-server.conf_:
711 44 Beraldo Leal
712 44 Beraldo Leal
<pre>
713 44 Beraldo Leal
[DEFAULT]
714 44 Beraldo Leal
bind_ip = 192.168.69.1
715 44 Beraldo Leal
workers = 2
716 1 Beraldo Leal
717 44 Beraldo Leal
[pipeline:main]
718 44 Beraldo Leal
pipeline = account-server
719 44 Beraldo Leal
720 44 Beraldo Leal
[app:account-server]
721 44 Beraldo Leal
use = egg:swift#account
722 44 Beraldo Leal
723 44 Beraldo Leal
[account-replicator]
724 44 Beraldo Leal
725 44 Beraldo Leal
[account-auditor]
726 44 Beraldo Leal
727 44 Beraldo Leal
[account-reaper]
728 44 Beraldo Leal
</pre>
729 44 Beraldo Leal
730 63 Beraldo Leal
Create the _/etc/swift/container-server.conf_:
731 44 Beraldo Leal
732 44 Beraldo Leal
<pre>
733 44 Beraldo Leal
[DEFAULT]
734 44 Beraldo Leal
bind_ip = 192.168.69.1
735 1 Beraldo Leal
workers = 2
736 44 Beraldo Leal
737 44 Beraldo Leal
[pipeline:main]
738 44 Beraldo Leal
pipeline = container-server
739 44 Beraldo Leal
740 44 Beraldo Leal
[app:container-server]
741 44 Beraldo Leal
use = egg:swift#container
742 44 Beraldo Leal
743 44 Beraldo Leal
[container-replicator]
744 44 Beraldo Leal
745 44 Beraldo Leal
[container-updater]
746 44 Beraldo Leal
747 44 Beraldo Leal
[container-auditor]
748 44 Beraldo Leal
</pre>
749 44 Beraldo Leal
750 63 Beraldo Leal
Create the _/etc/swift/object-server.conf_:
751 44 Beraldo Leal
752 44 Beraldo Leal
<pre>
753 44 Beraldo Leal
[DEFAULT]
754 44 Beraldo Leal
bind_ip = 192.168.69.1
755 1 Beraldo Leal
workers = 2
756 44 Beraldo Leal
757 1 Beraldo Leal
[pipeline:main]
758 1 Beraldo Leal
pipeline = object-server
759 1 Beraldo Leal
760 1 Beraldo Leal
[app:object-server]
761 44 Beraldo Leal
use = egg:swift#object
762 44 Beraldo Leal
763 44 Beraldo Leal
[object-replicator]
764 1 Beraldo Leal
765 44 Beraldo Leal
[object-updater]
766 44 Beraldo Leal
767 44 Beraldo Leal
[object-auditor]
768 44 Beraldo Leal
</pre>
769 44 Beraldo Leal
770 1 Beraldo Leal
771 63 Beraldo Leal
h2. Installing and configuring the swift-proxy
772 44 Beraldo Leal
773 63 Beraldo Leal
The swift-proxy is the component that acts like a proxy, so you can have multiple object-nodes and one swift-proxy. When an user or openStack component need get a object, its ask for swift-proxy.
774 63 Beraldo Leal
775 63 Beraldo Leal
Install swift-proxy:
776 63 Beraldo Leal
777 1 Beraldo Leal
<pre>
778 44 Beraldo Leal
# apt-get install swift-proxy memcached
779 44 Beraldo Leal
</pre>
780 44 Beraldo Leal
781 63 Beraldo Leal
Create a self-sign SSL certificate:
782 1 Beraldo Leal
783 44 Beraldo Leal
<pre>
784 44 Beraldo Leal
cd /etc/swift
785 44 Beraldo Leal
openssl req -new -x509 -nodes -out cert.crt -keyout cert.key
786 44 Beraldo Leal
</pre>
787 44 Beraldo Leal
788 63 Beraldo Leal
Change the memcached to listen in correct interface, change the /etc/memcached.conf:
789 44 Beraldo Leal
790 44 Beraldo Leal
<pre>
791 44 Beraldo Leal
-l 127.0.0.1
792 44 Beraldo Leal
to
793 44 Beraldo Leal
-l 192.168.69.1
794 44 Beraldo Leal
</pre>
795 44 Beraldo Leal
796 63 Beraldo Leal
Restart the memcached:
797 44 Beraldo Leal
798 44 Beraldo Leal
<pre>
799 44 Beraldo Leal
service memcached restart
800 44 Beraldo Leal
</pre>
801 44 Beraldo Leal
802 63 Beraldo Leal
Create the file _/etc/swift/proxy-server.conf_:
803 44 Beraldo Leal
804 44 Beraldo Leal
<pre>
805 44 Beraldo Leal
[DEFAULT]
806 44 Beraldo Leal
bind_port = 8888
807 44 Beraldo Leal
user = swift
808 44 Beraldo Leal
809 44 Beraldo Leal
[pipeline:main]
810 44 Beraldo Leal
pipeline = catch_errors healthcheck cache authtoken keystone proxy-server
811 44 Beraldo Leal
812 44 Beraldo Leal
[app:proxy-server]
813 44 Beraldo Leal
use = egg:swift#proxy
814 44 Beraldo Leal
account_autocreate = true
815 44 Beraldo Leal
816 44 Beraldo Leal
[filter:keystone]
817 44 Beraldo Leal
paste.filter_factory = keystone.middleware.swift_auth:filter_factory
818 44 Beraldo Leal
operator_roles = admin, swiftoperator
819 44 Beraldo Leal
820 44 Beraldo Leal
[filter:authtoken]
821 44 Beraldo Leal
paste.filter_factory = keystone.middleware.auth_token:filter_factory
822 44 Beraldo Leal
# Delaying the auth decision is required to support token-less
823 44 Beraldo Leal
# usage for anonymous referrers ('.r:*').
824 44 Beraldo Leal
delay_auth_decision = 10
825 44 Beraldo Leal
service_port = 5000
826 44 Beraldo Leal
service_host = 192.168.69.1
827 44 Beraldo Leal
auth_port = 35357
828 44 Beraldo Leal
auth_host = 192.168.69.1
829 44 Beraldo Leal
auth_token = 012345SECRET99TOKEN012345
830 44 Beraldo Leal
admin_token = 012345SECRET99TOKEN012345
831 44 Beraldo Leal
auth_protocol = http
832 44 Beraldo Leal
833 44 Beraldo Leal
[filter:cache]
834 44 Beraldo Leal
use = egg:swift#memcache
835 44 Beraldo Leal
set log_name = cache
836 44 Beraldo Leal
837 44 Beraldo Leal
[filter:catch_errors]
838 44 Beraldo Leal
use = egg:swift#catch_errors
839 44 Beraldo Leal
840 44 Beraldo Leal
[filter:healthcheck]
841 1 Beraldo Leal
use = egg:swift#healthcheck
842 44 Beraldo Leal
</pre>
843 44 Beraldo Leal
844 45 Beraldo Leal
845 45 Beraldo Leal
Create the account, container and object rings. The builder command is basically creating a builder file with a few parameters. The parameter with the value of 18 represents 2 ^ 18th, the value that the partition will be sized to. Set this "partition power" value based on the total amount of storage you expect your entire ring to use. The value of 1 represents the number of replicas of each object, with the last value being the number of hours to restrict moving a partition more than once.
846 45 Beraldo Leal
847 45 Beraldo Leal
<pre>
848 45 Beraldo Leal
cd /etc/swift
849 45 Beraldo Leal
swift-ring-builder account.builder create 18 1 1
850 45 Beraldo Leal
swift-ring-builder container.builder create 18 1 1
851 45 Beraldo Leal
swift-ring-builder object.builder create 18 1 1
852 45 Beraldo Leal
</pre>
853 45 Beraldo Leal
854 45 Beraldo Leal
For every storage device on each node add entries to each ring:
855 45 Beraldo Leal
856 45 Beraldo Leal
<pre>
857 45 Beraldo Leal
swift-ring-builder account.builder add z<ZONE>-<STORAGE_LOCAL_NET_IP>:6002/<DEVICE> 100
858 45 Beraldo Leal
swift-ring-builder container.builder add z<ZONE>-<STORAGE_LOCAL_NET_IP_1>:6001/<DEVICE> 100
859 45 Beraldo Leal
swift-ring-builder object.builder add z<ZONE>-<STORAGE_LOCAL_NET_IP_1>:6000/<DEVICE> 100
860 45 Beraldo Leal
</pre>
861 45 Beraldo Leal
862 63 Beraldo Leal
In our case, we have only one zone in one storage node with one device (sdb1), so the command should be:
863 45 Beraldo Leal
864 1 Beraldo Leal
<pre>
865 45 Beraldo Leal
swift-ring-builder account.builder add z1-192.168.69.1:6002/sdb1 100
866 45 Beraldo Leal
swift-ring-builder container.builder add z1-192.168.69.1:6001/sdb1 100
867 45 Beraldo Leal
swift-ring-builder object.builder add z1-192.168.69.1:6000/sdb1 100
868 45 Beraldo Leal
</pre>
869 1 Beraldo Leal
870 45 Beraldo Leal
Verify the ring contents for each ring:
871 45 Beraldo Leal
872 45 Beraldo Leal
<pre>
873 45 Beraldo Leal
swift-ring-builder account.builder
874 1 Beraldo Leal
swift-ring-builder container.builder
875 45 Beraldo Leal
swift-ring-builder object.builder
876 45 Beraldo Leal
</pre>
877 45 Beraldo Leal
878 45 Beraldo Leal
Rebalance the rings:
879 45 Beraldo Leal
880 45 Beraldo Leal
<pre>
881 1 Beraldo Leal
swift-ring-builder account.builder rebalance
882 1 Beraldo Leal
swift-ring-builder container.builder rebalance
883 45 Beraldo Leal
swift-ring-builder object.builder rebalance
884 45 Beraldo Leal
</pre>
885 44 Beraldo Leal
886 63 Beraldo Leal
Change the permissions of config files:
887 44 Beraldo Leal
888 44 Beraldo Leal
<pre>
889 45 Beraldo Leal
# chown -R swift:swift /etc/swift/
890 45 Beraldo Leal
</pre>
891 45 Beraldo Leal
892 63 Beraldo Leal
Start the swift-proxy:
893 45 Beraldo Leal
894 45 Beraldo Leal
<pre>
895 1 Beraldo Leal
swift-init proxy start
896 45 Beraldo Leal
</pre>
897 45 Beraldo Leal
898 63 Beraldo Leal
Start all swift services:
899 45 Beraldo Leal
900 1 Beraldo Leal
<pre>
901 45 Beraldo Leal
swift-init main start
902 45 Beraldo Leal
swift-init rest start
903 45 Beraldo Leal
</pre>
904 45 Beraldo Leal
905 1 Beraldo Leal
906 63 Beraldo Leal
h2. Checking the installation
907 45 Beraldo Leal
908 63 Beraldo Leal
The file _/root/openstackrc_ will receive more environment variables:
909 45 Beraldo Leal
910 1 Beraldo Leal
<pre>
911 45 Beraldo Leal
# Used for Keystone
912 45 Beraldo Leal
export SERVICE_ENDPOINT=http://192.168.69.1:35357/v2.0/
913 45 Beraldo Leal
export SERVICE_TOKEN=012345SECRET99TOKEN012345
914 45 Beraldo Leal
915 45 Beraldo Leal
# Used for swift
916 1 Beraldo Leal
export ST_AUTH=http://192.168.69.1:5000/v2.0
917 1 Beraldo Leal
export ST_USER=openstackDemo:admin
918 45 Beraldo Leal
export ST_KEY=adminpass
919 45 Beraldo Leal
export OS_REGION_NAME=RegionOne
920 45 Beraldo Leal
</pre>
921 45 Beraldo Leal
922 63 Beraldo Leal
Reload the file:
923 45 Beraldo Leal
924 45 Beraldo Leal
<pre>
925 45 Beraldo Leal
# source /root/openstackrc
926 45 Beraldo Leal
</pre>
927 45 Beraldo Leal
928 63 Beraldo Leal
Try to get swift status, with the command:
929 45 Beraldo Leal
930 45 Beraldo Leal
<pre>
931 45 Beraldo Leal
# swift -V 2.0 stat
932 45 Beraldo Leal
</pre>
933 45 Beraldo Leal
934 63 Beraldo Leal
List the containers:
935 45 Beraldo Leal
936 45 Beraldo Leal
<pre>
937 45 Beraldo Leal
# swift -V 2.0 list
938 46 Beraldo Leal
</pre>
939 46 Beraldo Leal
940 63 Beraldo Leal
Do some upload files:
941 45 Beraldo Leal
942 46 Beraldo Leal
<pre>
943 46 Beraldo Leal
# swift -V 2.0 upload myfiles bigfile1.tgz
944 46 Beraldo Leal
# swift -V 2.0 upload myfiles bigfile2.tgz
945 46 Beraldo Leal
</pre>
946 46 Beraldo Leal
947 63 Beraldo Leal
Download the container "myfiles":
948 63 Beraldo Leal
949 46 Beraldo Leal
<pre>
950 46 Beraldo Leal
# cd /tmp/
951 46 Beraldo Leal
# swift -V 2.0 download myfiles
952 46 Beraldo Leal
</pre>
953 47 Beraldo Leal
954 47 Beraldo Leal
h1. Installing OpenStack Image Service - Glance
955 47 Beraldo Leal
956 64 Beraldo Leal
OpenStack Image Service (Glance) is a lookup and retrieval system for virtual
957 64 Beraldo Leal
machine images. It can be configured in three ways: using OpenStack Object Store
958 64 Beraldo Leal
to store images; using Amazon's Simple Storage Solution (S3) storage directly;
959 64 Beraldo Leal
or using S3 storage with Object Store as the intermediate for S3 access.
960 47 Beraldo Leal
961 64 Beraldo Leal
Install the glance on the controller node:
962 47 Beraldo Leal
963 47 Beraldo Leal
<pre>
964 1 Beraldo Leal
# apt-get install glance
965 47 Beraldo Leal
</pre>
966 47 Beraldo Leal
967 64 Beraldo Leal
Remove the sqlite file:
968 47 Beraldo Leal
969 47 Beraldo Leal
<pre>
970 47 Beraldo Leal
# rm /var/lib/glance/glance.sqlite
971 47 Beraldo Leal
</pre>
972 47 Beraldo Leal
973 47 Beraldo Leal
h2. Configuring the Image Service database backend
974 47 Beraldo Leal
975 47 Beraldo Leal
<pre>
976 47 Beraldo Leal
# mysql -u root -p
977 1 Beraldo Leal
mysql> CREATE DATABASE glance;
978 74 Beraldo Leal
mysql> CREATE USER glance;
979 74 Beraldo Leal
mysql> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glancepass';
980 47 Beraldo Leal
mysql> FLUSH PRIVILEGES;
981 1 Beraldo Leal
mysql> quit;
982 47 Beraldo Leal
</pre>
983 47 Beraldo Leal
984 64 Beraldo Leal
Copy the config files to _/etc/glance/_:
985 47 Beraldo Leal
986 47 Beraldo Leal
*/etc/glance/glance-api.conf*:
987 47 Beraldo Leal
<pre>
988 47 Beraldo Leal
[DEFAULT]
989 47 Beraldo Leal
# Show more verbose log output (sets INFO log level output)
990 47 Beraldo Leal
verbose = True
991 47 Beraldo Leal
992 47 Beraldo Leal
# Show debugging output in logs (sets DEBUG log level output)
993 47 Beraldo Leal
debug = False
994 47 Beraldo Leal
995 47 Beraldo Leal
# Which backend store should Glance use by default is not specified
996 47 Beraldo Leal
# in a request to add a new image to Glance? Default: 'file'
997 47 Beraldo Leal
# Available choices are 'file', 'swift', and 's3'
998 47 Beraldo Leal
default_store = swift
999 47 Beraldo Leal
1000 47 Beraldo Leal
# Address to bind the API server
1001 47 Beraldo Leal
bind_host = 0.0.0.0
1002 47 Beraldo Leal
1003 47 Beraldo Leal
# Port the bind the API server to
1004 47 Beraldo Leal
bind_port = 9292
1005 47 Beraldo Leal
1006 47 Beraldo Leal
# Log to this file. Make sure you do not set the same log
1007 47 Beraldo Leal
# file for both the API and registry servers!
1008 47 Beraldo Leal
log_file = /var/log/glance/api.log
1009 47 Beraldo Leal
1010 47 Beraldo Leal
# Backlog requests when creating socket
1011 47 Beraldo Leal
backlog = 4096
1012 47 Beraldo Leal
1013 47 Beraldo Leal
# Number of Glance API worker processes to start.
1014 47 Beraldo Leal
# On machines with more than one CPU increasing this value
1015 47 Beraldo Leal
# may improve performance (especially if using SSL with
1016 47 Beraldo Leal
# compression turned on). It is typically recommended to set
1017 47 Beraldo Leal
# this value to the number of CPUs present on your machine.
1018 47 Beraldo Leal
workers = 0
1019 47 Beraldo Leal
1020 47 Beraldo Leal
# Role used to identify an authenticated user as administrator
1021 47 Beraldo Leal
#admin_role = admin
1022 47 Beraldo Leal
1023 47 Beraldo Leal
# ================= Syslog Options ============================
1024 47 Beraldo Leal
1025 47 Beraldo Leal
# Send logs to syslog (/dev/log) instead of to file specified
1026 47 Beraldo Leal
# by `log_file`
1027 47 Beraldo Leal
use_syslog = False
1028 47 Beraldo Leal
1029 47 Beraldo Leal
# Facility to use. If unset defaults to LOG_USER.
1030 47 Beraldo Leal
# syslog_log_facility = LOG_LOCAL0
1031 47 Beraldo Leal
1032 47 Beraldo Leal
# ================= SSL Options ===============================
1033 47 Beraldo Leal
1034 47 Beraldo Leal
# Certificate file to use when starting API server securely
1035 47 Beraldo Leal
# cert_file = /path/to/certfile
1036 47 Beraldo Leal
1037 47 Beraldo Leal
# Private key file to use when starting API server securely
1038 47 Beraldo Leal
# key_file = /path/to/keyfile
1039 47 Beraldo Leal
1040 47 Beraldo Leal
# ================= Security Options ==========================
1041 47 Beraldo Leal
1042 47 Beraldo Leal
# AES key for encrypting store 'location' metadata, including
1043 47 Beraldo Leal
# -- if used -- Swift or S3 credentials
1044 47 Beraldo Leal
# Should be set to a random string of length 16, 24 or 32 bytes
1045 47 Beraldo Leal
# metadata_encryption_key = <16, 24 or 32 char registry metadata key>
1046 47 Beraldo Leal
1047 47 Beraldo Leal
# ============ Registry Options ===============================
1048 47 Beraldo Leal
1049 47 Beraldo Leal
# Address to find the registry server
1050 47 Beraldo Leal
registry_host = 0.0.0.0
1051 47 Beraldo Leal
1052 47 Beraldo Leal
# Port the registry server is listening on
1053 47 Beraldo Leal
registry_port = 9191
1054 47 Beraldo Leal
1055 47 Beraldo Leal
# What protocol to use when connecting to the registry server?
1056 47 Beraldo Leal
# Set to https for secure HTTP communication
1057 47 Beraldo Leal
registry_client_protocol = http
1058 47 Beraldo Leal
1059 47 Beraldo Leal
# The path to the key file to use in SSL connections to the
1060 47 Beraldo Leal
# registry server, if any. Alternately, you may set the
1061 47 Beraldo Leal
# GLANCE_CLIENT_KEY_FILE environ variable to a filepath of the key file
1062 47 Beraldo Leal
# registry_client_key_file = /path/to/key/file
1063 47 Beraldo Leal
1064 47 Beraldo Leal
# The path to the cert file to use in SSL connections to the
1065 47 Beraldo Leal
# registry server, if any. Alternately, you may set the
1066 47 Beraldo Leal
# GLANCE_CLIENT_CERT_FILE environ variable to a filepath of the cert file
1067 47 Beraldo Leal
# registry_client_cert_file = /path/to/cert/file
1068 47 Beraldo Leal
1069 47 Beraldo Leal
# The path to the certifying authority cert file to use in SSL connections
1070 47 Beraldo Leal
# to the registry server, if any. Alternately, you may set the
1071 47 Beraldo Leal
# GLANCE_CLIENT_CA_FILE environ variable to a filepath of the CA cert file
1072 47 Beraldo Leal
# registry_client_ca_file = /path/to/ca/file
1073 47 Beraldo Leal
1074 47 Beraldo Leal
# ============ Notification System Options =====================
1075 47 Beraldo Leal
1076 47 Beraldo Leal
# Notifications can be sent when images are create, updated or deleted.
1077 47 Beraldo Leal
# There are three methods of sending notifications, logging (via the
1078 47 Beraldo Leal
# log_file directive), rabbit (via a rabbitmq queue), qpid (via a Qpid
1079 47 Beraldo Leal
# message queue), or noop (no notifications sent, the default)
1080 47 Beraldo Leal
notifier_strategy = noop
1081 47 Beraldo Leal
1082 47 Beraldo Leal
# Configuration options if sending notifications via rabbitmq (these are
1083 47 Beraldo Leal
# the defaults)
1084 47 Beraldo Leal
rabbit_host = localhost
1085 47 Beraldo Leal
rabbit_port = 5672
1086 47 Beraldo Leal
rabbit_use_ssl = false
1087 47 Beraldo Leal
rabbit_userid = guest
1088 47 Beraldo Leal
rabbit_password = guest
1089 47 Beraldo Leal
rabbit_virtual_host = /
1090 47 Beraldo Leal
rabbit_notification_exchange = glance
1091 47 Beraldo Leal
rabbit_notification_topic = glance_notifications
1092 47 Beraldo Leal
1093 47 Beraldo Leal
# Configuration options if sending notifications via Qpid (these are
1094 47 Beraldo Leal
# the defaults)
1095 47 Beraldo Leal
qpid_notification_exchange = glance
1096 47 Beraldo Leal
qpid_notification_topic = glance_notifications
1097 47 Beraldo Leal
qpid_host = localhost
1098 47 Beraldo Leal
qpid_port = 5672
1099 47 Beraldo Leal
qpid_username =
1100 47 Beraldo Leal
qpid_password =
1101 47 Beraldo Leal
qpid_sasl_mechanisms =
1102 47 Beraldo Leal
qpid_reconnect_timeout = 0
1103 47 Beraldo Leal
qpid_reconnect_limit = 0
1104 47 Beraldo Leal
qpid_reconnect_interval_min = 0
1105 47 Beraldo Leal
qpid_reconnect_interval_max = 0
1106 47 Beraldo Leal
qpid_reconnect_interval = 0
1107 47 Beraldo Leal
qpid_heartbeat = 5
1108 47 Beraldo Leal
# Set to 'ssl' to enable SSL
1109 47 Beraldo Leal
qpid_protocol = tcp
1110 47 Beraldo Leal
qpid_tcp_nodelay = True
1111 47 Beraldo Leal
1112 47 Beraldo Leal
# ============ Filesystem Store Options ========================
1113 47 Beraldo Leal
1114 47 Beraldo Leal
# Directory that the Filesystem backend store
1115 47 Beraldo Leal
# writes image data to
1116 47 Beraldo Leal
filesystem_store_datadir = /var/lib/glance/images/
1117 47 Beraldo Leal
1118 47 Beraldo Leal
# ============ Swift Store Options =============================
1119 47 Beraldo Leal
1120 47 Beraldo Leal
# Version of the authentication service to use
1121 47 Beraldo Leal
# Valid versions are '2' for keystone and '1' for swauth and rackspace
1122 47 Beraldo Leal
swift_store_auth_version = 2
1123 47 Beraldo Leal
1124 47 Beraldo Leal
# Address where the Swift authentication service lives
1125 47 Beraldo Leal
# Valid schemes are 'http://' and 'https://'
1126 47 Beraldo Leal
# If no scheme specified,  default to 'https://'
1127 47 Beraldo Leal
# For swauth, use something like '127.0.0.1:8080/v1.0/'
1128 47 Beraldo Leal
swift_store_auth_address = http://192.168.69.1:35357/v2.0/
1129 47 Beraldo Leal
1130 47 Beraldo Leal
# User to authenticate against the Swift authentication service
1131 47 Beraldo Leal
# If you use Swift authentication service, set it to 'account':'user'
1132 47 Beraldo Leal
# where 'account' is a Swift storage account and 'user'
1133 47 Beraldo Leal
# is a user in that account
1134 47 Beraldo Leal
swift_store_user = service:glance
1135 47 Beraldo Leal
1136 47 Beraldo Leal
# Auth key for the user authenticating against the
1137 47 Beraldo Leal
# Swift authentication service
1138 47 Beraldo Leal
swift_store_key = glancepass
1139 47 Beraldo Leal
1140 47 Beraldo Leal
# Container within the account that the account should use
1141 47 Beraldo Leal
# for storing images in Swift
1142 47 Beraldo Leal
swift_store_container = glance
1143 47 Beraldo Leal
1144 47 Beraldo Leal
# Do we create the container if it does not exist?
1145 47 Beraldo Leal
swift_store_create_container_on_put = True
1146 47 Beraldo Leal
1147 47 Beraldo Leal
# What size, in MB, should Glance start chunking image files
1148 47 Beraldo Leal
# and do a large object manifest in Swift? By default, this is
1149 47 Beraldo Leal
# the maximum object size in Swift, which is 5GB
1150 47 Beraldo Leal
swift_store_large_object_size = 5120
1151 47 Beraldo Leal
1152 47 Beraldo Leal
# When doing a large object manifest, what size, in MB, should
1153 47 Beraldo Leal
# Glance write chunks to Swift? This amount of data is written
1154 47 Beraldo Leal
# to a temporary disk buffer during the process of chunking
1155 47 Beraldo Leal
# the image file, and the default is 200MB
1156 47 Beraldo Leal
swift_store_large_object_chunk_size = 200
1157 47 Beraldo Leal
1158 47 Beraldo Leal
# Whether to use ServiceNET to communicate with the Swift storage servers.
1159 47 Beraldo Leal
# (If you aren't RACKSPACE, leave this False!)
1160 47 Beraldo Leal
#
1161 47 Beraldo Leal
# To use ServiceNET for authentication, prefix hostname of
1162 47 Beraldo Leal
# `swift_store_auth_address` with 'snet-'.
1163 47 Beraldo Leal
# Ex. https://example.com/v1.0/ -> https://snet-example.com/v1.0/
1164 47 Beraldo Leal
swift_enable_snet = False
1165 47 Beraldo Leal
1166 47 Beraldo Leal
# ============ S3 Store Options =============================
1167 47 Beraldo Leal
1168 47 Beraldo Leal
# Address where the S3 authentication service lives
1169 47 Beraldo Leal
# Valid schemes are 'http://' and 'https://'
1170 47 Beraldo Leal
# If no scheme specified,  default to 'http://'
1171 47 Beraldo Leal
s3_store_host = 127.0.0.1:8080/v1.0/
1172 47 Beraldo Leal
1173 47 Beraldo Leal
# User to authenticate against the S3 authentication service
1174 47 Beraldo Leal
s3_store_access_key = <20-char AWS access key>
1175 47 Beraldo Leal
1176 47 Beraldo Leal
# Auth key for the user authenticating against the
1177 47 Beraldo Leal
# S3 authentication service
1178 47 Beraldo Leal
s3_store_secret_key = <40-char AWS secret key>
1179 47 Beraldo Leal
1180 47 Beraldo Leal
# Container within the account that the account should use
1181 47 Beraldo Leal
# for storing images in S3. Note that S3 has a flat namespace,
1182 47 Beraldo Leal
# so you need a unique bucket name for your glance images. An
1183 47 Beraldo Leal
# easy way to do this is append your AWS access key to "glance".
1184 47 Beraldo Leal
# S3 buckets in AWS *must* be lowercased, so remember to lowercase
1185 47 Beraldo Leal
# your AWS access key if you use it in your bucket name below!
1186 47 Beraldo Leal
s3_store_bucket = <lowercased 20-char aws access key>glance
1187 47 Beraldo Leal
1188 47 Beraldo Leal
# Do we create the bucket if it does not exist?
1189 47 Beraldo Leal
s3_store_create_bucket_on_put = False
1190 47 Beraldo Leal
1191 47 Beraldo Leal
# When sending images to S3, the data will first be written to a
1192 47 Beraldo Leal
# temporary buffer on disk. By default the platform's temporary directory
1193 47 Beraldo Leal
# will be used. If required, an alternative directory can be specified here.
1194 47 Beraldo Leal
# s3_store_object_buffer_dir = /path/to/dir
1195 47 Beraldo Leal
1196 47 Beraldo Leal
# ============ RBD Store Options =============================
1197 47 Beraldo Leal
1198 47 Beraldo Leal
# Ceph configuration file path
1199 47 Beraldo Leal
# If using cephx authentication, this file should
1200 47 Beraldo Leal
# include a reference to the right keyring
1201 47 Beraldo Leal
# in a client.<USER> section
1202 47 Beraldo Leal
rbd_store_ceph_conf = /etc/ceph/ceph.conf
1203 47 Beraldo Leal
1204 47 Beraldo Leal
# RADOS user to authenticate as (only applicable if using cephx)
1205 47 Beraldo Leal
rbd_store_user = glance
1206 47 Beraldo Leal
1207 47 Beraldo Leal
# RADOS pool in which images are stored
1208 47 Beraldo Leal
rbd_store_pool = images
1209 47 Beraldo Leal
1210 47 Beraldo Leal
# Images will be chunked into objects of this size (in megabytes).
1211 47 Beraldo Leal
# For best performance, this should be a power of two
1212 47 Beraldo Leal
rbd_store_chunk_size = 8
1213 47 Beraldo Leal
1214 47 Beraldo Leal
# ============ Delayed Delete Options =============================
1215 47 Beraldo Leal
1216 47 Beraldo Leal
# Turn on/off delayed delete
1217 47 Beraldo Leal
delayed_delete = False
1218 47 Beraldo Leal
1219 47 Beraldo Leal
# Delayed delete time in seconds
1220 47 Beraldo Leal
scrub_time = 43200
1221 47 Beraldo Leal
1222 47 Beraldo Leal
# Directory that the scrubber will use to remind itself of what to delete
1223 47 Beraldo Leal
# Make sure this is also set in glance-scrubber.conf
1224 47 Beraldo Leal
scrubber_datadir = /var/lib/glance/scrubber
1225 47 Beraldo Leal
1226 47 Beraldo Leal
# =============== Image Cache Options =============================
1227 47 Beraldo Leal
1228 47 Beraldo Leal
# Base directory that the Image Cache uses
1229 47 Beraldo Leal
image_cache_dir = /var/lib/glance/image-cache/
1230 47 Beraldo Leal
1231 47 Beraldo Leal
[paste_deploy]
1232 47 Beraldo Leal
flavor = keystone
1233 47 Beraldo Leal
</pre>
1234 47 Beraldo Leal
1235 47 Beraldo Leal
*/etc/glance/glance-api-paste.ini*:
1236 47 Beraldo Leal
1237 47 Beraldo Leal
<pre>
1238 47 Beraldo Leal
# Default minimal pipeline
1239 47 Beraldo Leal
[pipeline:glance-api]
1240 47 Beraldo Leal
pipeline = versionnegotiation context apiv1app authtoken
1241 47 Beraldo Leal
1242 47 Beraldo Leal
# Use the following pipeline for keystone auth
1243 47 Beraldo Leal
# i.e. in glance-api.conf:
1244 47 Beraldo Leal
#   [paste_deploy]
1245 47 Beraldo Leal
#   flavor = keystone
1246 47 Beraldo Leal
#
1247 47 Beraldo Leal
[pipeline:glance-api-keystone]
1248 47 Beraldo Leal
pipeline = versionnegotiation authtoken context apiv1app
1249 47 Beraldo Leal
1250 47 Beraldo Leal
# Use the following pipeline to enable transparent caching of image files
1251 47 Beraldo Leal
# i.e. in glance-api.conf:
1252 47 Beraldo Leal
#   [paste_deploy]
1253 47 Beraldo Leal
#   flavor = caching
1254 47 Beraldo Leal
#
1255 47 Beraldo Leal
[pipeline:glance-api-caching]
1256 47 Beraldo Leal
pipeline = versionnegotiation context cache apiv1app
1257 47 Beraldo Leal
1258 47 Beraldo Leal
# Use the following pipeline for keystone auth with caching
1259 47 Beraldo Leal
# i.e. in glance-api.conf:
1260 47 Beraldo Leal
#   [paste_deploy]
1261 47 Beraldo Leal
#   flavor = keystone+caching
1262 47 Beraldo Leal
#
1263 47 Beraldo Leal
[pipeline:glance-api-keystone+caching]
1264 47 Beraldo Leal
pipeline = versionnegotiation authtoken context cache apiv1app
1265 47 Beraldo Leal
1266 47 Beraldo Leal
# Use the following pipeline to enable the Image Cache Management API
1267 47 Beraldo Leal
# i.e. in glance-api.conf:
1268 47 Beraldo Leal
#   [paste_deploy]
1269 47 Beraldo Leal
#   flavor = cachemanagement
1270 47 Beraldo Leal
#
1271 47 Beraldo Leal
[pipeline:glance-api-cachemanagement]
1272 47 Beraldo Leal
pipeline = versionnegotiation context cache cachemanage apiv1app
1273 47 Beraldo Leal
1274 47 Beraldo Leal
# Use the following pipeline for keystone auth with cache management
1275 47 Beraldo Leal
# i.e. in glance-api.conf:
1276 47 Beraldo Leal
#   [paste_deploy]
1277 47 Beraldo Leal
#   flavor = keystone+cachemanagement
1278 47 Beraldo Leal
#
1279 47 Beraldo Leal
[pipeline:glance-api-keystone+cachemanagement]
1280 47 Beraldo Leal
pipeline = versionnegotiation authtoken context cache cachemanage apiv1app
1281 47 Beraldo Leal
1282 47 Beraldo Leal
[app:apiv1app]
1283 47 Beraldo Leal
paste.app_factory = glance.common.wsgi:app_factory
1284 47 Beraldo Leal
glance.app_factory = glance.api.v1.router:API
1285 47 Beraldo Leal
1286 47 Beraldo Leal
[filter:versionnegotiation]
1287 47 Beraldo Leal
paste.filter_factory = glance.common.wsgi:filter_factory
1288 47 Beraldo Leal
glance.filter_factory = glance.api.middleware.version_negotiation:VersionNegotiationFilter
1289 47 Beraldo Leal
1290 47 Beraldo Leal
[filter:cache]
1291 47 Beraldo Leal
paste.filter_factory = glance.common.wsgi:filter_factory
1292 47 Beraldo Leal
glance.filter_factory = glance.api.middleware.cache:CacheFilter
1293 47 Beraldo Leal
1294 47 Beraldo Leal
[filter:cachemanage]
1295 47 Beraldo Leal
paste.filter_factory = glance.common.wsgi:filter_factory
1296 47 Beraldo Leal
glance.filter_factory = glance.api.middleware.cache_manage:CacheManageFilter
1297 47 Beraldo Leal
1298 47 Beraldo Leal
[filter:context]
1299 47 Beraldo Leal
paste.filter_factory = glance.common.wsgi:filter_factory
1300 47 Beraldo Leal
glance.filter_factory = glance.common.context:ContextMiddleware
1301 47 Beraldo Leal
1302 47 Beraldo Leal
[filter:authtoken]
1303 47 Beraldo Leal
paste.filter_factory = keystone.middleware.auth_token:filter_factory
1304 47 Beraldo Leal
service_protocol = http
1305 47 Beraldo Leal
service_host = 192.168.69.1
1306 47 Beraldo Leal
service_port = 5000
1307 47 Beraldo Leal
auth_host = 192.168.69.1
1308 47 Beraldo Leal
auth_port = 35357
1309 47 Beraldo Leal
auth_protocol = http
1310 47 Beraldo Leal
auth_uri = http://192.168.69.1:5000/
1311 47 Beraldo Leal
admin_tenant_name = service
1312 47 Beraldo Leal
admin_user = glance
1313 47 Beraldo Leal
admin_password = glancepass
1314 47 Beraldo Leal
</pre>
1315 48 Beraldo Leal
1316 48 Beraldo Leal
*/etc/glance/glance-registry.conf*:
1317 48 Beraldo Leal
1318 48 Beraldo Leal
<pre>
1319 48 Beraldo Leal
[DEFAULT]
1320 48 Beraldo Leal
# Show more verbose log output (sets INFO log level output)
1321 48 Beraldo Leal
verbose = True
1322 48 Beraldo Leal
1323 48 Beraldo Leal
# Show debugging output in logs (sets DEBUG log level output)
1324 48 Beraldo Leal
debug = True
1325 48 Beraldo Leal
1326 48 Beraldo Leal
# Address to bind the registry server
1327 48 Beraldo Leal
bind_host = 0.0.0.0
1328 48 Beraldo Leal
1329 48 Beraldo Leal
# Port the bind the registry server to
1330 48 Beraldo Leal
bind_port = 9191
1331 48 Beraldo Leal
1332 48 Beraldo Leal
# Log to this file. Make sure you do not set the same log
1333 48 Beraldo Leal
# file for both the API and registry servers!
1334 48 Beraldo Leal
log_file = /var/log/glance/registry.log
1335 48 Beraldo Leal
1336 48 Beraldo Leal
# Backlog requests when creating socket
1337 48 Beraldo Leal
backlog = 4096
1338 48 Beraldo Leal
1339 48 Beraldo Leal
# SQLAlchemy connection string for the reference implementation
1340 48 Beraldo Leal
# registry server. Any valid SQLAlchemy connection string is fine.
1341 48 Beraldo Leal
# See: http://www.sqlalchemy.org/docs/05/reference/sqlalchemy/connections.html#sqlalchemy.create_engine
1342 48 Beraldo Leal
sql_connection = mysql://glance:glancepass@192.168.69.1/glance
1343 48 Beraldo Leal
1344 48 Beraldo Leal
# Period in seconds after which SQLAlchemy should reestablish its connection
1345 48 Beraldo Leal
# to the database.
1346 48 Beraldo Leal
#
1347 48 Beraldo Leal
# MySQL uses a default `wait_timeout` of 8 hours, after which it will drop
1348 48 Beraldo Leal
# idle connections. This can result in 'MySQL Gone Away' exceptions. If you
1349 48 Beraldo Leal
# notice this, you can lower this value to ensure that SQLAlchemy reconnects
1350 48 Beraldo Leal
# before MySQL can drop the connection.
1351 48 Beraldo Leal
sql_idle_timeout = 3600
1352 48 Beraldo Leal
1353 48 Beraldo Leal
# Limit the api to return `param_limit_max` items in a call to a container. If
1354 48 Beraldo Leal
# a larger `limit` query param is provided, it will be reduced to this value.
1355 48 Beraldo Leal
api_limit_max = 1000
1356 48 Beraldo Leal
1357 48 Beraldo Leal
# If a `limit` query param is not provided in an api request, it will
1358 48 Beraldo Leal
# default to `limit_param_default`
1359 48 Beraldo Leal
limit_param_default = 25
1360 48 Beraldo Leal
1361 48 Beraldo Leal
# Role used to identify an authenticated user as administrator
1362 48 Beraldo Leal
#admin_role = admin
1363 48 Beraldo Leal
1364 48 Beraldo Leal
# ================= Syslog Options ============================
1365 48 Beraldo Leal
1366 48 Beraldo Leal
# Send logs to syslog (/dev/log) instead of to file specified
1367 48 Beraldo Leal
# by `log_file`
1368 48 Beraldo Leal
use_syslog = True
1369 48 Beraldo Leal
1370 48 Beraldo Leal
# Facility to use. If unset defaults to LOG_USER.
1371 48 Beraldo Leal
# syslog_log_facility = LOG_LOCAL1
1372 48 Beraldo Leal
1373 48 Beraldo Leal
# ================= SSL Options ===============================
1374 48 Beraldo Leal
1375 48 Beraldo Leal
# Certificate file to use when starting registry server securely
1376 48 Beraldo Leal
# cert_file = /path/to/certfile
1377 48 Beraldo Leal
1378 48 Beraldo Leal
# Private key file to use when starting registry server securely
1379 48 Beraldo Leal
# key_file = /path/to/keyfile
1380 48 Beraldo Leal
1381 48 Beraldo Leal
[paste_deploy]
1382 48 Beraldo Leal
flavor = keystone
1383 48 Beraldo Leal
</pre>
1384 48 Beraldo Leal
1385 48 Beraldo Leal
1386 48 Beraldo Leal
*/etc/glance/glance-registry-paste.ini*:
1387 48 Beraldo Leal
1388 48 Beraldo Leal
<pre>
1389 48 Beraldo Leal
# Default minimal pipeline
1390 48 Beraldo Leal
[pipeline:glance-registry]
1391 48 Beraldo Leal
pipeline = context registryapp authtoken
1392 48 Beraldo Leal
1393 48 Beraldo Leal
# Use the following pipeline for keystone auth
1394 48 Beraldo Leal
# i.e. in glance-registry.conf:
1395 48 Beraldo Leal
#   [paste_deploy]
1396 48 Beraldo Leal
#   flavor = keystone
1397 48 Beraldo Leal
#
1398 48 Beraldo Leal
[pipeline:glance-registry-keystone]
1399 48 Beraldo Leal
pipeline = authtoken context registryapp
1400 48 Beraldo Leal
1401 48 Beraldo Leal
[app:registryapp]
1402 48 Beraldo Leal
paste.app_factory = glance.common.wsgi:app_factory
1403 48 Beraldo Leal
glance.app_factory = glance.registry.api.v1:API
1404 48 Beraldo Leal
1405 48 Beraldo Leal
[filter:context]
1406 48 Beraldo Leal
context_class = glance.registry.context.RequestContext
1407 48 Beraldo Leal
paste.filter_factory = glance.common.wsgi:filter_factory
1408 48 Beraldo Leal
glance.filter_factory = glance.common.context:ContextMiddleware
1409 48 Beraldo Leal
1410 48 Beraldo Leal
[filter:authtoken]
1411 48 Beraldo Leal
paste.filter_factory = keystone.middleware.auth_token:filter_factory
1412 48 Beraldo Leal
service_protocol = http
1413 48 Beraldo Leal
service_host = 192.168.69.1
1414 48 Beraldo Leal
service_port = 5000
1415 48 Beraldo Leal
auth_host = 192.168.69.1
1416 48 Beraldo Leal
auth_port = 35357
1417 48 Beraldo Leal
auth_protocol = http
1418 48 Beraldo Leal
auth_uri = http://192.168.69.1:5000/
1419 48 Beraldo Leal
admin_tenant_name = service
1420 48 Beraldo Leal
admin_user = glance
1421 48 Beraldo Leal
admin_password = glancepass
1422 49 Beraldo Leal
</pre>
1423 48 Beraldo Leal
1424 49 Beraldo Leal
*/etc/glance/glance-scrubber.conf*:
1425 49 Beraldo Leal
1426 49 Beraldo Leal
<pre>
1427 49 Beraldo Leal
[DEFAULT]
1428 49 Beraldo Leal
# Show more verbose log output (sets INFO log level output)
1429 49 Beraldo Leal
verbose = True
1430 49 Beraldo Leal
1431 49 Beraldo Leal
# Show debugging output in logs (sets DEBUG log level output)
1432 49 Beraldo Leal
debug = False
1433 49 Beraldo Leal
1434 49 Beraldo Leal
# Log to this file. Make sure you do not set the same log
1435 49 Beraldo Leal
# file for both the API and registry servers!
1436 49 Beraldo Leal
log_file = /var/log/glance/scrubber.log
1437 49 Beraldo Leal
1438 49 Beraldo Leal
# Send logs to syslog (/dev/log) instead of to file specified by `log_file`
1439 49 Beraldo Leal
use_syslog = False
1440 49 Beraldo Leal
1441 49 Beraldo Leal
# Should we run our own loop or rely on cron/scheduler to run us
1442 49 Beraldo Leal
daemon = False
1443 49 Beraldo Leal
1444 49 Beraldo Leal
# Loop time between checking for new items to schedule for delete
1445 49 Beraldo Leal
wakeup_time = 300
1446 49 Beraldo Leal
1447 49 Beraldo Leal
sql_connection = mysql://glance:glancepass@192.168.69.1/glance
1448 49 Beraldo Leal
1449 49 Beraldo Leal
# Directory that the scrubber will use to remind itself of what to delete
1450 49 Beraldo Leal
# Make sure this is also set in glance-api.conf
1451 49 Beraldo Leal
scrubber_datadir = /var/lib/glance/scrubber
1452 49 Beraldo Leal
1453 49 Beraldo Leal
# Only one server in your deployment should be designated the cleanup host
1454 49 Beraldo Leal
cleanup_scrubber = False
1455 49 Beraldo Leal
1456 49 Beraldo Leal
# pending_delete items older than this time are candidates for cleanup
1457 49 Beraldo Leal
cleanup_scrubber_time = 86400
1458 49 Beraldo Leal
1459 49 Beraldo Leal
# Address to find the registry server for cleanups
1460 1 Beraldo Leal
registry_host = 0.0.0.0
1461 49 Beraldo Leal
1462 49 Beraldo Leal
# Port the registry server is listening on
1463 49 Beraldo Leal
registry_port = 9191
1464 48 Beraldo Leal
</pre>
1465 50 Beraldo Leal
1466 64 Beraldo Leal
h2. Synchronizing the database and restarting the services
1467 50 Beraldo Leal
1468 1 Beraldo Leal
<pre>
1469 1 Beraldo Leal
# glance-manage version_control 0
1470 1 Beraldo Leal
# glance-manage db_sync
1471 50 Beraldo Leal
# service glance-registry restart
1472 50 Beraldo Leal
# service glance-api restart
1473 50 Beraldo Leal
</pre>
1474 50 Beraldo Leal
1475 64 Beraldo Leal
h2. Testing the Glance installation:
1476 50 Beraldo Leal
1477 64 Beraldo Leal
Put the new env vars to _/root/openstackrc_:
1478 64 Beraldo Leal
1479 52 Beraldo Leal
<pre>
1480 52 Beraldo Leal
# Used for Keystone
1481 52 Beraldo Leal
export SERVICE_ENDPOINT=http://192.168.69.1:35357/v2.0/
1482 52 Beraldo Leal
export SERVICE_TOKEN=012345SECRET99TOKEN012345
1483 52 Beraldo Leal
1484 52 Beraldo Leal
# Used for swift
1485 52 Beraldo Leal
export ST_AUTH=http://192.168.69.1:5000/v2.0
1486 52 Beraldo Leal
export ST_USER=openstackDemo:admin
1487 52 Beraldo Leal
export ST_KEY=adminpass
1488 52 Beraldo Leal
export OS_REGION_NAME=RegionOne
1489 52 Beraldo Leal
1490 1 Beraldo Leal
# Used for glance
1491 1 Beraldo Leal
export OS_USERNAME=admin
1492 52 Beraldo Leal
export OS_TENANT_NAME=openstackDemo
1493 52 Beraldo Leal
export OS_PASSWORD=adminpass
1494 52 Beraldo Leal
export OS_AUTH_URL=http://192.168.69.1:5000/v2.0/
1495 52 Beraldo Leal
export OS_REGION_NAME=RegionOne
1496 52 Beraldo Leal
</pre>
1497 52 Beraldo Leal
1498 1 Beraldo Leal
1499 64 Beraldo Leal
Download a test image:
1500 64 Beraldo Leal
1501 50 Beraldo Leal
<pre>
1502 50 Beraldo Leal
mkdir /tmp/images
1503 50 Beraldo Leal
cd /tmp/images/
1504 50 Beraldo Leal
wget http://smoser.brickies.net/ubuntu/ttylinux-uec/ttylinux-uec-amd64-12.1_2.6.35-22_1.tar.gz
1505 50 Beraldo Leal
tar -zxvf ttylinux-uec-amd64-12.1_2.6.35-22_1.tar.gz
1506 1 Beraldo Leal
</pre>
1507 50 Beraldo Leal
1508 64 Beraldo Leal
Upload the image:
1509 50 Beraldo Leal
1510 50 Beraldo Leal
<pre>
1511 50 Beraldo Leal
# cd /tmp/images/
1512 50 Beraldo Leal
# glance add name="tty-linux-kernel" disk_format=aki container_format=aki < ttylinux-uec-amd64-12.1_2.6.35-22_1-vmlinuz 
1513 50 Beraldo Leal
# glance add name="tty-linux-ramdisk" disk_format=ari container_format=ari < ttylinux-uec-amd64-12.1_2.6.35-22_1-loader 
1514 50 Beraldo Leal
# glance add name="tty-linux" disk_format=ami container_format=ami kernel_id=[kernel_image_id] ramdisk_id=[kernel_ramdisk_image_id] < ttylinux-uec-amd64-12.1_2.6.35-22_1.img 
1515 50 Beraldo Leal
</pre>
1516 51 Beraldo Leal
1517 64 Beraldo Leal
List the images:
1518 51 Beraldo Leal
1519 51 Beraldo Leal
<pre>
1520 51 Beraldo Leal
# glance index
1521 51 Beraldo Leal
</pre>
1522 65 Beraldo Leal
1523 65 Beraldo Leal
1524 75 Beraldo Leal
h1. OpenStack Compute service - nova
1525 65 Beraldo Leal
1526 65 Beraldo Leal
Nova is the project name for OpenStack Compute, a cloud computing fabric controller, the main part of an IaaS system. Individuals and organizations can use Nova to host and manage their own cloud computing systems. Nova originated as a project out of NASA Ames Research Laboratory.
1527 65 Beraldo Leal
1528 66 Beraldo Leal
OpenStack Compute gives you a tool to orchestrate a cloud, including running instances, managing networks, and controlling access to the cloud through users and projects. The underlying open source project's name is Nova, and it provides the software that can control an Infrastructure as a Service (IaaS) cloud computing platform. It is similar in scope to Amazon EC2 and Rackspace Cloud Servers. OpenStack Compute does not include any virtualization software; rather it defines drivers that interact with underlying virtualization mechanisms that run on your host operating system, and exposes functionality over a web-based API.
1529 66 Beraldo Leal
1530 66 Beraldo Leal
1531 65 Beraldo Leal
h2. AMQP and Nova
1532 65 Beraldo Leal
1533 65 Beraldo Leal
AMQP is the messaging technology chosen by the OpenStack cloud. The AMQP broker, either RabbitMQ or Qpid, sits between any two Nova components and allows them to communicate in a loosely coupled fashion. More precisely, Nova components (the compute fabric of OpenStack) use Remote Procedure Calls (RPC hereinafter) to communicate to one another.
1534 1 Beraldo Leal
1535 66 Beraldo Leal
For more information about AMQP in Nova, please read the "AMQP section in nova manual":http://docs.openstack.org/developer/nova/devref/rpc.html
1536 66 Beraldo Leal
1537 66 Beraldo Leal
h2. Hypervisor
1538 66 Beraldo Leal
1539 66 Beraldo Leal
For production environments the most tested hypervisors are KVM and Xen-based hypervisors. KVM runs through libvirt, Xen runs best through XenAPI calls. KVM is selected by default and requires the least additional configuration. This guide offers information on
1540 66 Beraldo Leal
specific walkthrough configuration options to KVM.
1541 66 Beraldo Leal
1542 66 Beraldo Leal
h3. Configuring the kvm
1543 66 Beraldo Leal
1544 66 Beraldo Leal
KVM is configured as the default hypervisor for Compute. To enable KVM explicitly, add the following configuration options /etc/nova/nova.conf:
1545 66 Beraldo Leal
1546 66 Beraldo Leal
<pre>
1547 66 Beraldo Leal
connection_type=libvirt
1548 66 Beraldo Leal
libvirt_type=kvm
1549 66 Beraldo Leal
</pre>
1550 66 Beraldo Leal
1551 66 Beraldo Leal
The KVM hypervisor supports the following virtual machine image formats:
1552 66 Beraldo Leal
1553 66 Beraldo Leal
* Raw
1554 66 Beraldo Leal
* QEMU Copy-on-write (qcow2)
1555 66 Beraldo Leal
* VMWare virtual machine disk format (vmdk)
1556 66 Beraldo Leal
1557 66 Beraldo Leal
h3. Checking for hardware virtualization support
1558 66 Beraldo Leal
1559 66 Beraldo Leal
The processors of your compute host need to support virtualization technology (VT) to use KVM.
1560 66 Beraldo Leal
1561 66 Beraldo Leal
If you are running on Ubuntu, use the _kvm-ok_ command to check if your processor has VT support, it is enabled in the BIOS, and KVM is installed properly, as root:
1562 66 Beraldo Leal
1563 66 Beraldo Leal
<pre>
1564 66 Beraldo Leal
# kvm-ok
1565 66 Beraldo Leal
INFO: /dev/kvm exists
1566 66 Beraldo Leal
KVM acceleration can be used
1567 66 Beraldo Leal
</pre>
1568 66 Beraldo Leal
1569 66 Beraldo Leal
On distributions that don't have kvm-ok, you can check if your processor has VT support by looking at the processor flags in the /proc/cpuinfo file. For Intel processors, look for the vmx flag, and for AMD processors, look for the svm flag. A simple way to check is to run the following command and see if there is any output:
1570 66 Beraldo Leal
1571 66 Beraldo Leal
<pre>
1572 66 Beraldo Leal
$ egrep '(vmx|svm)' --color=always /proc/cpuinfo
1573 66 Beraldo Leal
</pre>
1574 66 Beraldo Leal
1575 66 Beraldo Leal
h3. Enabling KVM
1576 66 Beraldo Leal
1577 66 Beraldo Leal
KVM requires the kvm and either kvm-intel or kvm-amd modules to be loaded. This may have been configured automatically on your distribution when KVM is installed. You can check that they have been loaded using lsmod, as follows, with expected output for Intel-based processors:
1578 66 Beraldo Leal
1579 66 Beraldo Leal
<pre>
1580 66 Beraldo Leal
$ lsmod | grep kvm
1581 66 Beraldo Leal
kvm_intel  137721 9
1582 66 Beraldo Leal
kvm        415459 1 kvm_intel
1583 66 Beraldo Leal
</pre>
1584 66 Beraldo Leal
1585 66 Beraldo Leal
If your compute host is Intel-based, run the following as root to load the kernel modules:
1586 66 Beraldo Leal
1587 66 Beraldo Leal
<pre>
1588 66 Beraldo Leal
# modprobe kvm
1589 66 Beraldo Leal
# modprobe kvm-intel
1590 66 Beraldo Leal
</pre>
1591 66 Beraldo Leal
1592 66 Beraldo Leal
Add the following lines to /etc/modules so that these modules will load on reboot:
1593 66 Beraldo Leal
1594 66 Beraldo Leal
<pre>
1595 66 Beraldo Leal
kvm
1596 66 Beraldo Leal
kvm-intel
1597 66 Beraldo Leal
</pre>
1598 66 Beraldo Leal
1599 66 Beraldo Leal
1600 66 Beraldo Leal
h2. Configuring the Compute Service database backend
1601 66 Beraldo Leal
1602 66 Beraldo Leal
To configure the MySQL database, create the nova database on the cloud controller machine:
1603 66 Beraldo Leal
1604 66 Beraldo Leal
<pre>
1605 1 Beraldo Leal
mysql> CREATE DATABASE nova;
1606 75 Beraldo Leal
mysql> CREATE USER nova;
1607 75 Beraldo Leal
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'novapass';
1608 66 Beraldo Leal
mysql> quit
1609 66 Beraldo Leal
</pre>
1610 66 Beraldo Leal
1611 66 Beraldo Leal
h2. Installing the Cloud Controller
1612 66 Beraldo Leal
1613 66 Beraldo Leal
Install the messaging queue server, RabbitMQ. You also have the option of installing 
1614 66 Beraldo Leal
Apache Qpid, refer to the Compute Administration Manual for instructions.
1615 66 Beraldo Leal
1616 66 Beraldo Leal
<pre>
1617 66 Beraldo Leal
sudo apt-get install rabbitmq-server
1618 66 Beraldo Leal
</pre>
1619 66 Beraldo Leal
1620 66 Beraldo Leal
Install the required nova- packages, and dependencies are automatically installed.
1621 66 Beraldo Leal
1622 66 Beraldo Leal
<pre>
1623 67 Beraldo Leal
sudo apt-get install nova-volume nova-compute nova-vncproxy nova-api  nova-ajax-console-proxy nova-cert nova-consoleauth nova-doc nova-scheduler nova-network
1624 66 Beraldo Leal
</pre>
1625 1 Beraldo Leal
1626 72 Beraldo Leal
1627 72 Beraldo Leal
<pre>
1628 72 Beraldo Leal
nova-manage config convert --infile=/etc/nova/nova.conf --outfile=/etc/nova/nova.conf.new
1629 72 Beraldo Leal
mv /etc/nova/nova.conf.new /etc/nova/nova.conf
1630 72 Beraldo Leal
</pre>
1631 67 Beraldo Leal
h3. Configuring nova
1632 67 Beraldo Leal
1633 67 Beraldo Leal
The packages automatically do these steps for a user named nova, but if you are installing
1634 67 Beraldo Leal
as another user you should ensure that the nova.conf file should have its owner set to
1635 67 Beraldo Leal
root:nova, and mode set to 0640, since the file contains your MySQL server’s username
1636 67 Beraldo Leal
and password. This packaged install ensures that the nova user belongs to the nova group
1637 67 Beraldo Leal
and that the .conf file permissions are set, but here are the manual commands, which
1638 67 Beraldo Leal
should be run as root:
1639 67 Beraldo Leal
1640 67 Beraldo Leal
<pre>
1641 67 Beraldo Leal
# groupadd nova
1642 67 Beraldo Leal
# usermod -g nova nova
1643 67 Beraldo Leal
# chown -R root:nova /etc/nova
1644 67 Beraldo Leal
# chmod 640 /etc/nova/nova.conf
1645 67 Beraldo Leal
</pre>
1646 67 Beraldo Leal
1647 67 Beraldo Leal
Modify your nova.conf, nova-compute and api-paste.ini according to the following examples:
1648 67 Beraldo Leal
1649 67 Beraldo Leal
*nova-compute.conf*
1650 67 Beraldo Leal
<pre>
1651 67 Beraldo Leal
[DEFAULT]
1652 67 Beraldo Leal
libvirt_type=kvm
1653 67 Beraldo Leal
</pre>
1654 67 Beraldo Leal
1655 67 Beraldo Leal
*nova.conf*
1656 67 Beraldo Leal
<pre>
1657 67 Beraldo Leal
[DEFAULT]
1658 67 Beraldo Leal
# LOGS/STATE
1659 67 Beraldo Leal
verbose=True
1660 67 Beraldo Leal
use_syslog=False
1661 67 Beraldo Leal
debug=False
1662 67 Beraldo Leal
1663 67 Beraldo Leal
#logging_default_format_string =  '%(asctime)s %(levelname)s %(name)s [-] %(message)s'
1664 67 Beraldo Leal
logging_default_format_string = '%(asctime)s %(levelname)s %(name)s [-] %(message)s'
1665 67 Beraldo Leal
logging_context_format_string = '%(asctime)s %(levelname)s %(name)s [-] %(message)s'
1666 67 Beraldo Leal
1667 67 Beraldo Leal
# AUTHENTICATION
1668 67 Beraldo Leal
auth_strategy=keystone
1669 67 Beraldo Leal
logdir=/var/log/nova/
1670 67 Beraldo Leal
state_path=/var/lib/nova
1671 67 Beraldo Leal
lock_path=/var/run/nova
1672 67 Beraldo Leal
bindir=/usr/bin/
1673 67 Beraldo Leal
1674 67 Beraldo Leal
force_to_raw=False
1675 67 Beraldo Leal
1676 67 Beraldo Leal
# SCHEDULER
1677 67 Beraldo Leal
compute_scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler
1678 67 Beraldo Leal
1679 67 Beraldo Leal
scheduler_default_filters=AllHostsFilter
1680 67 Beraldo Leal
1681 67 Beraldo Leal
# VOLUMES
1682 67 Beraldo Leal
volume_group=nova-volumes
1683 67 Beraldo Leal
volume_name_template=volume-%08x
1684 67 Beraldo Leal
iscsi_helper=tgtadm
1685 67 Beraldo Leal
1686 67 Beraldo Leal
# DATABASE
1687 67 Beraldo Leal
sql_connection=mysql://nova:novapass@192.168.69.1/nova
1688 67 Beraldo Leal
1689 67 Beraldo Leal
# COMPUTE
1690 67 Beraldo Leal
libvirt_type=kvm
1691 67 Beraldo Leal
connection_type=libvirt
1692 67 Beraldo Leal
instance_name_template=instance-%08x
1693 67 Beraldo Leal
api_paste_config=/etc/nova/api-paste.ini
1694 67 Beraldo Leal
allow_resize_to_same_host=True
1695 67 Beraldo Leal
1696 67 Beraldo Leal
# APIS
1697 67 Beraldo Leal
osapi_compute_extension=nova.api.openstack.compute.contrib.standard_extensions
1698 67 Beraldo Leal
ec2_dmz_host=192.168.69.1
1699 67 Beraldo Leal
s3_host=192.168.69.1
1700 67 Beraldo Leal
# RABBITMQ
1701 67 Beraldo Leal
rabbit_host=192.168.69.1
1702 67 Beraldo Leal
# GLANCE
1703 67 Beraldo Leal
image_service=nova.image.glance.GlanceImageService
1704 67 Beraldo Leal
glance_api_servers=192.168.69.1:9292
1705 67 Beraldo Leal
# NETWORK
1706 67 Beraldo Leal
network_manager=nova.network.manager.FlatDHCPManager
1707 67 Beraldo Leal
force_dhcp_release=True
1708 67 Beraldo Leal
dhcpbridge_flagfile=/etc/nova/nova.conf
1709 67 Beraldo Leal
firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver
1710 67 Beraldo Leal
my_ip=192.168.69.1
1711 67 Beraldo Leal
public_interface=br100
1712 67 Beraldo Leal
vlan_interface=eth0
1713 67 Beraldo Leal
flat_network_bridge=br100
1714 67 Beraldo Leal
flat_interface=eth0
1715 67 Beraldo Leal
fixed_range=192.168.70.0/24
1716 67 Beraldo Leal
# NOVNC CONSOLE - You should change this IP to public ip of current nova-compute machine
1717 67 Beraldo Leal
novncproxy_base_url=http://200.145.46.167:6080/vnc_auto.html
1718 67 Beraldo Leal
vncserver_proxyclient_address=200.145.46.167
1719 67 Beraldo Leal
vncserver_listen=200.145.46.167
1720 67 Beraldo Leal
xvpvncproxy_base_url=http://200.145.46.167:6081/console
1721 67 Beraldo Leal
</pre>
1722 67 Beraldo Leal
1723 67 Beraldo Leal
*api-paste.ini*
1724 67 Beraldo Leal
<pre>
1725 67 Beraldo Leal
############
1726 67 Beraldo Leal
# Metadata #
1727 67 Beraldo Leal
############
1728 67 Beraldo Leal
[composite:metadata]
1729 67 Beraldo Leal
use = egg:Paste#urlmap
1730 67 Beraldo Leal
/: metaversions
1731 67 Beraldo Leal
/latest: meta
1732 67 Beraldo Leal
/1.0: meta
1733 67 Beraldo Leal
/2007-01-19: meta
1734 67 Beraldo Leal
/2007-03-01: meta
1735 67 Beraldo Leal
/2007-08-29: meta
1736 67 Beraldo Leal
/2007-10-10: meta
1737 67 Beraldo Leal
/2007-12-15: meta
1738 67 Beraldo Leal
/2008-02-01: meta
1739 67 Beraldo Leal
/2008-09-01: meta
1740 67 Beraldo Leal
/2009-04-04: meta
1741 67 Beraldo Leal
1742 67 Beraldo Leal
[pipeline:metaversions]
1743 67 Beraldo Leal
pipeline = ec2faultwrap logrequest metaverapp
1744 67 Beraldo Leal
1745 67 Beraldo Leal
[pipeline:meta]
1746 67 Beraldo Leal
pipeline = ec2faultwrap logrequest metaapp
1747 67 Beraldo Leal
1748 67 Beraldo Leal
[app:metaverapp]
1749 67 Beraldo Leal
paste.app_factory = nova.api.metadata.handler:Versions.factory
1750 67 Beraldo Leal
1751 67 Beraldo Leal
[app:metaapp]
1752 67 Beraldo Leal
paste.app_factory = nova.api.metadata.handler:MetadataRequestHandler.factory
1753 67 Beraldo Leal
1754 67 Beraldo Leal
#######
1755 67 Beraldo Leal
# EC2 #
1756 67 Beraldo Leal
#######
1757 67 Beraldo Leal
1758 67 Beraldo Leal
[composite:ec2]
1759 67 Beraldo Leal
use = egg:Paste#urlmap
1760 67 Beraldo Leal
/services/Cloud: ec2cloud
1761 67 Beraldo Leal
1762 67 Beraldo Leal
[composite:ec2cloud]
1763 67 Beraldo Leal
use = call:nova.api.auth:pipeline_factory
1764 67 Beraldo Leal
noauth = ec2faultwrap logrequest ec2noauth cloudrequest validator ec2executor
1765 67 Beraldo Leal
deprecated = ec2faultwrap logrequest authenticate cloudrequest validator ec2executor
1766 67 Beraldo Leal
keystone = ec2faultwrap logrequest ec2keystoneauth cloudrequest validator ec2executor
1767 67 Beraldo Leal
1768 67 Beraldo Leal
[filter:ec2faultwrap]
1769 67 Beraldo Leal
paste.filter_factory = nova.api.ec2:FaultWrapper.factory
1770 67 Beraldo Leal
1771 67 Beraldo Leal
[filter:logrequest]
1772 67 Beraldo Leal
paste.filter_factory = nova.api.ec2:RequestLogging.factory
1773 67 Beraldo Leal
1774 67 Beraldo Leal
[filter:ec2lockout]
1775 67 Beraldo Leal
paste.filter_factory = nova.api.ec2:Lockout.factory
1776 67 Beraldo Leal
1777 67 Beraldo Leal
[filter:totoken]
1778 67 Beraldo Leal
paste.filter_factory = nova.api.ec2:EC2Token.factory
1779 67 Beraldo Leal
1780 67 Beraldo Leal
[filter:ec2keystoneauth]
1781 67 Beraldo Leal
paste.filter_factory = nova.api.ec2:EC2KeystoneAuth.factory
1782 67 Beraldo Leal
1783 67 Beraldo Leal
[filter:ec2noauth]
1784 67 Beraldo Leal
paste.filter_factory = nova.api.ec2:NoAuth.factory
1785 67 Beraldo Leal
1786 67 Beraldo Leal
[filter:authenticate]
1787 67 Beraldo Leal
paste.filter_factory = nova.api.ec2:Authenticate.factory
1788 67 Beraldo Leal
1789 67 Beraldo Leal
[filter:cloudrequest]
1790 67 Beraldo Leal
controller = nova.api.ec2.cloud.CloudController
1791 67 Beraldo Leal
paste.filter_factory = nova.api.ec2:Requestify.factory
1792 67 Beraldo Leal
1793 67 Beraldo Leal
[filter:authorizer]
1794 67 Beraldo Leal
paste.filter_factory = nova.api.ec2:Authorizer.factory
1795 67 Beraldo Leal
1796 67 Beraldo Leal
[filter:validator]
1797 67 Beraldo Leal
paste.filter_factory = nova.api.ec2:Validator.factory
1798 67 Beraldo Leal
1799 67 Beraldo Leal
[app:ec2executor]
1800 67 Beraldo Leal
paste.app_factory = nova.api.ec2:Executor.factory
1801 67 Beraldo Leal
1802 67 Beraldo Leal
#############
1803 67 Beraldo Leal
# Openstack #
1804 67 Beraldo Leal
#############
1805 67 Beraldo Leal
1806 67 Beraldo Leal
[composite:osapi_compute]
1807 67 Beraldo Leal
use = call:nova.api.openstack.urlmap:urlmap_factory
1808 67 Beraldo Leal
/: oscomputeversions
1809 67 Beraldo Leal
/v1.1: openstack_compute_api_v2
1810 67 Beraldo Leal
/v2: openstack_compute_api_v2
1811 67 Beraldo Leal
1812 67 Beraldo Leal
[composite:osapi_volume]
1813 67 Beraldo Leal
use = call:nova.api.openstack.urlmap:urlmap_factory
1814 67 Beraldo Leal
/: osvolumeversions
1815 67 Beraldo Leal
/v1: openstack_volume_api_v1
1816 67 Beraldo Leal
1817 67 Beraldo Leal
[composite:openstack_compute_api_v2]
1818 67 Beraldo Leal
use = call:nova.api.auth:pipeline_factory
1819 67 Beraldo Leal
noauth = faultwrap noauth ratelimit osapi_compute_app_v2
1820 67 Beraldo Leal
deprecated = faultwrap auth ratelimit osapi_compute_app_v2
1821 67 Beraldo Leal
keystone = faultwrap authtoken keystonecontext ratelimit osapi_compute_app_v2
1822 67 Beraldo Leal
keystone_nolimit = faultwrap authtoken keystonecontext osapi_compute_app_v2
1823 67 Beraldo Leal
1824 67 Beraldo Leal
[composite:openstack_volume_api_v1]
1825 67 Beraldo Leal
use = call:nova.api.auth:pipeline_factory
1826 67 Beraldo Leal
noauth = faultwrap noauth ratelimit osapi_volume_app_v1
1827 67 Beraldo Leal
deprecated = faultwrap auth ratelimit osapi_volume_app_v1
1828 67 Beraldo Leal
keystone = faultwrap authtoken keystonecontext ratelimit osapi_volume_app_v1
1829 67 Beraldo Leal
keystone_nolimit = faultwrap authtoken keystonecontext osapi_volume_app_v1
1830 67 Beraldo Leal
1831 67 Beraldo Leal
[filter:faultwrap]
1832 67 Beraldo Leal
paste.filter_factory = nova.api.openstack:FaultWrapper.factory
1833 67 Beraldo Leal
1834 67 Beraldo Leal
[filter:auth]
1835 67 Beraldo Leal
paste.filter_factory = nova.api.openstack.auth:AuthMiddleware.factory
1836 67 Beraldo Leal
1837 67 Beraldo Leal
[filter:noauth]
1838 67 Beraldo Leal
paste.filter_factory = nova.api.openstack.auth:NoAuthMiddleware.factory
1839 67 Beraldo Leal
1840 67 Beraldo Leal
[filter:ratelimit]
1841 67 Beraldo Leal
paste.filter_factory = nova.api.openstack.compute.limits:RateLimitingMiddleware.factory
1842 67 Beraldo Leal
1843 67 Beraldo Leal
[app:osapi_compute_app_v2]
1844 67 Beraldo Leal
paste.app_factory = nova.api.openstack.compute:APIRouter.factory
1845 67 Beraldo Leal
1846 67 Beraldo Leal
[pipeline:oscomputeversions]
1847 67 Beraldo Leal
pipeline = faultwrap oscomputeversionapp
1848 67 Beraldo Leal
1849 67 Beraldo Leal
[app:osapi_volume_app_v1]
1850 67 Beraldo Leal
paste.app_factory = nova.api.openstack.volume:APIRouter.factory
1851 67 Beraldo Leal
1852 67 Beraldo Leal
[app:oscomputeversionapp]
1853 67 Beraldo Leal
paste.app_factory = nova.api.openstack.compute.versions:Versions.factory
1854 67 Beraldo Leal
1855 67 Beraldo Leal
[pipeline:osvolumeversions]
1856 67 Beraldo Leal
pipeline = faultwrap osvolumeversionapp
1857 67 Beraldo Leal
1858 67 Beraldo Leal
[app:osvolumeversionapp]
1859 67 Beraldo Leal
paste.app_factory = nova.api.openstack.volume.versions:Versions.factory
1860 67 Beraldo Leal
1861 67 Beraldo Leal
##########
1862 67 Beraldo Leal
# Shared #
1863 67 Beraldo Leal
##########
1864 67 Beraldo Leal
1865 67 Beraldo Leal
[filter:keystonecontext]
1866 67 Beraldo Leal
paste.filter_factory = nova.api.auth:NovaKeystoneContext.factory
1867 67 Beraldo Leal
1868 67 Beraldo Leal
[filter:authtoken]
1869 67 Beraldo Leal
paste.filter_factory = keystone.middleware.auth_token:filter_factory
1870 67 Beraldo Leal
service_protocol = http
1871 67 Beraldo Leal
service_host = 192.168.69.1
1872 67 Beraldo Leal
service_port = 5000
1873 67 Beraldo Leal
auth_host = 192.168.69.1
1874 67 Beraldo Leal
auth_port = 35357
1875 67 Beraldo Leal
auth_protocol = http
1876 67 Beraldo Leal
auth_uri = http://192.168.69.1:5000/
1877 67 Beraldo Leal
admin_tenant_name = service
1878 67 Beraldo Leal
admin_user = nova
1879 67 Beraldo Leal
admin_password = novapass
1880 67 Beraldo Leal
</pre>
1881 67 Beraldo Leal
1882 68 Beraldo Leal
Restart the nova- services prior to running db sync, by running as root:
1883 66 Beraldo Leal
1884 68 Beraldo Leal
<pre>
1885 68 Beraldo Leal
# restart nova-api
1886 68 Beraldo Leal
# restart nova-compute
1887 68 Beraldo Leal
# restart nova-network
1888 68 Beraldo Leal
# restart nova-scheduler
1889 68 Beraldo Leal
# restart nova-vncproxy
1890 68 Beraldo Leal
# restart nova-volume
1891 68 Beraldo Leal
</pre>
1892 68 Beraldo Leal
1893 66 Beraldo Leal
h3. Installing additional computer nodes
1894 66 Beraldo Leal
1895 66 Beraldo Leal
There are many different ways to perform a multinode install of Compute in order to scale out your deployment and run more. In this case, you can install all the nova- packages and dependencies as you did for the Cloud Controller node, or just install nova-network and nova-compute. Your installation can run any nova- services anywhere, so long as the service can access nova.conf so it knows where the Rabbitmq or Qpid messaging server is installed.
1896 66 Beraldo Leal
1897 1 Beraldo Leal
The Compute Node is where you configure the Compute network, the networking between your instances. Because you may need to query the database from the Compute node and learn more information about instances, the nova client and MySQL client or PostgresSQL client
1898 1 Beraldo Leal
packages should be installed on any additional Compute nodes. Copy the nova.conf from your controller node to all additional compute nodes.
1899 75 Beraldo Leal
1900 75 Beraldo Leal
If you are using a network bridge configuration and the computer nodes will not have external access, no need to install the nova-network computer nodes.
1901 68 Beraldo Leal
1902 68 Beraldo Leal
h3. Configuring the Database for Compute
1903 68 Beraldo Leal
1904 68 Beraldo Leal
Create the tables in your backend data store by running the following command:
1905 68 Beraldo Leal
1906 68 Beraldo Leal
<pre>
1907 68 Beraldo Leal
sudo nova-manage db sync
1908 68 Beraldo Leal
</pre>
1909 68 Beraldo Leal
1910 68 Beraldo Leal
Restart all the services:
1911 68 Beraldo Leal
1912 68 Beraldo Leal
<pre>
1913 68 Beraldo Leal
# restart nova-api
1914 68 Beraldo Leal
# restart nova-compute
1915 68 Beraldo Leal
# restart nova-network
1916 68 Beraldo Leal
# restart nova-scheduler
1917 68 Beraldo Leal
# restart nova-vncproxy
1918 68 Beraldo Leal
# restart nova-volume
1919 68 Beraldo Leal
# restart libvirt-bin
1920 73 Beraldo Leal
# restart nova-cert
1921 73 Beraldo Leal
# restart nova-consoleauth
1922 68 Beraldo Leal
# sudo /etc/init.d/rabbitmq-server restart
1923 68 Beraldo Leal
</pre>
1924 68 Beraldo Leal
1925 68 Beraldo Leal
All nova services are now installed and started. If the "restart" command doesn't work, your services may not be running correctly (or not at all). Review the logs in /var/log/nova. 
1926 68 Beraldo Leal
1927 68 Beraldo Leal
h3. Creating the Network for Compute VMs
1928 68 Beraldo Leal
1929 68 Beraldo Leal
You must run the command that creates the network and the bridge using the br100 specified in the nova.conf file to create the network that the virtual machines use. This example shows the network range using 192.168.70.0/24 as the fixed range for our guest
1930 68 Beraldo Leal
VMs, but you can substitute the range for the network you have available. We're labeling it with "private" in this case.
1931 68 Beraldo Leal
1932 68 Beraldo Leal
<pre>
1933 68 Beraldo Leal
nova-manage network create private --multi_host=T --fixed_range_v4=192.168.70.0/24 --bridge_interface=br100 --num_networks=1 --network_size=256
1934 68 Beraldo Leal
</pre>
1935 68 Beraldo Leal
1936 68 Beraldo Leal
h3. Verifying the Compute Installation
1937 68 Beraldo Leal
1938 68 Beraldo Leal
You can ensure all the Compute services are running by using the nova-manage command:
1939 68 Beraldo Leal
1940 68 Beraldo Leal
<pre>
1941 68 Beraldo Leal
sudo nova-manage service list
1942 68 Beraldo Leal
</pre>
1943 68 Beraldo Leal
1944 68 Beraldo Leal
In return you should see "smiley faces" rather than three X symbols. Here's an example.
1945 68 Beraldo Leal
1946 68 Beraldo Leal
<pre>
1947 68 Beraldo Leal
Binary           Host                                 Zone             Status     State Updated_At
1948 68 Beraldo Leal
nova-compute     educloud01                           nova             disabled   XXX   2012-06-03 14:23:45
1949 68 Beraldo Leal
nova-network     educloud01                           nova             enabled    :-)   2012-06-08 12:04:21
1950 68 Beraldo Leal
nova-scheduler   educloud01                           nova             enabled    :-)   2012-06-08 12:04:14
1951 68 Beraldo Leal
nova-volume      educloud01                           nova             enabled    :-)   2012-06-08 12:04:21
1952 68 Beraldo Leal
nova-cert        educloud01                           nova             enabled    :-)   2012-06-08 12:04:21
1953 68 Beraldo Leal
nova-consoleauth educloud01                           nova             enabled    :-)   2012-06-08 12:04:21
1954 68 Beraldo Leal
nova-compute     educloud02                           nova             enabled    :-)   2012-06-08 12:04:00
1955 68 Beraldo Leal
nova-network     educloud02                           nova             enabled    :-)   2012-06-08 12:04:00
1956 68 Beraldo Leal
</pre>
1957 69 Beraldo Leal
1958 69 Beraldo Leal
h2. Installing the OpenStack frontend - Horizon
1959 69 Beraldo Leal
1960 69 Beraldo Leal
OpenStack has components that provide a view of the OpenStack installation such as a Django-built website that serves as a dashboard. You can use a dashboard interface with an OpenStack Compute installation with a web-based console provided by the Openstack-Dashboard project. It provides web-based interactions with the OpenStack Compute cloud controller through the OpenStack APIs. For more information about the Openstack-Dashboard project, please visit: https://github.com/openstack/horizon/. These instructions are for an example deployment configured with an Apache web server.
1961 69 Beraldo Leal
1962 69 Beraldo Leal
h3. System Requirements for the Dashboard
1963 69 Beraldo Leal
1964 69 Beraldo Leal
* You should have a running OpenStack Compute installation with the Identity Service, Keystone, enabled for identity management.
1965 69 Beraldo Leal
* The dashboard needs to be installed on the node that can contact the Identity Service.
1966 69 Beraldo Leal
* You should know the URL of your Identity endpoint and the Compute endpoint.
1967 69 Beraldo Leal
* You must know the credentials of a valid Identity service user.
1968 69 Beraldo Leal
* Python 2.6 is required;
1969 69 Beraldo Leal
* It should run on any system with Python 2.6 or 2.7 that is capable of running Django;
1970 69 Beraldo Leal
* Optional components:
1971 69 Beraldo Leal
> * An Image Store (Glance) endpoint.
1972 69 Beraldo Leal
> * An Object Store (Swift) endpoint.
1973 70 Beraldo Leal
1974 70 Beraldo Leal
Install the OpenStack Dashboard, as root:
1975 70 Beraldo Leal
1976 70 Beraldo Leal
<pre>
1977 70 Beraldo Leal
# apt-get install -y memcached libapache2-mod-wsgi openstack-dashboard
1978 70 Beraldo Leal
</pre>
1979 70 Beraldo Leal
1980 70 Beraldo Leal
Next, modify the variable CACHE_BACKEND in /etc/openstack-dashboard/ local_settings.py to match the ones set in /etc/memcached.conf. Open /etc/openstack-dashboard/local_settings.py and look for this line:
1981 70 Beraldo Leal
1982 70 Beraldo Leal
<pre>
1983 70 Beraldo Leal
CACHE_BACKEND = 'memcached://127.0.0.1:11211/'
1984 70 Beraldo Leal
</pre>
1985 70 Beraldo Leal
1986 70 Beraldo Leal
To configure the MySQL database, create the dash database.
1987 70 Beraldo Leal
1988 70 Beraldo Leal
<pre>
1989 70 Beraldo Leal
mysql> CREATE DATABASE dash;
1990 70 Beraldo Leal
mysql> GRANT ALL ON dash.* TO 'dash'@'%' IDENTIFIED BY 'dashpass';
1991 70 Beraldo Leal
mysql> quit;
1992 70 Beraldo Leal
</pre>
1993 70 Beraldo Leal
1994 70 Beraldo Leal
After configuring the local_settings.py as shown below, you can run the manage.py syncdb command to populate this newly-created database.
1995 70 Beraldo Leal
1996 70 Beraldo Leal
<pre>
1997 70 Beraldo Leal
import os
1998 70 Beraldo Leal
from django.utils.translation import ugettext_lazy as _
1999 70 Beraldo Leal
DEBUG = False
2000 70 Beraldo Leal
TEMPLATE_DEBUG = DEBUG
2001 70 Beraldo Leal
PROD = False
2002 70 Beraldo Leal
USE_SSL = False
2003 70 Beraldo Leal
SWIFT_ENABLED = True
2004 70 Beraldo Leal
ENABLE_JUJU_PANEL = True
2005 70 Beraldo Leal
SECRET_KEY = 'elj1IWiLoWHgcyYxFVLj7cM5rGOOxWl0'
2006 70 Beraldo Leal
LOCAL_PATH = os.path.dirname(os.path.abspath(__file__))
2007 70 Beraldo Leal
CACHE_BACKEND = 'memcached://192.168.69.1:11211/'
2008 70 Beraldo Leal
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
2009 70 Beraldo Leal
OPENSTACK_HOST = "192.168.69.1"
2010 70 Beraldo Leal
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v2.0" % OPENSTACK_HOST
2011 70 Beraldo Leal
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "Member"
2012 70 Beraldo Leal
OPENSTACK_KEYSTONE_BACKEND = {
2013 70 Beraldo Leal
    'name': 'native',
2014 70 Beraldo Leal
    'can_edit_user': True
2015 70 Beraldo Leal
}
2016 70 Beraldo Leal
API_RESULT_LIMIT = 1000
2017 70 Beraldo Leal
LOGGING = {
2018 70 Beraldo Leal
        'version': 1,
2019 70 Beraldo Leal
        # When set to True this will disable all logging except
2020 70 Beraldo Leal
        # for loggers specified in this configuration dictionary. Note that
2021 70 Beraldo Leal
        # if nothing is specified here and disable_existing_loggers is True,
2022 70 Beraldo Leal
        # django.db.backends will still log unless it is disabled explicitly.
2023 70 Beraldo Leal
        'disable_existing_loggers': False,
2024 70 Beraldo Leal
        'handlers': {
2025 70 Beraldo Leal
            'null': {
2026 70 Beraldo Leal
                'level': 'DEBUG',
2027 70 Beraldo Leal
                'class': 'django.utils.log.NullHandler',
2028 70 Beraldo Leal
                },
2029 70 Beraldo Leal
            'console': {
2030 70 Beraldo Leal
                # Set the level to "DEBUG" for verbose output logging.
2031 70 Beraldo Leal
                'level': 'INFO',
2032 70 Beraldo Leal
                'class': 'logging.StreamHandler',
2033 70 Beraldo Leal
                },
2034 70 Beraldo Leal
            },
2035 70 Beraldo Leal
        'loggers': {
2036 70 Beraldo Leal
            # Logging from django.db.backends is VERY verbose, send to null
2037 70 Beraldo Leal
            # by default.
2038 70 Beraldo Leal
            'django.db.backends': {
2039 70 Beraldo Leal
                'handlers': ['null'],
2040 70 Beraldo Leal
                'propagate': False,
2041 70 Beraldo Leal
                },
2042 70 Beraldo Leal
            'horizon': {
2043 70 Beraldo Leal
                'handlers': ['console'],
2044 70 Beraldo Leal
                'propagate': False,
2045 70 Beraldo Leal
            },
2046 70 Beraldo Leal
            'novaclient': {
2047 70 Beraldo Leal
                'handlers': ['console'],
2048 70 Beraldo Leal
                'propagate': False,
2049 70 Beraldo Leal
            },
2050 70 Beraldo Leal
            'keystoneclient': {
2051 70 Beraldo Leal
                'handlers': ['console'],
2052 70 Beraldo Leal
                'propagate': False,
2053 70 Beraldo Leal
            },
2054 70 Beraldo Leal
            'nose.plugins.manager': {
2055 70 Beraldo Leal
                'handlers': ['console'],
2056 70 Beraldo Leal
                'propagate': False,
2057 70 Beraldo Leal
            }
2058 70 Beraldo Leal
        }
2059 70 Beraldo Leal
}
2060 70 Beraldo Leal
DATABASES = {
2061 70 Beraldo Leal
'default': {
2062 70 Beraldo Leal
'ENGINE': 'django.db.backends.mysql',
2063 70 Beraldo Leal
'NAME': 'dash',
2064 70 Beraldo Leal
'USER': 'dash',
2065 70 Beraldo Leal
'PASSWORD': 'dashpass',
2066 70 Beraldo Leal
'HOST': '192.168.69.1',
2067 70 Beraldo Leal
'default-character-set': 'utf8'
2068 70 Beraldo Leal
},
2069 70 Beraldo Leal
}
2070 70 Beraldo Leal
2071 70 Beraldo Leal
</pre>
2072 70 Beraldo Leal
2073 70 Beraldo Leal
Run the manage.py syncdb command to initialize the database.
2074 70 Beraldo Leal
2075 70 Beraldo Leal
<pre>
2076 70 Beraldo Leal
$ /usr/share/openstack-dashboard/manage.py syncdb
2077 70 Beraldo Leal
</pre>
2078 70 Beraldo Leal
2079 70 Beraldo Leal
2080 70 Beraldo Leal
Restart Apache to pick up the default site and symbolic link settings.
2081 70 Beraldo Leal
2082 70 Beraldo Leal
<pre>
2083 70 Beraldo Leal
# /etc/init.d/apache2 restart
2084 70 Beraldo Leal
</pre>
2085 70 Beraldo Leal
2086 70 Beraldo Leal
Restart the nova-api service to ensure the API server can connect to the Dashboard and to avoid an error displayed in the Dashboard
2087 70 Beraldo Leal
2088 70 Beraldo Leal
<pre>
2089 70 Beraldo Leal
sudo restart nova-api
2090 70 Beraldo Leal
</pre>