- OpenStack Swift prakticky (1): object store pro vás
- OpenStack Swift prakticky (2): verzování objektů
- OpenStack Swift prakticky (3): omezení platnosti objektů
- OpenStack Swift prakticky (4): Dočasné URL
- OpenStack Swift prakticky (5): řízení přístupu
- OpenStack Swift prakticky (6): Object store jako statický web
První pokročilá funkce, kterou si vyzkoušíme, je schopnost Swiftu držet všechny předchozí verze objektu. Funguje to tak, že vytvoříme jeden kontejner pro archivaci starších verzí a také jiný kontejner, z kterého budou starší verze propadávat do archivu. Výsledkem bude, že v kontejneru budeme mít vždy nejposlednější verze objektu, ale můžeme se přímo podívat do archivu na ty předchozí. Pokud v kontejneru objekt smažeme a při tom existuje jeho starší verze, Swift automaticky na jeho místo dosadí nejnovější předchozí verzi.
Vytvořme dva kontejnery – archiv a aktualni (můžete použít i GUI).
tomas@labserver:~$ openstack container create archiv +---------------------------------------+-----------+------------------------------------+ | account | container | x-trans-id | +---------------------------------------+-----------+------------------------------------+ | AUTH_d20fb4c9c0d645b4962484390a3be701 | archiv | txd872e970893a439d999af-00566e7d84 | +---------------------------------------+-----------+------------------------------------+ tomas@labserver:~$ openstack container create aktualni +---------------------------------------+-----------+------------------------------------+ | account | container | x-trans-id | +---------------------------------------+-----------+------------------------------------+ | AUTH_d20fb4c9c0d645b4962484390a3be701 | aktualni | tx9281bc4d2a9c4aff8eab8-00566e7d90 | +---------------------------------------+-----------+------------------------------------+
V dalším kroku potřebujeme zapnout funkci držení verzí. K tomu zatím neexistuje GUI ani příkaz v rámci sjednoceného openstack CLI, takže použijeme starší příkaz (dostaneme varování, ale to můžeme ignorovat), kterým pošleme kontejneru nastavení hlavičky. Tím zapneme verzování. U kontejneru aktualni tedy nastavujeme, že starší verze objektů se mají ukládat do kontejneru archiv.
tomas@labserver:~$ swift post aktualni -H 'X-Versions-Location: archiv' tomas@labserver:~$ swift stat aktualni Account: AUTH_d20fb4c9c0d645b4962484390a3be701 Container: aktualni Objects: 0 Bytes: 0 Read ACL: Write ACL: Sync To: Sync Key: Accept-Ranges: bytes X-Storage-Policy: General X-Timestamp: 1449911788.96884 X-Trans-Id: tx9b89d36fe3eb456c9dbb7-00566e7dfa Content-Type: text/plain; charset=utf-8 X-Versions-Location: archiv
Teď už si to můžeme vyzkoušet. Vytvořte v kontejeru aktualni nový objekt z našeho textového souboru.
tomas@labserver:~$ openstack object create aktualni mujsoubor.txt +---------------+-----------+----------------------------------+ | object | container | etag | +---------------+-----------+----------------------------------+ | mujsoubor.txt | aktualni | b56b9d21d9b5a09869ae2c45ab74e178 | +---------------+-----------+----------------------------------+
Přidejme do souboru lokálně řádek a uploadujme novou verzi
tomas@labserver:~$ echo "dalsi radek" >> mujsoubor.txt tomas@labserver:~$ cat mujsoubor.txt Muj text dalsi radek tomas@labserver:~$ openstack object create aktualni mujsoubor.txt +---------------+-----------+----------------------------------+ | object | container | etag | +---------------+-----------+----------------------------------+ | mujsoubor.txt | aktualni | 96ad90095dad7b3b2529a05b4e3a2529 | +---------------+-----------+----------------------------------+
Swift aktualizoval objekt, ale jeho starší verzi najdete s časovou značkou v kontejneru archiv.
tomas@labserver:~$ openstack object list archiv +-----------------------------------+ | Name | +-----------------------------------+ | 00dmujsoubor.txt/1450081895.84895 | +-----------------------------------+
Udělejme ještě jednu verzi.
tomas@labserver:~$ echo "jeste jeden radek" >> mujsoubor.txt tomas@labserver:~$ openstack object create aktualni mujsoubor.txt +---------------+-----------+----------------------------------+ | object | container | etag | +---------------+-----------+----------------------------------+ | mujsoubor.txt | aktualni | 1d84480e95d3e31222e8d0e4a1f2da72 | +---------------+-----------+----------------------------------+
V archivu už máme dvě předchozí verze.
tomas@labserver:~$ openstack object list archiv +-----------------------------------+ | Name | +-----------------------------------+ | 00dmujsoubor.txt/1450081895.84895 | | 00dmujsoubor.txt/1450081912.84630 | +-----------------------------------+
Teď pojďme smazat objekt z kontejneru aktualni. Co se stane? Z archivu se do kontejneru aktualni přesune jeho historická (ale nejmladší) verze.
tomas@labserver:~$ openstack object delete aktualni mujsoubor.txt tomas@labserver:~$ openstack object list aktualni +---------------+ | Name | +---------------+ | mujsoubor.txt | +---------------+ tomas@labserver:~$ openstack object list archiv +-----------------------------------+ | Name | +-----------------------------------+ | 00dmujsoubor.txt/1450081895.84895 | +-----------------------------------+
Máme hotovo – verzování nám funguje. Jak vidíte všechno se nastavuje na úrovni kontejnerů, takže se můžete takto chovat pouze k vybraným datům, ne nutně ke všem.