HELION OPENSTACK

Transkript

HELION OPENSTACK
HP HELION OPENSTACK
LAB GUIDE
ČÁST DRUHÁ – POKROČILÉ
HP Helion OpenStack 1.1
Květen 2014
Tomáš Kubica
Dokument verze 0.13
Obsah
1.
Úvod do pokročilého ovládání Helion OpenStack ................................................................................ 2
1.1.
Jdeme za rámec základní práce aneb proč automatizovat automatizované ................................ 2
1.2.
Jak (a proč) se posunout z pouhé automatizované infrastruktury blíže k potřebám aplikací? .... 2
2.
Příkazová řádka ..................................................................................................................................... 3
2.1.
Proč příkazovou řádku?................................................................................................................. 3
2.2.
OpenStack CLI ............................................................................................................................... 3
2.3.
Přihlášení....................................................................................................................................... 5
2.4.
První kroky v příkazové řádce ....................................................................................................... 6
2.5.
Pokročilejší operace v příkazové řádce ....................................................................................... 10
2.6.
Praktický příklad skriptu.............................................................................................................. 16
3.
Lidsky čitelné datové formáty ............................................................................................................. 19
3.1.
YAML ........................................................................................................................................... 19
3.2.
JSON ............................................................................................................................................ 20
4.
Orchestrační šablony OpenStack Heat................................................................................................ 20
4.1.
Nejjednodušší šablona ................................................................................................................ 20
4.2.
Komplexnější šablona ................................................................................................................. 25
4.3.
Heat autoscaling a autohealing................................................................................................... 31
5.
OpenStack API ..................................................................................................................................... 31
6.
Úvod do orchestrace s HP Cloud Service Automation ........................................................................ 35
7.
Starejme se o vnitřek VM s Ansible .................................................................................................... 35
7.1.
K čemu je to dobré? .................................................................................................................... 35
7.2.
Ansible......................................................................................................................................... 35
7.2.1
Instalace .............................................................................................................................. 35
7.2.2
Příprava labu ....................................................................................................................... 36
7.2.3
Základní operace ................................................................................................................. 39
7.2.4
Názorný příklad – web server ............................................................................................. 40
7.3.
HP Server Automation ................................................................................................................ 41
8.
HP Helion Development Platform ....................................................................................................... 41
9.
Shrnutí a závěr .................................................................................................................................... 41
10.
Další zdroje ...................................................................................................................................... 41
1|HP Helion OpeStack
1. Úvod do pokročilého ovládání Helion OpenStack
1.1.
Jdeme za rámec základní práce aneb proč automatizovat automatizované
V první části labu jsme si vyzkoušeli práci s Helion OpenStack přes jeho GUI. Dokázali jsme z jednoho
nástroje rychle a efektivně vytvářet potřebné zdroje na úrovni virtuálních serverů, storage, sítí i
bezpečnosti, a to všechno řízeným způsobem spojovali do výsledné infrastruktury na vyžádání. Proč
bychom vůbec chtěli nad takovým systémem dělat ještě něco dalšího?
Představte si následující situace:





Máte komplexní aplikaci složenou z různých vrstev a komponent, má specifické nároky pro
každou část z pohledu paměti, CPU, storage, jsou definovaná komunikační pravidla, označen
backend a frontend a tak podobně. Jak bychom mohli pro své kolegy takovou infrastrukturu
popsat? Screenshoty z GUI? Nešlo by to nějak lépe?
Potřebujete dávkově vytvořit nějaké infrastrukturní prostředí, například založit 30 projektů,
spustit 30 různě velkých VM nebo promazat nepoužívané sítě? Přece to nebudete klikat...
Co když dostanete zadání infrastrukturních požadavků ve formě excel tabulky s názvy serverů?
Co když budete potřebovat založit infrastrukturu na základě informací z jiného systému? Budete
muset vzít nějakou tiskovou sestavu a naklikat to v GUI?
Možná máte nějaké opakující se úkony, které ovšem vyžadují dosazení nějakých parametrů.
Budete infrastrukturu pokaždé ručně naklikávat a vždy změníte jen těch pár parametrů?
GUI Helion OpenStack je poněkud technické, možná by bylo dobré nabídnou nějaký katalag
služeb, kde si uživatel jen vybere z katalogu možností – chci nový blog server, nový sharepoint,
novou QA infrastrukturu, Development prostředí pro vývoj v Javě.
Přesně v těchto momentech je vhodné nad Helion OpenStack budovat další vrstvu automatizace a
abstrakcí – a to i pokud se stále jedná jen o infrastrukturu na vyžádání. Jaké máte prostředky?




OpenStack CLI
OpenStack Heat šablony
OpenStack API a například Python
HP Cloud Service Automation ... to je zlatý hřeb !
O tom všem v tomto labu.
1.2.
Jak (a proč) se posunout z pouhé automatizované infrastruktury blíže k potřebám
aplikací?
Infrastruktura je palivo, aplikace jsou auta. Aplikace jsou to, co má blízko k byznysu a přináší zásadní
hodnotu. Téměř každý nový byznysový projekt dnes potřebuje podporu IT, ať už kvůli realizaci, sběru
dat, marketingu, řízení vztahů, výroby, dodávek. Prakticky vždy tato hodnota dříme v nějaké aplikaci.
Teprve tu je potřeba někam umístit – do nějaké platformy (aplikačního prostředí) a tu do infrastruktury.
My ovšem v dnešním labu nebudeme příliš zacházet do oblastí PaaS (to si necháme na jindy), ale i
v rámci IaaS dává smysl se OS, aplikačnímu prostředí a třeba i vlastním aplikacím věnovat. Tak například
jak to zařídit, abyste měli image (šablonu) nějaké instance, a přitom byla jistota, že po jejím nasazením
bude obsahovat všechny nejnovější security patche, budou tam nainstalovány potřebné balíčky pro
nejnovější verzi aplikace a tak podobně? Určitě nechcete po naběhnutí šablony pokaždé znovu
2|HP Helion OpeStack
procházet kompletní proces aktualizací a instalací balíčků a prostředí či modifikace konfiguračních
souborů apod. Stejně tak nechcete váš image přetvářet každý měsíc tak, aby obsahoval potřebné
aktualizace. Pravděpodobně sáhnete po nějakém způsobu jak automatizovaným způsobem tyto potřeby
zajišťovat. V dnešním labu si vyzkoušíte:


Ansible (open source)
HP Server Automation ... to je zlatý hřeb !
2. Příkazová řádka
2.1.
Proč příkazovou řádku?
V předchozí části labu jsme se soustředili na ovládání skrze grafické rozhraní. Proč tedy vůbec má smysl
znát příkazovou řádku?





Příkazová řádka je open source a využívá OpenStack API, takže funguje stejně v různých
modifikací OpenStack od různých výrobců – to co se naučíte se vám hodí v mnoha situacích
V některých operacích je příkazová řádka rychlejší
Ovládat infrastrukturu můžete i z minimálního systému bez grafického prostředí
Příkazy můžete skriptovat, tedy vytvářet jednoduché „aplikace“, které dávkovým způsobem
budou provádět nějaké operace nebo provádět pravidelné záležitosti (například sestavíte nějaké
demo prostředí, které dáte k rozbití a po ukončení takové session skriptem vrátíte demo do
původního stavu)
Některé funkce jsou dostupné pouze tímto způsobem – běžný vývoj je, že nová funkce je jako
první k dispozici v příkazové řádce a později v grafickém interface
Pokročilejší uživatel by tedy měl CLI znát, stojí to za to.
2.2.
OpenStack CLI
OpenStack příkazová řádka je ve skutečnosti soubor open source aplikací napsaných v jazyce Python,
který využívá OpenStack API. Jde tedy o CLI wrapper, čili textové rozhraní nad OpenStack RESTful API.
Tyto aplikace můžete používat kdekoli, z jakéhokoli počítače s podporou Python (samotné aplikace si
nainstalujete přes pip, v případě ubuntu jsou dostupné i jako apt-get balíčky).
Aplikace mají jména podle názvů jednotlivých projektů:








