├── .gitignore
├── Makefile
├── README.md
├── allocate-floating-ip.png
├── boot-instance.md
├── cleanup.md
├── dashboard.md
├── devstack.md
├── diagrams.graffle
├── getting-started.md
├── launch-instance-net.png
├── launch-instance.png
├── menu-associate-floating-ip.png
├── network-under-hood.png
├── object-storage.md
├── openstack-cloud-software-vertical-small.png
├── rackspace-api.png
├── rackspace-screen.png
├── rax.openrc
├── temp-url.md
├── under-the-hood-compute.md
├── under-the-hood-network.md
├── under-the-hood-object.md
├── under-the-hood-volumes.md
└── under-the-hood.md
/.gitignore:
--------------------------------------------------------------------------------
1 | *.html
2 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | #
2 | # Use pandoc to generate docs
3 | #
4 | .PHONY: all
5 |
6 | all: README.html boot-instance.html devstack.html getting-started.html object-storage.html under-the-hood.html
7 |
8 | %.html: %.md
9 | pandoc $< -o $@
10 |
11 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # OpenStack Hackspace
2 |
3 | ## What you'll be doing
4 |
5 | * Interacting with a production OpenStack deployment (Rackspace Public Cloud) using command-line tools
6 | * Doing your own deployment of OpenStack (DevStack) inside of the Rackspace cloud
7 | * Interacting with your OpenStack deployment using the OpenStack Dashboard
8 | * Poking around your deployment to understand how OpenStack is implemented
9 |
10 | ## What you need
11 |
12 | This document assumes you have:
13 |
14 | - Rackspace credentials
15 | * account name
16 | * password
17 | - A computer with
18 | * Internet access
19 | * bash or zsh shell
20 | * Python
21 | * Python virtualenv package
22 | * SSH client
23 |
24 | Talk to somebody in the room if you don't have these.
25 |
26 | ## Exercises
27 |
28 | * [Getting started][1]
29 | * [Compute][2]
30 | * [Object storage][3]
31 | * [DevStack][4]
32 | * [Dashboard][5]
33 | * [Under the hood: compute][6]
34 | * [Under the hood: volumes][7]
35 | * [Under the hood: networking][8]
36 | * [Cleanup][9]
37 |
38 |
39 | [1]: getting-started.md
40 | [2]: boot-instance.md
41 | [3]: object-storage.md
42 | [4]: devstack.md
43 | [5]: dashboard.md
44 | [6]: under-the-hood-compute.md
45 | [7]: under-the-hood-volumes.md
46 | [8]: under-the-hood-network.md
47 | [9]: cleanup.md
--------------------------------------------------------------------------------
/allocate-floating-ip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lorin/openstack-hackspace/114023c031b3d72e348f98d267c5b266dde1fac2/allocate-floating-ip.png
--------------------------------------------------------------------------------
/boot-instance.md:
--------------------------------------------------------------------------------
1 | # Compute
2 |
3 | Here we're going to create a network, boot an instance onto that network, attach a volume onto
4 | that instance, and then snapshot the instance into an image.
5 |
6 | We'll be using Rackspace Public Cloud, which is implemented on top of OpenStack.
7 |
8 | ## Add a keypair
9 |
10 | First thing we need to do is create a new ssh keypair so that we can ssh to our instances. In these examples, we'll create a new keypair, although you can also upload an existing public key.
11 |
12 | We'll call our key "lisa":
13 |
14 | $ nova keypair-add lisa > lisa.key
15 |
16 | We also need to set permissions on it otherwise ssh won't let us use it.
17 |
18 | $ chmod 0600 lisa.key
19 |
20 |
21 |
22 | ## Networking
23 |
24 | You should have a private and public network visible in your account:
25 |
26 |
27 | $ nova network-list
28 | +--------------------------------------+---------+------+
29 | | ID | Label | CIDR |
30 | +--------------------------------------+---------+------+
31 | | 00000000-0000-0000-0000-000000000000 | public | |
32 | | 11111111-1111-1111-1111-111111111111 | private | |
33 | +--------------------------------------+---------+------+
34 |
35 | We're going to create a new 10.30.0.0/24 network, which we'll call `hackspace`.
36 |
37 |
38 | $ nova network-create hackspace 10.30.0.0/24
39 | +----------+--------------------------------------+
40 | | Property | Value |
41 | +----------+--------------------------------------+
42 | | cidr | 10.30.0.0/24 |
43 | | id | 5593dd67-feb4-4382-be86-1b9169ecde65 |
44 | | label | hackspace |
45 | +----------+--------------------------------------+
46 |
47 | It should now show up in a list of networks:
48 |
49 | $ nova network-list
50 | +--------------------------------------+-----------+--------------+
51 | | ID | Label | CIDR |
52 | +--------------------------------------+-----------+--------------+
53 | | 5593dd67-feb4-4382-be86-1b9169ecde65 | hackspace | 10.30.0.0/24 |
54 | | 00000000-0000-0000-0000-000000000000 | public | |
55 | | 11111111-1111-1111-1111-111111111111 | private | |
56 | +--------------------------------------+-----------+--------------+
57 |
58 | ## Booting a new instance
59 |
60 | Now we're going to boot an Ubuntu 12.04 instance into this network. List the available instance sizes, which OpenStack calls flavors:
61 |
62 | $ nova flavor-list
63 | +----+-------------------------+-----------+------+-----------+------+-------+-------------+-----------+
64 | | ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
65 | +----+-------------------------+-----------+------+-----------+------+-------+-------------+-----------+
66 | | 2 | 512MB Standard Instance | 512 | 20 | 0 | 512 | 1 | 80.0 | N/A |
67 | | 3 | 1GB Standard Instance | 1024 | 40 | 0 | 1024 | 1 | 120.0 | N/A |
68 | | 4 | 2GB Standard Instance | 2048 | 80 | 0 | 2048 | 2 | 240.0 | N/A |
69 | | 5 | 4GB Standard Instance | 4096 | 160 | 0 | 2048 | 2 | 400.0 | N/A |
70 | | 6 | 8GB Standard Instance | 8192 | 320 | 0 | 2048 | 4 | 600.0 | N/A |
71 | | 7 | 15GB Standard Instance | 15360 | 620 | 0 | 2048 | 6 | 800.0 | N/A |
72 | | 8 | 30GB Standard Instance | 30720 | 1200 | 0 | 2048 | 8 | 1200.0 | N/A |
73 | +----+-------------------------+-----------+------+-----------+------+-------+-------------+-----------+
74 |
75 | List the available images:
76 |
77 | $ nova image-list
78 | +--------------------------------------+----------------------------------------------------------------------------------------------+--------+--------+
79 | | ID | Name | Status | Server |
80 | +--------------------------------------+----------------------------------------------------------------------------------------------+--------+--------+
81 | | ba293687-4af0-4ccb-99e5-097d83f72dfe | Arch 2013.9 | ACTIVE | |
82 | | 9522c27d-51d9-44ee-8eb3-fb7b14fd4042 | CentOS 5.10 | ACTIVE | |
83 | | 59c037c1-70ec-41e4-aa17-73a9b0cb6b16 | CentOS 5.9 | ACTIVE | |
84 | | f70ed7c7-b42e-4d77-83d8-40fa29825b85 | CentOS 6.4 | ACTIVE | |
85 | | 695ca76e-fc0d-4e36-82e0-8ed66480a999 | Debian 6.06 (Squeeze) | ACTIVE | |
86 | | 857d7d36-34f3-409f-8435-693e8797be8b | Debian 7 (Wheezy) | ACTIVE | |
87 | | 896caae3-82f1-4b03-beaa-75fbdde27969 | Fedora 18 (Spherical Cow) | ACTIVE | |
88 | | 8500226f-b193-4471-9eff-9cba8440bfc8 | Fedora 19 (Schrodinger's Cat) | ACTIVE | |
89 | | fb624ffd-81c2-4217-8cd5-da32d32e85c4 | FreeBSD 9.2 | ACTIVE | |
90 | | 73764eb8-3c1c-42a9-8fff-71f6beefc6a7 | Gentoo 13.3 | ACTIVE | |
91 | | 8955d327-9a69-468f-be5c-60f571267406 | OpenSUSE 12.3 | ACTIVE | |
92 | | 56ad2db2-d9cd-462e-a2a4-7f3a4fc91ee8 | Red Hat Enterprise Linux 5.10 | ACTIVE | |
93 | | 9d661e79-e473-4e2c-8a60-06b33b0add67 | Red Hat Enterprise Linux 5.9 | ACTIVE | |
94 | | c6e2fed0-75bf-420d-a744-7cfc75a1889e | Red Hat Enterprise Linux 6.4 | ACTIVE | |
95 | | bced783b-31d2-4637-b820-fa02522c518b | Scientific Linux 6.4 | ACTIVE | |
96 | | aab63bcf-89aa-440f-b0c7-c7a1c611914b | Ubuntu 10.04 LTS (Lucid Lynx) | ACTIVE | |
97 | | c3153cde-2d23-4186-b7da-159adbe2858b | Ubuntu 12.04 LTS (Precise Pangolin) | ACTIVE | |
98 | | ead43b0d-f84f-4bc1-8682-5b6046e69552 | Ubuntu 12.10 (Quantal Quetzal) | ACTIVE | |
99 | | 9e1a83cf-ba21-44b6-8808-5837e291cfe2 | Ubuntu 13.04 (Raring Ringtail) | ACTIVE | |
100 | | 868a0966-0553-42fe-b8b3-5cadc0e0b3c5 | Ubuntu 13.10 (Saucy Salamander) | ACTIVE | |
101 | | 59b394f6-b2e0-4f11-b7d1-7fea4abc60a0 | Vyatta Network OS 6.5R2 | ACTIVE | |
102 | | d7530109-edcf-400f-813c-9e11334a92c1 | Windows Server 2008 R2 SP1 | ACTIVE | |
103 | | 7462c004-59cb-403c-9a8d-823ce978a00c | Windows Server 2008 R2 SP1 (base install without updates) | ACTIVE | |
104 | | d1f37a43-724c-4fd4-b2c2-6f6ed822d5d2 | Windows Server 2008 R2 SP1 + SQL Server 2008 R2 SP2 Standard | ACTIVE | |
105 | | 29950004-52cf-4ef7-8a84-7e9f63b6e06f | Windows Server 2008 R2 SP1 + SQL Server 2008 R2 SP2 Web | ACTIVE | |
106 | | 693f7e97-e723-4e42-bee6-ff4160106fa0 | Windows Server 2008 R2 SP1 + SQL Server 2012 SP1 Standard | ACTIVE | |
107 | | 4f01c063-993a-43ff-b476-3aaf995d969a | Windows Server 2008 R2 SP1 + SQL Server 2012 SP1 Web | ACTIVE | |
108 | | c2f7f30d-6b0f-4d08-af20-cefcc836ecd5 | Windows Server 2008 R2 SP1 + SharePoint 2010 Foundation with SQL Server 2008 R2 Express | ACTIVE | |
109 | | 72b86dd1-6fe5-4890-8f05-f61d30f65246 | Windows Server 2008 R2 SP1 + SharePoint 2010 Foundation with SQL Server 2008 R2 SP1 Standard | ACTIVE | |
110 | | d4f4fc02-299c-4dad-9b85-0576a0336472 | Windows Server 2012 | ACTIVE | |
111 | | 68c3112f-bbef-4a17-9b4c-fb7f7444376f | Windows Server 2012 (base install without updates) | ACTIVE | |
112 | | 41af66f7-6122-48de-b79c-13c98a5febbe | Windows Server 2012 + SQL Server 2012 SP1 Standard | ACTIVE | |
113 | | a68198b3-5bef-4779-a564-3c96f64b8df3 | Windows Server 2012 + SQL Server 2012 SP1 Web | ACTIVE | |
114 | | 639ec81b-35ac-4346-a275-4f31f7bb9504 | Windows Server 2012 + SharePoint 2013 with SQL Server 2012 SP1 Standard | ACTIVE | |
115 | +--------------------------------------+----------------------------------------------------------------------------------------------+--------+--------+
116 |
117 |
118 | We're going to use flavor `2` (512 MB Standard Instance), and image `c3153cde-2d23-4186-b7da-159adbe2858b` (Ubuntu 12.04).
119 |
120 |
121 | We'll call this instance `web`, and specify that it should be on the `hackspace` network we created, with IP address 10.30.0.5.
122 |
123 | We will use the `--no-service-net` argument so that our instance does not get connected to the private network.
124 |
125 |
126 | $ nova boot --flavor 2 --image c3153cde-2d23-4186-b7da-159adbe2858b --key-name lisa --nic net-id=5593dd67-feb4-4382-be86-1b9169ecde65,v4-fixed-ip=10.30.0.5 web --no-service-net
127 |
128 | Initial output should look like this:
129 |
130 | +------------------------+--------------------------------------+
131 | | Property | Value |
132 | +------------------------+--------------------------------------+
133 | | status | BUILD |
134 | | updated | 2013-11-02T02:07:05Z |
135 | | OS-EXT-STS:task_state | scheduling |
136 | | key_name | lisa |
137 | | image | Ubuntu 12.04 LTS (Precise Pangolin) |
138 | | hostId | |
139 | | OS-EXT-STS:vm_state | building |
140 | | flavor | 512MB Standard Instance |
141 | | id | 659fe85d-a59d-4e04-9785-e2942eea1f1b |
142 | | user_id | 97f0118696f24dc18031b5f9a0cfd9df |
143 | | name | web |
144 | | adminPass | 76rGPb8a76ua |
145 | | tenant_id | 869769 |
146 | | created | 2013-11-02T02:07:05Z |
147 | | OS-DCF:diskConfig | AUTO |
148 | | accessIPv4 | |
149 | | accessIPv6 | |
150 | | progress | 0 |
151 | | OS-EXT-STS:power_state | 0 |
152 | | config_drive | |
153 | | metadata | {} |
154 | +------------------------+--------------------------------------+
155 |
156 | The `nova list` command will give you information about the status.
157 |
158 | +--------------------------------------+------+--------+------------+-------------+-------------------------------------------------------------------------------------+
159 | | ID | Name | Status | Task State | Power State | Networks |
160 | +--------------------------------------+------+--------+------------+-------------+-------------------------------------------------------------------------------------+
161 | | 659fe85d-a59d-4e04-9785-e2942eea1f1b | web | BUILD | spawning | NOSTATE | hackspace=10.30.0.2; public=162.209.109.95, 2001:4802:7800:0002:1b1e:746f:ff20:0b7a |
162 | +--------------------------------------+------+--------+------------+-------------+-------------------------------------------------------------------------------------+
163 |
164 | Eventually, the stauts will become `ACTIVE`:
165 |
166 | +--------------------------------------+------+--------+------------+-------------+-------------------------------------------------------------------------------------+
167 | | ID | Name | Status | Task State | Power State | Networks |
168 | +--------------------------------------+------+--------+------------+-------------+-------------------------------------------------------------------------------------+
169 | | 659fe85d-a59d-4e04-9785-e2942eea1f1b | web | ACTIVE | None | Running | hackspace=10.30.0.2; public=162.209.109.95, 2001:4802:7800:0002:1b1e:746f:ff20:0b7a |
170 | +--------------------------------------+------+--------+------------+-------------+-------------------------------------------------------------------------------------+
171 |
172 |
173 | Once active, you will be able to ssh as root using the lisa.key private key file you created. In the example above, the public IP address is `162.209.109.95`, in your specific case it will be different:
174 |
175 | $ ssh -i lisa.key root@162.209.109.95
176 | Warning: Permanently added '162.209.109.95' (RSA) to the list of known hosts.
177 | Welcome to Ubuntu 12.04.3 LTS (GNU/Linux 3.2.0-53-virtual x86_64)
178 |
179 | * Documentation: https://help.ubuntu.com/
180 |
181 | System information as of Sat Nov 2 02:08:45 UTC 2013
182 |
183 | System load: 0.08 Processes: 64
184 | Usage of /: 4.9% of 19.68GB Users logged in: 0
185 | Memory usage: 10% IP address for eth0: 162.209.109.95
186 | Swap usage: 0% IP address for eth1: 10.30.0.2
187 |
188 | Graph this data and manage this system at https://landscape.canonical.com/
189 |
190 |
191 | The programs included with the Ubuntu system are free software;
192 | the exact distribution terms for each program are described in the
193 | individual files in /usr/share/doc/*/copyright.
194 |
195 | Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
196 | applicable law.
197 |
198 | root@web:~#
199 |
200 | Note that there are two interfaces, eth0 has IP address 162.209.109.95 and is on the `public` network and eth1 has IP address 10.30.0.2 and is on the `hackspace` network.
201 |
202 | Don't forget to log out of the instance:
203 |
204 |
205 | root@web:~# exit
206 | logout
207 | Connection to 162.209.109.95 closed.
208 |
209 | ## Attaching a volume
210 | We're going to attach a 100 GB volume (block device) to our instance.
211 |
212 | First, we create the 100GB volume:
213 |
214 | $ nova volume-create 100
215 | +---------------------+--------------------------------------+
216 | | Property | Value |
217 | +---------------------+--------------------------------------+
218 | | status | available |
219 | | display_name | None |
220 | | attachments | [] |
221 | | availability_zone | nova |
222 | | bootable | false |
223 | | created_at | 2013-11-02T02:14:09.000000 |
224 | | display_description | None |
225 | | volume_type | SATA |
226 | | snapshot_id | None |
227 | | source_volid | None |
228 | | size | 100 |
229 | | id | 455ec395-cfab-4319-bbf0-1d061c14a7e8 |
230 | | metadata | {} |
231 | +---------------------+--------------------------------------+
232 | We should now be able to see it using `nova volume-list`
233 |
234 | $ nova volume-list
235 | +--------------------------------------+-----------+--------------+------+-------------+-------------+
236 | | ID | Status | Display Name | Size | Volume Type | Attached to |
237 | +--------------------------------------+-----------+--------------+------+-------------+-------------+
238 | | 455ec395-cfab-4319-bbf0-1d061c14a7e8 | available | None | 100 | SATA | |
239 | +--------------------------------------+-----------+--------------+------+-------------+-------------+
240 |
241 | We're going to attach this to our `web` instance. We'll use the "auto" argument to let OpenStack select the device file that is associated with the instance.
242 |
243 | $ nova volume-attach web 455ec395-cfab-4319-bbf0-1d061c14a7e8 auto
244 | +----------+--------------------------------------+
245 | | Property | Value |
246 | +----------+--------------------------------------+
247 | | device | /dev/xvdb |
248 | | serverId | 659fe85d-a59d-4e04-9785-e2942eea1f1b |
249 | | id | 455ec395-cfab-4319-bbf0-1d061c14a7e8 |
250 | | volumeId | 455ec395-cfab-4319-bbf0-1d061c14a7e8 |
251 | +----------+--------------------------------------+
252 |
253 | Here we format that volume as an ext4 file system and then mount it as /mnt/vol:
254 |
255 | root@web:~# mkfs.ext4 /dev/xvdb
256 | mke2fs 1.42 (29-Nov-2011)
257 | Filesystem label=
258 | OS type: Linux
259 | Block size=4096 (log=2)
260 | Fragment size=4096 (log=2)
261 | Stride=0 blocks, Stripe width=0 blocks
262 | 6553600 inodes, 26214400 blocks
263 | 1310720 blocks (5.00%) reserved for the super user
264 | First data block=0
265 | Maximum filesystem blocks=4294967296
266 | 800 block groups
267 | 32768 blocks per group, 32768 fragments per group
268 | 8192 inodes per group
269 | Superblock backups stored on blocks:
270 | 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
271 | 4096000, 7962624, 11239424, 20480000, 23887872
272 |
273 | Allocating group tables: done
274 | Writing inode tables: done
275 | Creating journal (32768 blocks): done
276 | Writing superblocks and filesystem accounting information: done
277 |
278 | root@web:~# mkdir /mnt/vol
279 | root@web:~# mount /dev/xvdb /mnt/vol
280 |
281 | We can confirm the size using df:
282 |
283 | root@web:~# df -h /mnt/vol
284 | Filesystem Size Used Avail Use% Mounted on
285 | /dev/xvdb 99G 188M 94G 1% /mnt/vol
286 |
287 | We can also unmount it and then detach it from the instance:
288 |
289 | root@web:~# umount /mnt/vol
290 | root@web:~# exit
291 | logout
292 | Connection to 162.209.109.95 closed.
293 | $ nova volume-detach web 455ec395-cfab-4319-bbf0-1d061c14a7e8
294 |
295 | The volume still exists, and if we had stored any files on it, those files would persist until we deleted the volume:
296 |
297 | $ nova volume-delete 455ec395-cfab-4319-bbf0-1d061c14a7e8
298 |
299 |
300 | ## Capture an instance to an image
301 |
302 | You can capture a running instance to an image, which you can deploy later.
303 |
304 |
305 | $ nova image-create web web-snapshot
306 |
307 | It will take a while to snapshot the instance to an image. You can check
308 | the status:
309 |
310 |
311 | $ nova image-show web-snapshot
312 | +------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
313 | | Property | Value |
314 | +------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
315 | | metadata com.rackspace__1__visible_rackconnect | 0 |
316 | | metadata com.rackspace__1__visible_core | 0 |
317 | | metadata instance_uuid | 659fe85d-a59d-4e04-9785-e2942eea1f1b |
318 | | metadata com.rackspace__1__options | 0 |
319 | | metadata com.rackspace__1__release_id | 1003 |
320 | | metadata com.rackspace__1__release_build_date | 2013-10-03_08-56-47 |
321 | | metadata com.rackspace__1__build_rackconnect | 1 |
322 | | metadata instance_type_swap | 512 |
323 | | metadata instance_type_memory_mb | 512 |
324 | | id | dfef31c2-d0dc-4644-9c53-d45963115310 |
325 | | metadata org.openstack__1__os_distro | com.ubuntu |
326 | | metadata com.rackspace__1__visible_managed | 0 |
327 | | metadata instance_type_rxtx_factor | 80 |
328 | | metadata os_type | linux |
329 | | metadata image_type | snapshot |
330 | | OS-DCF:diskConfig | AUTO |
331 | | metadata password_0 | RJZbqpD8bgj4TlyceXQ0WUASFIuFYkHIT30/TlWEgIEwqwfv5PAUJuDWCDbKuSEN7sZSiJfF3LTb+2ibyb3UoIgiA9KWQIbL3TuyxrchSyEZRQI3HZQn/2GQNFgif8Nr7769krmtdTvZDxaV+ZOW7JMZGn2Mcs2NTzvYE/7jQEvRA4k7LmUVfqBVbBNk5EXhgWfY3Guc7YulJ+bGsyBvroVY7RVTztFsFnaVq0XXnnROPt+bbmJBepgm+U1f7UI |
332 | | metadata password_1 | pkPyw++QUOr09k9YLj9PrsgF3IvXb33UgWUw/FRtbjyAKqskGcTH5gsxX9SnLUhsE3V1sVUVr97jBDfvgsA5wNw== |
333 | | minRam | 512 |
334 | | status | SAVING |
335 | | metadata os_distro | ubuntu |
336 | | updated | 2013-11-02T04:27:28Z |
337 | | metadata instance_type_id | 2 |
338 | | metadata instance_type_vcpu_weight | 10 |
339 | | metadata org.openstack__1__architecture | x64 |
340 | | metadata com.rackspace__1__build_core | 1 |
341 | | metadata base_image_ref | 25de7af5-1668-46fb-bd08-9974b63a4806 |
342 | | metadata com.rackspace__1__build_managed | 1 |
343 | | metadata com.rackspace__1__release_version | 7 |
344 | | metadata org.openstack__1__os_version | 12.04 |
345 | | metadata instance_type_name | 512MB Standard Instance |
346 | | progress | 50 |
347 | | metadata instance_type_flavorid | 2 |
348 | | name | web-snapshot |
349 | | metadata instance_type_vcpus | 1 |
350 | | metadata user_id | 97f0118696f24dc18031b5f9a0cfd9df |
351 | | OS-EXT-IMG-SIZE:size | 0 |
352 | | created | 2013-11-02T04:27:21Z |
353 | | minDisk | 20 |
354 | | server | 659fe85d-a59d-4e04-9785-e2942eea1f1b |
355 | | metadata instance_type_root_gb | 20 |
356 | | metadata auto_disk_config | True |
357 | | metadata com.rackspace__1__source | kickstart |
358 | | metadata instance_type_ephemeral_gb | 0 |
359 | +------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
360 |
361 | Next exercise is [object storage].
362 |
363 | [object storage]: object-storage.md
364 |
365 |
--------------------------------------------------------------------------------
/cleanup.md:
--------------------------------------------------------------------------------
1 | # Clean up
2 |
3 | ## Instances
4 |
5 | Make sure there are no instances running:
6 |
7 | $ nova list
8 |
9 | If there are, delete them:
10 |
11 | $ nova delete devstack
12 |
13 | ## Networks
14 |
15 | Make sure the only networks that remain are `public` and `private`:
16 |
17 | $ nova network-list
18 |
19 | If there are other networks, delete them:
20 |
21 | $ nova network-delete hackspace
22 |
23 | ## Volumes
24 |
25 | Make sure there are no volumes remainig:
26 |
27 | $ nova volume-list
28 |
29 | If there are, delete them:
30 |
31 | $ nova volume-delete 455ec395-cfab-4319-bbf0-1d061c14a7e8
32 |
33 | ## Images
34 |
35 | Make sure there are no images you created remaining:
36 |
37 | $ nova image-list
38 |
39 | If there are images you created, delete them:
40 |
41 | $ nova image-delete web-snapshot
42 |
43 | ## Object storage
44 |
45 | Make sure there are no containers remaining:
46 |
47 | $ swift list
48 |
49 | If there are, delete them:
50 |
51 | $ swift delete hackspace
52 |
--------------------------------------------------------------------------------
/dashboard.md:
--------------------------------------------------------------------------------
1 | # Dashboard
2 |
3 | In this exercise, you will use the OpenStack Dashboard to create a new security
4 | group, start an instance, attach a floating IP, and attach a volume.
5 |
6 | You should now be able to access the dashboard by pointing your web browser
7 | at the public IP of your instance.
8 |
9 | * Username: demo
10 | * Password: (see `ADMIN_PASSWORD` variable in `/opt/stack/devstack/localrc`)
11 |
12 | ## Create a security group that allows ssh and ping
13 |
14 | We are going to create a new security group that only allows ssh (port 22)
15 | and ping (icmp) traffic.
16 |
17 |
18 | 1. Click "CURRENT PROJECT" at the left and select "demo"
19 |
20 | 1. Click "Access & Security" at the left.
21 |
22 | 1. Click "Create Security Group"
23 |
24 | 1. Fill in the following fields:
25 | * Name: ssh
26 | * Description: allow ssh and ping
27 |
28 | 1. Click "Create Security Group"
29 |
30 | It may take a few seconds, but eventually the new security group will
31 | appear in the Security Groups table.
32 |
33 | 1. Click "Edit Rules" on the "ssh" Security group
34 |
35 | 1. Click "Add Rule"
36 |
37 | 1. Fill in the following fields:
38 | * Rule: Custom TCP Rule
39 | * Direction: Ingress
40 | * Open Port: Port
41 | * Port: 22
42 | * Remote: CDIR
43 | * CIDR: 0.0.0.0/0
44 |
45 | 1. Click "Add"
46 |
47 | 1. Click "Add Rule"
48 |
49 | 1. Fill in the following fields
50 | * Rule: ALL ICMP
51 | * Direction: Ingress
52 | * Remote: CIDR
53 | * CIDR: 0.0.0.0/0
54 |
55 | 1. Click "Add"
56 |
57 |
58 |
59 | ## Launch an instance inside of DevStack
60 |
61 | Make sure the CURRENT project is on "demo".
62 |
63 |
64 | 1. Click the "Instances" link on the left, and click "Launch instance" at the top-right
65 | * Availability Zone: nova
66 | * Instance Name: test
67 | * Flavor: m1.tiny
68 | * Instance Count: 1
69 | * Instance Boot Source: Boot from image.
70 | * Image Name: cirros-0.3.1-x86_64-uec (24.0 MB)
71 |
72 | 
73 |
74 | 1. Click "Access & Security"
75 |
76 | 1. Under "Security Groups", select "ssh" and unselect "default"
77 |
78 | We aren't going to specify a keypair in this case, since we'll be logging
79 | into the instance with user name and password. However, in typical usage,
80 | you'd specify a public ssh key that you'd use to ssh into it.
81 |
82 | 1. Click "Networking"
83 |
84 | 1. Click the blue "+" on the "private" in "Available networks". It should move to "Selected Networks"
85 |
86 | 
87 |
88 | 1. Click "Launch"
89 |
90 | ## Allocate a floating IP and attach to an instance
91 |
92 | By default, OpenStack instances aren't reachable without a floating IP.
93 |
94 |
95 | 1. At the "Instances" view, click "More" under Actions and choose "Associate
96 | floating IP".
97 | tw
98 | 
99 |
100 | 1. Click the "+" next to "No IP addresses available" to alllocate a new
101 | floating IP.
102 |
103 | 
104 |
105 | 1. Click "Allocate IP" to allocate an IP address from the "public" pool.
106 |
107 | 1. Click "Associate" to associate the IP address with the instance.
108 |
109 | 1. Wait a few seconds, then reload your web browser
110 |
111 | You should eventually see two IP addresses in the "IP address field which are most likely:
112 |
113 | * 10.0.0.3
114 | * 172.24.4.227
115 |
116 | `10.0.0.3` is your fixed IP, and `172.24.4.227` if your floating IP.
117 |
118 | Try to ssh to the floating IP address: 172.24.4.227 as the user `cirros`:
119 |
120 | $ ssh cirros@172.24.4.227
121 |
122 |
123 | The password is: `cubswin:)`
124 |
125 | You should see the following output:
126 |
127 | The authenticity of host '172.24.4.227 (172.24.4.227)' can't be established.
128 | RSA key fingerprint is b4:6f:8b:86:e8:8b:73:56:ac:3d:c2:ab:57:7e:eb:7f.
129 | Are you sure you want to continue connecting (yes/no)? yes
130 | Warning: Permanently added '172.24.4.227' (RSA) to the list of known hosts.
131 | cirros@172.24.4.227's password:
132 | $
133 |
134 | ## Create and attach a volume
135 |
136 | In the dashboard:
137 |
138 | 1. Click "Volumes" at the left
139 | 1. Click "Create Volume"
140 | 1. Name it "myvolume", of size 1 GB. Leave other values as defaults.
141 | 1. Click "Create Volume"
142 |
143 | When the volume status becomes "Available":
144 |
145 | 1. Click "Edit Attachments"
146 | 1. Select "test" as the instance
147 | 1. Specify "/dev/vdb" as the device name
148 | 1. Click "Attach Volume"
149 |
150 | Inside of your cirros instance, you should now see a /dev/vdb device. You can
151 | format it and mount it as a drive.
152 |
153 | $ sudo mkfs.ext4 /dev/vdb
154 | $ sudo mount /dev/vdb /mnt
155 |
156 | Exit the cirros instance:
157 |
158 | $ exit
159 |
160 |
161 | ## Add a file to object store
162 |
163 | In the dashboard:
164 |
165 | 1. Click "Containers" at the left
166 | 1. Click the "Create Container" button
167 | 1. Name it "mycontainer"
168 | 1. Click the "Upload Object" button
169 | 1. Set Object Name: logo.png, click "Browse..." and choose the Openstack logo file downloaded earlier.
170 | 1. Click "Upload Object" button.
171 |
172 | The "logo.png" file should appear in the dashboard.
173 |
174 |
175 | For the rest of the exercises, make sure you are logged in to the Rackspace
176 | virtual machine instance ("devstack") when issuing the commands.
177 |
178 | Next exercise is the [Under the hood: compute].
179 |
180 | [Under the hood: compute]: under-the-hood-compute.md
181 |
--------------------------------------------------------------------------------
/devstack.md:
--------------------------------------------------------------------------------
1 | # DevStack
2 |
3 | DevStack is a single-node OpenStack deployment intended for development use.
4 | In this exercise, we'll do a DevStack deployment of the Havana release of
5 | OpenStack.
6 |
7 | We'll be using this DevStack deployment for the additional exercises as well.
8 |
9 | ## Launch an instance on Rackspace
10 |
11 | We'll use an 8GB standard instance on Ubuntu 12.04:
12 |
13 | $ nova boot --flavor 6 --image c3153cde-2d23-4186-b7da-159adbe2858b --key-name lisa devstack
14 |
15 | Output should look like:
16 |
17 | +------------------------+--------------------------------------+
18 | | Property | Value |
19 | +------------------------+--------------------------------------+
20 | | status | BUILD |
21 | | updated | 2013-11-04T04:15:56Z |
22 | | OS-EXT-STS:task_state | scheduling |
23 | | key_name | lisa |
24 | | image | Ubuntu 12.04 LTS (Precise Pangolin) |
25 | | hostId | |
26 | | OS-EXT-STS:vm_state | building |
27 | | flavor | 8GB Standard Instance |
28 | | id | 7643b6d2-5782-435a-9056-1e82ac51c853 |
29 | | user_id | 97f0118696f24dc18031b5f9a0cfd9df |
30 | | name | devstack |
31 | | adminPass | Y9FPzmiVbnF9 |
32 | | tenant_id | 869769 |
33 | | created | 2013-11-04T04:15:56Z |
34 | | OS-DCF:diskConfig | AUTO |
35 | | accessIPv4 | |
36 | | accessIPv6 | |
37 | | progress | 0 |
38 | | OS-EXT-STS:power_state | 0 |
39 | | config_drive | |
40 | | metadata | {} |
41 | +------------------------+--------------------------------------+
42 |
43 | You can check the status by doing:
44 |
45 | $ nova show devstack
46 |
47 | The "progress" field will tell you the % complete. When the status reaches
48 | `ACTIVE`, the server is ready.
49 |
50 | ## SSH into the instance
51 |
52 | If the IP address is 162.209.96.154, ssh by doing:
53 |
54 | $ ssh -i lisa.key root@162.209.96.154
55 |
56 | ## Install git
57 |
58 | Once inside the instance, install git:
59 |
60 | # apt-get install -y git
61 |
62 | ## Grab DevStack
63 |
64 | Grab DevStack and switch to the stable/havana branch:
65 |
66 | # git clone https://github.com/openstack-dev/devstack.git -b stable/havana
67 |
68 | ## Create a "stack" user
69 |
70 | DevStack can't run as root, so create a "stack" user using the script that
71 | comes with DevStack:
72 |
73 | # chmod +x /root/devstack/tools/create-stack-user.sh
74 | # /root/devstack/tools/create-stack-user.sh
75 |
76 | Output should be:
77 |
78 | Creating a group called stack
79 | Creating a user called stack
80 | Giving stack user passwordless sudo privileges
81 |
82 | ## Switch to the stack user
83 |
84 | # sudo -u stack -i
85 |
86 | ## Check out devstack as stack user
87 |
88 | $ git clone https://github.com/openstack-dev/devstack.git -b stable/havana
89 |
90 |
91 | ## Create /opt/stack/devstack/local.conf
92 |
93 | Create `/opt/stack/devstack/local.conf` with the following contents:
94 |
95 |
96 | ```
97 | [[local|localrc]]
98 | SCREEN_LOGDIR=/opt/stack/logs
99 |
100 | # Enable Neutron
101 | disable_service n-net
102 | enable_service q-svc
103 | enable_service q-agt
104 | enable_service q-dhcp
105 | enable_service q-l3
106 | enable_service q-meta
107 | enable_service neutron
108 |
109 | # Use Neutron for security groups
110 | LIBVIRT_FIREWALL_DRIVER=nova.virt.firewall.NoopFirewallDriver
111 | Q_USE_SECGROUP=True
112 |
113 | # Enable Swift
114 | enable_service s-proxy
115 | enable_service s-object
116 | enable_service s-container
117 | enable_service s-account
118 |
119 | # Disable tempest
120 | disable_service tempest
121 | ```
122 |
123 |
124 | ## Run stack.sh as stack user
125 |
126 | $ cd ~/devstack
127 | $ ./stack.sh
128 |
129 | Hit enter each time it asks you a question about specifying a password to
130 | tell DevStack to just generate passwords randomly.
131 |
132 | It will then proceed to install OpenStack on the single node. This will take
133 | about twelve minutes. The output should look like this, with a different
134 | IP address.
135 |
136 | Horizon is now available at http://162.209.96.154/
137 | Keystone is serving at http://162.209.96.154:5000/v2.0/
138 | Examples on using novaclient command line is in exercise.sh
139 | The default users are: admin and demo
140 | The password: 08a85950ecd4cff5e631
141 | This is your host ip: 162.209.96.154
142 | stack.sh completed in 743 seconds.
143 |
144 | The password is also set as `ADMIN_PASSWORD` in the localrc file.
145 |
146 | Next exercise is the [Dashboard].
147 |
148 | [Dashboard]: dashboard.md
149 |
--------------------------------------------------------------------------------
/diagrams.graffle:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | ActiveLayerIndex
6 | 0
7 | ApplicationVersion
8 |
9 | com.omnigroup.OmniGrafflePro.MacAppStore
10 | 139.18
11 |
12 | AutoAdjust
13 |
14 | BackgroundGraphic
15 |
16 | Bounds
17 | {{0, 0}, {576, 733}}
18 | Class
19 | SolidGraphic
20 | ID
21 | 2
22 | Style
23 |
24 | shadow
25 |
26 | Draws
27 | NO
28 |
29 | stroke
30 |
31 | Draws
32 | NO
33 |
34 |
35 |
36 | BaseZoom
37 | 0
38 | CanvasOrigin
39 | {0, 0}
40 | ColumnAlign
41 | 1
42 | ColumnSpacing
43 | 36
44 | CreationDate
45 | 2013-11-06 01:13:34 +0000
46 | Creator
47 | Lorin Hochstein
48 | DisplayScale
49 | 1 0/72 in = 1 0/72 in
50 | GraphDocumentVersion
51 | 8
52 | GraphicsList
53 |
54 |
55 | Bounds
56 | {{430.5, 579.21875}, {127, 14}}
57 | Class
58 | ShapedGraphic
59 | FitText
60 | YES
61 | Flow
62 | Resize
63 | FontInfo
64 |
65 | Font
66 | Helvetica
67 | Size
68 | 12
69 |
70 | ID
71 | 64
72 | Shape
73 | Rectangle
74 | Style
75 |
76 | fill
77 |
78 | Draws
79 | NO
80 |
81 | shadow
82 |
83 | Draws
84 | NO
85 |
86 | stroke
87 |
88 | Draws
89 | NO
90 |
91 |
92 | Text
93 |
94 | Pad
95 | 0
96 | Text
97 | {\rtf1\ansi\ansicpg1252\cocoartf1265
98 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
99 | {\colortbl;\red255\green255\blue255;}
100 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
101 |
102 | \f0\b\fs24 \cf0 Not used by DevStack}
103 | VerticalPad
104 | 0
105 |
106 | Wrap
107 | NO
108 |
109 |
110 | Bounds
111 | {{2, 564}, {569, 166}}
112 | Class
113 | ShapedGraphic
114 | ID
115 | 63
116 | Shape
117 | Rectangle
118 | Style
119 |
120 | fill
121 |
122 | Draws
123 | NO
124 |
125 | stroke
126 |
127 | Pattern
128 | 1
129 |
130 |
131 |
132 |
133 | Bounds
134 | {{415, 322}, {61, 14}}
135 | Class
136 | ShapedGraphic
137 | FitText
138 | YES
139 | Flow
140 | Resize
141 | ID
142 | 60
143 | Shape
144 | Rectangle
145 | Style
146 |
147 | fill
148 |
149 | Draws
150 | NO
151 |
152 | shadow
153 |
154 | Draws
155 | NO
156 |
157 | stroke
158 |
159 | Draws
160 | NO
161 |
162 |
163 | Text
164 |
165 | Align
166 | 0
167 | Pad
168 | 0
169 | Text
170 | {\rtf1\ansi\ansicpg1252\cocoartf1265
171 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
172 | {\colortbl;\red255\green255\blue255;}
173 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
174 |
175 | \f0\fs24 \cf0 10.0.0.2/24}
176 | VerticalPad
177 | 0
178 |
179 | Wrap
180 | NO
181 |
182 |
183 | Bounds
184 | {{213.5, 602}, {87, 14}}
185 | Class
186 | ShapedGraphic
187 | FitText
188 | YES
189 | Flow
190 | Resize
191 | ID
192 | 55
193 | Shape
194 | Rectangle
195 | Style
196 |
197 | fill
198 |
199 | Draws
200 | NO
201 |
202 | shadow
203 |
204 | Draws
205 | NO
206 |
207 | stroke
208 |
209 | Draws
210 | NO
211 |
212 |
213 | Text
214 |
215 | Align
216 | 0
217 | Pad
218 | 0
219 | Text
220 | {\rtf1\ansi\ansicpg1252\cocoartf1265
221 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
222 | {\colortbl;\red255\green255\blue255;}
223 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
224 |
225 | \f0\fs24 \cf0 10.176.67.33/18}
226 | VerticalPad
227 | 0
228 |
229 | Wrap
230 | NO
231 |
232 |
233 | Bounds
234 | {{35.5, 591}, {107, 14}}
235 | Class
236 | ShapedGraphic
237 | FitText
238 | YES
239 | Flow
240 | Resize
241 | ID
242 | 54
243 | Shape
244 | Rectangle
245 | Style
246 |
247 | fill
248 |
249 | Draws
250 | NO
251 |
252 | shadow
253 |
254 | Draws
255 | NO
256 |
257 | stroke
258 |
259 | Draws
260 | NO
261 |
262 |
263 | Text
264 |
265 | Align
266 | 0
267 | Pad
268 | 0
269 | Text
270 | {\rtf1\ansi\ansicpg1252\cocoartf1265
271 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
272 | {\colortbl;\red255\green255\blue255;}
273 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
274 |
275 | \f0\fs24 \cf0 162.209.104.176/24}
276 | VerticalPad
277 | 0
278 |
279 | Wrap
280 | NO
281 |
282 |
283 | Bounds
284 | {{215.5, 704.25}, {103, 14}}
285 | Class
286 | ShapedGraphic
287 | FitText
288 | YES
289 | Flow
290 | Resize
291 | ID
292 | 53
293 | Shape
294 | Rectangle
295 | Style
296 |
297 | fill
298 |
299 | Draws
300 | NO
301 |
302 | shadow
303 |
304 | Draws
305 | NO
306 |
307 | stroke
308 |
309 | Draws
310 | NO
311 |
312 |
313 | Text
314 |
315 | Pad
316 | 0
317 | Text
318 | {\rtf1\ansi\ansicpg1252\cocoartf1265
319 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
320 | {\colortbl;\red255\green255\blue255;}
321 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
322 |
323 | \f0\fs24 \cf0 private (rackspace)}
324 | VerticalPad
325 | 0
326 |
327 | Wrap
328 | NO
329 |
330 |
331 | Bounds
332 | {{35.5, 680}, {98, 14}}
333 | Class
334 | ShapedGraphic
335 | FitText
336 | YES
337 | Flow
338 | Resize
339 | ID
340 | 52
341 | Shape
342 | Rectangle
343 | Style
344 |
345 | fill
346 |
347 | Draws
348 | NO
349 |
350 | shadow
351 |
352 | Draws
353 | NO
354 |
355 | stroke
356 |
357 | Draws
358 | NO
359 |
360 |
361 | Text
362 |
363 | Pad
364 | 0
365 | Text
366 | {\rtf1\ansi\ansicpg1252\cocoartf1265
367 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
368 | {\colortbl;\red255\green255\blue255;}
369 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
370 |
371 | \f0\fs24 \cf0 public (rackspace)}
372 | VerticalPad
373 | 0
374 |
375 | Wrap
376 | NO
377 |
378 |
379 | Class
380 | LineGraphic
381 | Head
382 |
383 | ID
384 | 49
385 | Position
386 | 0.5
387 |
388 | ID
389 | 51
390 | Points
391 |
392 | {261, 656.625}
393 | {261, 698.375}
394 |
395 | Style
396 |
397 | stroke
398 |
399 | HeadArrow
400 | 0
401 | Legacy
402 |
403 | TailArrow
404 | 0
405 |
406 |
407 | Tail
408 |
409 | ID
410 | 45
411 |
412 |
413 |
414 | Class
415 | LineGraphic
416 | Head
417 |
418 | ID
419 | 47
420 | Position
421 | 0.50434780120849609
422 |
423 | ID
424 | 50
425 | Points
426 |
427 | {84.699998539924565, 644.74997080070409}
428 | {84.999997138977051, 672.5}
429 |
430 | Style
431 |
432 | stroke
433 |
434 | HeadArrow
435 | 0
436 | Legacy
437 |
438 | TailArrow
439 | 0
440 |
441 |
442 | Tail
443 |
444 | ID
445 | 44
446 |
447 |
448 |
449 | Class
450 | LineGraphic
451 | ID
452 | 49
453 | Points
454 |
455 | {203.5, 698.375}
456 | {318.5, 698.375}
457 |
458 | Style
459 |
460 | stroke
461 |
462 | HeadArrow
463 | 0
464 | Legacy
465 |
466 | TailArrow
467 | 0
468 | Width
469 | 3
470 |
471 |
472 |
473 |
474 | Class
475 | LineGraphic
476 | ID
477 | 47
478 | Points
479 |
480 | {27, 672.5}
481 | {142, 672.5}
482 |
483 | Style
484 |
485 | stroke
486 |
487 | HeadArrow
488 | 0
489 | Legacy
490 |
491 | TailArrow
492 | 0
493 | Width
494 | 3
495 |
496 |
497 |
498 |
499 | Bounds
500 | {{412, 641}, {87, 36}}
501 | Class
502 | ShapedGraphic
503 | ID
504 | 46
505 | Shape
506 | RoundRect
507 | Style
508 |
509 | Text
510 |
511 | Text
512 | {\rtf1\ansi\ansicpg1252\cocoartf1265
513 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
514 | {\colortbl;\red255\green255\blue255;}
515 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
516 |
517 | \f0\fs24 \cf0 virbr0}
518 |
519 |
520 |
521 | Bounds
522 | {{239, 620.125}, {44, 36}}
523 | Class
524 | ShapedGraphic
525 | ID
526 | 45
527 | Shape
528 | Rectangle
529 | Text
530 |
531 | Text
532 | {\rtf1\ansi\ansicpg1252\cocoartf1265
533 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
534 | {\colortbl;\red255\green255\blue255;}
535 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
536 |
537 | \f0\fs24 \cf0 eth1}
538 |
539 |
540 |
541 | Bounds
542 | {{62.5, 608.25}, {44, 36}}
543 | Class
544 | ShapedGraphic
545 | ID
546 | 44
547 | Shape
548 | Rectangle
549 | Text
550 |
551 | Text
552 | {\rtf1\ansi\ansicpg1252\cocoartf1265
553 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
554 | {\colortbl;\red255\green255\blue255;}
555 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
556 |
557 | \f0\fs24 \cf0 eth0}
558 |
559 |
560 |
561 | Bounds
562 | {{382, 82}, {44, 14}}
563 | Class
564 | ShapedGraphic
565 | FitText
566 | YES
567 | Flow
568 | Resize
569 | ID
570 | 43
571 | Shape
572 | Rectangle
573 | Style
574 |
575 | fill
576 |
577 | Draws
578 | NO
579 |
580 | shadow
581 |
582 | Draws
583 | NO
584 |
585 | stroke
586 |
587 | Draws
588 | NO
589 |
590 |
591 | Text
592 |
593 | Align
594 | 0
595 | Pad
596 | 0
597 | Text
598 | {\rtf1\ansi\ansicpg1252\cocoartf1265
599 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
600 | {\colortbl;\red255\green255\blue255;}
601 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
602 |
603 | \f0\fs24 \cf0 10.0.0.3}
604 | VerticalPad
605 | 0
606 |
607 | Wrap
608 | NO
609 |
610 |
611 | Bounds
612 | {{247, 517.4375}, {28, 14}}
613 | Class
614 | ShapedGraphic
615 | FitText
616 | YES
617 | Flow
618 | Resize
619 | ID
620 | 42
621 | Shape
622 | Rectangle
623 | Style
624 |
625 | fill
626 |
627 | Draws
628 | NO
629 |
630 | shadow
631 |
632 | Draws
633 | NO
634 |
635 | stroke
636 |
637 | Draws
638 | NO
639 |
640 |
641 | Text
642 |
643 | Pad
644 | 0
645 | Text
646 | {\rtf1\ansi\ansicpg1252\cocoartf1265
647 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
648 | {\colortbl;\red255\green255\blue255;}
649 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
650 |
651 | \f0\fs24 \cf0 br-ex}
652 | VerticalPad
653 | 0
654 |
655 | Wrap
656 | NO
657 |
658 |
659 | Bounds
660 | {{116, 516}, {87, 14}}
661 | Class
662 | ShapedGraphic
663 | FitText
664 | YES
665 | Flow
666 | Resize
667 | ID
668 | 41
669 | Shape
670 | Rectangle
671 | Style
672 |
673 | fill
674 |
675 | Draws
676 | NO
677 |
678 | shadow
679 |
680 | Draws
681 | NO
682 |
683 | stroke
684 |
685 | Draws
686 | NO
687 |
688 |
689 | Text
690 |
691 | Align
692 | 0
693 | Pad
694 | 0
695 | Text
696 | {\rtf1\ansi\ansicpg1252\cocoartf1265
697 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
698 | {\colortbl;\red255\green255\blue255;}
699 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
700 |
701 | \f0\fs24 \cf0 172.24.4.227/32}
702 | VerticalPad
703 | 0
704 |
705 | Wrap
706 | NO
707 |
708 |
709 | Bounds
710 | {{116, 502}, {87, 14}}
711 | Class
712 | ShapedGraphic
713 | FitText
714 | YES
715 | Flow
716 | Resize
717 | ID
718 | 40
719 | Shape
720 | Rectangle
721 | Style
722 |
723 | fill
724 |
725 | Draws
726 | NO
727 |
728 | shadow
729 |
730 | Draws
731 | NO
732 |
733 | stroke
734 |
735 | Draws
736 | NO
737 |
738 |
739 | Text
740 |
741 | Align
742 | 0
743 | Pad
744 | 0
745 | Text
746 | {\rtf1\ansi\ansicpg1252\cocoartf1265
747 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
748 | {\colortbl;\red255\green255\blue255;}
749 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
750 |
751 | \f0\fs24 \cf0 172.24.4.226/28}
752 | VerticalPad
753 | 0
754 |
755 | Wrap
756 | NO
757 |
758 |
759 | Bounds
760 | {{175, 322}, {61, 14}}
761 | Class
762 | ShapedGraphic
763 | FitText
764 | YES
765 | Flow
766 | Resize
767 | ID
768 | 39
769 | Shape
770 | Rectangle
771 | Style
772 |
773 | fill
774 |
775 | Draws
776 | NO
777 |
778 | shadow
779 |
780 | Draws
781 | NO
782 |
783 | stroke
784 |
785 | Draws
786 | NO
787 |
788 |
789 | Text
790 |
791 | Align
792 | 0
793 | Pad
794 | 0
795 | Text
796 | {\rtf1\ansi\ansicpg1252\cocoartf1265
797 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
798 | {\colortbl;\red255\green255\blue255;}
799 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
800 |
801 | \f0\fs24 \cf0 10.0.0.1/24}
802 | VerticalPad
803 | 0
804 |
805 | Wrap
806 | NO
807 |
808 |
809 | Bounds
810 | {{154.5, 381.75}, {85, 56}}
811 | Class
812 | ShapedGraphic
813 | FitText
814 | YES
815 | Flow
816 | Resize
817 | ID
818 | 26
819 | Shape
820 | Rectangle
821 | Style
822 |
823 | fill
824 |
825 | Draws
826 | NO
827 |
828 | shadow
829 |
830 | Draws
831 | NO
832 |
833 | stroke
834 |
835 | Draws
836 | NO
837 |
838 |
839 | Text
840 |
841 | Pad
842 | 0
843 | Text
844 | {\rtf1\ansi\ansicpg1252\cocoartf1265
845 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
846 | {\colortbl;\red255\green255\blue255;}
847 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
848 |
849 | \f0\fs24 \cf0 qrouter-\
850 | 9e5f2802-2462-\
851 | 4f5c-a95b-\
852 | c60b99744451}
853 | VerticalPad
854 | 0
855 |
856 | Wrap
857 | NO
858 |
859 |
860 | Bounds
861 | {{143, 336}, {121, 24}}
862 | Class
863 | ShapedGraphic
864 | ID
865 | 38
866 | Shape
867 | Rectangle
868 | Text
869 |
870 | Text
871 | {\rtf1\ansi\ansicpg1252\cocoartf1265
872 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
873 | {\colortbl;\red255\green255\blue255;}
874 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
875 |
876 | \f0\fs24 \cf0 qr-0d5ea29d-36}
877 |
878 |
879 |
880 | Bounds
881 | {{341, 517.4375}, {111, 14}}
882 | Class
883 | ShapedGraphic
884 | FitText
885 | YES
886 | Flow
887 | Resize
888 | ID
889 | 37
890 | Shape
891 | Rectangle
892 | Style
893 |
894 | fill
895 |
896 | Draws
897 | NO
898 |
899 | shadow
900 |
901 | Draws
902 | NO
903 |
904 | stroke
905 |
906 | Draws
907 | NO
908 |
909 |
910 | Text
911 |
912 | Pad
913 | 0
914 | Text
915 | {\rtf1\ansi\ansicpg1252\cocoartf1265
916 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
917 | {\colortbl;\red255\green255\blue255;}
918 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
919 |
920 | \f0\fs24 \cf0 Open vSwitch bridge}
921 | VerticalPad
922 | 0
923 |
924 | Wrap
925 | NO
926 |
927 |
928 | Bounds
929 | {{112, 476.875}, {121, 24}}
930 | Class
931 | ShapedGraphic
932 | ID
933 | 34
934 | Shape
935 | Rectangle
936 | Text
937 |
938 | Text
939 | {\rtf1\ansi\ansicpg1252\cocoartf1265
940 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
941 | {\colortbl;\red255\green255\blue255;}
942 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
943 |
944 | \f0\fs24 \cf0 qg-411a1cf8-f4}
945 |
946 |
947 |
948 | Bounds
949 | {{385, 336}, {121, 24}}
950 | Class
951 | ShapedGraphic
952 | ID
953 | 29
954 | Shape
955 | Rectangle
956 | Text
957 |
958 | RTFD
959 |
960 | BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
961 | ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
962 | bmcBlIQBKwPvv7yGhAJpSQEBkoSEhAxOU0RpY3Rpb25h
963 | cnkAlIQBaQKShJaWEE5TUGFyYWdyYXBoU3R5bGWGkoSE
964 | hBdOU011dGFibGVQYXJhZ3JhcGhTdHlsZQCEhBBOU1Bh
965 | cmFncmFwaFN0eWxlAJSEBENDQFMCAIUAhpKElpYMTlNB
966 | dHRhY2htZW50hpKEhIQQTlNUZXh0QXR0YWNobWVudACU
967 | hAJjQACEhIQNTlNGaWxlV3JhcHBlci6UkoSEhA1OU011
968 | dGFibGVEYXRhAISEBk5TRGF0YQCUmYGGMIQIWzEyNDIy
969 | Y11ydGZkAAAAAAMAAAAEAAAAAgAAAC4uEwAAAF9fQFBy
970 | ZWZlcnJlZE5hbWVAX18XAAAAX19AVVRGOFByZWZlcnJl
971 | ZE5hbWVAX18BAAAALssvAAAcAAAAHAAAACYAAAABAAAA
972 | AAAAgCggAACTDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
973 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
974 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
975 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
976 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
977 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
978 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
979 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
980 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
981 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
982 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
983 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
984 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
985 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
986 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
987 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
988 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
989 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
990 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
991 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
992 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
993 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
994 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
995 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
996 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
997 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
998 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
999 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1000 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1001 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1002 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1003 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1004 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1005 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1006 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1007 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1008 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1009 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1010 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1011 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1012 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1013 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1014 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1015 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1016 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1017 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1018 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1019 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1020 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1021 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1022 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1023 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1024 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1025 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1026 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1027 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1028 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1029 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1030 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1031 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1032 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1033 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1034 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1035 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1036 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1037 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1038 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1039 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1040 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1041 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1042 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1043 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1044 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1045 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1046 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1047 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1048 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1049 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1050 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1051 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1052 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1053 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1054 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1055 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1056 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1057 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1058 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1059 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1060 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1061 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1062 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1063 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1064 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1065 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1066 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1067 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1068 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1069 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1070 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1071 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1072 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1073 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1074 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1075 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1076 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1077 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1078 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1079 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1080 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1081 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1082 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1083 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1084 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1085 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1086 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1087 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1088 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1089 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1090 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1091 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1092 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
1093 | AAAAAAAAJVBERi0xLjMKJcTl8uXrp/Og0MTGCjQgMCBv
1094 | YmoKPDwgL0xlbmd0aCA1IDAgUiAvRmlsdGVyIC9GbGF0
1095 | ZURlY29kZSA+PgpzdHJlYW0KeAE9j7EKwjAURfd+xRmT
1096 | IbYvRFtXxcWt8MBBHDToVrHG/8dQTXjL4dx7hzczMtPl
1097 | GwYk8L5z4km7T0JMWaeYc1kaTgiBnjixU8T/pcdlHRqd
1098 | aFUll/XBGfOxdCuPuVrcAq8CUuBWoJrtzzSmL1HthGLW
1099 | BVydbSwX9MhB8z/jF29WKhUKZW5kc3RyZWFtCmVuZG9i
1100 | ago1IDAgb2JqCjEzMQplbmRvYmoKMiAwIG9iago8PCAv
1101 | VHlwZSAvUGFnZSAvUGFyZW50IDMgMCBSIC9SZXNvdXJj
1102 | ZXMgNiAwIFIgL0NvbnRlbnRzIDQgMCBSIC9NZWRpYUJv
1103 | eCBbMCAwIDg4IDE0XQo+PgplbmRvYmoKNiAwIG9iago8
1104 | PCAvUHJvY1NldCBbIC9QREYgL1RleHQgXSAvQ29sb3JT
1105 | cGFjZSA8PCAvQ3MxIDcgMCBSID4+IC9Gb250IDw8IC9U
1106 | VDEgOCAwIFIKPj4gPj4KZW5kb2JqCjkgMCBvYmoKPDwg
1107 | L0xlbmd0aCAxMCAwIFIgL04gMSAvQWx0ZXJuYXRlIC9E
1108 | ZXZpY2VHcmF5IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+
1109 | CnN0cmVhbQp4AYVVXWgcVRQ+uzM7eYlDEW1LK3XwryGk
1110 | YVKtJha12026u03YrpuNNlWq09nZ7nQnM+Od2bQJfQqC
1111 | b1oQxFdFfBItiNBqxOTFvrRUqIkUiyAotFhBEPogCn5n
1112 | drI7G5HMcGe+Ofc7557z3XsYor5lw/edtEY054YiX8nO
1113 | Hp89ofV9R2lSqZ9wGWbgZ8vlKcau51r87r3urVOKLTf2
1114 | cazeuS2/MjUrMMFawfBqgTlHlNKJlGHTFyFR3+uwj54N
1115 | fcbvAz/QrFZywJ8Aq7EvID2Yt1xL2KaWF8aCVhZe3XaS
1116 | uW41zzG2vOacFufK1x6M/qA5PYn3IHI+VzPGGT8F/KFp
1117 | TEwDDwGv++HhSpuTTreaM9m2PT1UF0dmYvvxRqvAeJgo
1118 | vbTYqL4MvA34onuqdCzmr5hB7gTwY7DfbVhF3g+NSNpm
1119 | h8UqMHwlXXgV5oMjnaxZ4xPAzwIvNb1JzmEn8HIwP812
1120 | 5n+/2MiVgLGWnD5jHC0Dbwe+33LyzEccecAPyxxzFHjK
1121 | dUq8LuqV37SCqMYB4E/DRrUQ89dDUWXfR2D/q24fKQJD
1122 | h8xDDVFgO/LJFHwnOk9PAy+JVoVrfwL4kiEm8sCImfnJ
1123 | cmdYQ2BFoZdSBlnk0Sk8TXLpH9QekE3zEfJJYK6Ob4fy
1124 | YLgYAsMB6zTQrxRinq3sH1ATNvZlRoBnGUPE/hrV8NX2
1125 | szHLiCPejnzMTdwc4ri0SAZ47ZXvxDxP3iHr8pMYB+Up
1126 | +Tl5VB4jTX5BPiQ/L4/DOiYfjHwEfBcQtVsBr3gHUduR
1127 | 3qBWTz6ryDmEj0M/g+NFGQbI4G9EaEbMhBoXdrUGfP+9
1128 | t5fEa7Z5/Z0/Eupwbc24zq4+CV86llQ70r+2We3ML5nb
1129 | mTU8b2ZuJarRMj9mbuG+2VOXF69moz4bmW8oy9rb2FWv
1130 | h72xA5tZWVTuRHsyh2pZfd5RVp+VbAGHeNZhdWlfMuKV
1131 | 88s7O7wF0tbkS6/e6L9y/n81YX1YZ4sSqtTdC7t8/+TH
1132 | rKb1VuleiZaG9Iv6Xf0j/Qf9d31N/wDoN+ld6Qvpa+my
1133 | 9KV0lTRpRVqVvpG+lT6TvsLX57CuSpeRW/LUtU9Z5/Qg
1134 | 0/Y5NOMTxvXwKQ6IFWA218/WDaXOYK6bKZ/tzSuwzt0T
1135 | 3VlLPazuVh9Vx9WH1cfVKXVQPaAeUneo+zFG1IK6FzO7
1136 | OypxT7HWNt5lvDf6zqbZSKv2jnBWDagnkKWBu5sX96jd
1137 | iYY4qfugM0frcniNdnfbiKLF3euhYw2aQcU2nY20C/Dt
1138 | 4Bu7+R9v7klkl3oFJ8uW98gjcjHuwax8AF042dOPo9yl
1139 | yoQyrmRJUwaVMWVEOco4qpU7VFP2YnYMz4lk9oie4PQo
1140 | gr9PaJ3Df4so5/kLwj7dCLX9uv6MlsVv0tKKrjk8pBmO
1141 | o0VTgSaswBLzVm2Y+B/MfkR/vhj9W1Pbr5otMd+2USp1
1142 | jehf+rqHewplbmRzdHJlYW0KZW5kb2JqCjEwIDAgb2Jq
1143 | CjEwODgKZW5kb2JqCjcgMCBvYmoKWyAvSUNDQmFzZWQg
1144 | OSAwIFIgXQplbmRvYmoKMyAwIG9iago8PCAvVHlwZSAv
1145 | UGFnZXMgL01lZGlhQm94IFswIDAgNjEyIDc5Ml0gL0Nv
1146 | dW50IDEgL0tpZHMgWyAyIDAgUiBdID4+CmVuZG9iagox
1147 | MSAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMg
1148 | MyAwIFIgPj4KZW5kb2JqCjggMCBvYmoKPDwgL1R5cGUg
1149 | L0ZvbnQgL1N1YnR5cGUgL1RydWVUeXBlIC9CYXNlRm9u
1150 | dCAvVkFQWkxZK0hlbHZldGljYSAvRm9udERlc2NyaXB0
1151 | b3IKMTIgMCBSIC9FbmNvZGluZyAvTWFjUm9tYW5FbmNv
1152 | ZGluZyAvRmlyc3RDaGFyIDQ1IC9MYXN0Q2hhciAxMTYg
1153 | L1dpZHRocyBbIDMzMwowIDAgMCA1NTYgMCAwIDU1NiA1
1154 | NTYgNTU2IDU1NiAwIDU1NiAwIDAgMCAwIDAgMCAwIDAg
1155 | MCAwIDAgMCAwIDAgMCAwIDAgMCAwCjAgMCAwIDAgMCAw
1156 | IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA1NTYg
1157 | NTU2IDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAKNTU2
1158 | IDAgMCAwIDI3OCBdID4+CmVuZG9iagoxMiAwIG9iago8
1159 | PCAvVHlwZSAvRm9udERlc2NyaXB0b3IgL0ZvbnROYW1l
1160 | IC9WQVBaTFkrSGVsdmV0aWNhIC9GbGFncyAzMiAvRm9u
1161 | dEJCb3ggWy05NTEgLTQ4MSAxNDQ1IDExMjJdCi9JdGFs
1162 | aWNBbmdsZSAwIC9Bc2NlbnQgNzcwIC9EZXNjZW50IC0y
1163 | MzAgL0NhcEhlaWdodCA2ODQgL1N0ZW1WIDAgL1hIZWln
1164 | aHQKNTEzIC9NYXhXaWR0aCAxNTAwIC9Gb250RmlsZTIg
1165 | MTMgMCBSID4+CmVuZG9iagoxMyAwIG9iago8PCAvTGVu
1166 | Z3RoIDE0IDAgUiAvTGVuZ3RoMSA3ODIwIC9GaWx0ZXIg
1167 | L0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4Ab1ZeVhUR7Y/
1168 | Vffe3oCmF6AXaLqbphf2TZAWIi12I6gYFDW0EQUURSOR
1169 | zyCJJjqYaKK4vBgjOpgxyyTGJcYLEm31aYzRMXnZ4ySZ
1170 | SUxm8kIyzpth8mZGfVmk+517G4nwJfn8wy+3OFV16tRy
1171 | 6nfOPX2raF22vBGioB0YqJpV37IAxMe0E4vL85rrW8K8
1172 | pg/LvfPaWi1hnnMBMEsWtCxsDvOyxwEUpoVLVgyO1+4F
1173 | kD/a1Fg/PyyHa1gWNGFDmCejsExuam69L8xrerHMXrJ0
1174 | 3qBcuwl5Y3P9fYPrw0XkLXfXNzeG+5tasUxuWXqPUOJj
1175 | KsSsuGVZ42B/UoP6vQMEWyPhMZDDXSAFCipMtQDSSwoT
1176 | sCgV5Phkv/3Jy3Oji6+AWibycyv/QyzfOnb86DeN15wR
1177 | W2XfYoP8en+hlKQEU3BygvL+iK1DEnEcZpEBqE4LQAVS
1178 | CVI+UlraOD20kz3wKNJTSAwsIhthBdIGpF8jsUO1fcgd
1179 | Ixt7WJnnOFkBRjLRE8Gap8cYzHpFhPn9AJH07jb/Uf/F
1180 | CWJA631ODD1RIB+nIE+RJ2E+mMlzYCcroRxcpOtwyhJz
1181 | HYr2QQtSOxIj5oTs60nMNZ8i6WBnCY5xQCJLjpj/kpNh
1182 | /jInQEmP+YwzwGLxSiJynmjzadNu88umheZTSAfCov0p
1183 | 2OOIeZ9piXlbYoB09ZgfMwUIjtkaLpabcOgRc3NKp3l+
1184 | jiif3BmgB3rMbpTP9ESYCwqt5nxTnznLGZAR5DNMk82p
1185 | OW+Zk3EgdrPgpHaP2pxg2mYeg6JEk885BukE2U92QSrZ
1186 | 1WOfaD6OVdzu4YqUws4Auf9wuSvHHiArPQXlrs6Ucqc9
1187 | ZbLZnlLmdGJ95mvStdI7peOkudI0qUvqkFql8dIYmUam
1188 | killkTKFTCaTBsgLPSVmyQlyAEoQlgOHZRIZFyAvYiN7
1189 | ghwUGw8elbEyKgNZTCD0Z3ReAjEBcqBXJdSwckQi1iQB
1190 | cvBwuOmgx8wKNVYUqKhQxwxzoERGYSLwZHNAAuvi2kr0
1191 | JZqxaneZ96eyOlFyPU/76UdPTHznpOoafr/Jz+cKlZDJ
1192 | f727/nrlJ8vW5ShqLE1LmzRtxeG2lsULfI02X53N14hU
1193 | x29sa9Lz7Q0WS/fiFkFg4RlHXcO8JqGsb+RbbI1efrHN
1194 | a+luE8eNEC8QxG02bzcs8E2v6V7gafT2tHnafLZ6r/9w
1195 | Q+my2mFrbRhaa1npj6xVKky2TFirQRw3Yq1aQdwgrFUr
1196 | rFUrrNXgaRDXEjbvW1Rdek8reqfFt2iShXdV8xVTZ9Xw
1197 | lnq/N0D2YKN3OXCnQcWdBBfXDkY2C8wAoT8ifSyUwRmh
1198 | r7jzoAo2h/7JFKFRjwlEgyXFcBo2wy44BBLYi3UXzIGd
1199 | 8DpZjO/2bOiFD0kiZGLsZSEAk+FNEgq9BwvgWezfCmdg
1200 | O3Rj9HJBM8SidAuxh1Yi78F6A6wNPQPJUAgPw0lw46xb
1201 | oD+0L3QYpdNgBuyHAzj+DWKj3aw29GKoD2QwFedci5L3
1202 | QpNDh0AD6VAKVdi6Fk4RO/NxqAn0UITaPQFPwtPwCvyd
1203 | PEh6Q02httC7oc/RVfWQANWYVpFe8jlziH049ETof0JB
1204 | RMIFqbhqHWyD3+L8hzCdxtDqI3eRVrKNbKce+iDtZddx
1205 | uuAA4pACEzCVw1JYjwgcg7PwL/iWfE31jIppZc6F8kP/
1206 | hgiYhLsUdtIIbZgewbQF93SCSEg2GU+qyCryONlOLtBU
1207 | OoPW0HvpffQrZgozm1nBXGDvYXu4TdxOSUTwSuhE6Hzo
1208 | A9CBCe6EZbAad3cG3oXL8B1hcK4EYidFpJTMwdROdtFj
1209 | 5GlyjFaR0+Rdup/8iXxBvibfU45G0liaRlvpNnqAnqFv
1210 | M4uY7cyvmT8xV9ixHOWe5r6U2KWfBBuCG4Jvh4pCn4e+
1211 | wRArAytaphSmwFyox922wCj4Fe7iIKZDaLWzcA5eF9MX
1212 | JAH64RtEAYiGGEkuqcQ0hdxOFpBFZDc5jumUqMtVioag
1213 | cqqmOppAq2kDbabt9APazsQzqcxEZhZzCNNrzIfM98z3
1214 | LMdq2Vh2AlsBm9hmtgvTHnYv28O+w7m5sdwUbibXzm3g
1215 | NjHzuPe4DyWrJVskPZKvJf+LYXGydKl0E1rndfTZV9CX
1216 | f3hYkoza58LdMI94SQN0ojWeJvXQgd41n6xHvFrAFapl
1217 | VjMTaDZ6wym4H721C1bBBmY2PB36A7MfPkJPWYJTtsPz
1218 | bCmYuB1onQchG71oMHlSUlNcToc92ZZktWDIT4g3GvS6
1219 | uNgYrUatioqMUMhlUgnHMpRAus9WVmfhHXU867CVl2cI
1220 | vK0eG+pvaKjDV9nClw3vw1uEcfUoGtbTgz0XjOjpCff0
1221 | DPUkKksxFGekW3w2C/+W12YJkFlTa7C+2WvzW/h+sV4p
1222 | 1h8V61FYt1pxgMWnb/JaeFJn8fFlbU0dvjpvRjo55kE4
1223 | FBnpQuDwQIQwMQ/j61dhgIXxQg8fb7R5fbzBhnWUMXZf
1224 | /Xy+amqNzxtvtfqxDZum1eAaGemLeNQTNkbOt83fGPBA
1225 | Q51Qq59dwzP1fp7WCXOp03idzcvrVn6p/4G9XvNtukHI
1226 | U3tZfWNHGe+p24jgCmydwNVvQm5StQWnpev8NTxZN6iE
1227 | oONi1FRQN/ybYK9bbOHltlJbU8fiOgQXptX0GD1GMfjy
1228 | UFXTY/AYRCYj/Zh+dZEVd38sY1zGOKEssupXh8u/PBRu
1229 | f/+0UOpXn/0zlpOmDQFABARsFagnb5knLmJDZQuFrLEQ
1230 | OuYVIk74+AlucxHqM56n6DOMnefsFfV8e/V1NZq8YeXq
1231 | Fnt75Aaj+CNU6sf+dR2qMWgp7K+yWTqu4K91na3/78Nb
1232 | 6gdbJHbVFRCEgqGHfIUn9dfrbcKPpR133aS3NQn2bRNt
1233 | irxN77uhAXkBGkFnPgZ/wKtqrLzFjw34NZk+KQDyqppu
1234 | Qrb4AyS0LgBe0zH8RmXmzkFxuuBqi7y4PjIZ6diQasVa
1235 | ZrqlDFcuE3zF0mHpqJjfYSmzNKEzsXaxREFjhz8LEayu
1236 | QZxgOq7o8ccPVRv9/jE4T5YwDw7B7h1+nGHx4AxYik1Z
1237 | A9gpOx1/TBlHVc3UGr7dG897vH60Arrv6aoa/jR6rt+P
1238 | vXKGNEWNVy3SD+qcizrnpKI8LzwLfru04xT+jg5hzuoa
1239 | m5U/3dER3yG8b2E+QGBkg2ewIQBCFwHyAGmvwrFY2Kzx
1240 | og2sNiuq5RcwHYUufd2j8Jv95xEuGNIbR45GbQtEhAtv
1241 | EcLum0F4zE0hXDSk6TCEi1HnIgHh2345hMcOQ7jk5xH2
1242 | DOmNSo5DbT0iwqW3COHxN4Ow96YQ9g1pOgzhMtTZJyA8
1243 | 4ZdDuHwYwhU/j/DEIb1RyUmo7UQR4cm3COHKm0F4yk0h
1244 | fPuQpsMQrkKdbxcQnvrLITxtGMLVP4/w9CG9UckZqO10
1245 | EeGZtwjhO24G4ZqbQtg/pOkwhGehzn4B4TuHEPbE83Bj
1246 | HG4fEXbhlgfm2TdAjl9KnAZK6X6Ywd4DZ5FGIZUiVSJN
1247 | QqpAmobUJhB149e/cMzGgzY+kXgC6cIyA08g4RY8f4sS
1248 | Bk9hHErxekjkb10mw1/ln34Ug6IIsSyA6bASXiOzyb9o
1249 | MX2feYKVsPexr6GM4lkC2HfxDMqghuPD90uyrACwSDJV
1250 | AOBdJIHHOnMR61hKsWSwlF+E4+K+ZqYdx5k4mJmWnZOn
1251 | tqqdSKXslsC1/+ZOfjc+wFZ+j/cViMwM8hmdRHfgWhaP
1252 | ArIYYuTAwOItSOlh6/FyvDqY0qf6CrIq+3OytdZY6wxy
1253 | NaigO4RzL8GTDdAPuMfwBGTrlpEAyfNEsqw0kpV2cqCY
1254 | IFe1ndWf/WDADSUll9/C4fljyeg8tU199tUux5bTzNUO
1255 | rX/Pd3czV8U9j8I9Z3FPoM5RMNuTJKcKWRSh9JRGIpFS
1256 | CeGkMjzHSRV0eQT3NRMpZZkA0b1EOqNkLygCpOYwFz1B
1257 | Kaz3+yuXiwf6hBWLB4rVbjdRa9z4534kM41dpToXnZNN
1258 | 1HKituaTPHVerE1Nnwvmk7cHNtFHd164gEfADQP3Bjky
1259 | h2e2XJv7m+AzqBruszR0kU3A+wALnPCklWvWm6k7skx7
1260 | h3ahlh0ji4ySQqQiWqlcrtFqNcpoi0YrBa1OoctHxZI8
1261 | xqhfKZUmzZhols23nDdFqaWFxqVQaEmaYBX17b/SfxZK
1262 | +vtLBjTurL7L/aisoLM7rDOqDIMNOdn68Ss8Lr2ZyKmD
1263 | ScTDOF7lWbgEqYvI9ZgRM+sCSTxmMoPCRfAWMo2kpamK
1264 | VcVpaWvWQG2tNk4Xl5dbkD/KYUuSSJ2CNZmC0QV5uWxs
1265 | DLUmJTsHNKs805/qOtpeuy7riWZ6aeDJ23IzqhadI5rv
1266 | g/2Hgv9WkeauosQ3H+h8ttwjZ5gXg8scWmvw1TeC/3Xu
1267 | TdGGlaFPWBu3G+LBCfs87nuNRCezy5yGGsPD8AhZL5dO
1268 | kCmsTmu+UhnDnJfmx3PO/JgoJoWuSSxUL9UpaLEiOUeX
1269 | MsElAjPgfmDStPtWZulVV/ov9yNECBJCJACUk41IjLI7
1270 | EizRcSDhHJboRBdxxCa7IEGLNQkwLsIyZpXVRexxTheY
1271 | NJixBEESLoGIgAg+a/AhtXhNHBdrczgRFPoDHLYkUKtG
1272 | a6yaQbhiY+LymAkne1S2cWt39CjGzpm5uJdEBv/2evDi
1273 | uFVk8prNq/e0HnpyM7f727UzsmcF/xq8dmeG66u+V4MX
1274 | SA4e7SOOk/nfffryg3ef79q1PvzuTBL9vR2iodpTwEUY
1275 | aGHEmEh31MSoGXQm20CPShUPRPVGnYtiqJxEKcdANCuP
1276 | pFF4bb1UKSuUv6BUT1CJMF3uV30p+Au6PHo8ug2pzcmu
1277 | JbESKpVgsmm0BaOt+WyW78uaOzJMmee9lzbsuHaJa//N
1278 | +GDv6RNd8y6SLtL5j4MvCXGnIvQHVs11ifY74Mk0cGmc
1279 | K65cUsM1cRsM6407jfIymdTqdOYrFHprvopj8+PP66Ok
1280 | tFiamIO3ojM8EVGQEr8muTDquhHRcqorA+5VYUuKfj7c
1281 | iGaHwRihJYzGTh1J0WhBixotyBjQvR0RyNqUaESzFjNi
1282 | RNe2R6IlBeOJlrxuQxL2bK2SoBHzR2nyLNq4WJUUndqR
1283 | DzdYkKhkd432rTniKO5e8M4//3GJuO8tvf2h4Pn3P6a5
1284 | 3U/ev3bX+u1k1nZ34kekYm4loW+8SlzBr3b9NfjtG8EX
1285 | L+4hjs387l3dj296Dv/lANMwJgg3LtF4l1YMn3oKU7OJ
1286 | QhURH5ngzCtXLZIvVkndMk2knInPlSbLTapIU1EazUwp
1287 | OlpEi3JT7RqVlJMlOJN0CQHS4bHpTGap05QZQU35EcXS
1288 | 4uKEGGlK6t5k49j4lISJ0c5Cw21j/5PswIumY6QThKB8
1289 | uRKhnaK6Wtk3cBbfCrQ+vh/iG6LW6Ny16BGZ/Zn9YvTT
1290 | hd8XV8Ho2CQgBjspiLaCPjHeCnGWGCuxJsFoagWjSWcl
1291 | sVbMxMgRfkfwDYFaUpuMcWN0wW1ESaIxBktiCYYNMYwI
1292 | DjaW5OXilY0a35BcXEKwgdPhFApH/qiC0VqiXDZlrr/T
1293 | 2pTb3JBTTXrHxkY+tHJzkVWxl/u/355sW66zRyaqU9Md
1294 | talx8tFvP7D95PEdHe/MSq/YszU2QaKMSshaSJbI0vUZ
1295 | s6snp1b/bld5+c6BHQlJDLMuUlJq85Qvfmn99me1pE/w
1296 | 37bQZ6ydOwNqSIQWT+Ye6fMJHyUwSbLoRMoB6EycVK1I
1297 | NEVExDhlRosxU5VJUkBtMFsesZ6sFUEtrhzo6xNQFeMN
1298 | Aqp2q8Po6TVxEkWcJMZBNArMYqU6B9HKEx0IFrqiAJM2
1299 | Ty1AoVHHUBGBWFvykOth4G07VPRs3WvfXv145fRc9x66
1300 | YOvWzfcfc0w4w50Z+Fvl1GB/8HIwyBfZKjesunRq32dH
1301 | 3tsxp1uMqW3BGawd/UwJSdDqSd8ne15HXTJLglopMcVK
1302 | oyVKU0JEkpI69cZkBe7ImpIUbbAl/+iOcD8l/WoMEWL8
1303 | TIiLB87oYB0QTx2Ei8OMGJQOYHQSB25JfMGEfQm7EKIj
1304 | 2j0G90HyYsUfDbygk0rEjapt9HfP28uOn/DZMQ9mHirw
1305 | 3Hn/keDR1q4V07KLeldceL99dveJ+V0P3LGH6d5S4SrG
1306 | 8DgQfKZzbn5ixcCnwu+rLvQ1lXOz8OZ52ktRmYrTSvyW
1307 | KPHY2Ti3jpEoFWqjTmfEX/8UiFXGRjNmhjLX4gwG4zXr
1308 | wlXhd2Gg1n02C8Ofaoqv0YtfKxgLKweK+1UDffjZEf6h
1309 | F3S/7p+OfLUtP2/vkQMHHLE5UYkx5vHO1bO2buVmBT/Y
1310 | NuAr1EYQukUuW7OQntsm2gAzvP1vxDvqH3sisVEFMfj1
1311 | qQcDGPH23As+vD+/Q+xM8AY+/P0pwV4wc1zVrMn+tPLG
1312 | JW2NrYvm1WOfsFToXIjkRZqONB9J+J/nWqTHkZ5F6kU6
1313 | i/R7pL7Q4IN1GKoT/N4dzueM4EeN4PNH8AUj+NEjePcI
1314 | XtjBjes3jOBbRvCtAv//Mlgo6AplbmRzdHJlYW0KZW5k
1315 | b2JqCjE0IDAgb2JqCjQ4NDcKZW5kb2JqCjE1IDAgb2Jq
1316 | CihkaWFncmFtcy5ncmFmZmxlKQplbmRvYmoKMTYgMCBv
1317 | YmoKKE1hYyBPUyBYIDEwLjkgUXVhcnR6IFBERkNvbnRl
1318 | eHQpCmVuZG9iagoxNyAwIG9iagooTG9yaW4gSG9jaHN0
1319 | ZWluKQplbmRvYmoKMTggMCBvYmoKKE9tbmlHcmFmZmxl
1320 | IFByb2Zlc3Npb25hbCA1LjQuNCkKZW5kb2JqCjE5IDAg
1321 | b2JqCihEOjIwMTMxMTA2MDQxNDMxWjAwJzAwJykKZW5k
1322 | b2JqCjEgMCBvYmoKPDwgL1RpdGxlIDE1IDAgUiAvQXV0
1323 | aG9yIDE3IDAgUiAvUHJvZHVjZXIgMTYgMCBSIC9DcmVh
1324 | dG9yIDE4IDAgUiAvQ3JlYXRpb25EYXRlCjE5IDAgUiAv
1325 | TW9kRGF0ZSAxOSAwIFIgPj4KZW5kb2JqCnhyZWYKMCAy
1326 | MAowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDc1NTUg
1327 | MDAwMDAgbiAKMDAwMDAwMDI0NiAwMDAwMCBuIAowMDAw
1328 | MDAxNjkyIDAwMDAwIG4gCjAwMDAwMDAwMjIgMDAwMDAg
1329 | biAKMDAwMDAwMDIyNyAwMDAwMCBuIAowMDAwMDAwMzQ4
1330 | IDAwMDAwIG4gCjAwMDAwMDE2NTcgMDAwMDAgbiAKMDAw
1331 | MDAwMTgyNSAwMDAwMCBuIAowMDAwMDAwNDQ1IDAwMDAw
1332 | IG4gCjAwMDAwMDE2MzYgMDAwMDAgbiAKMDAwMDAwMTc3
1333 | NSAwMDAwMCBuIAowMDAwMDAyMTYyIDAwMDAwIG4gCjAw
1334 | MDAwMDIzODcgMDAwMDAgbiAKMDAwMDAwNzMyNCAwMDAw
1335 | MCBuIAowMDAwMDA3MzQ1IDAwMDAwIG4gCjAwMDAwMDcz
1336 | ODAgMDAwMDAgbiAKMDAwMDAwNzQzMCAwMDAwMCBuIAow
1337 | MDAwMDA3NDY0IDAwMDAwIG4gCjAwMDAwMDc1MTMgMDAw
1338 | MDAgbiAKdHJhaWxlcgo8PCAvU2l6ZSAyMCAvUm9vdCAx
1339 | MSAwIFIgL0luZm8gMSAwIFIgL0lEIFsgPDA5NTEzM2Mw
1340 | ZDhkMzYyZDZjYThiNzEzMmNkNjI2OTI1Pgo8MDk1MTMz
1341 | YzBkOGQzNjJkNmNhOGI3MTMyY2Q2MjY5MjU+IF0gPj4K
1342 | c3RhcnR4cmVmCjc2NzUKJSVFT0YKAQAAABQAAABQYXN0
1343 | ZWQgR3JhcGhpYyAxLnBkZgEAAAAUAAAAUGFzdGVkIEdy
1344 | YXBoaWMgMS5wZGYBAAAAHgAAAAEAAAACAAAALi4QAAAA
1345 | AAAAALYBAAACAAAAAQAAAIaGhoaG
1346 |
1347 |
1348 |
1349 |
1350 | Bounds
1351 | {{84, 326}, {239, 176}}
1352 | Class
1353 | ShapedGraphic
1354 | HFlip
1355 | YES
1356 | ID
1357 | 32
1358 | Shape
1359 | RoundRect
1360 | Style
1361 |
1362 | fill
1363 |
1364 | Draws
1365 | NO
1366 |
1367 | stroke
1368 |
1369 | Pattern
1370 | 2
1371 |
1372 |
1373 | VFlip
1374 | YES
1375 |
1376 |
1377 | Bounds
1378 | {{385, 388.75}, {141, 42}}
1379 | Class
1380 | ShapedGraphic
1381 | FitText
1382 | YES
1383 | Flow
1384 | Resize
1385 | ID
1386 | 27
1387 | Shape
1388 | Rectangle
1389 | Style
1390 |
1391 | fill
1392 |
1393 | Draws
1394 | NO
1395 |
1396 | shadow
1397 |
1398 | Draws
1399 | NO
1400 |
1401 | stroke
1402 |
1403 | Draws
1404 | NO
1405 |
1406 |
1407 | Text
1408 |
1409 | Pad
1410 | 0
1411 | Text
1412 | {\rtf1\ansi\ansicpg1252\cocoartf1265
1413 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
1414 | {\colortbl;\red255\green255\blue255;}
1415 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
1416 |
1417 | \f0\fs24 \cf0 Namespace: \
1418 | qdhcp-4b523b2a-5921-\
1419 | 4e8b-9e64-7b668c4aab85}
1420 | VerticalPad
1421 | 0
1422 |
1423 | Wrap
1424 | NO
1425 |
1426 |
1427 | Bounds
1428 | {{16, 312}, {111, 14}}
1429 | Class
1430 | ShapedGraphic
1431 | FitText
1432 | YES
1433 | Flow
1434 | Resize
1435 | ID
1436 | 25
1437 | Shape
1438 | Rectangle
1439 | Style
1440 |
1441 | fill
1442 |
1443 | Draws
1444 | NO
1445 |
1446 | shadow
1447 |
1448 | Draws
1449 | NO
1450 |
1451 | stroke
1452 |
1453 | Draws
1454 | NO
1455 |
1456 |
1457 | Text
1458 |
1459 | Pad
1460 | 0
1461 | Text
1462 | {\rtf1\ansi\ansicpg1252\cocoartf1265
1463 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
1464 | {\colortbl;\red255\green255\blue255;}
1465 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
1466 |
1467 | \f0\fs24 \cf0 Open vSwitch bridge}
1468 | VerticalPad
1469 | 0
1470 |
1471 | Wrap
1472 | NO
1473 |
1474 |
1475 | Bounds
1476 | {{209, 259.5}, {47, 14}}
1477 | Class
1478 | ShapedGraphic
1479 | FitText
1480 | YES
1481 | Flow
1482 | Resize
1483 | ID
1484 | 23
1485 | Shape
1486 | Rectangle
1487 | Style
1488 |
1489 | fill
1490 |
1491 | Draws
1492 | NO
1493 |
1494 | shadow
1495 |
1496 | Draws
1497 | NO
1498 |
1499 | stroke
1500 |
1501 | Draws
1502 | NO
1503 |
1504 |
1505 | Text
1506 |
1507 | Pad
1508 | 0
1509 | Text
1510 | {\rtf1\ansi\ansicpg1252\cocoartf1265
1511 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
1512 | {\colortbl;\red255\green255\blue255;}
1513 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
1514 |
1515 | \f0\fs24 \cf0 veth pair}
1516 | VerticalPad
1517 | 0
1518 |
1519 | Wrap
1520 | NO
1521 |
1522 |
1523 | Class
1524 | LineGraphic
1525 | ID
1526 | 22
1527 | Points
1528 |
1529 | {285, 243}
1530 | {285, 290}
1531 |
1532 | Style
1533 |
1534 | stroke
1535 |
1536 | HeadArrow
1537 | 0
1538 | Legacy
1539 |
1540 | TailArrow
1541 | 0
1542 | Width
1543 | 3
1544 |
1545 |
1546 |
1547 |
1548 | Bounds
1549 | {{194, 185.125}, {66, 14}}
1550 | Class
1551 | ShapedGraphic
1552 | FitText
1553 | YES
1554 | Flow
1555 | Resize
1556 | ID
1557 | 20
1558 | Shape
1559 | Rectangle
1560 | Style
1561 |
1562 | fill
1563 |
1564 | Draws
1565 | NO
1566 |
1567 | shadow
1568 |
1569 | Draws
1570 | NO
1571 |
1572 | stroke
1573 |
1574 | Draws
1575 | NO
1576 |
1577 |
1578 | Text
1579 |
1580 | Pad
1581 | 0
1582 | Text
1583 | {\rtf1\ansi\ansicpg1252\cocoartf1265
1584 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
1585 | {\colortbl;\red255\green255\blue255;}
1586 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
1587 |
1588 | \f0\fs24 \cf0 Linux bridge}
1589 | VerticalPad
1590 | 0
1591 |
1592 | Wrap
1593 | NO
1594 |
1595 |
1596 | Bounds
1597 | {{184, 130}, {86, 14}}
1598 | Class
1599 | ShapedGraphic
1600 | FitText
1601 | YES
1602 | Flow
1603 | Resize
1604 | ID
1605 | 19
1606 | Shape
1607 | Rectangle
1608 | Style
1609 |
1610 | fill
1611 |
1612 | Draws
1613 | NO
1614 |
1615 | shadow
1616 |
1617 | Draws
1618 | NO
1619 |
1620 | stroke
1621 |
1622 | Draws
1623 | NO
1624 |
1625 |
1626 | Text
1627 |
1628 | Pad
1629 | 0
1630 | Text
1631 | {\rtf1\ansi\ansicpg1252\cocoartf1265
1632 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
1633 | {\colortbl;\red255\green255\blue255;}
1634 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
1635 |
1636 | \f0\fs24 \cf0 Virtual NIC (tap)}
1637 | VerticalPad
1638 | 0
1639 |
1640 | Wrap
1641 | NO
1642 |
1643 |
1644 | Class
1645 | LineGraphic
1646 | Head
1647 |
1648 | ID
1649 | 17
1650 |
1651 | ID
1652 | 18
1653 | Points
1654 |
1655 | {359.00000902587982, 259.75}
1656 | {359.00000902587982, 275.5}
1657 |
1658 | Style
1659 |
1660 | stroke
1661 |
1662 | HeadArrow
1663 | 0
1664 | Legacy
1665 |
1666 | TailArrow
1667 | 0
1668 |
1669 |
1670 | Tail
1671 |
1672 | ID
1673 | 13
1674 |
1675 |
1676 |
1677 | Bounds
1678 | {{298.5, 276}, {121, 24}}
1679 | Class
1680 | ShapedGraphic
1681 | ID
1682 | 17
1683 | Shape
1684 | Rectangle
1685 | Text
1686 |
1687 | Text
1688 | {\rtf1\ansi\ansicpg1252\cocoartf1265
1689 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
1690 | {\colortbl;\red255\green255\blue255;}
1691 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
1692 |
1693 | \f0\fs24 \cf0 qvob5e2060e-02}
1694 |
1695 |
1696 |
1697 | Class
1698 | LineGraphic
1699 | Head
1700 |
1701 | ID
1702 | 13
1703 |
1704 | ID
1705 | 16
1706 | Points
1707 |
1708 | {358.99998844294043, 206.5}
1709 | {358.99998844294043, 234.75}
1710 |
1711 | Style
1712 |
1713 | stroke
1714 |
1715 | HeadArrow
1716 | 0
1717 | Legacy
1718 |
1719 | TailArrow
1720 | 0
1721 |
1722 |
1723 | Tail
1724 |
1725 | ID
1726 | 10
1727 |
1728 |
1729 |
1730 | Bounds
1731 | {{298.5, 235.25}, {121, 24}}
1732 | Class
1733 | ShapedGraphic
1734 | ID
1735 | 13
1736 | Shape
1737 | Rectangle
1738 | Text
1739 |
1740 | Text
1741 | {\rtf1\ansi\ansicpg1252\cocoartf1265
1742 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
1743 | {\colortbl;\red255\green255\blue255;}
1744 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
1745 |
1746 | \f0\fs24 \cf0 qvbb5e2060e-02}
1747 |
1748 |
1749 |
1750 | Class
1751 | LineGraphic
1752 | Head
1753 |
1754 | ID
1755 | 6
1756 |
1757 | ID
1758 | 11
1759 | Points
1760 |
1761 | {358.99998874261695, 174.5}
1762 | {358.99998874261695, 149.5}
1763 |
1764 | Style
1765 |
1766 | stroke
1767 |
1768 | HeadArrow
1769 | 0
1770 | Legacy
1771 |
1772 | TailArrow
1773 | 0
1774 |
1775 |
1776 | Tail
1777 |
1778 | ID
1779 | 10
1780 |
1781 |
1782 |
1783 | Bounds
1784 | {{309.5, 175}, {99, 31}}
1785 | Class
1786 | ShapedGraphic
1787 | ID
1788 | 10
1789 | Shape
1790 | Rectangle
1791 | Style
1792 |
1793 | stroke
1794 |
1795 | CornerRadius
1796 | 5
1797 |
1798 |
1799 | Text
1800 |
1801 | Text
1802 | {\rtf1\ansi\ansicpg1252\cocoartf1265
1803 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
1804 | {\colortbl;\red255\green255\blue255;}
1805 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
1806 |
1807 | \f0\fs24 \cf0 qbrb5e2060e-02}
1808 |
1809 |
1810 |
1811 | Class
1812 | LineGraphic
1813 | Head
1814 |
1815 | ID
1816 | 5
1817 |
1818 | ID
1819 | 7
1820 | Points
1821 |
1822 | {359.00000672245096, 124.5}
1823 | {359.00000672245096, 101.5}
1824 |
1825 | Style
1826 |
1827 | stroke
1828 |
1829 | HeadArrow
1830 | 0
1831 | Legacy
1832 |
1833 | TailArrow
1834 | 0
1835 |
1836 |
1837 | Tail
1838 |
1839 | ID
1840 | 6
1841 |
1842 |
1843 |
1844 | Bounds
1845 | {{309.5, 125}, {99, 24}}
1846 | Class
1847 | ShapedGraphic
1848 | ID
1849 | 6
1850 | Shape
1851 | Rectangle
1852 | Text
1853 |
1854 | Text
1855 | {\rtf1\ansi\ansicpg1252\cocoartf1265
1856 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
1857 | {\colortbl;\red255\green255\blue255;}
1858 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
1859 |
1860 | \f0\fs24 \cf0 tapb5e2060e-02}
1861 |
1862 |
1863 |
1864 | Bounds
1865 | {{341, 77}, {36, 24}}
1866 | Class
1867 | ShapedGraphic
1868 | ID
1869 | 5
1870 | Shape
1871 | Rectangle
1872 | Text
1873 |
1874 | Text
1875 | {\rtf1\ansi\ansicpg1252\cocoartf1265
1876 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
1877 | {\colortbl;\red255\green255\blue255;}
1878 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
1879 |
1880 | \f0\fs24 \cf0 eth0}
1881 |
1882 |
1883 |
1884 | Bounds
1885 | {{282, 6}, {154, 95}}
1886 | Class
1887 | ShapedGraphic
1888 | ID
1889 | 3
1890 | Shape
1891 | Rectangle
1892 | Text
1893 |
1894 | Text
1895 | {\rtf1\ansi\ansicpg1252\cocoartf1265
1896 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
1897 | {\colortbl;\red255\green255\blue255;}
1898 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
1899 |
1900 | \f0\fs24 \cf0 cirros}
1901 |
1902 |
1903 |
1904 | Bounds
1905 | {{353.5, 312}, {204, 156}}
1906 | Class
1907 | ShapedGraphic
1908 | HFlip
1909 | YES
1910 | ID
1911 | 31
1912 | Shape
1913 | RoundRect
1914 | Style
1915 |
1916 | fill
1917 |
1918 | Draws
1919 | NO
1920 |
1921 | stroke
1922 |
1923 | Pattern
1924 | 2
1925 |
1926 |
1927 | VFlip
1928 | YES
1929 |
1930 |
1931 | Bounds
1932 | {{137, 300}, {386, 36}}
1933 | Class
1934 | ShapedGraphic
1935 | ID
1936 | 24
1937 | Shape
1938 | Rectangle
1939 | Style
1940 |
1941 | stroke
1942 |
1943 | CornerRadius
1944 | 5
1945 |
1946 |
1947 | Text
1948 |
1949 | Text
1950 | {\rtf1\ansi\ansicpg1252\cocoartf1265
1951 | \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
1952 | {\colortbl;\red255\green255\blue255;}
1953 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
1954 |
1955 | \f0\fs24 \cf0 br-int}
1956 |
1957 |
1958 |
1959 | Bounds
1960 | {{67.5, 500.875}, {259, 47.125}}
1961 | Class
1962 | ShapedGraphic
1963 | ID
1964 | 33
1965 | Shape
1966 | Rectangle
1967 | Style
1968 |
1969 | stroke
1970 |
1971 | CornerRadius
1972 | 5
1973 |
1974 |
1975 |
1976 |
1977 | GridInfo
1978 |
1979 | GuidesLocked
1980 | NO
1981 | GuidesVisible
1982 | YES
1983 | HPages
1984 | 1
1985 | ImageCounter
1986 | 1
1987 | KeepToScale
1988 |
1989 | Layers
1990 |
1991 |
1992 | Lock
1993 | NO
1994 | Name
1995 | Layer 1
1996 | Print
1997 | YES
1998 | View
1999 | YES
2000 |
2001 |
2002 | LayoutInfo
2003 |
2004 | Animate
2005 | NO
2006 | circoMinDist
2007 | 18
2008 | circoSeparation
2009 | 0.0
2010 | layoutEngine
2011 | dot
2012 | neatoSeparation
2013 | 0.0
2014 | twopiSeparation
2015 | 0.0
2016 |
2017 | LinksVisible
2018 | NO
2019 | MagnetsVisible
2020 | NO
2021 | MasterSheets
2022 |
2023 | ModificationDate
2024 | 2013-11-06 06:45:43 +0000
2025 | Modifier
2026 | Lorin Hochstein
2027 | NotesVisible
2028 | NO
2029 | Orientation
2030 | 2
2031 | OriginVisible
2032 | NO
2033 | PageBreaks
2034 | YES
2035 | PrintInfo
2036 |
2037 | NSBottomMargin
2038 |
2039 | float
2040 | 41
2041 |
2042 | NSHorizonalPagination
2043 |
2044 | coded
2045 | BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG
2046 |
2047 | NSLeftMargin
2048 |
2049 | float
2050 | 18
2051 |
2052 | NSPaperSize
2053 |
2054 | size
2055 | {612, 792}
2056 |
2057 | NSPrintReverseOrientation
2058 |
2059 | int
2060 | 0
2061 |
2062 | NSRightMargin
2063 |
2064 | float
2065 | 18
2066 |
2067 | NSTopMargin
2068 |
2069 | float
2070 | 18
2071 |
2072 |
2073 | PrintOnePage
2074 |
2075 | ReadOnly
2076 | NO
2077 | RowAlign
2078 | 1
2079 | RowSpacing
2080 | 36
2081 | SheetTitle
2082 | Canvas 1
2083 | SmartAlignmentGuidesActive
2084 | YES
2085 | SmartDistanceGuidesActive
2086 | YES
2087 | UniqueID
2088 | 1
2089 | UseEntirePage
2090 |
2091 | VPages
2092 | 1
2093 | WindowInfo
2094 |
2095 | CurrentSheet
2096 | 0
2097 | ExpandedCanvases
2098 |
2099 |
2100 | name
2101 | Canvas 1
2102 |
2103 |
2104 | Frame
2105 | {{918, 246}, {1588, 969}}
2106 | ListView
2107 |
2108 | OutlineWidth
2109 | 142
2110 | RightSidebar
2111 |
2112 | ShowRuler
2113 |
2114 | Sidebar
2115 |
2116 | SidebarWidth
2117 | 120
2118 | VisibleRegion
2119 | {{-439, -48}, {1453, 830}}
2120 | Zoom
2121 | 1
2122 | ZoomValues
2123 |
2124 |
2125 | Canvas 1
2126 | 1
2127 | 1
2128 |
2129 |
2130 |
2131 |
2132 |
2133 |
--------------------------------------------------------------------------------
/getting-started.md:
--------------------------------------------------------------------------------
1 | # Getting started
2 |
3 | ## Get your Rackspace credentials
4 |
5 | You should have a Rackspace username and password. You'll be using these to access the cloud.
6 |
7 | 1. Log in at
8 | 2. Write down the number that appears next to your login name in the top right-hand corner. In the example below, that's 12345.
9 |
10 | 
11 |
12 | 3. Click on your login name on the top-right, then click on "Account Settings"
13 | 4. Generate an API key if it's not there yet, and then click "Show"
14 | 
15 | 5. Write down your API key.
16 |
17 |
18 | ### Install OpenStack command-line tools
19 |
20 | Install the OpenStack command-line tools on your local machine. It's best to install this within a Python virtualenv.
21 |
22 | $ virtualenv openstack
23 | $ source openstack/bin/activate
24 | $ pip install rackspace-novaclient python-swiftclient
25 |
26 |
27 | ### Create a valid openrc file for
28 |
29 |
30 | Download the linked [rax.openrc] file, and fill in your username, account number, and API key. For example, if your had:
31 |
32 | * username `jane.doe`
33 | * account number `12345`
34 | * API key `1c3cdf47937c40faa9f7a8ba5efa5560`
35 |
36 | Then edit the following lines
37 |
38 | ```
39 | export OS_USERNAME=jane.doe
40 | export OS_TENANT_NAME=12345
41 | export OS_PASSWORD=1c3cdf47937c40faa9f7a8ba5efa5560
42 | export OS_PROJECT_ID=12345
43 | ````
44 |
45 | And the entire rax.openrc file should now look like:
46 |
47 |
48 | ```
49 | export OS_AUTH_URL=https://identity.api.rackspacecloud.com/v2.0/
50 | export OS_AUTH_SYSTEM=rackspace
51 | export OS_REGION_NAME=IAD
52 | export OS_USERNAME=jane.doe
53 | export OS_TENANT_NAME=12345
54 | export OS_PASSWORD=1c3cdf47937c40faa9f7a8ba5efa5560
55 | export OS_PROJECT_ID=12345
56 | export OS_NO_CACHE=1
57 |
58 | export ST_AUTH=https://auth.api.rackspacecloud.com/v1.0
59 | export ST_USER=$OS_USERNAME
60 | export ST_KEY=$OS_PASSWORD
61 | ```
62 |
63 | ### Confirm compute client is working
64 |
65 | Make sure the OpenStack Compute client (nova) is working by trying to list available images on Rackspace:
66 |
67 | $ source rax.openrc
68 | $ nova flavor-list
69 |
70 | The output should look something like this:
71 |
72 | +----+-------------------------+-----------+------+-----------+------+-------+-------------+-----------+
73 | | ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
74 | +----+-------------------------+-----------+------+-----------+------+-------+-------------+-----------+
75 | | 2 | 512MB Standard Instance | 512 | 20 | 0 | 512 | 1 | 80.0 | N/A |
76 | | 3 | 1GB Standard Instance | 1024 | 40 | 0 | 1024 | 1 | 120.0 | N/A |
77 | | 4 | 2GB Standard Instance | 2048 | 80 | 0 | 2048 | 2 | 240.0 | N/A |
78 | | 5 | 4GB Standard Instance | 4096 | 160 | 0 | 2048 | 2 | 400.0 | N/A |
79 | | 6 | 8GB Standard Instance | 8192 | 320 | 0 | 2048 | 4 | 600.0 | N/A |
80 | | 7 | 15GB Standard Instance | 15360 | 620 | 0 | 2048 | 6 | 800.0 | N/A |
81 | | 8 | 30GB Standard Instance | 30720 | 1200 | 0 | 2048 | 8 | 1200.0 | N/A |
82 | +----+-------------------------+-----------+------+-----------+------+-------+-------------+-----------+
83 |
84 | ### Confirm object storage client is working
85 |
86 | Make sure the OpenStack Object Storage client (swift) is working by checking the status of your object storage account:
87 |
88 | $ source rax.openrc
89 | $ swift stat
90 |
91 | The output should look something like this:
92 |
93 |
94 | Account: MossoCloudFS_4911155b-32a5-317a-d0ef-6db8f4887013
95 | Containers: 0
96 | Objects: 0
97 | Bytes: 0
98 | Content-Type: text/plain; charset=utf-8
99 | X-Timestamp: 1383359439.45298
100 | X-Trans-Id: txf8f114e6ecac49db9c5e0-00527463cfiad3
101 | X-Put-Timestamp: 1383359439.45298
102 |
103 | Next exercise is [compute].
104 |
105 | [rax.openrc]: https://github.com/lorin/openstack-hackspace/blob/master/rax.openrc
106 | [compute]: boot-instance.md
--------------------------------------------------------------------------------
/launch-instance-net.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lorin/openstack-hackspace/114023c031b3d72e348f98d267c5b266dde1fac2/launch-instance-net.png
--------------------------------------------------------------------------------
/launch-instance.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lorin/openstack-hackspace/114023c031b3d72e348f98d267c5b266dde1fac2/launch-instance.png
--------------------------------------------------------------------------------
/menu-associate-floating-ip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lorin/openstack-hackspace/114023c031b3d72e348f98d267c5b266dde1fac2/menu-associate-floating-ip.png
--------------------------------------------------------------------------------
/network-under-hood.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lorin/openstack-hackspace/114023c031b3d72e348f98d267c5b266dde1fac2/network-under-hood.png
--------------------------------------------------------------------------------
/object-storage.md:
--------------------------------------------------------------------------------
1 | # Object storage
2 |
3 | OpenStack Object Storage allows you to store files. Here we'll use Rackspace Cloud Files, which is built on top of OpenStack Object Storage.
4 |
5 | ## Upload a file
6 |
7 | Here we're going to upload a file into the "hackspace" container. We'll use an OpenStack logo as our file:
8 |
9 | 
10 |
11 |
12 | Download the file [openstack-cloud-software-vertical-small.png] to your local machine:
13 |
14 | $ wget http://www.openstack.org/assets/openstack-logo/openstack-cloud-software-vertical-small.png
15 |
16 | Now, upload this file to object store into a new container called "hackspace":
17 |
18 | $ swift upload hackspace openstack-cloud-software-vertical-small.png
19 |
20 | The hackspace container should now appear:
21 |
22 | $ swift list
23 |
24 | Output should look like:
25 |
26 | hackspace
27 |
28 | The contents of the container should be the file:
29 |
30 | $ swift list hackspace
31 |
32 | Output should look like:
33 |
34 | openstack-cloud-software-vertical-small.png
35 |
36 | [openstack-cloud-software-vertical-small.png]: http://www.openstack.org/assets/openstack-logo/openstack-cloud-software-vertical-small.png
37 |
38 | ## Download a file
39 |
40 | Download the file from Openstack Object Storage to your local machine, giving it a different name (logo.png):
41 |
42 | $ swift download hackspace openstack-cloud-software-vertical-small.png --output logo.png
43 |
44 |
45 | Next exercise is [DevStack].
46 |
47 | [DevStack]: devstack.md
48 |
49 |
--------------------------------------------------------------------------------
/openstack-cloud-software-vertical-small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lorin/openstack-hackspace/114023c031b3d72e348f98d267c5b266dde1fac2/openstack-cloud-software-vertical-small.png
--------------------------------------------------------------------------------
/rackspace-api.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lorin/openstack-hackspace/114023c031b3d72e348f98d267c5b266dde1fac2/rackspace-api.png
--------------------------------------------------------------------------------
/rackspace-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lorin/openstack-hackspace/114023c031b3d72e348f98d267c5b266dde1fac2/rackspace-screen.png
--------------------------------------------------------------------------------
/rax.openrc:
--------------------------------------------------------------------------------
1 | export OS_VERSION=2.0
2 | export OS_AUTH_URL=https://identity.api.rackspacecloud.com/v2.0/
3 | export OS_AUTH_SYSTEM=rackspace
4 | export OS_REGION_NAME=IAD
5 | export OS_USERNAME=
6 | export OS_TENANT_NAME=
7 | export OS_PASSWORD=
8 | export OS_PROJECT_ID=
9 | export OS_NO_CACHE=1
10 |
11 | export ST_AUTH=https://auth.api.rackspacecloud.com/v1.0
12 | export ST_USER=$OS_USERNAME
13 | export ST_KEY=$OS_PASSWORD
14 |
--------------------------------------------------------------------------------
/temp-url.md:
--------------------------------------------------------------------------------
1 | # Make an object accessible via temporary url
2 |
3 | Note: This exercise is done against the Rackspace Public Cloud.
4 |
5 |
6 | We'll generate a temporary url to allow others to access the `hackspace/openstack-cloud-softare-vertical-small.png` file.
7 |
8 | First, we need to set a secret key on the account. Here we'll use `super-secret-key` as the key:
9 |
10 | $ swift post -m "Temp-URL-Key:super-secret-key"
11 |
12 |
13 | Next, we need to determine the full url of the object. For that, we need to get the storage url. We need to query the REST API directly for that:
14 |
15 | $ curl -i -s $ST_AUTH -H X-Storage-User:$ST_USER -H X-Storage-Pass:$ST_KEY | grep X-Storage-Url
16 |
17 | Output should look like:
18 |
19 | X-Storage-Url: https://storage101.iad3.clouddrive.com/v1/MossoCloudFS_4911155b-84c6-448b-b0f3-7db8f4887013
20 |
21 | In our example here, the storage URL is:
22 | * `https://storage101.iad3.clouddrive.com/v1/MossoCloudFS_4911155b-84c6-448b-b0f3-7db8f4887013`
23 |
24 | The full URL for the object is:
25 | * `https://storage101.iad3.clouddrive.com/v1/MossoCloudFS_4911155b-84c6-448b-b0f3-7db8f4887013/hackspace/openstack-cloud-softare-vertical-small.png`
26 |
27 | We can ensure this url works by making a HEAD request using an authentication token. First, retrieve an auth token:
28 |
29 | $ curl -i -s $ST_AUTH -H X-Storage-User:$ST_USER -H X-Storage-Pass:$ST_KEY | grep '^X-Auth-Token'
30 |
31 | Output should look like:
32 |
33 | X-Auth-Token: fac73d71321c4fdbac95ed8a183ff384
34 | Next, make a HEAD request against the object url, passing the auth token, and specifying that curl print out headers (`-i`):
35 |
36 | $ curl -i -X HEAD -H X-Auth-Token:fac73d71321c4fdbac95ed8a183ff384 https://storage101.iad3.clouddrive.com/v1/MossoCloudFS_4911155b-84c6-448b-b0f3-7db8f4887013/hackspace/openstack-cloud-software-vertical-small.png
37 |
38 | Output should look like:
39 |
40 | HTTP/1.1 200 OK
41 | Content-Length: 6685
42 | Content-Type: image/png
43 | Accept-Ranges: bytes
44 | Last-Modified: Sat, 02 Nov 2013 02:41:36 GMT
45 | Etag: 9ca71ae6465e5d4228e5c1e2f354c80c
46 | X-Timestamp: 1383360096.69969
47 | X-Object-Meta-Mtime: 1313113538.000000
48 | X-Trans-Id: txc7d304c99e6447ec85cca-00527470f2iad3
49 | Date: Sat, 02 Nov 2013 03:26:42 GMT
50 |
51 |
52 | We'll generate a temporary url that's good until Dec. 31, 2013 at 23:59:59.
53 |
54 | We need to write some Python code to do this. Note that we need the url path for generating the url. In the above case, it's `/v1/MossoCloudFS_4911155b-84c6-448b-b0f3-7db8f4887013/hackspace/openstack-cloud-software-vertical-small.png`, but your account name will be different.
55 |
56 | Save this to a file called `swifturl.py` and run it:
57 |
58 | ```
59 | #!/usr/bin/env python
60 | import hmac
61 | import time
62 | from hashlib import sha1
63 | from datetime import datetime
64 |
65 |
66 | # Note: your account will be different here,change this
67 | account = "MossoCloudFS_4911155b-84c6-448b-b0f3-7db8f4887013"
68 | # You may need to change this
69 | host = "storage101.iad3.clouddrive.com"
70 |
71 |
72 | d = datetime(2013, 12, 31, 23, 59, 59)
73 | expires = int(time.mktime(d.timetuple()))
74 | path = "/v1/{0}/hackspace/openstack-cloud-software-vertical-small.png".format(account)
75 | key = 'super-secret-key'
76 | hmac_body = 'GET\n{0}\n{1}'.format(expires, path)
77 | sig = hmac.new(key, hmac_body, sha1).hexdigest()
78 | s = 'https://{host}{path}?temp_url_sig={sig}&temp_url_expires={expires}'
79 | url = s.format(host=host, path=path, sig=sig, expires=expires)
80 | print(url)
81 | ```
82 |
83 | The URL should look something like:
84 |
85 |
86 | `https://storage101.iad3.clouddrive.com/v1/MossoCloudFS_4911155b-84c6-448b-b0f3-7db8f4887013/hackspace/openstack-cloud-software-vertical-small.png?temp_url_sig=ad1cad4ee2856c0a566636678e5ce023e84a577a&temp_url_expires=1388552399`
87 |
88 | This special url can be used to read the file until the expiry date. You
89 | should be able to acess the url in your browse.
90 |
91 |
92 |
93 | You're all done! Please [clean up] so somebody else can use your account.
94 |
95 | [clean up]: cleanup.md
--------------------------------------------------------------------------------
/under-the-hood-compute.md:
--------------------------------------------------------------------------------
1 | # Under the hood: compute
2 |
3 | You should have one virtual machine instance running. If you are inside
4 | of the DevStack VM, you can check by doing:
5 |
6 | $ source ~/devstack/openrc
7 | $ nova list
8 |
9 | You should see something like:
10 |
11 | +--------------------------------------+------+--------+------------+-------------+--------------------------------+
12 | | ID | Name | Status | Task State | Power State | Networks |
13 | +--------------------------------------+------+--------+------------+-------------+--------------------------------+
14 | | fa1ddbab-417f-4890-abc1-4cdf2bbfa787 | test | ACTIVE | None | Running | private=10.0.0.3, 172.24.4.227 |
15 | +--------------------------------------+------+--------+------------+-------------+--------------------------------+
16 |
17 | The default DevStack configuration uses QEMU to implement virtual machines,
18 | managed by libvirt.
19 |
20 | ## QEMU process
21 |
22 | You can see the qemu process that corresponds to the instance by doing:
23 |
24 | $ pgrep qemu | xargs ps ww
25 |
26 | The output should look something this:
27 |
28 | PID TTY STAT TIME COMMAND
29 | 23142 ? Sl 0:27 /usr/bin/qemu-system-x86_64 -S -M pc-1.0 -no-kvm -m 512 -smp 1,sockets=1,cores=1,threads=1 -name instance-00000001 -uuid fa1ddbab-417f-4890-abc1-4cdf2bbfa787 -smbios type=1,manufacturer=OpenStack Foundation,product=OpenStack Nova,version=2013.2.1,serial=ed198556-2d49-edcc-edd8-567f9a37549e,uuid=fa1ddbab-417f-4890-abc1-4cdf2bbfa787 -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/instance-00000001.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -kernel /opt/stack/data/nova/instances/fa1ddbab-417f-4890-abc1-4cdf2bbfa787/kernel -initrd /opt/stack/data/nova/instances/fa1ddbab-417f-4890-abc1-4cdf2bbfa787/ramdisk -append root=/dev/vda console=tty0 console=ttyS0 -drive file=/opt/stack/data/nova/instances/fa1ddbab-417f-4890-abc1-4cdf2bbfa787/disk,if=none,id=drive-virtio-disk0,format=qcow2,cache=none -device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0 -netdev tap,fd=17,id=hostnet0 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=fa:16:3e:23:87:cf,bus=pci.0,addr=0x3 -chardev file,id=charserial0,path=/opt/stack/data/nova/instances/fa1ddbab-417f-4890-abc1-4cdf2bbfa787/console.log -device isa-serial,chardev=charserial0,id=serial0 -chardev pty,id=charserial1 -device isa-serial,chardev=charserial1,id=serial1 -usb -vnc 127.0.0.1:0 -k en-us -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5
30 |
31 | ## Libvirt
32 |
33 | In the qemu process arguments, one of the arguments is `-name instance-00000001`.
34 | This is the domain name of the instance as seen by libvirt. You should be
35 | able to see that instance listed as a running domain by doing:
36 |
37 | $ sudo virsh list
38 |
39 |
40 |
41 | ## Virtual machine image files
42 |
43 | The files that correspond to the virtual machine are in
44 | `/opt/stack/data/nova/instances/`. These include the disk image,
45 | as well as the libvirt xml file.
46 |
47 | By default, DevStack uses QCOW2 images, which are copy on write. When
48 | OpenStack launches a new virtual machine, it copies the image file to
49 | `/opt/stack/data/nova/instances/_base`, and then creates a new qcow2 image
50 | in the `/opt/stack/data/nova/instances/` directory.
51 |
52 | Using the `file` command, you should be able to identify which is the original
53 | QCOW2 base image file that the disk image in `/opt/stack/data/nova/instances/`
54 | is copied from.
55 |
56 |
57 | ## Database
58 |
59 | OpenStack keeps persistent state in a MySQL database. The database corresponding
60 | to the Compute service is called `nova` and has many tables.
61 |
62 | Try going a quick query to get the uuid, the VM state, the instance name,
63 | and the name of the compute host which contains the hypervisor that the
64 | instance is running on:
65 |
66 |
67 | $ sudo mysql nova
68 | mysql> select uuid, vm_state, hostname, host from instances;
69 | +--------------------------------------+----------+----------+----------+
70 | | uuid | vm_state | hostname | host |
71 | +--------------------------------------+----------+----------+----------+
72 | | fa1ddbab-417f-4890-abc1-4cdf2bbfa787 | active | test | devstack |
73 | +--------------------------------------+----------+----------+----------+
74 |
75 |
76 | The next exercise is [Under the hood: volumes].
77 |
78 | [Under the hood: volumes]: under-the-hood-volumes.md
79 |
--------------------------------------------------------------------------------
/under-the-hood-network.md:
--------------------------------------------------------------------------------
1 | # Under the hood: networking
2 |
3 | The networking is the most complex aspect of OpenStack. When you are running
4 | one virtual machine with a floating IP attached, your current DevStack
5 | deployment should have networking that has several virtual network interfaces
6 | (tap devices, veth pairs, Linux bridges, Open vSwitch bridges).
7 |
8 | 
9 |
10 | Note that the exact name of the networking devices will vary, although the
11 | prefixes (`tap`, `qbr`, `qvb`, `qvo`, `qr-`, `qg-`, `br`) will be the same.
12 |
13 |
14 | All devices attached directly to Open vSwitch bridges are "internal ports",
15 | which are implemented as tap devices.
16 |
17 |
18 | You can list network interfaces by doing:
19 |
20 | $ ip a
21 |
22 | Note that not all of the network interfaces will appear in the list, because
23 | some are in different network namespaces.
24 |
25 |
26 | Also note that `eth0`, `eth1`, and `virbr0` are not involved here. In a production
27 | deployment, the br-ex bridge would be connected to a physical interface
28 | such as eth0. The `virbr0` bridge is a bridge created by libvirt that is
29 | not used by OpenStack.
30 |
31 | ## Security groups
32 |
33 | OpenStack uses iptables to implement security groups. The rules are applied
34 | to the virtual NIC (in the example above, `tapb5e2060e-02`).
35 |
36 | The name of the iptables chaian that controls the inbound rules for the instance
37 | with virtual NIC `tapb5e2060e-02` is called `neutron-openvswi-ib5e2060e-0`.
38 |
39 | Try to identify the name of the chain for your instance and list the rules. In
40 | the example above, it's:
41 |
42 | ```
43 | $ iptables -L neutron-openvswi-ib5e2060e-0
44 | Chain neutron-openvswi-ib5e2060e-0 (1 references)
45 | target prot opt source destination
46 | DROP all -- anywhere anywhere state INVALID
47 | RETURN all -- anywhere anywhere state RELATED,ESTABLISHED
48 | RETURN tcp -- anywhere anywhere tcp dpt:ssh
49 | RETURN icmp -- anywhere anywhere
50 | RETURN udp -- 10.0.0.2 anywhere udp spt:bootps dpt:bootpc
51 | neutron-openvswi-sg-fallback all -- anywhere anywhere
52 | ```
53 |
54 | Recall that we specified inbound traffic allowed on tcp port 22, and icmp.
55 |
56 | This rule allows the tcp inbound connections on the ssh port (22):
57 |
58 | RETURN tcp -- anywhere anywhere tcp dpt:ssh
59 |
60 | This rule allows the inbound traffic
61 |
62 | RETURN icmp -- anywhere anywhere
63 |
64 | Ideally, the virtual NIC would connect directly to the `br-int` Open vSwitch
65 | bridge. Unfortunately, due to an incompatibility between Open vSwitch and
66 | iptables, it is necessary to add a Linux bridge and a veth pair as a workaround
67 | to provide the L2 connectivity between the virtual NIC and `br-int`, while
68 | still having iptables rules apply to the virtual NIC interface.
69 |
70 |
71 | ## Network namespaces
72 |
73 |
74 | OpenStack Networking uses network namespaces to isolate networks by providing
75 | an isolated virtual networking stack. In particular, each network namespace
76 | has its own:
77 |
78 | * network interfaces
79 | * routing table
80 | * iptables rules
81 |
82 | To list the network namespaces, do:
83 |
84 | $ sudo ip netns list
85 |
86 | The output should look something like this:
87 |
88 | qrouter-9e5f2802-2462-4f5c-a95b-c60b99744451
89 | qdhcp-4b523b2a-5921-4e8b-9e64-7b668c4aab85
90 |
91 | As we'll see, you can also run an arbitrary commands inside of a network
92 | namespace using `ip netns exec `.
93 |
94 |
95 | ## Open vSwith bridges
96 |
97 | Try listing the Open vSwitch bridges, and the ports on each bridge:
98 |
99 | $ sudo ovs-vsctl list-br
100 | $ sudo ovs-vsctl list-ports br-int
101 | $ sudo ovs-vsctl list-ports br-ex
102 |
103 | You should be able to see ports that are attached to Open vSwtich bridges even
104 | if they are inside of a network namespace.
105 |
106 | ## DHCP service
107 |
108 | The `qdhcp-` network namespace contains the interface where the DHCP server
109 | listens for DHCP requsests from instances.
110 |
111 | There should be a `tap` device inside of the qdhcp- namespace. If you
112 | execute the `ip a` command inside of the namespace, it will list all of the
113 | networking devices.
114 |
115 | $ sudo ip netns exec qdhcp-4b523b2a-5921-4e8b-9e64-7b668c4aab85 ip a
116 |
117 | OpenStack uses dnsmasq for the networking. Ensure the dnsmasq service is
118 | lsitening on the appropriate `tap` device by doing:
119 |
120 | $ ps ww `pgrep dnsmasq`
121 |
122 | Look for the `--interface` argument to determine which interface it is listening
123 | on..
124 |
125 |
126 | ## Routing and floating IPs
127 |
128 | Layer 3 routing and floating IPs are implemented inside of the `qrouter-`
129 | namespace.
130 |
131 | The `qg-` network interface will have its own IP address, and will also be
132 | assigned an IP address for each floating IP.
133 |
134 | Look at how the routing is configured between the OpenStack private network (10.0.0.0/24)
135 | and the OpenStack public network (172.24.2.)
136 |
137 | $ sudo ip netns exec qrouter-9e5f2802-2462-4f5c-a95b-c60b99744451 ip route show
138 |
139 |
140 | Floating IPs are implemented using iptables rules for doing network address
141 | translation.
142 |
143 | Look at the rules for the `nat` inside of your `qrouter` namespace
144 |
145 |
146 | $ sudo ip netns exec qrouter-9e5f2802-2462-4f5c-a95b-c60b99744451 iptables -t nat -S
147 |
148 |
149 | You should see commands for doing the NAT from 172.24.4.227 to 10.0.0.3, such as:
150 |
151 | ```
152 | -A neutron-l3-agent-OUTPUT -d 172.24.4.227/32 -j DNAT --to-destination 10.0.0.3
153 | ...
154 | -A neutron-l3-agent-float-snat -s 10.0.0.3/32 -j SNAT --to-source 172.24.4.227
155 | ```
156 |
157 | You can also see the rule for routing from the metadata service (`169.254.169.254`):
158 |
159 | ```
160 | -A neutron-l3-agent-PREROUTING -d 169.254.169.254/32 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 9697
161 | ```
162 |
163 |
164 | You've completed the exercises! You can also try [generating a temporary url]
165 | with object storage.
166 |
167 | Finally, please [clean up] so somebody else can use your account.
168 |
169 | [generating a temporary url]: temp-url.md
170 | [clean up]: cleanup.md
--------------------------------------------------------------------------------
/under-the-hood-object.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lorin/openstack-hackspace/114023c031b3d72e348f98d267c5b266dde1fac2/under-the-hood-object.md
--------------------------------------------------------------------------------
/under-the-hood-volumes.md:
--------------------------------------------------------------------------------
1 | # Under the hood: volumes
2 |
3 | You should have one volume attached to your instance:
4 |
5 | $ nova volume-list
6 | +--------------------------------------+--------+--------------+------+-------------+----------+--------------------------------------+
7 | | ID | Status | Display Name | Size | Volume Type | Bootable | Attached to |
8 | +--------------------------------------+--------+--------------+------+-------------+----------+--------------------------------------+
9 | | 16150e7c-92b1-4bfd-a425-450bf4de6f36 | in-use | myvolume | 1 | None | false | 291574d9-7445-4231-b248-bafbf3b116ec |
10 | +--------------------------------------+--------+--------------+------+-------------+----------+--------------------------------------+
11 |
12 | ## LVM
13 |
14 | The default DevStack configuration uses LVM to implement volumes. DevStack
15 | uses an LVM volume group caled `stack-volumes`, which you can list using the
16 | `vgs` command:
17 |
18 | $ sudo vgs
19 | VG #PV #LV #SN Attr VSize VFree
20 | stack-volumes 1 1 0 wz--n- 10.01g 9.01g
21 |
22 | We can get a detailed display of all of the logical volumes:
23 |
24 | $ sudo lvdisplay
25 | --- Logical volume ---
26 | LV Name /dev/stack-volumes/volume-16150e7c-92b1-4bfd-a425-450bf4de6f36
27 | VG Name stack-volumes
28 | LV UUID UgFMV0-3uBM-r4p8-LCla-Kuk2-0Fvj-YFxCyB
29 | LV Write Access read/write
30 | LV Status available
31 | # open 1
32 | LV Size 1.00 GiB
33 | Current LE 256
34 | Segments 1
35 | Allocation inherit
36 | Read ahead sectors auto
37 | - currently set to 256
38 | Block device 252:0
39 |
40 | Note how the the volume name `volume-16150e7c-92b1-4bfd-a425-450bf4de6f36`
41 | matches the OpenStack volume ID `16150e7c-92b1-4bfd-a425-450bf4de6f36`.
42 |
43 |
44 | In a DevStack deployment, the physical volumes are backed by a file `/opt/stack/data/stack-volumes-backing-file`
45 | that is exposed as a loop device. Try running the following commands:
46 |
47 | $ file /opt/stack/data/stack-volumes-backing-file
48 | $ sudo losetup -a
49 |
50 |
51 | In a production OpenStack production that used LVM, the physical volumes
52 | would be actually disk partitions instead of files mounted as loopback devices.
53 |
54 |
55 | # iscsi
56 |
57 | OpenStack uses iSCSI to allow virtual machines to connect to LVM volumes on
58 | remote systems.
59 |
60 | In a DevStack deployment, the same system is both the iSCSI server and iSCSI
61 | client. In a production environment the LVM volumes would be located on a
62 | different physical machine than the one running the hypervisor.
63 |
64 | Try running the following command to view information about volumes that
65 | are being exported over iSCSI.
66 |
67 | $ sudo tgtadm --lld iscsi --op show --mode target
68 |
69 |
70 |
71 | The next exercise is [Under the hood: networking].
72 |
73 | [Under the hood: networking]: under-the-hood-network.md
74 |
--------------------------------------------------------------------------------
/under-the-hood.md:
--------------------------------------------------------------------------------
1 | # Under the hood
2 |
3 | In these exercises, we will be examining how OpenStack implements the
4 | compute, network, and volume storage. You should be logged in to
5 | the Rackspace instance where you installed DevStack. At this point,
6 | you should have already launched an instance, attached a floating IP to it,
7 | and attached a volume to it.
8 |
9 | Do this as the stack user to ensure you can use the OpenStack command-line
10 | tools:
11 |
12 | $ source ~/devstack/openrc
13 |
14 |
--------------------------------------------------------------------------------