Nova (práce s instancemi)
Cinder (práce s blokovou storage, tedy volume, snapshot apod.)
Glance (práce s image)
Swift (práce s objektovou storage)
Neutron (síťařina)
Keystone (jména, hesla, identity)
Heat (orchestrační šablony)
Jsou i další, ale pro lab je nebudeme potřebovat
Obvykle se příkaz volá způsobem:
nova operace poziční_parametr další_parametry (označené jako --parametr hodnota)
3|HP Helion OpeStack
Tak například to může vypadat takhle:
nova boot mojeVM --image Windows –flavor m1.tiny
Často můžete požádat o pomoc, například:
tomas@helion-ProLiant-DL380-Gen9:~$ nova help
usage: nova [--version] [--debug] [--os-cache] [--timings]
[--timeout <seconds>] [--os-auth-token OS_AUTH_TOKEN]
[--os-username <auth-user-name>] [--os-password <auth-password>]
[--os-tenant-name <auth-tenant-name>]
[--os-tenant-id <auth-tenant-id>] [--os-auth-url <auth-url>]
[--os-region-name <region-name>] [--os-auth-system <auth-system>]
[--service-type <service-type>] [--service-name <service-name>]
[--volume-service-name <volume-service-name>]
[--endpoint-type <endpoint-type>]
[--os-compute-api-version <compute-api-ver>]
[--os-cacert <ca-certificate>] [--insecure]
[--bypass-url <bypass-url>]
<subcommand> ...
Command-line interface to the OpenStack Nova API.
Positional arguments:
<subcommand>
absolute-limits
add-fixed-ip
add-floating-ip
add-secgroup
agent-create
...
Print a list of absolute limits for a user
Add new IP address on a network to server.
DEPRECATED, use floating-ip-associate instead.
Add a Security Group to a server.
Create new agent build.
Nebo o detaily konkrétní operace
tomas@helion-ProLiant-DL380-Gen9:~$ nova help boot
usage: nova boot [--flavor <flavor>] [--image <image>]
[--image-with <key=value>] [--boot-volume <volume_id>]
[--snapshot <snapshot_id>] [--num-instances <number>]
[--meta <key=value>] [--file <dst-path=src-path>]
[--key-name <key-name>] [--user-data <user-data>]
[--availability-zone <availability-zone>]
[--security-groups <security-groups>]
[--block-device-mapping <dev-name=mapping>]
[--block-device key1=value1[,key2=value2...]]
[--swap <swap_size>]
[--ephemeral size=<size>[,format=<format>]]
[--hint <key=value>]
[--nic <net-id=net-uuid,v4-fixed-ip=ip-addr,port-id=port-uuid>]
[--config-drive <value>] [--poll]
<name>
Boot a new server.
Positional arguments:
<name>
Name for the new server
Optional arguments:
--flavor <flavor>
Name or ID of flavor (see 'nova flavor-list').
--image <image>
Name or ID of image (see 'nova image-list').
--image-with <key=value>
Image metadata property (see 'nova image-show').
4|HP Helion OpeStack
--boot-volume <volume_id>
Volume ID to boot from.
--snapshot <snapshot_id>
...
Jste vyzbrojeni, pojďme na to!
2.3.
Přihlášení
Nejprve se přes SSH (doporučuji program Putty) připojte na server v labu, z kterého budeme následující
kroky provádět. Některé CLI příkazy jsou docela široké – nastavte tedy Putty tak, že se změnou velikosti
okna bude přidávat znaky (místo zvětšování fontu)
Pak zadejte IP adresu serveru v labu a připojte se
Jakmile se připojíte ujistěte se, že jsou pro vás připraveny potřebné soubory api.sh a eca.crt
tomas@helion-ProLiant-DL380-Gen9:~$ ls
api.sh eca.crt
Pokud ano, pokračujeme dál. Příkazová řádka je ve skutečnosti aplikace, která může běžet kdekoli.
Musíme ji tedy říct, kde má hledat Helion OpenStack API server a dát jí přihlašovací údaje vašeho
5|HP Helion OpeStack
projektu. Použijte připravený skript, aplikujte ho příkazem source a jako argumenty uveďte jméno heslo
tenant. Například:
tomas@helion-ProLiant-DL380-Gen9:~$ source api.sh tomas.kubica helion tomas.kubica
kde “tomas.kubica” je uživatelské jméno i jméno projektu (tenantu) a “helion” je vaše heslo
2.4.
První kroky v příkazové řádce
Pojďme to hned vyzkoušet. Pokud jste po předchozím labu vše v rámci vašeho projektu pořádně vyčistili,
neměla by být spuštěna žádná instance. Následující příkaz tedy vrátí prázdnou tabulku – ale to, že ji
zobrazí znamená, že máme přihlašovací údaje správně.
tomas@helion-ProLiant-DL380-Gen9:~$ nova list
+----+------+--------+------------+-------------+----------+
| ID | Name | Status | Task State | Power State | Networks |
+----+------+--------+------------+-------------+----------+
+----+------+--------+------------+-------------+----------+
Ale můžeme se podívat na Flavors
tomas@helion-ProLiant-DL380-Gen9:~$ nova flavor-list
+--------------------------------------+-----------+-----------+------+-----------+------+-------+-------------+-----------+
| ID
| Name
| Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+--------------------------------------+-----------+-----------+------+-----------+------+-------+-------------+-----------+
| 2
| m1.small | 2048
| 20
| 0
|
| 1
| 1.0
| True
|
| 3
| m1.medium | 4096
| 40
| 0
|
| 2
| 1.0
| True
|
| 4
| m1.large | 8192
| 80
| 0
|
| 4
| 1.0
| True
|
| 5
| m1.xlarge | 16384
| 160 | 0
|
| 8
| 1.0
| True
|
| ddd64d6e-884c-4277-a068-eae6b370a479 | m1.tiny
| 512
| 4
| 0
|
| 1
| 1.0
| True
|
+--------------------------------------+-----------+-----------+------+-----------+------+-------+-------------+-----------+
Podobné to bude se storage volume
tomas@helion-ProLiant-DL380-Gen9:~$ cinder list
+----+--------+--------------+------+-------------+----------+-------------+
| ID | Status | Display Name | Size | Volume Type | Bootable | Attached to |
+----+--------+--------------+------+-------------+----------+-------------+
+----+--------+--------------+------+-------------+----------+-------------+
Pokud jste vyčistili předchozí lab, uvidíte pouze výchozí síť a externí síť
tomas@helion-ProLiant-DL380-Gen9:~$ neutron net-list
+--------------------------------------+-------------+-----------------------------------------------------+
| id
| name
| subnets
|
+--------------------------------------+-------------+-----------------------------------------------------+
| 3a5b5cd4-0c4b-4bc3-b44e-826c7b19556e | ext-net
| e3be37fb-1ced-432f-950c-99b887bb52c2
|
| 7590c21a-4878-48ae-b957-7562e4dc1d0d | default-net | 2c223f18-79f9-41c0-b19a-e5bdfa294895 192.168.1.0/24 |
+--------------------------------------+-------------+-----------------------------------------------------+
Podívejme se ještě na dostupné image
tomas@helion-ProLiant-DL380-Gen9:~$ glance image-list
+--------------------------------------+-----------------------------------+-------------+------------------+-----------+--------+
| ID
| Name
| Disk Format | Container Format | Size
| Status |
+--------------------------------------+-----------------------------------+-------------+------------------+-----------+--------+
| dfc71bdf-06ab-42d6-828e-51612cbcd9ac | debian-wheezy-amd64-20140929-disk | qcow2
| bare
| 221489152 | active |
| 35c7876d-a570-4358-a44a-bcaa303b2673 | msgaas-rabbit-cluster_1.1.0.3
| qcow2
| bare
| 525925376 | active |
+--------------------------------------+-----------------------------------+-------------+------------------+-----------+--------+
Vyzkoušíme si jednoduché spuštění instance. V Putty využijte toho, že jakýkoli text označíte, tak se vám
ihned automaticky nakopíruje do schránky. Do řádky ho pak vložíte jednoduše kliknutím na pravé
tlačítko. To udělejte s názvem našeho debian image, ať to nemusíte opisovat.
6|HP Helion OpeStack
tomas@helion-ProLiant-DL380-Gen9:~$ nova boot mojeVM --image debian-wheezy-amd64-20140929-disk --flavor m1.tiny
+--------------------------------------+--------------------------------------------------------------------------+
| Property
| Value
|
+--------------------------------------+--------------------------------------------------------------------------+
| OS-EXT-AZ:availability_zone
| nova
|
| OS-EXT-STS:power_state
| 0
|
| OS-EXT-STS:task_state
| scheduling
|
| OS-EXT-STS:vm_state
| building
|
| OS-SRV-USG:launched_at
| |
| OS-SRV-USG:terminated_at
| |
| accessIPv4
|
|
| accessIPv6
|
|
| adminPass
| CwE4vk7vyQFx
|
| config_drive
|
|
| created
| 2015-03-25T11:27:57Z
|
| flavor
| m1.tiny (ddd64d6e-884c-4277-a068-eae6b370a479)
|
| hostId
|
|
| id
| 701610f6-49b6-404a-9c3a-da11c21f8189
|
| image
| debian-wheezy-amd64-20140929-disk (dfc71bdf-06ab-42d6-828e-51612cbcd9ac) |
| key_name
| |
| metadata
| {}
|
| name
| mojeVM
|
| os-extended-volumes:volumes_attached | []
|
| progress
| 0
|
| security_groups
| default
|
| status
| BUILD
|
| tenant_id
| baa7096fe1d54571900c3758397e0939
|
| updated
| 2015-03-25T11:27:57Z
|
| user_id
| 078a6c284c804ba0b68e9e5447043da7
|
+--------------------------------------+--------------------------------------------------------------------------+
Koukněte se v jakém je stavu – nejdřív vám bude možná příkaz nova
době už ACTIVE
list
ukazovat BUILD, ale po nějaké
tomas@helion-ProLiant-DL380-Gen9:~$ nova list
+--------------------------------------+--------+--------+------------+-------------+----------+
| ID
| Name | Status | Task State | Power State | Networks |
+--------------------------------------+--------+--------+------------+-------------+----------+
| 701610f6-49b6-404a-9c3a-da11c21f8189 | mojeVM | BUILD | spawning | NOSTATE
|
|
+--------------------------------------+--------+--------+------------+-------------+----------+
tomas@helion-ProLiant-DL380-Gen9:~$ nova list
+--------------------------------------+--------+--------+------------+-------------+--------------------------+
| ID
| Name | Status | Task State | Power State | Networks
|
+--------------------------------------+--------+--------+------------+-------------+--------------------------+
| 701610f6-49b6-404a-9c3a-da11c21f8189 | mojeVM | ACTIVE | | Running
| default-net=192.168.1.11 |
+--------------------------------------+--------+--------+------------+-------------+--------------------------+
Pojďme ji hned zase zrušit
tomas@helion-ProLiant-DL380-Gen9:~$ nova delete mojeVM
tomas@helion-ProLiant-DL380-Gen9:~$ nova list
+----+------+--------+------------+-------------+----------+
| ID | Name | Status | Task State | Power State | Networks |
+----+------+--------+------------+-------------+----------+
+----+------+--------+------------+-------------+----------+
Vytvoříme si nový volume, který bude bootovací a bude na něm náš debian image. Tento musíme
referencovat přes jeho ID, takže opět použijte příkaz glance image-list a označte si ID tak, že ho přes
pravé tlačítko použijete, když je třeba.
tomas@helion-ProLiant-DL380-Gen9:~$ cinder create --image-id dfc71bdf-06ab-42d6-828e-51612cbcd9ac --display-name MujBootDisk 4
7|HP Helion OpeStack
+---------------------+--------------------------------------+
|
Property
|
Value
|
+---------------------+--------------------------------------+
|
attachments
|
[]
|
| availability_zone |
nova
|
|
bootable
|
false
|
|
created_at
|
2015-03-25T12:28:00.884103
|
| display_description |
None
|
|
display_name
|
MujBootDisk
|
|
encrypted
|
False
|
|
id
| bac044cb-c5ca-4c19-828b-47ad7cafd72b |
|
image_id
| dfc71bdf-06ab-42d6-828e-51612cbcd9ac |
|
metadata
|
{}
|
|
size
|
4
|
|
snapshot_id
|
None
|
|
source_volid
|
None
|
|
status
|
creating
|
|
volume_type
|
None
|
+---------------------+--------------------------------------+
tomas@helion-ProLiant-DL380-Gen9:~$ cinder list
+--------------------------------------+-------------+--------------+------+-------------+----------+-------------+
|
ID
|
Status | Display Name | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-------------+--------------+------+-------------+----------+-------------+
| bac044cb-c5ca-4c19-828b-47ad7cafd72b | downloading | MujBootDisk | 4 |
None
| false |
|
+--------------------------------------+-------------+--------------+------+-------------+----------+-------------+
Po nějaké době bude volume připraven
tomas@helion-ProLiant-DL380-Gen9:~$ cinder list
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
|
ID
| Status | Display Name | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
| bac044cb-c5ca-4c19-828b-47ad7cafd72b | available | MujBootDisk | 4 |
None
| true |
|
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
Nabootujeme z něj novou instanci – budeme potřebovat volume ID
tomas@helion-ProLiant-DL380-Gen9:~$ nova boot dalsiVM --boot-volume bac044cb-c5ca-4c19-828b-47ad7cafd72b --flavor
m1.tiny
+--------------------------------------+--------------------------------------------------+
| Property
| Value
|
+--------------------------------------+--------------------------------------------------+
| OS-EXT-AZ:availability_zone
| nova
|
| OS-EXT-STS:power_state
| 0
|
| OS-EXT-STS:task_state
| scheduling
|
| OS-EXT-STS:vm_state
| building
|
| OS-SRV-USG:launched_at
| |
| OS-SRV-USG:terminated_at
| |
| accessIPv4
|
|
| accessIPv6
|
|
| adminPass
| eD2mKNnbdm5D
|
| config_drive
|
|
| created
| 2015-03-25T12:35:55Z
|
| flavor
| m1.tiny (ddd64d6e-884c-4277-a068-eae6b370a479) |
| hostId
|
|
| id
| 497fd77b-af7a-4c29-a0a6-fb327691744e
|
| image
| Attempt to boot from volume - no image supplied |
| key_name
| |
| metadata
| {}
|
| name
| dalsiVM
|
8|HP Helion OpeStack
| os-extended-volumes:volumes_attached | [{"id": "bac044cb-c5ca-4c19-828b-47ad7cafd72b"}] |
| progress
| 0
|
| security_groups
| default
|
| status
| BUILD
|
| tenant_id
| baa7096fe1d54571900c3758397e0939
|
| updated
| 2015-03-25T12:35:56Z
|
| user_id
| 078a6c284c804ba0b68e9e5447043da7
|
+--------------------------------------+--------------------------------------------------+
tomas@helion-ProLiant-DL380-Gen9:~$ nova list
+--------------------------------------+---------+--------+------------+-------------+--------------------------+
| ID
| Name
| Status | Task State | Power State | Networks
|
+--------------------------------------+---------+--------+------------+-------------+--------------------------+
| 497fd77b-af7a-4c29-a0a6-fb327691744e | dalsiVM | ACTIVE | | Running
| default-net=192.168.1.13 |
+--------------------------------------+---------+--------+------------+-------------+--------------------------+
Prohlédněme si detaily běžící instance
tomas@helion-ProLiant-DL380-Gen9:~$ nova show dalsiVM
+--------------------------------------+----------------------------------------------------------+
| Property
| Value
|
+--------------------------------------+----------------------------------------------------------+
| OS-EXT-AZ:availability_zone
| nova
|
| OS-EXT-STS:power_state
| 1
|
| OS-EXT-STS:task_state
| |
| OS-EXT-STS:vm_state
| active
|
| OS-SRV-USG:launched_at
| 2015-03-25T12:36:37.000000
|
| OS-SRV-USG:terminated_at
| |
| accessIPv4
|
|
| accessIPv6
|
|
| config_drive
|
|
| created
| 2015-03-25T12:35:55Z
|
| default-net network
| 192.168.1.13
|
| flavor
| m1.tiny (ddd64d6e-884c-4277-a068-eae6b370a479)
|
| hostId
| 7ee01409c9503576106d27bbd5c42f5852e18553171df105b143d96e |
| id
| 497fd77b-af7a-4c29-a0a6-fb327691744e
|
| image
| Attempt to boot from volume - no image supplied
|
| key_name
| |
| metadata
| {}
|
| name
| dalsiVM
|
| os-extended-volumes:volumes_attached | [{"id": "bac044cb-c5ca-4c19-828b-47ad7cafd72b"}]
|
| progress
| 0
|
| security_groups
| default
|
| status
| ACTIVE
|
| tenant_id
| baa7096fe1d54571900c3758397e0939
|
| updated
| 2015-03-25T12:36:37Z
|
| user_id
| 078a6c284c804ba0b68e9e5447043da7
|
+--------------------------------------+----------------------------------------------------------+
Podívejme se na volume a také na jeho detaily
tomas@helion-ProLiant-DL380-Gen9:~$ cinder list
+--------------------------------------+--------+--------------+------+-------------+----------+--------------------------------------+
|
ID
| Status | Display Name | Size | Volume Type | Bootable |
Attached to
|
+--------------------------------------+--------+--------------+------+-------------+----------+--------------------------------------+
| bac044cb-c5ca-4c19-828b-47ad7cafd72b | in-use | MujBootDisk | 4
|
None
|
true
| 497fd77b-af7a-4c29-a0a6-fb327691744e |
+--------------------------------------+--------+--------------+------+-------------+----------+--------------------------------------+
tomas@helion-ProLiant-DL380-Gen9:~$ cinder show MujBootDisk
+---------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
Property
|
Value
|
+---------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
attachments
|
[{u'device': u'/dev/vda', u'server_id': u'497fd77b-af7a-4c29-a0a6-fb327691744e', u'id': u'bac044cb-c5ca-4c19-828b-47ad7cafd72b', u'host_name': None, u'volume_id': u'bac044cb-c5ca-4c19-828b-47ad7cafd72b'}]
|
|
availability_zone
|
nova
|
|
bootable
|
true
|
|
created_at
|
2015-03-25T12:28:00.000000
|
|
display_description
|
None
|
|
display_name
|
MujBootDisk
|
|
encrypted
|
False
|
|
id
|
bac044cb-c5ca-4c19-828b-47ad7cafd72b
|
|
metadata
|
{u'readonly': u'False', u'attached_mode': u'rw'}
|
|
os-vol-tenant-attr:tenant_id
|
baa7096fe1d54571900c3758397e0939
|
| os-volume-replication:driver_data |
None
|
| os-volume-replication:extended_status |
None
|
|
size
|
4
|
|
snapshot_id
|
None
|
|
source_volid
|
None
|
|
status
|
in-use
|
|
volume_image_metadata
| {u'container_format': u'bare', u'min_ram': u'0', u'disk_format': u'qcow2', u'image_name': u'debian-wheezy-amd64-20140929-disk', u'image_id': u'dfc71bdf-06ab-42d6-828e-51612cbcd9ac', u'checksum': u'5690939c3f261fac819347a6d8b7eb32', u'min_disk': u'0', u'size': u'221489152'} |
|
volume_type
|
None
|
+---------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
9|HP Helion OpeStack
2.5.
Pokročilejší operace v příkazové řádce
Některé další aspekty, které si pamatuje z první části labu, si jen rámcově ukážeme, ale nebudeme s nimi
aktivně pracovat. Pokud vás budou zajímat, využívejte help příkazů (nova help, nova boot help, …) a
pohrajte si sami.
tomas@helion-ProLiant-DL380-Gen9:~$ nova secgroup-list
+--------------------------------------+--------------+--------------+
| Id
| Name
| Description |
+--------------------------------------+--------------+--------------+
| ea62d680-0c24-4f60-9417-ea6f5d639eee | MojePravidla | MojePravidla |
| b9eaf0cf-e8b2-41f1-93d8-df59fbcc3615 | default
| default
|
+--------------------------------------+--------------+--------------+
tomas@helion-ProLiant-DL380-Gen9:~$ nova secgroup-list-rules MojePravidla
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port | IP Range | Source Group |
+-------------+-----------+---------+-----------+--------------+
| icmp
| -1
| -1
| 0.0.0.0/0 |
|
| tcp
| 22
| 22
| 0.0.0.0/0 |
|
|
|
|
|
| MojePravidla |
+-------------+-----------+---------+-----------+--------------+
tomas@helion-ProLiant-DL380-Gen9:~$ swift list
MujKontejner
tomas@helion-ProLiant-DL380-Gen9:~$ swift upload MujKontejner api.sh
api.sh
tomas@helion-ProLiant-DL380-Gen9:~$ swift list MujKontejner
api.sh
Můžeme si vytvořit další, tentokrát prázdný volume a připojit ho do naší běžící instance
tomas@helion-ProLiant-DL380-Gen9:~$ cinder create --display-name DalsiDisk 1
+---------------------+--------------------------------------+
|
Property
|
Value
|
+---------------------+--------------------------------------+
|
attachments
|
[]
|
| availability_zone |
nova
|
|
bootable
|
false
|
|
created_at
|
2015-03-25T12:57:48.719454
|
| display_description |
None
|
|
display_name
|
DalsiDisk
|
|
encrypted
|
False
|
|
id
| 90773500-d1b9-4d92-a3fa-148a7b1445a2 |
|
metadata
|
{}
|
|
size
|
1
|
|
snapshot_id
|
None
|
|
source_volid
|
None
|
|
status
|
creating
|
|
volume_type
|
None
|
+---------------------+--------------------------------------+
tomas@helion-ProLiant-DL380-Gen9:~$ nova list
+--------------------------------------+---------+--------+------------+-------------+--------------------------+
| ID
| Name
| Status | Task State | Power State | Networks
|
+--------------------------------------+---------+--------+------------+-------------+--------------------------+
| 497fd77b-af7a-4c29-a0a6-fb327691744e | dalsiVM | ACTIVE | | Running
| default-net=192.168.1.13 |
+--------------------------------------+---------+--------+------------+-------------+--------------------------+
tomas@helion-ProLiant-DL380-Gen9:~$ nova volume-attach dalsiVM 90773500-d1b9-4d92-a3fa-148a7b1445a2
+----------+--------------------------------------+
10 | H P H e l i o n O p e S t a c k
| Property | Value
|
+----------+--------------------------------------+
| device | /dev/vdb
|
| id
| 90773500-d1b9-4d92-a3fa-148a7b1445a2 |
| serverId | 497fd77b-af7a-4c29-a0a6-fb327691744e |
| volumeId | 90773500-d1b9-4d92-a3fa-148a7b1445a2 |
+----------+--------------------------------------+
tomas@helion-ProLiant-DL380-Gen9:~$ cinder list
+--------------------------------------+--------+--------------+------+-------------+----------+--------------------------------------+
|
ID
| Status | Display Name | Size | Volume Type | Bootable |
Attached to
|
+--------------------------------------+--------+--------------+------+-------------+----------+--------------------------------------+
| 90773500-d1b9-4d92-a3fa-148a7b1445a2 | in-use | DalsiDisk
| 1
|
None
| false
| 497fd77b-af7a-4c29-a0a6-fb327691744e |
| bac044cb-c5ca-4c19-828b-47ad7cafd72b | in-use | MujBootDisk | 4
|
None
|
true
| 497fd77b-af7a-4c29-a0a6-fb327691744e |
+--------------------------------------+--------+--------------+------+-------------+----------+--------------------------------------+
Následně můžeme volume zase odpojit, udělat snapshot a znovu připojit
tomas@helion-ProLiant-DL380-Gen9:~$ nova volume-detach dalsiVM 90773500-d1b9-4d92-a3fa-148a7b1445a2
tomas@helion-ProLiant-DL380-Gen9:~$ cinder snapshot-create 90773500-d1b9-4d92-a3fa-148a7b1445a2 --display-name MujDalsiSnapshot
+---------------------+--------------------------------------+
|
Property
|
Value
|
+---------------------+--------------------------------------+
|
created_at
|
2015-03-25T18:55:25.723306
|
| display_description |
None
|
|
display_name
|
MujDalsiSnapshot
|
|
id
| 0ee3d322-29fb-453b-b448-6bf169569cdb |
|
metadata
|
{}
|
|
size
|
1
|
|
status
|
creating
|
|
volume_id
| 90773500-d1b9-4d92-a3fa-148a7b1445a2 |
+---------------------+--------------------------------------+
tomas@helion-ProLiant-DL380-Gen9:~$ cinder snapshot-list
+--------------------------------------+--------------------------------------+-----------+------------------+------+
|
ID
|
Volume ID
| Status | Display Name | Size |
+--------------------------------------+--------------------------------------+-----------+------------------+------+
| 0ee3d322-29fb-453b-b448-6bf169569cdb | 90773500-d1b9-4d92-a3fa-148a7b1445a2 | available | MujDalsiSnapshot | 1 |
+--------------------------------------+--------------------------------------+-----------+------------------+------+
tomas@helion-ProLiant-DL380-Gen9:~$ nova volume-attach dalsiVM 90773500-d1b9-4d92-a3fa-148a7b1445a2
+----------+--------------------------------------+
| Property | Value
|
+----------+--------------------------------------+
| device | /dev/vdb
|
| id
| 90773500-d1b9-4d92-a3fa-148a7b1445a2 |
| serverId | 497fd77b-af7a-4c29-a0a6-fb327691744e |
| volumeId | 90773500-d1b9-4d92-a3fa-148a7b1445a2 |
+----------+--------------------------------------+
Na závěr si ještě pohrajeme se sítí. Nejprve se ujistěte, že jste na konci minulého labu zrušili router i
nové sítě, ale floating IP máte pro projekt přiřazenou (pokud ne, snadno si opravíte  )
tomas@helion-ProLiant-DL380-Gen9:~$ neutron floatingip-list
+--------------------------------------+------------------+---------------------+---------+
| id
| fixed_ip_address | floating_ip_address | port_id |
+--------------------------------------+------------------+---------------------+---------+
| 090d298a-357f-4def-90fd-752471c6a149 |
| 172.16.2.3
|
|
+--------------------------------------+------------------+---------------------+---------+
tomas@helion-ProLiant-DL380-Gen9:~$ neutron net-list
11 | H P H e l i o n O p e S t a c k
+--------------------------------------+-------------+-----------------------------------------------------+
| id
| name
| subnets
|
+--------------------------------------+-------------+-----------------------------------------------------+
| 3a5b5cd4-0c4b-4bc3-b44e-826c7b19556e | ext-net
| e3be37fb-1ced-432f-950c-99b887bb52c2
|
| 7590c21a-4878-48ae-b957-7562e4dc1d0d | default-net | 2c223f18-79f9-41c0-b19a-e5bdfa294895 192.168.1.0/24 |
+--------------------------------------+-------------+-----------------------------------------------------+
tomas@helion-ProLiant-DL380-Gen9:~$ neutron router-list
tomas@helion-ProLiant-DL380-Gen9:~$ neutron subnet-list
+--------------------------------------+------+----------------+--------------------------------------------------+
| id
| name | cidr
| allocation_pools
|
+--------------------------------------+------+----------------+--------------------------------------------------+
| 2c223f18-79f9-41c0-b19a-e5bdfa294895 |
| 192.168.1.0/24 | {"start": "192.168.1.2", "end": "192.168.1.254"} |
+--------------------------------------+------+----------------+--------------------------------------------------+
Teď se pokusíme v CLI udělat něco podobného, co v prvním labu v GUI – tedy vytvoříme dvě nové sítě,
každou se svým subnetem a router, který je propojuje a připojuje na gateway.
tomas@helion-ProLiant-DL380-Gen9:~$ neutron net-create PrvniSit
Created a new network:
+-----------------+--------------------------------------+
| Field
| Value
|
+-----------------+--------------------------------------+
| admin_state_up | True
|
| id
| d78a23ba-d8d3-46f3-99eb-4f429890338a |
| name
| PrvniSit
|
| router:external | False
|
| shared
| False
|
| status
| ACTIVE
|
| subnets
|
|
| tenant_id
| baa7096fe1d54571900c3758397e0939
|
+-----------------+--------------------------------------+
tomas@helion-ProLiant-DL380-Gen9:~$ neutron net-create DruhaSit
Created a new network:
+-----------------+--------------------------------------+
| Field
| Value
|
+-----------------+--------------------------------------+
| admin_state_up | True
|
| id
| 8c7f0937-0b96-4cf6-bc5f-70884fa58e1b |
| name
| DruhaSit
|
| router:external | False
|
| shared
| False
|
| status
| ACTIVE
|
| subnets
|
|
| tenant_id
| baa7096fe1d54571900c3758397e0939
|
+-----------------+--------------------------------------+
tomas@helion-ProLiant-DL380-Gen9:~$ neutron subnet-create --name PrvniSubnet --allocation-pool
start=192.168.5.100,end=192.168.5.200 --dns-nameserver 8.8.8.8 PrvniSit 192.168.5.0/24
Created a new subnet:
+-------------------+----------------------------------------------------+
| Field
| Value
|
+-------------------+----------------------------------------------------+
| allocation_pools | {"start": "192.168.5.100", "end": "192.168.5.200"} |
| cidr
| 192.168.5.0/24
|
| dns_nameservers | 8.8.8.8
|
| enable_dhcp
| True
|
| gateway_ip
| 192.168.5.1
|
| host_routes
|
|
| id
| 8bb31674-2ba7-45a5-8983-c1da8b738448
|
12 | H P H e l i o n O p e S t a c k
| ip_version
| 4
|
| ipv6_address_mode |
|
| ipv6_ra_mode
|
|
| name
| PrvniSubnet
|
| network_id
| d78a23ba-d8d3-46f3-99eb-4f429890338a
|
| tenant_id
| baa7096fe1d54571900c3758397e0939
|
+-------------------+----------------------------------------------------+
tomas@helion-ProLiant-DL380-Gen9:~$ neutron subnet-create --name DruhySubnet --allocation-pool
start=192.168.6.100,end=192.168.6.200 --dns-nameserver 8.8.8.8 DruhaSit 192.168.6.0/24
Created a new subnet:
+-------------------+----------------------------------------------------+
| Field
| Value
|
+-------------------+----------------------------------------------------+
| allocation_pools | {"start": "192.168.6.100", "end": "192.168.6.200"} |
| cidr
| 192.168.6.0/24
|
| dns_nameservers | 8.8.8.8
|
| enable_dhcp
| True
|
| gateway_ip
| 192.168.6.1
|
| host_routes
|
|
| id
| b9e73792-0441-42ad-a7ba-5efde9f36894
|
| ip_version
| 4
|
| ipv6_address_mode |
|
| ipv6_ra_mode
|
|
| name
| DruhySubnet
|
| network_id
| 8c7f0937-0b96-4cf6-bc5f-70884fa58e1b
|
| tenant_id
| baa7096fe1d54571900c3758397e0939
|
+-------------------+----------------------------------------------------+
tomas@helion-ProLiant-DL380-Gen9:~$ neutron net-list
+--------------------------------------+-------------+-----------------------------------------------------+
| id
| name
| subnets
|
+--------------------------------------+-------------+-----------------------------------------------------+
| 3a5b5cd4-0c4b-4bc3-b44e-826c7b19556e | ext-net
| e3be37fb-1ced-432f-950c-99b887bb52c2
|
| 7590c21a-4878-48ae-b957-7562e4dc1d0d | default-net | 2c223f18-79f9-41c0-b19a-e5bdfa294895 192.168.1.0/24 |
| 8c7f0937-0b96-4cf6-bc5f-70884fa58e1b | DruhaSit
| b9e73792-0441-42ad-a7ba-5efde9f36894 192.168.6.0/24 |
| d78a23ba-d8d3-46f3-99eb-4f429890338a | PrvniSit
| 8bb31674-2ba7-45a5-8983-c1da8b738448 192.168.5.0/24 |
+--------------------------------------+-------------+-----------------------------------------------------+
tomas@helion-ProLiant-DL380-Gen9:~$ neutron router-create DalsiRouter
Created a new router:
+-----------------------+--------------------------------------+
| Field
| Value
|
+-----------------------+--------------------------------------+
| admin_state_up
| True
|
| external_gateway_info |
|
| id
| ca89b936-0c1b-401b-aa66-f5a0c9adab44 |
| name
| DalsiRouter
|
| routes
|
|
| status
| ACTIVE
|
| tenant_id
| baa7096fe1d54571900c3758397e0939
|
+-----------------------+--------------------------------------+
tomas@helion-ProLiant-DL380-Gen9:~$ neutron router-gateway-set ca89b936-0c1b-401b-aa66-f5a0c9adab44 3a5b5cd4-0c4b4bc3-b44e-826c7b19556e
Set gateway for router ca89b936-0c1b-401b-aa66-f5a0c9adab44
tomas@helion-ProLiant-DL380-Gen9:~$ neutron router-interface-add ca89b936-0c1b-401b-aa66-f5a0c9adab44 PrvniSubnet
Added interface 12bdc881-3749-4246-a55a-f8dc8732e8ff to router ca89b936-0c1b-401b-aa66-f5a0c9adab44.
tomas@helion-ProLiant-DL380-Gen9:~$ neutron router-interface-add ca89b936-0c1b-401b-aa66-f5a0c9adab44 DruhySubnet
Added interface 43ddd2ce-39ba-4aaa-9fcc-6116cbbe1a25 to router ca89b936-0c1b-401b-aa66-f5a0c9adab44.
13 | H P H e l i o n O p e S t a c k
Podívejte se do GUI a ověřte si, že výsledek je dle očekávání
Posledním krokem bude vytvořit instanci běžící v některé z našich nových sítí
tomas@helion-ProLiant-DL380-Gen9:~$ nova boot netVM --image debian-wheezy-amd64-20140929-disk --flavor m1.tiny --nic
net-id=d78a23ba-d8d3-46f3-99eb-4f429890338a
+--------------------------------------+--------------------------------------------------------------------------+
| Property
| Value
|
+--------------------------------------+--------------------------------------------------------------------------+
| OS-EXT-AZ:availability_zone
| nova
|
| OS-EXT-STS:power_state
| 0
|
| OS-EXT-STS:task_state
| scheduling
|
| OS-EXT-STS:vm_state
| building
|
| OS-SRV-USG:launched_at
| |
| OS-SRV-USG:terminated_at
| |
| accessIPv4
|
|
| accessIPv6
|
|
| adminPass
| NYERzSDLFn9b
|
| config_drive
|
|
| created
| 2015-03-26T05:06:34Z
|
| flavor
| m1.tiny (ddd64d6e-884c-4277-a068-eae6b370a479)
|
| hostId
|
|
14 | H P H e l i o n O p e S t a c k
| id
| e266c8d8-c6de-4419-aa22-04a9354fbbe2
|
| image
| debian-wheezy-amd64-20140929-disk (dfc71bdf-06ab-42d6-828e-51612cbcd9ac) |
| key_name
| |
| metadata
| {}
|
| name
| netVM
|
| os-extended-volumes:volumes_attached | []
|
| progress
| 0
|
| security_groups
| default
|
| status
| BUILD
|
| tenant_id
| baa7096fe1d54571900c3758397e0939
|
| updated
| 2015-03-26T05:06:34Z
|
| user_id
| 078a6c284c804ba0b68e9e5447043da7
|
+--------------------------------------+--------------------------------------------------------------------------+
A výsledek?
Právě jste pronikli do základů OpenStack CLI, gratuluji!
Na závěr po sobě uklidíme
tomas@helion-ProLiant-DL380-Gen9:~$ nova list
+--------------------------------------+---------+--------+------------+-------------+--------------------------+
| ID
| Name
| Status | Task State | Power State | Networks
|
+--------------------------------------+---------+--------+------------+-------------+--------------------------+
| 497fd77b-af7a-4c29-a0a6-fb327691744e | dalsiVM | ACTIVE | | Running
| default-net=192.168.1.13 |
| e266c8d8-c6de-4419-aa22-04a9354fbbe2 | netVM | ACTIVE | | Running
| PrvniSit=192.168.5.101 |
+--------------------------------------+---------+--------+------------+-------------+--------------------------+
tomas@helion-ProLiant-DL380-Gen9:~$ nova delete dalsiVM
tomas@helion-ProLiant-DL380-Gen9:~$ nova delete netVM
15 | H P H e l i o n O p e S t a c k
tomas@helion-ProLiant-DL380-Gen9:~$ cinder snapshot-list
+--------------------------------------+--------------------------------------+-----------+------------------+------+
|
ID
|
Volume ID
| Status | Display Name | Size |
+--------------------------------------+--------------------------------------+-----------+------------------+------+
| 0ee3d322-29fb-453b-b448-6bf169569cdb | 90773500-d1b9-4d92-a3fa-148a7b1445a2 | available | MujDalsiSnapshot | 1 |
+--------------------------------------+--------------------------------------+-----------+------------------+------+
tomas@helion-ProLiant-DL380-Gen9:~$ cinder snapshot-delete 0ee3d322-29fb-453b-b448-6bf169569cdb
tomas@helion-ProLiant-DL380-Gen9:~$ cinder list
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
|
ID
| Status | Display Name | Size | Volume Type | Bootable | Attached to |
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
| 90773500-d1b9-4d92-a3fa-148a7b1445a2 | available | DalsiDisk | 1 |
None
| false |
|
| bac044cb-c5ca-4c19-828b-47ad7cafd72b | available | MujBootDisk | 4 |
None
| true |
|
+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+
tomas@helion-ProLiant-DL380-Gen9:~$ cinder delete DalsiDisk
tomas@helion-ProLiant-DL380-Gen9:~$ cinder delete MujBootDisk
tomas@helion-ProLiant-DL380-Gen9:~$ neutron router-list
+--------------------------------------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| id
| name
| external_gateway_info
|
+--------------------------------------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ca89b936-0c1b-401b-aa66-f5a0c9adab44 | DalsiRouter | {"network_id": "3a5b5cd4-0c4b-4bc3-b44e-826c7b19556e",
"enable_snat": true, "external_fixed_ips": [{"subnet_id": "e3be37fb-1ced-432f-950c-99b887bb52c2", "ip_address":
"172.16.2.6"}]} |
+--------------------------------------+-------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
tomas@helion-ProLiant-DL380-Gen9:~$ neutron subnet-list
+--------------------------------------+-------------+----------------+----------------------------------------------------+
| id
| name
| cidr
| allocation_pools
|
+--------------------------------------+-------------+----------------+----------------------------------------------------+
| 2c223f18-79f9-41c0-b19a-e5bdfa294895 |
| 192.168.1.0/24 | {"start": "192.168.1.2", "end": "192.168.1.254"} |
| 8bb31674-2ba7-45a5-8983-c1da8b738448 | PrvniSubnet | 192.168.5.0/24 | {"start": "192.168.5.100", "end": "192.168.5.200"} |
| b9e73792-0441-42ad-a7ba-5efde9f36894 | DruhySubnet | 192.168.6.0/24 | {"start": "192.168.6.100", "end": "192.168.6.200"} |
+--------------------------------------+-------------+----------------+----------------------------------------------------+
tomas@helion-ProLiant-DL380-Gen9:~$ neutron router-interface-delete DalsiRouter 8bb31674-2ba7-45a5-8983-c1da8b738448
Removed interface from router DalsiRouter.
tomas@helion-ProLiant-DL380-Gen9:~$ neutron router-interface-delete DalsiRouter b9e73792-0441-42ad-a7ba-5efde9f36894
Removed interface from router DalsiRouter.
tomas@helion-ProLiant-DL380-Gen9:~$ neutron net-list
+--------------------------------------+-------------+-----------------------------------------------------+
| id
| name
| subnets
|
+--------------------------------------+-------------+-----------------------------------------------------+
| 3a5b5cd4-0c4b-4bc3-b44e-826c7b19556e | ext-net
| e3be37fb-1ced-432f-950c-99b887bb52c2
|
| 7590c21a-4878-48ae-b957-7562e4dc1d0d | default-net | 2c223f18-79f9-41c0-b19a-e5bdfa294895 192.168.1.0/24 |
| 8c7f0937-0b96-4cf6-bc5f-70884fa58e1b | DruhaSit
| b9e73792-0441-42ad-a7ba-5efde9f36894 192.168.6.0/24 |
| d78a23ba-d8d3-46f3-99eb-4f429890338a | PrvniSit
| 8bb31674-2ba7-45a5-8983-c1da8b738448 192.168.5.0/24 |
+--------------------------------------+-------------+-----------------------------------------------------+
tomas@helion-ProLiant-DL380-Gen9:~$ neutron net-delete PrvniSit
Deleted network: PrvniSit
tomas@helion-ProLiant-DL380-Gen9:~$ neutron net-delete DruhaSit
Deleted network: DruhaSit
2.6.
Parsování
Linux a příkazová řádka je odvěká kombinace, takže nepřekvapí, že obsahuje řadu nástrojů pro parsování
výstupu. Vyzkoušejme si jednoduchý příklad. Nejprve vypišme seznam image bez nějakých modifikací:
16 | H P H e l i o n O p e S t a c k
tomas@helion-ProLiant-DL380-Gen9:~$ glance image-list
+--------------------------------------+--------------------------------------------------------------------------------------+-------------+------------------+------------+--------+
| ID
| Name
| Disk Format | Container Format | Size
| Status |
+--------------------------------------+--------------------------------------------------------------------------------------+-------------+------------------+------------+--------+
| 8b8f00f8-5543-4a07-9c85-485889f1c2ff | ansible
| qcow2
| bare
| 1300889600 | active |
| abcac3ce-4180-4817-b848-939bb48080c0 | dbaas-api_1.1.0.35
| qcow2
| bare
| 589732352 | active |
| 6e2b077a-26fe-4eac-bfd2-937c9937791e | dbaas-conductor_1.1.0.35
| qcow2
| bare
| 589570048 | active |
| 6a42e333-9bb6-40a7-862f-11b53fffb676 | dbaas-database_1.1.0.35
| qcow2
| bare
| 680777216 | active |
| ef6211f6-95a9-4eb6-a45b-cd9f9d4ab641 | dbaas-guest_1.1.0.35
| qcow2
| bare
| 654554112 | active |
| 16f03c0b-6c47-4ac8-ab5a-19e64338a8c0 | dbaas-messaging_1.1.0.35
| qcow2
| bare
| 584186368 | active |
| ee7280a3-b4ad-4bd1-98e5-6639cefe51c3 | dbaas-taskmanager_1.1.0.35
| qcow2
| bare
| 589372416 | active |
| dfc71bdf-06ab-42d6-828e-51612cbcd9ac | debian-wheezy-amd64-20140929-disk
| qcow2
| bare
| 221489152 | active |
| 0d54050e-8b4f-454b-adc1-6ee23ad1efba | HP Helion Development Platform CE - Application Lifecycle Service Installer 1.1.0.19 | qcow2
| bare
| 504060416 | active |
| 8be1cda2-b2be-4fa6-a5b4-0e63e66e0491 | HP Helion Development Platform CE - Application Lifecycle Service Seed Node 1.1.0.19 | qcow2
| bare
| 3771465728 | active |
| a652e1e2-462f-41ef-926c-2fe716625156 | marketplace-api_1.1.0.40
| qcow2
| bare
| 588244480 | active |
| b7623074-6909-4b57-b139-dd2935a03284 | marketplace-database_1.1.0.40
| qcow2
| bare
| 666752512 | active |
| 2fd67325-5830-497c-aa19-c71701eb4c2e | marketplace-engine_1.1.0.40
| qcow2
| bare
| 575566848 | active |
| 15e23004-0dea-4f0e-b07f-329535554e34 | marketplace-messaging_1.1.0.40
| qcow2
| bare
| 570447360 | active |
| b9942ece-e544-4dff-b7c8-b7d0d0769672 | msgaas-rabbit-cluster_1.0.0.2
| qcow2
| bare
| 507274240 | active |
| a37d347e-e9b1-4814-b47c-c730c2727a1f | msgaas-rabbit-cluster_1.0.0.2
| qcow2
| bare
| 507274240 | active |
| 35c7876d-a570-4358-a44a-bcaa303b2673 | msgaas-rabbit-cluster_1.1.0.3
| qcow2
| bare
| 525925376 | active |
+--------------------------------------+--------------------------------------------------------------------------------------+-------------+------------------+------------+--------+
Možná bychom teď potřebovali pro další zpracování získat jen všechna ID našich obrazů, ostatní
informace nám tam překážejí. Výstup příkazu můžeme nasměrovat do jiné utilitky s nzvek awk, která
dokáže parsovat jednotlivá slova. Takto si vytiskneme vždy jen druhé slovo v řádku:
tomas@helion-ProLiant-DL380-Gen9:~$ glance image-list | awk '{print $2}'
ID
8b8f00f8-5543-4a07-9c85-485889f1c2ff
abcac3ce-4180-4817-b848-939bb48080c0
6e2b077a-26fe-4eac-bfd2-937c9937791e
6a42e333-9bb6-40a7-862f-11b53fffb676
ef6211f6-95a9-4eb6-a45b-cd9f9d4ab641
16f03c0b-6c47-4ac8-ab5a-19e64338a8c0
ee7280a3-b4ad-4bd1-98e5-6639cefe51c3
dfc71bdf-06ab-42d6-828e-51612cbcd9ac
0d54050e-8b4f-454b-adc1-6ee23ad1efba
8be1cda2-b2be-4fa6-a5b4-0e63e66e0491
a652e1e2-462f-41ef-926c-2fe716625156
b7623074-6909-4b57-b139-dd2935a03284
2fd67325-5830-497c-aa19-c71701eb4c2e
15e23004-0dea-4f0e-b07f-329535554e34
b9942ece-e544-4dff-b7c8-b7d0d0769672
a37d347e-e9b1-4814-b47c-c730c2727a1f
35c7876d-a570-4358-a44a-bcaa303b2673
To není špatné, ale oddělující čáry nám vycházejí jako prázdné řádky (jsou totiž jedno slovo, takže druhé
neexistuje a tím vznikne prázdný řádek ve výstupu). Awk umožňuje klást podmínky, tak například nám
vypíše pouze řádky, které splňují nějaké kritérium (například název image, tedy $4, obsahuje nějaké
znaky). My jednoduše budeme chtít, aby se něco vytisklo jen, pokud $2 existuje:
tomas@helion-ProLiant-DL380-Gen9:~$ glance image-list | awk '{if ($2) print $2}'
ID
8b8f00f8-5543-4a07-9c85-485889f1c2ff
abcac3ce-4180-4817-b848-939bb48080c0
6e2b077a-26fe-4eac-bfd2-937c9937791e
6a42e333-9bb6-40a7-862f-11b53fffb676
ef6211f6-95a9-4eb6-a45b-cd9f9d4ab641
16f03c0b-6c47-4ac8-ab5a-19e64338a8c0
ee7280a3-b4ad-4bd1-98e5-6639cefe51c3
dfc71bdf-06ab-42d6-828e-51612cbcd9ac
0d54050e-8b4f-454b-adc1-6ee23ad1efba
8be1cda2-b2be-4fa6-a5b4-0e63e66e0491
a652e1e2-462f-41ef-926c-2fe716625156
b7623074-6909-4b57-b139-dd2935a03284
17 | H P H e l i o n O p e S t a c k
2fd67325-5830-497c-aa19-c71701eb4c2e
15e23004-0dea-4f0e-b07f-329535554e34
b9942ece-e544-4dff-b7c8-b7d0d0769672
a37d347e-e9b1-4814-b47c-c730c2727a1f
35c7876d-a570-4358-a44a-bcaa303b2673
To už je lepší, prázdné řádky jsou pryč. Ještě nám tam zbývá název sloupce, tedy „ID“. V takovém
případě ho do výstupu zahrnout nechceme:
tomas@helion-ProLiant-DL380-Gen9:~$ glance image-list | awk '{if ($2!="ID" && $2) print $2}'
8b8f00f8-5543-4a07-9c85-485889f1c2ff
abcac3ce-4180-4817-b848-939bb48080c0
6e2b077a-26fe-4eac-bfd2-937c9937791e
6a42e333-9bb6-40a7-862f-11b53fffb676
ef6211f6-95a9-4eb6-a45b-cd9f9d4ab641
16f03c0b-6c47-4ac8-ab5a-19e64338a8c0
ee7280a3-b4ad-4bd1-98e5-6639cefe51c3
dfc71bdf-06ab-42d6-828e-51612cbcd9ac
0d54050e-8b4f-454b-adc1-6ee23ad1efba
8be1cda2-b2be-4fa6-a5b4-0e63e66e0491
a652e1e2-462f-41ef-926c-2fe716625156
b7623074-6909-4b57-b139-dd2935a03284
2fd67325-5830-497c-aa19-c71701eb4c2e
15e23004-0dea-4f0e-b07f-329535554e34
b9942ece-e544-4dff-b7c8-b7d0d0769672
a37d347e-e9b1-4814-b47c-c730c2727a1f
35c7876d-a570-4358-a44a-bcaa303b2673
A je to – máme očištěný výstup, který můžeme použít pro další zpracování – o tom za chvilku.
2.7.
Praktický příklad skriptu
Pro tento lab jsem potřeboval vytvořit prostředí pro 30 účastníků - vytvořit projekt v Helion OpenStack,
uživatelské přihlášení a loginy v serveru v labu (to s Helion nijak nesouvisí). Stačilo z pozvánky v kalendáří
vzít začátek vašich emailových adres a uložit to po řádkách do souboru. Následně spustit následující
skript, který udělá co potřebujeme. Všimněte si, že nastavení OpenStack prostředí je kratší a jednodušší,
než vytvoření vašeho loginu do serveru v labu 
#!/bin/bash
while read line
do
name=$line
keystone tenant-create --name $line
keystone user-create --tenant $line --name $line --pass helion
home="/home/$line"
useradd $line -s /bin/bash
echo "$line:helion" | chpasswd
cp -R /etc/skel "$home" && echo $'\e[32m'"Copied skeleton to: $home"$'\e[m' || ( exit_code=$?; echo
$'\e[31m'"Failed to create: $home"$'\e[m' ) >&2
chown -R "$line:$line" "$home" && echo $'\e[32m'"Set owner on: $home"$'\e[m' || ( exit_code=$?; echo
$'\e[31m'"Failed to set owner on: $home"$'\e[m' ) >&2
done < $1
Tím pádem je možné kdykoli do prostředí přidat další účastníky školení... přece to nebudete všechno
klikat.
18 | H P H e l i o n O p e S t a c k
2.8.
Příklad skriptu s parsováním
Pokud chcete v OpenStack vymazat router, musíte nejdřív zrušit jeho interface. Zkusme si napsat
jednoduchý skript, kterému jako parametr pošleme ID routeru a on nejprve zjistí jeho interface, ty zruší
a následně smaže celý router. Vypadalo by to nějak takhle:
for port in $(neutron router-port-list $1 | awk '{if ($2 != "id" && $2) print $2}')
do
neutron router-interface-delete $1 port=$port
done
neutron router-delete $1
Jak script vytvořit? Použijte třeba editor nano (nano jmenoskriptu.sh) a do něj tento text vložte (schránka a
pravé tlačítko), pak to uložte. Ještě musíte skript učinit spustitelný příkazem
Chmod +x jmenoskriptu.sh
Jak použít? Takhle:
root@helion-ProLiant-DL380-Gen9:~# neutron router-list
+--------------------------------------+------+-----------------------+
| id
| name | external_gateway_info |
+--------------------------------------+------+-----------------------+
| dd11512d-469c-4285-b27c-708a258f9eef | test | null
|
+--------------------------------------+------+-----------------------+
root@helion-ProLiant-DL380-Gen9:~# ./routerdelete.sh dd11512d-469c-4285-b27c-708a258f9eef
Removed interface from router dd11512d-469c-4285-b27c-708a258f9eef.
Deleted router: dd11512d-469c-4285-b27c-708a258f9eef
root@helion-ProLiant-DL380-Gen9:~# neutron router-list
... tady je prázdno 
Tak vidíte, skriptování není těžké.
3. Lidsky čitelné datové formáty
Prakticky všechny moderní nástroje používají k popisu nějaké datové struktury lidsky čitelné formáty
místo dřívějších binárních souborů. Určitě znáte jeden z nich, který je ale (z mnoha důvodů) spíše na
ústupu – XML. V rámci našeho labu se setkáme s YAML a JSON.
3.1.
YAML
YAML je předpis datové struktury, který je extrémně dobře lidsky čitelný. Přestože se může zdát, že jde o
text bez zřejmých pravidel, tato jsou jasně daná a díky nim dokáže počítač celou strukturu zpracovat.
Myslím, že následující příklad tak není třeba nijak podrobně vysvětlovat – poznáte, jaké informace jsou
obsaženy a v jaké struktuře?
--zamestnanci:
jmeno: "tomas"
napoj: "pivo"
jazyk:
- "EN"
- "CZ"
jmeno: "martin"
napoj: "vino"
jazyk:
- "EN"
19 | H P H e l i o n O p e S t a c k
- "SK"
YAML (případně jeho různé podmnožiny) je velmi často využíván pro šablony, konfigurační soubory,
předpisy a tak podobně. Jsou na něm postaveny například OpenStack Heat infrastrukturní šablony nebo
Ansible playbooky.
3.2.
JSON
Formát JSON je jiný předpis datové struktury, který je velmi úsporný, velmi dobře zpracovatelný
počítačem, a přitom si zachovává dobrou lidskou čitelnost. Takhle vypadají stejná data z předchozího
příladu v JSON formátu:
{"zamestnanci":[
{
"jmeno":"tomas",
"napoj":"pivo",
"jazyk":["EN", "CZ"]
},
{
"jmeno":"martin",
"napoj":"vino",
"jazyk":["EN", "SK"]
}
]
}
Pro svoje vlastnosti je velmi oblíbený v různých API, zejména v RESTful. Do této kategorie patří
OpenStack API, iLO, OneView, iMC i SDN API a také API celé řady nástrojů z dílny HP Software.
4. Orchestrační šablony OpenStack Heat
4.1.
Nejjednodušší šablona
Připojte se do GUI a jděte na záložku Orchestration, Stacks a klikněte na Launch Stack
Šablonu můžete zadat přímo do okna, nebo ji nahrajete ve formě souboru. Obsah šablony používá YAML
strukturu a pro začátek bude vypadat takto:
heat_template_version: 2013-05-23
description: Vytvorime jednoduchou instanci
resources:
PrvniPokus:
20 | H P H e l i o n O p e S t a c k
type: OS::Nova::Server
properties:
key_name: MujKlic
image: debian-wheezy-amd64-20140929-disk
flavor: m1.tiny
Vložte do okna (nebo přes soubor) a klikněte na Next
Použijte nějaké jméno, zadejte heslo a klikněte na Launch
Počkejte až všechno doběhne
21 | H P H e l i o n O p e S t a c k
Koukněte se do instancí – je tam?
Nic složitého, ale také zatím nic zvlášť užitečného. Vraťte se do Stacků a zrušte ho kliknutím na Delete
Stack
Šablona může být interaktivnější a některé parametry si nechat zadat uživatelem až v okamžiku jejího
deploymentu. Následující příklad dává možnost definovat typ (velikost/flavor) serveru, ale chceme dát
na výběr jen ze dvou možností. Dále využijeme možnosti formovat výstup, ve kterém předáme dál
některé informace z instalace šablony, v našem případě jakou IP adresu VM dostala (teď se vám to bude
zdát zbytečné, ale až se dostaneme k možnosti navázat šablonu na další operace v Ansiblu nebo jinému
nástroji, uvidíte, jak je předání parametrů dál důležité). Vezměte tento text a vložte do schránky (nebo si
přepište do souboru).
heat_template_version: 2013-05-23
description: Vytvorime jednoduchou instanci
parameters:
instance_type:
type: string
label: Typ instance
description: Vyberte si flavor m1.tiny nebo m1.small
constraints:
- allowed_values: [ m1.tiny, m1.small ]
description: Pripustne hodnoty jsou m1.tiny nebo m1.small.
resources:
PrvniPokus:
type: OS::Nova::Server
properties:
key_name: MujKlic
image: debian-wheezy-amd64-20140929-disk
flavor: { get_param: instance_type }
22 | H P H e l i o n O p e S t a c k
outputs:
instance_ip:
description: IP adresa vysledne instance
value: { get_attr: [PrvniPokus, first_address] }
Založte tento Stack a klikněte na Next
Všimněte si, že GUI po vás chce vyplnit onen parametr a klikněte na Launch
Až bude nahoře, klikněte na Stack pro další detaily
23 | H P H e l i o n O p e S t a c k
Na první záložce je obrázek topologie šablony, ale to zatím neukazuje nic zajímavého. Klikněte na
Overview
Všimněte si některých detailů včetně našeho output pravidla
24 | H P H e l i o n O p e S t a c k
Na úvod to není špatné. Zrušte tento Stack a zkusíme si něco pořádného.
4.2.
Komplexnější šablona
Přestaňme chodit kolem horké kaše a připravme si něco složitějšího a užitečnějšího. Zrušte aktuální
Stack a vytvoříme si nový, komplexnější. YAML je dostatečně dobře čitelný, takže nebudeme vysvětlovat
jednotlivé aspekty této šablony – pročtěte si jí a určitě pochopíte, co se tady děje. Vytvoříme si dvě nové
sítě, dva subnety, nový router a zajistíme potřebné propojení. Dále založíme dva volume, dva servery
koukající každý do jiné sítě a volume k nim namapujeme. Vypadá to takhle:
heat_template_version: 2013-05-23
description: Vytvorime jednoduchou instanci
resources:
sit1:
type: OS::Neutron::Net
properties:
name: MojeSit1
sit2:
type: OS::Neutron::Net
properties:
name: MojeSit2
subnet1:
type: OS::Neutron::Subnet
properties:
network_id: { get_resource: sit1 }
cidr: 192.168.10.0/24
allocation_pools:
25 | H P H e l i o n O p e S t a c k
- start: 192.168.10.100
end: 192.168.10.200
subnet2:
type: OS::Neutron::Subnet
properties:
network_id: { get_resource: sit2 }
cidr: 192.168.11.0/24
allocation_pools:
- start: 192.168.11.100
end: 192.168.11.200
router:
type: OS::Neutron::Router
properties:
external_gateway_info:
network: ext-net
router_interface:
type: OS::Neutron::RouterInterface
properties:
router_id: { get_resource: router }
subnet_id: { get_resource: subnet1 }
router_interface2:
type: OS::Neutron::RouterInterface
properties:
router_id: { get_resource: router }
subnet_id: { get_resource: subnet2 }
server1_port:
type: OS::Neutron::Port
properties:
network_id: { get_resource: sit1 }
fixed_ips:
- subnet_id: { get_resource: subnet1 }
server2_port:
type: OS::Neutron::Port
properties:
network_id: { get_resource: sit2 }
fixed_ips:
- subnet_id: { get_resource: subnet2 }
server1:
type: OS::Nova::Server
properties:
key_name: MujKlic
image: debian-wheezy-amd64-20140929-disk
flavor: m1.tiny
networks:
- port: { get_resource: server1_port }
server2:
type: OS::Nova::Server
properties:
key_name: MujKlic
image: debian-wheezy-amd64-20140929-disk
flavor: m1.tiny
networks:
- port: { get_resource: server2_port }
26 | H P H e l i o n O p e S t a c k
volume1:
type: OS::Cinder::Volume
properties:
size: 1
volume2:
type: OS::Cinder::Volume
properties:
size: 1
vol1_att:
type: OS::Cinder::VolumeAttachment
properties:
instance_uuid: { get_resource: server1 }
volume_id: { get_resource: volume1 }
mountpoint: /dev/vdb
vol2_att:
type: OS::Cinder::VolumeAttachment
properties:
instance_uuid: { get_resource: server2 }
volume_id: { get_resource: volume2 }
mountpoint: /dev/vdb
Založte tuto šablonu (už víte jak) a až bude nastartována, pojďme si ji prohlédnout.
Takhle třeba Stack topologie ukazuje návaznosti
Prohlédněte si vytvořené zdroje (screenshot nezahrnuje všechny)
27 | H P H e l i o n O p e S t a c k
a události
28 | H P H e l i o n O p e S t a c k
Prověříme si síťovou topologii
29 | H P H e l i o n O p e S t a c k
Instance
a volume
Zkrátka všechno je tak, jak jsme chtěli. Zopakujme pár poznatků:
30 | H P H e l i o n O p e S t a c k






4.3.
Už dříve jsme si vyzkoušeli, že šablona může zahrnovat mnoho vstupních parametrů, takže
dokument může být poměrně univerzální a při použití šablony si ji uživatel doladí dle reálných
potřeb
Šablona je v jednoduchém textovém formátu a sama o sobě může sloužit jako dokumentace
(Infrastructure as code)
Jednoduchý textový formát můžete prohnat libovolným versioning systémem jako je třeba Git a
snadno zjistíte rozdíly mezi verzemi šablony
Kromě vyzkoušených věcí můžete používat konfigurační skripty – k tomu se ještě později
dostaneme
Výsledkem může být předání parametrů do dalšího systému, například něco, co zajistí
konfiguraci OS a instalaci aplikace
Heat šablony podporují automatické škálování a redundanci a o tom hned v další kapitole
Heat autoscaling a autohealing
OpenStack Heat dokáže víc, než jsme dosud viděli, ale jde o funkce, které se v tuto chvíli poměrně
bouřlivě vyvíjí. Autoscaling je už na velmi dobré úrovni, autohealing zatím není implementován ve
formě, která by byla produkčně použitelná. Tato funkcionalita je nad rámec dnešního labu, ale pojďme si
alespoň popsat o co jde.
Autoscaling je funkce Heat, která umožňuje v rámci topologie automaticky naklonovat (nebo pozabíjet)
instance podle nějakých parametrů. Těmito parametry typicky bývá metrika přicházející z OpenStack
modulu Ceilometer a půjde například o zatížení CPU. Definujete tedy pravidlo, že počet web serverů se
má pohybovat mezi 2 až 8 a pokud je zátěž členů větší, než třeba 70%, nastartuje se další VM (až do
definovaného maxima). Pokud zátěž klesne pod hranici 50% a vydrží tam po nějaký čas (cool time, třeba
půl hodiny), Heat zabije nadbytečné VM. S nástupem Helion OpenStack 2.0 bude v řešení k dispozici i
load-balancer jako služba (LBaaS) a bude zajištěno i automatické přidání nových VM do load-balancing
skupiny. Důležité je také nezaměňovat autoscaling infrastruktury s možnosti autoscaling aplikací v PaaS –
v prvním případě jde jen o bootování image z template, zatímco v PaaS se jedná o komplexní
deployment aplikace, začlenění do RabbitMQ a mnoho dalších operací.
Je dobré si uvědomit, že autoscaling vyžaduje připravenost aplikace – tedy šablona vaší VM musí být
schopna si sama nathnout state i obsah (třeba ze sdílené databáze).
Autohealing implementace v Heat není v aktuální stavu doporučena pro produkci, ale pracuje se na
kompletní předělání v rámci komunity. Myšlenkou je, aby šablona udržovala svůj stav – tedy pokud
dojde k havárii některé komponenty popsané v šabloně (například zmizí VM v důsledku pádu fyzického
compute node), Heat by zajistil spuštění této VM na jiném compute node (nabootováním ze stejného
StoreVirtual volume například).
5. OpenStack API
Veškeré operace, které jsme dosud dělali (a ještě MNOHO dalších) nemusíme provádět pouze
z grafického rozhraní, příkazové řádky nebo konstrukcí šablony. To všechno je dostupné i ve formě
RESTful API.
RESTful je koncept v současnosti velmi rozšířeného způsobu interakce komponent a aplikací postavený
na jednoduchých webových voláních podobně, jako přistupujete třeba na nějakou webovou stránku.
31 | H P H e l i o n O p e S t a c k
URL říká jakou funkci voláte (třeba práce s volume) a přístupová metoda znamená co s ní chcete dělat
(vytvořit, přečíst, upravit, smazat). Formát dat je lidsky čitelný JSON formát. RESTful API najdete u
mnoha dalších HP produktů jako je:











iLO
OneView
Moonshot chassis manager
iMC
VAN SDN Controller
3PAR
StoreVirtual
Cloud Service Automation
Server Automation
Operation Orchestration
... a mnoho dalších
RESTful rozhraní můžete využívat v jakémkoli programovacím jazyce bez jakýchkoli proprietárních
knihoven.
V našem labu si pouze poodhalíme možnosti, nebudeme dělat nic komplexního. Využijeme toho, že
OpenStack kromě čistého API nabízí i předpřipravené knihovny pro řadu programovacích jazyků včetně
velmi oblíbeného Python (ve kterém je ostatně OpenStack napsán). Použití této SDK nám celou situaci
ještě víc zjednoduší.
Proč se může OpenStack API hodit?



Jakékoli jiné aplikace lze integrovat a vytvářet tak infrastrukturu dle jejich předpisu – například
HP Cloud Service Automation vám dá grafické designéry služeb, billing, portál pro odběratele
služeb a k tomu všemu využívá OpenStack API
API se dá použít i ke čtení, takže například produkt jako je Server Automation dokáže načítat IP
adresy nových VM, aby na ně nainstaloval potřebné patche
Všechna taková „udělátka“ budou fungovat na všech OpenStack instalacích – nejen HP Helion
OpenStack, ale i HP Helion Public Cloud a všechny další produkty třetích stran využívající
OpenStack
Vyzkoušíme si naprogramovat tři příkladové jednoduché aplikace. Připojte se přes SSH do labu (viz
předchozí instrukce) a skripty tam najdete připravené. Nejprve si každý okomentujeme v tomto textu a
následně si je spusťte. Před tím budete muset nahrát do environmental proměnných přihlašovací údaje
stejně, jak jsme to dělali u příkazové řádky (použijte příkaz source api.sh jméno heslo projekt).
První skript nám ukáže jak natáhnout přihlašovací údaje a přihlásit se ke komponentě glance, která řeší
repozitář diskových obrazů. Následně je jednoduše vypíšeme na obrazovku.
from os import environ as env
import glanceclient.v2.client as glclient
import keystoneclient.v2_0.client as ksclient
keystone = ksclient.Client(auth_url=env['OS_AUTH_URL'],
username=env['OS_USERNAME'],
32 | H P H e l i o n O p e S t a c k
password=env['OS_PASSWORD'],
tenant_name=env['OS_TENANT_NAME'],
cacert=env['OS_CACERT'])
glance_endpoint = keystone.service_catalog.url_for(service_type='image')
glance = glclient.Client(glance_endpoint, token=keystone.auth_token, cacert=env['OS_CACERT'])
images = list(glance.images.list())
print 'Tak vidim tady tyto image:'
print '--------------------------'
for image in images:
print image['name']
Pokud máte základy Python, jistě nic složitého 
Vyzkoušejte si tuto aplikaci, ale před tím (pokud jste přeskočili některé předchozí laby nebo se od
serveru odpojili) zavolejte (na vaše loginy upravený) příkaz source api.sh tomas.kubica helion tomas.kubica pro
nastavení environmental proměnných s přihlašovacími údaji do OpenStack. Aplikace se spouští příkazem
python následovaným jejím jménem, tedy:
tomas@helion-ProLiant-DL380-Gen9:~$ python imagelist.py
Tak vidim tady tyto image:
-------------------------msgaas-rabbit-cluster_1.1.0.3
debian-wheezy-amd64-20140929-disk
No a je to, funguje. Vyzkoušejme něco o trochu složitějšího – pojďme vytvořit VM (s výchozím
nastavením). Aplikaci předáme požadované jméno VM jako argument, ale nechceme jen ať VM vytvoří,
ale sleduje, kdy bude aktivní. Tedy po vytvoření instance budeme informovat uživatele, že se systém
teprve utváří a až bude hotovo, vypíšeme vše co vidíme. Skript vypadá takhle:
from os import environ as env
import glanceclient.v2.client as glclient
import keystoneclient.v2_0.client as ksclient
import novaclient.v1_1.client as nvclient
import time,sys
print "Kontaktujeme OpenStack"
nova = nvclient.Client(auth_url=env['OS_AUTH_URL'],
username=env['OS_USERNAME'],
api_key=env['OS_PASSWORD'],
project_id=env['OS_TENANT_NAME'],
cacert=env['OS_CACERT'])
image = nova.images.find(name="debian-wheezy-amd64-20140929-disk")
flavor = nova.flavors.find(name="m1.tiny")
name = sys.argv[1]
print "Vytvarime novou VM " + name
instance = nova.servers.create(name=name, image=image,
flavor=flavor, key_name="MujKlic")
print "VM startuje"
booting = True
while booting:
instance = nova.servers.get(instance.id)
33 | H P H e l i o n O p e S t a c k
sys.stdout.write('.')
sys.stdout.flush()
if instance.status != 'BUILD': booting = False
time.sleep(2)
print
print "VM je vytvorena a bezi"
print
print 'Tak vidim tady tyto servery:'
print '--------------------------'
servers = list(nova.servers.list())
for server in servers:
print server.status + ' ' + server.name
Vyzkoušejte to:
tomas@helion-ProLiant-DL380-Gen9:~$ python vytvorserver.py hop
Kontaktujeme OpenStack
Vytvarime novou VM hop
VM startuje
..................
VM je vytvorena a bezi
Tak vidim tady tyto servery:
-------------------------ACTIVE hop
ACTIVE hopla
ACTIVE testik
Zopakujte to víckrát, ať máte stejně jako třeba tři spuštěné instance, protože v dalším skriptu budeme
instance naopak mazat. Následující skript si vypíše všechny instance a jednu po druhé zlikviduje.
from os import environ as env
import glanceclient.v2.client as glclient
import keystoneclient.v2_0.client as ksclient
import novaclient.v1_1.client as nvclient
import time,sys
print "Kontaktujeme OpenStack"
nova = nvclient.Client(auth_url=env['OS_AUTH_URL'],
username=env['OS_USERNAME'],
api_key=env['OS_PASSWORD'],
project_id=env['OS_TENANT_NAME'],
cacert=env['OS_CACERT'])
print 'Jdeme likvidovat VM'
print '--------------------------'
servers = list(nova.servers.list())
for server in servers:
print server.name + " konci..."
nova.servers.delete(server)
Vyzkoušejte to:
tomas@helion-ProLiant-DL380-Gen9:~$ python zabvsechny.py
Kontaktujeme OpenStack
Jdeme likvidovat VM
-------------------------hop konci...
hopla konci...
testik konci...
34 | H P H e l i o n O p e S t a c k
tomas@helion-ProLiant-DL380-Gen9:~$ nova list
+--------------------------------------+--------+---------+------------+-------------+--------------------------+
| ID
| Name | Status | Task State | Power State | Networks
|
+--------------------------------------+--------+---------+------------+-------------+--------------------------+
| 4005ef9e-1320-4553-87e3-173d25d1c3a4 | hop
| DELETED | | Running
| default-net=192.168.1.30 |
| 2b5744d2-7c22-4f1d-97b2-d78e105f5d8f | hopla | ACTIVE | deleting | Running
| default-net=192.168.1.29 |
| 6c54ae5e-1bc8-4124-865b-a430a6815fe3 | testik | ACTIVE | deleting | Running
| default-net=192.168.1.28 |
+--------------------------------------+--------+---------+------------+-------------+--------------------------+
tomas@helion-ProLiant-DL380-Gen9:~$ nova list
+----+------+--------+------------+-------------+----------+
| ID | Name | Status | Task State | Power State | Networks |
+----+------+--------+------------+-------------+----------+
+----+------+--------+------------+-------------+----------+
To by pro tento lab stačilo – účelem je dát nahlédnout do možností API, ne důkladně proškolit
programování pro OpenStack.
6. Úvod do orchestrace s HP Cloud Service Automation
Bude k dispozici v pozdějších verzích lab guide
7. Starejme se o vnitřek VM s Ansible
7.1.
K čemu je to dobré?
HP Helion OpenStack nabízí infrastrukturu jako službu – získáte výpočetní, ukládací a síťové prostředky
rychle, jednoduše a z jediného nástroje. Ukázali jsme si, že díky použití diskových obrazů, snapshotů a
možnosti modifikací OS uvnitř (například vsunutí ověřovacích klíčů nebo spuštění jednoduchého skriptu)
můžete nabootovat instanci v potřebném stavu.
Často ale chcete ještě větší flexibilitu – varieta potřebných konfigurací vnitřku instancí je příliš velká na
to, abyste chtěli mít sto různých image a hlavně se vám nechce je neustále předělávat tak, jak se
objevuje potřeba změn či instalací nějakých patchů. Chtělo by to nástroj, který by po vzniku instance
zařídil vše co je potřeba k tomu, aby se OS a aplikace nacházeli v tom správném stavu, verzi, ve všech
vhodných návaznostech. Jednoduché vyvolání skriptu, které OpenStack nabízí, v takovém případě
nebude stačit.
V rámci labu se seznámíme s dvojicí řešení zaměřených přesně na tento problém. Pokud hledáte něco
jednoduchého a open source, ukážeme si Ansible. Pokud ovšem chcete něco v plné palbě, s obrovskou
škálou šablon, grafickým prostředím a enterprise podporou, použijte HP Server Automation.
7.2.
Ansible
7.2.1 Instalace
V rámci labu budete používat hotovu šablonu s názvem ansible a přihlašovacími údaji ansible/ansible,
takže instalovat Ansible server nebudete muset. Pokud byste někdy potřebovali, tak buď použijte balíček
přímo z Linux OS (většinou vede na starší verzi) nebo získejte nejnovější verzi následujícím postupem:
export http_proxy=http://web-proxy.corp.hp.com:8088
apt-get update
apt-get install python-pip python-dev git -y
pip install PyYAML jinja2 paramiko --proxy=web-proxy.corp.hp.com:8088
git config --global http.proxy http://web-proxy.corp.hp.com:8088
git clone https://github.com/ansible/ansible.git
cd ansible
35 | H P H e l i o n O p e S t a c k
make install
git submodule update --init --recursive
7.2.2 Příprava labu
Infrastruktura, na které to budme zkoušet zahrnuje tři servery, z toho dva jsou v roli prázdných Linux
systémů a třetí bude fungovat jako Ansible server. Abychom nemuseli naklikávat potřebné věci ručně,
použijte následující Heat šablonu (už víte jak) s tím, že ve vašem projektu musí existovat klíč s názvem
MujKlic (pokud ne, šablonu si upravte na jiné jméno). Pokud máte v projektu ještě nějakou další
infrastrukturu, zrušte ji, ať máte dostatek zdrojů.
Šablona vypadá takhle:
heat_template_version: 2013-05-23
description: Ansible lab
resources:
firewall:
type: OS::Neutron::SecurityGroup
properties:
name: firewall
description: Ping, SSH, web
rules:
- protocol: icmp
- protocol: tcp
port_range_min: 22
port_range_max: 22
- protocol: tcp
port_range_min: 80
port_range_max: 80
ansible_net:
type: OS::Neutron::Net
properties:
name: AnsibleNet
ansible_subnet:
type: OS::Neutron::Subnet
properties:
network_id: { get_resource: ansible_net }
cidr: 192.168.20.0/24
allocation_pools:
- start: 192.168.20.100
end: 192.168.20.200
ansible_router:
type: OS::Neutron::Router
properties:
external_gateway_info:
network: ext-net
router_interface:
type: OS::Neutron::RouterInterface
properties:
router_id: { get_resource: ansible_router }
subnet_id: { get_resource: ansible_subnet }
ansible_port1:
type: OS::Neutron::Port
36 | H P H e l i o n O p e S t a c k
properties:
network_id: { get_resource: ansible_net }
fixed_ips:
- subnet_id: { get_resource: ansible_subnet }
security_groups:
- {get_resource: firewall}
ansible_port2:
type: OS::Neutron::Port
properties:
network_id: { get_resource: ansible_net }
fixed_ips:
- subnet_id: { get_resource: ansible_subnet }
security_groups:
- {get_resource: firewall}
ansible_port3:
type: OS::Neutron::Port
properties:
network_id: { get_resource: ansible_net }
fixed_ips:
- subnet_id: { get_resource: ansible_subnet }
security_groups:
- {get_resource: firewall}
floating_ip1:
type: OS::Neutron::FloatingIP
properties:
floating_network_id: 3a5b5cd4-0c4b-4bc3-b44e-826c7b19556e
port_id: { get_resource: ansible_port1 }
floating_ip2:
type: OS::Neutron::FloatingIP
properties:
floating_network_id: 3a5b5cd4-0c4b-4bc3-b44e-826c7b19556e
port_id: { get_resource: ansible_port2 }
floating_ip3:
type: OS::Neutron::FloatingIP
properties:
floating_network_id: 3a5b5cd4-0c4b-4bc3-b44e-826c7b19556e
port_id: { get_resource: ansible_port3 }
ansible:
type: OS::Nova::Server
properties:
key_name: MujKlic
image: ansible
flavor: m1.tiny
networks:
- port: { get_resource: ansible_port1 }
client1:
type: OS::Nova::Server
properties:
key_name: MujKlic
image: debian-wheezy-amd64-20140929-disk
flavor: m1.tiny
networks:
- port: { get_resource: ansible_port2 }
client2:
37 | H P H e l i o n O p e S t a c k
type: OS::Nova::Server
properties:
key_name: MujKlic
image: debian-wheezy-amd64-20140929-disk
flavor: m1.tiny
networks:
- port: { get_resource: ansible_port3 }
A toto je její výsledek:
38 | H P H e l i o n O p e S t a c k
Přihlašte se teď do serveru v labu přes SSH protokol (z Putty) tak, jak už jsme to v labu dělali. Následně
ověřte, že máte přístup do instance s Ansible serverem (IP adresu najdete v seznamu běžících instancí):
tomas@helion-ProLiant-DL380-Gen9:~$ ssh [email protected]
The authenticity of host '172.16.2.29 (172.16.2.29)' can't be established.
ECDSA key fingerprint is 58:dd:b2:b3:d2:1e:cb:d0:24:eb:21:74:e8:2a:a2:52.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.2.29' (ECDSA) to the list of known hosts.
[email protected]'s password:
Linux ansible 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Apr 2 07:35:51 2015 from 10.0.10.254
ansible@ansible-ansible-mq5ltt3vkg5p:~$ ls
ansible demo.yml hosts index.html proxy.sh
ansible@ansible-ansible-mq5ltt3vkg5p:~$
7.2.3 Základní operace
Nejprve do naší ansible VM chceme dostat privátní klíč, který v rámci našeho projektu využíváme (stáhli
jste si ho v prvním labu z GUI). Můžete ho nakopírovat přes SCP nebo přes schránku – zadejte příkaz cat >
mujklic.pem a následně označte obsah tohoto souboru na vašem počítači a v Putty okně klikněte na pravé
tlačítko. Operaci ukončete stisknutím CTRL+D.
Změňte bezpečnostní práva k tomuto souboru a zkuste se připojit – vše by mělo proběhnout bez
zadávání hesla.
chmod 600 adminpair.pem
ansible@test-1:~$ ssh [email protected] -i mujklic.pem
Linux debian 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
debian@client:~$ exit
logout
Connection to 192.168.11.106 closed.
Pro Ansible vytvoříme seznam koncových OS, na které budeme sahat a současně je můžeme dát do
skupin tak, aby se nám s nimi dobře pracovalo. Vytvořte soubor hosts zadáním příkazu
nano hosts
Do souboru napiště název nové skupiny (například helionlab) a IP adresu (či DNS) klintských instancí.
[helionlab]
192.168.11.106
192.168.11.107
Ansible může pracovat v ad-hoc režimu, tedy že defacto můžeme v reálném čase provádět hromadné
operace s množinou serverů. Vyzkoušejme si jednodchý „ping“, kdy Ansible zjistí, jestli má do všech
našich systémů přístup. V průběhu můžete být dotázáni, zda si chcete uložit host key (pokud jste se ještě
39 | H P H e l i o n O p e S t a c k
přes SSH do těch dalších instancí nepřipojovali) – dejte jednoduše ano. V příkazu se odkážeme na náš
klíč, přihlašovat se budeme jako uživatel debian a specifikujeme seznam ovládaných klientů v souboru
hosts.
ansible@ansible:~$ ansible helionlab -m ping --private-key mujklic.pem -i hosts -u debian
192.168.11.106 | success >> {
"changed": false,
"ping": "pong"
}
192.168.11.107 | success >> {
"changed": false,
"ping": "pong"
}
Máme odpovědi, Ansible tedy dokáže naše další VM spravovat – v tuto chvíli už je tedy jedno, jestli
budou dvě nebo jich bude tisíc. V ad-hoc režimu můžeme například poslat do těchto VM nějaký soubor a
dělat další základní operace.
7.2.4 Názorný příklad – web server
Hlavní síla ale dříme v playbook, tedy šablonách. V těch řeknete co na cílovém systému očekáváte a
Ansible to zařídí. Dělá se to formou modulů a rolí a celá řada jich přichází předinstalována a další si
můžete stáhnout.
Zkusíme si na cílové systémy dostat webový server a dát do něj novou úvodní stránku. Vytvořte
příkazem nano index.html primitivní webovou stránku:
<h1>HP je cool!</h1>
Teď si uděláme playbook, tedy předpis, jak má server ve výsledku vypadat co do nainstalovaných a
nastavených aplikací. Ansible používá lidsky dobře čitelného formátu YAML, podobně, jako OpenStack
Heat. V labové image už by měl být připraven soubor demo.yml, pokud ne vytvořte jej:
--- hosts: helionlab
sudo: yes
tasks:
- name: Installs nginx web server
apt: pkg=nginx state=installed update_cache=true
environment:
http_proxy: http://web-proxy.corp.hp.com:8088
notify:
- start nginx
- name: Upload default index.html for host
copy: src=index.html dest=/usr/share/nginx/www/ mode=0644
handlers:
- name: start nginx
service: name=nginx state=started
Co se tam děje? Říkáme, že balík serverů ve skupině helionlab má mít nainstalovaný software NGINX,
což je open source webový server. Dále chceme do serveru nahrát novou startovací webovou stránku a
když se vše podaří, server nastartovat. Může být jeden nebo tisíc, to nehraje roli.
40 | H P H e l i o n O p e S t a c k
Nejdřív si zkuste, že na serveru aktuálně žádný web neběží. Abychom nemuseli do grafického prostředí,
použijeme textový „prohlížeč“ curl (po chvilce marného čekání zmáčněte CTRL+C):
ansible@ansible:~$ curl 192.168.11.106
^C
ansible@ansible:~$ curl 192.168.11.107
^C
Žádný web tam neběží. Použijme teď Ansible na instalaci a konfiguraci potřebného software:
ansible@ansible:~$ ansible-playbook demo.yml -u debian -i hosts --private-key=mujklic.pem
PLAY [prvnidemo] **************************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.11.106]
ok: [192.168.11.107]
TASK: [Installs nginx web server] *********************************************
changed: [192.168.11.106]
changed: [192.168.11.107]
TASK: [Upload default index.html for host] ************************************
changed: [192.168.11.106]
changed: [192.168.11.107]
NOTIFIED: [start nginx] *******************************************************
changed: [192.168.11.106]
changed: [192.168.11.107]
PLAY RECAP ********************************************************************
192.168.11.106
: ok=4
changed=3
unreachable=0
failed=0
192.168.11.107
: ok=4
changed=3
unreachable=0
failed=0
Zdá se, že to dobře dopadlo – běží tam náš nový web server?
ansible@ansible:~$ curl 192.168.11.106
<h1>HP je cool!</h1>
ansible@ansible:~$ curl 192.168.11.107
<h1>HP je cool!</h1>
7.3.
HP Server Automation
7.2.5 Připojení
8. HP Helion Development Platform
Bude k dispozici v pozdějších verzích lab guide
9. Shrnutí a závěr
Bude k dispozici v pozdějších verzích lab guide
10.
Další zdroje
Bude k dispozici v pozdějších verzích lab guide
41 | H P H e l i o n O p e S t a c k
42 | H P H e l i o n O p e S t a c k

Podobné dokumenty

oVirt - virtualizace datacentra aneb správa

oVirt - virtualizace datacentra aneb správa Co je oVirt? Centralizovaný nástroj pro správu velkého množství virtualizovaných desktopů a serverů. Open source alternativa k vCenter/vSphere Postaven nad KVM. Jednoduchý deploy a správa.

Více

hpe helion openstack

hpe helion openstack definováno administrátorem. OpenStack vám také ukazuje, která velikost se ještě vejde do zdrojů, které vám zbývají (administrátor všemu projektu přidělil nějakou kvótu na různé zdroje – vCPU, paměť...

Více

Island a ekonomická krize II – dopady a analýza

Island a ekonomická krize II – dopady a analýza plán již v srpnu, nicméně tito odmítli. Naopak vlastníci bank tvrdí, že v polovině září přišli s plánem na sloučení Glitniru, Landsbanki a jedné drobné banky s pomocí státu do jednoho subjektu, kte...

Více

Návrh privátní IaaS cloudové platformy - Newt on-da-line

Návrh privátní IaaS cloudové platformy - Newt on-da-line Bezpečnost – Virtualizovaná prostředí se nemohou vzájemně ovlivňovat a přistupovat k hostitelskému stroji.

Více

stavíme si vlastní cloud pro vývoj a testování

stavíme si vlastní cloud pro vývoj a testování Web: opennebula.org Přehledná dokumentace: docs.opennebula.org

Více

Franz Chocholatý Gröger

Franz Chocholatý Gröger ODSUN- Die Vertreiibung dr Sudetendeutschen, München 1995, ISBN

Více

QEMU - Hippo

QEMU - Hippo QEMU monitor umožňuje komplexní ovládání běžícího hostovaného systému :

Více