Caricamento di un'immagine personalizzata sul Cloud Pubblico K5 UK di Fujitsu
2016-07-29
Machine-translated — the English original is authoritative.
NOTA: Tutte le immagini devono essere caricate nel Progetto Predefinito del tuo contratto (il nome termina con -prj). Una volta caricate nel progetto predefinito, l'immagine può essere condivisa con gli altri progetti all'interno del contratto (dominio).
Come per tutti i cloud pubblici, il cloud K5 di Fujitsu basato su OpenStack fornisce diverse immagini predefinite di RedHat, CentOS, Ubuntu e Microsoft per facilitare il rapido deploy dei server fin dall'inizio.
Tuttavia, spesso i clienti hanno già creato le proprie immagini OS dei fornitori con applicazioni personalizzate o conformità aziendale integrate. Queste immagini devono semplicemente essere rese "cloud ready" assicurandosi che siano in grado di essere eseguite sull'ipervisore di destinazione e che il software cloud-init sia configurato. Il processo di preparazione dell'immagine non è trattato qui.
In questo esempio userò l'immagine cloud Ubuntu 16.04 pronta per OpenStack e la caricherò su K5 nella regione UK. L'host che sto utilizzando per interagire con le API è un server Ubuntu 14.04.
- Scarica l'immagine di esempio da Ubuntu.
ubuntu@gjl-v1:~/testimages$ wget http://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img
--2016-07-29 08:07:56-- http://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img
Resolving cloud-images.ubuntu.com (cloud-images.ubuntu.com)... 91.189.88.141, 2001:67c:1360:8001:ffff:ffff:ffff:fffe
Connecting to cloud-images.ubuntu.com (cloud-images.ubuntu.com)|91.189.88.141|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 309329920 (295M) [application/octet-stream]
Saving to: ‘xenial-server-cloudimg-amd64-disk1.img’
100%[=================================================================================>] 309,329,920 51.6MB/s in 6.2s
2016-07-29 08:08:02 (47.6 MB/s) - ‘xenial-server-cloudimg-amd64-disk1.img’ saved [309329920/309329920]
ubuntu@gjl-v1:~/testimages$
- Converti l'immagine nel formato VMDK
Sebbene KVM utilizzi immagini QCOWS2 e l'immagine scaricata sia di questo formato, il processo di caricamento delle immagini K5 richiede che l'immagine da caricare sia in formato VMDK durante l'importazione. L'utilità QEMU-IMAGE ha la capacità di convertire il formato dell'immagine da QCOWS2 a VMDK. Potrebbe essere necessario installare prima il pacchetto qemu-utils (anche se nel mio caso non è stato necessario).
ubuntu@gjl-v1:~/testimages$ sudo apt-get install qemu-utils
sudo: unable to resolve host gjl-v1
Reading package lists... Done
Building dependency tree
Reading state information... Done
qemu-utils is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 143 not upgraded.
ubuntu@gjl-v1:~/testimages$ qemu-img convert -O vmdk xenial-server-cloudimg-amd64-disk1.img xenial-server-cloudimg-amd64-disk1.vmdk
ubuntu@gjl-v1:~/testimages$ ls -l | grep xen
-rw-rw-r-- 1 ubuntu ubuntu 309329920 Jul 25 15:09 xenial-server-cloudimg-amd64-disk1.img
-rw-r--r-- 1 ubuntu ubuntu 1009451008 Jul 29 08:29 xenial-server-cloudimg-amd64-disk1.vmdk
ubuntu@gjl-v1:~/testimages$
Ora abbiamo un'immagine personalizzata nel formato corretto e anche pronta per cloud-init.
- Configurazione dell'ambiente
Utilizzeremo le chiamate API ora come documentato qui per il resto di questo processo. Inizialmente imposteremo alcune variabili di ambiente per facilitare il lavoro con l'API.
Il mio file k5Default.rc (file di ambiente) è condiviso di seguito – assicurati di sostituire "
#!/bin/bash
# Account information.
export DOMAIN_NAME=<replaceMe -Contract ID>
export TENANT_ID=<replaceMe -Project ID - last section of login url>
export PROJECT_ID=$TENANT_ID
export USER_NAME=<replaceMe -user name details>
export USER_PW=<replaceMe -user password>
# Endpoint shortcut. echo "EP initial setup."
export TOKEN=https://identity.uk-1.cloud.global.fujitsu.com
export IDENTITY=$TOKEN
export NETWORK=https://networking.uk-1.cloud.global.fujitsu.com
export COMPUTE=https://compute.uk-1.cloud.global.fujitsu.com
export CEILOMETER=https://telemetry.uk-1.cloud.global.fujitsu.com
export TELEMETRY=$CEILOMETER
export DB=https://database.uk-1.cloud.global.fujitsu.com
export BLOCKSTORAGE=https://blockstorage.uk-1.cloud.global.fujitsu.com
export HOST_BLOCKSTORAGEV2=$BLOCKSTORAGE
export OBJECTSTORAGE=https://objectstorage.uk-1.cloud.global.fujitsu.com
export ORCHESTRATION=https://orchestration.uk-1.cloud.global.fujitsu.com
export ELB=https://loadbalancing.uk-1.cloud.global.fujitsu.com
export AUTOSCALE=https://autoscale.uk-1.cloud.global.fujitsu.com
export IMAGE=https://image.uk-1.cloud.global.fujitsu.com
export MAILSERVICE=https://mail.uk-1.cloud.global.fujitsu.com
export NETWORK_EX=https://networking-ex.uk-1.cloud.global.fujitsu.com
export DNS=https://dns.cloud.global.fujitsu.com
export VMIMPORT=https://vmimport.uk-1.cloud.global.fujitsu.com/v1/imageimport
Note:
(a) Questo imposta il mio ambiente per utilizzare il progetto del dominio predefinito. Tutte le immagini devono essere caricate in questo progetto e successivamente possono essere condivise con gli altri progetti all'interno di questo contratto/dominio.
(b) Se stai utilizzando una regione K5 diversa da uk-1, assicurati di modificare tutti gli endpoint per allinearli alla tua regione.
Ottenere un token per assicurarci di essere autorizzati a utilizzare l'API. Userò lo script sottostante per ottenere questo token poiché si tratta di un processo ripetibile.
#!/bin/bash
## Script to retrieve token
. ~/testimages/k5Default.rc
export OS_AUTH_TOKEN=`curl -k -X POST -si $TOKEN/v3/auth/tokens -H "Content-Type:application/json" -H "Accept:application/json" -d '{"auth":{"identity":{"methods":["password"],"password":{"user":{"domain":{"name":"'$DOMAIN_NAME'"}, "name":"'$USER_NAME'", "password": "'"$USER_PW"'"}}}, "scope": { "project": {"id":"'$PROJECT_ID'"}}}}' | awk '/X-Subject-Token/ {print $2}'`
echo Token set: $OS_AUTH_TOKEN
- Crea un contenitore Swift basato su K5 Openstack per memorizzare l'immagine
Questa chiamata API richiede che sia impostata una variabile per il nome del contenitore, CONTAINER. In questo caso useremo "myContainer" per il nome del contenitore come segue:
ubuntu@gjl-v1:~/testimages$ source get_token.sh
Token set: 9fe31993695449c9961c907409621ab0
ubuntu@gjl-v1:~/testimages$ export CONTAINER=myContainer
ubuntu@gjl-v1:~/testimages$ curl -i $OBJECTSTORAGE/v1/AUTH_$PROJECT_ID/$CONTAINER -X PUT -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json"
HTTP/1.1 201 Created
X-Fcx-Endpoint-Request: EXECUTED_REQ000988766_201
X-Trans-Id: tx8b28cb6db20e4f2c95d88-00579b2ecc
Date: Fri, 29 Jul 2016 10:24:12 GMT
Content-Type: text/html;charset=UTF-8
Content-Length: 0
ubuntu@gjl-v1:~/testimages$
- Carica l'immagine in un contenitore Swift basato su K5 Openstack
Successivamente definiremo il percorso dell'immagine e il nome dell'immagine (oggetto) da caricare e quindi caricheremo l'immagine su K5 Swift Object Storage come segue:
ubuntu@gjl-v1:~/testimages$ export FILE_PATH=/home/ubuntu/testimages/xenial-server-cloudimg-amd64-disk1.vmdk
ubuntu@gjl-v1:~/testimages$ export OBJECT=xenial-server-cloudimg-amd64-disk1.vmdk
ubuntu@gjl-v1:~/testimages$ source get_token.sh
Token set: ede8204db8c448d79445016cc7c5d131
ubuntu@gjl-v1:~/testimages$ curl -i $OBJECTSTORAGE/v1/AUTH_$PROJECT_ID/$CONTAINER/$OBJECT -X PUT -T "$FILE_PATH" -H "X-Auth-Token: $OS_AUTH_TOKEN"
HTTP/1.1 100 Continue
HTTP/1.1 201 Created
X-Fcx-Endpoint-Request: EXECUTED_REQ000987297_201
Last-Modified: Fri, 29 Jul 2016 10:30:15 GMT
Etag: 71c521a7b4d622ec7e39076c7a5cabdc
X-Trans-Id: txff993696748b468e95ba3-00579b3036
Date: Fri, 29 Jul 2016 10:31:45 GMT
Content-Type: text/html;charset=UTF-8
Content-Length: 0
ubuntu@gjl-v1:~/testimages$
Nota: Il token dovrebbe durare 3 ore e quindi non è necessario eseguire get_token.sh prima di ogni chiamata API. La mia attività di blogging tende a non essere lineare e possono esserci pause significative tra i miei passaggi, da qui la mia 'abitudine'.
- Verifica che il caricamento sia completato – confronta le dimensioni dei file
ubuntu@gjl-v1:~/testimages$ ls -l xenial-server-cloudimg-amd64-disk1.vmdk
-rw-r--r-- 1 ubuntu ubuntu 1009451008 Jul 29 08:29 xenial-server-cloudimg-amd64-disk1.vmdk
ubuntu@gjl-v1:~/testimages$ curl -s $OBJECTSTORAGE/v1/AUTH_$PROJECT_ID/$CONTAINER?format=json -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq .
# Output from above command
[
{
"content_type": "application/octet-stream",
"name": "xenial-server-cloudimg-amd64-disk1.vmdk",
"bytes": 1009451008,
"last_modified": "2016-07-29T10:30:14.139190",
"hash": "71c521a7b4d622ec7e39076c7a5cabdc"
}
]
ubuntu@gjl-v1:~/testimages$
- Registra e importa l'immagine in K5 OpenStack
Prima di eseguire gli ultimi passaggi, otteniamo rapidamente un elenco di tutte le immagini attualmente disponibili come segue:
ubuntu@gjl-v1:~/testimages$ curl -H "X-Auth-Token: $OS_AUTH_TOKEN" https://image.uk-1.cloud.global.fujitsu.com/v2/images | jq .
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 5082 100 5082 0 0 4185 0 0:00:01 0:00:01 --:--:-- 4186
{
"first": "/v2/images",
"schema": "/v2/schemas/images",
"images": [
{
"schema": "/v2/schemas/image",
"min_ram": 0,
"fcx.win": "true",
"size": 24226693120,
"visibility": "public",
"updated_at": "2016-07-15T04:56:49Z",
"disk_format": "qcow2",
"created_at": "2016-07-15T04:28:24Z",
"container_format": "bare",
"tags": [],
"name": "Windows Server 2008 R2 SE SP1 64bit (English) 01",
"status": "active",
"fcx.base_image_id": "20403cb8-4ada-4c5a-b524-d1ff393f0bb7",
"self": "/v2/images/20403cb8-4ada-4c5a-b524-d1ff393f0bb7",
"min_disk": 80,
"protected": true,
"id": "20403cb8-4ada-4c5a-b524-d1ff393f0bb7",
"file": "/v2/images/20403cb8-4ada-4c5a-b524-d1ff393f0bb7/file",
"checksum": "4096a8f17c82e5ce9118c7d9a3e0a20b",
"owner": "31ceb599e8ff48aeb66f2fd748988960"
},
{
"schema": "/v2/schemas/image",
"min_ram": 0,
"fcx.win": "true",
"size": 15858139136,
"visibility": "public",
"updated_at": "2016-07-15T05:07:04Z",
"disk_format": "qcow2",
"created_at": "2016-07-15T02:28:28Z",
"container_format": "bare",
"tags": [],
"name": "Windows Server 2012 R2 SE 64bit (English) 01",
"status": "active",
"fcx.base_image_id": "6e1610db-1115-4260-8dc2-bcdd526a54be",
"self": "/v2/images/6e1610db-1115-4260-8dc2-bcdd526a54be",
"min_disk": 80,
"protected": true,
"id": "6e1610db-1115-4260-8dc2-bcdd526a54be",
"file": "/v2/images/6e1610db-1115-4260-8dc2-bcdd526a54be/file",
"checksum": "56a7fca10e650e7510cdd75012167095",
"owner": "31ceb599e8ff48aeb66f2fd748988960"
},
{
"schema": "/v2/schemas/image",
"min_ram": 0,
"size": 1024983040,
"min_disk": 30,
"visibility": "public",
"updated_at": "2016-07-12T07:32:28Z",
"disk_format": "qcow2",
"created_at": "2016-07-12T06:44:04Z",
"container_format": "bare",
"tags": [],
"name": "CentOS 7.2 64bit (English) 01",
"status": "active",
"fcx.base_image_id": "58fd966f-b055-4cd0-9012-cf6af7a4c32b",
"self": "/v2/images/58fd966f-b055-4cd0-9012-cf6af7a4c32b",
"fcx.centos": "true",
"protected": true,
"id": "58fd966f-b055-4cd0-9012-cf6af7a4c32b",
"file": "/v2/images/58fd966f-b055-4cd0-9012-cf6af7a4c32b/file",
"checksum": "72e90ec33fb5b91cf709e1f2010c4054",
"owner": "31ceb599e8ff48aeb66f2fd748988960"
},
{
"schema": "/v2/schemas/image",
"min_ram": 0,
"size": 1815281664,
"min_disk": 30,
"visibility": "public",
"updated_at": "2016-04-26T02:41:44Z",
"disk_format": "qcow2",
"created_at": "2016-04-26T02:41:44Z",
"container_format": "bare",
"tags": [],
"name": "CentOS 6.5 64bit (English) 04",
"status": "active",
"fcx.base_image_id": "2d1b7b6b-93cf-4a9b-aacc-43ce61b8073c",
"self": "/v2/images/2d1b7b6b-93cf-4a9b-aacc-43ce61b8073c",
"fcx.centos": "true",
"protected": true,
"id": "2d1b7b6b-93cf-4a9b-aacc-43ce61b8073c",
"file": "/v2/images/2d1b7b6b-93cf-4a9b-aacc-43ce61b8073c/file",
"checksum": "d18e84467ee301a5e18a2c8bc50753d2",
"owner": "31ceb599e8ff48aeb66f2fd748988960"
},
{
"schema": "/v2/schemas/image",
"min_ram": 0,
"size": 258474496,
"id": "ffa17298-537d-40b2-a848-0a4d22b49df5",
"visibility": "public",
"updated_at": "2016-04-26T02:41:18Z",
"disk_format": "qcow2",
"created_at": "2016-04-26T02:41:17Z",
"container_format": "bare",
"tags": [],
"name": "Ubuntu Server 14.04 LTS (English) 01",
"status": "active",
"fcx.base_image_id": "ffa17298-537d-40b2-a848-0a4d22b49df5",
"self": "/v2/images/ffa17298-537d-40b2-a848-0a4d22b49df5",
"min_disk": 3,
"protected": true,
"fcx.ubuntu": "true",
"file": "/v2/images/ffa17298-537d-40b2-a848-0a4d22b49df5/file",
"checksum": "89d768444e2f254e76555f8d3bfaed20",
"owner": "31ceb599e8ff48aeb66f2fd748988960"
},
{
"schema": "/v2/schemas/image",
"fcx.rhel": "true",
"min_ram": 0,
"owner": "31ceb599e8ff48aeb66f2fd748988960",
"updated_at": "2016-04-26T02:39:27Z",
"disk_format": "qcow2",
"size": 13928759296,
"created_at": "2016-04-26T02:39:26Z",
"container_format": "bare",
"tags": [],
"name": "Red Hat Enterprise Linux 6.5 64bit (English) 02",
"status": "active",
"visibility": "public",
"fcx.base_image_id": "db9766f0-c95c-4f1c-bb29-304a90405e3e",
"self": "/v2/images/db9766f0-c95c-4f1c-bb29-304a90405e3e",
"min_disk": 40,
"protected": true,
"id": "db9766f0-c95c-4f1c-bb29-304a90405e3e",
"file": "/v2/images/db9766f0-c95c-4f1c-bb29-304a90405e3e/file",
"checksum": "82bc5085232ec45eae6951e5e2ac99cd"
}
]
}
ubuntu@gjl-v1:~/testimages$
Infine dobbiamo impostare le seguenti variabili di ambiente per completare il processo di importazione ed eseguire la chiamata API –
- ID – ID immagine univoco (generato usando uuidgen – vedi sotto)
- PASSWORD – una versione codificata in base64 della tua password di utente (dettagli di seguito)
- NAME – il nome dell'immagine che sarà visibile agli utenti finali
- LOCATION – la posizione del contenitore dell'oggetto che ospita l'immagine
- OS_TYPE – il sistema operativo di base utilizzato
- CONVERSION – deve essere impostato su true, le immagini verranno convertite da VMDK a QCOWS2 automaticamente
ubuntu@gjl-v1:~/testimages$ uuidgen
7db7298c-859a-45b5-821b-65a2f2d1a38d
ubuntu@gjl-v1:~/testimages$ export ID=7db7298c-859a-45b5-821b-65a2f2d1a38d
ubuntu@gjl-v1:~/testimages$ echo -n <replaceME - your user password> | base64
Generated-Hex-64Encoded-Password
ubuntu@gjl-v1:~/testimages$ export PASSWORD=<replaceMe -Generated-Hex-64Encoded-Password>
ubuntu@gjl-v1:~/testimages$ export NAME=K5CustomImageDemo
ubuntu@gjl-v1:~/testimages$ export LOCATION=/v1/AUTH_$PROJECT_ID/$CONTAINER/$OBJECT
ubuntu@gjl-v1:~/testimages$ export CONVERSION=true
ubuntu@gjl-v1:~/testimages$ export OS_TYPE=ubuntu
ubuntu@gjl-v1:~/testimages$ source get_token.sh
Token set: b539e00c1a15469ca3a6006aeea59155
ubuntu@gjl-v1:~/testimages$ curl -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" https://vmimport.uk-1.cloud.global.fujitsu.com/v1/imageimport -d '{"name":"'$NAME'", "location":"'$LOCATION'", "id":"'$ID'", "conversion":'$CONVERSION', "os_type":"'$OS_TYPE'", "user_name":"'$USER_NAME'", "password":"'$PASSWORD'", "domain_name":"'$DOMAIN_NAME'"}'
{"import_id": "e88ce041-210f-4702-85a6-3c885aca27c9"}ubuntu@gjl-v1:~/testimages$
Ora non resta che aspettare che l'immagine venga convertita da VMDK a QCOWS e successivamente registrata e importata nel servizio di immagini Glance di K5 OpenStack.
Verifica lo stato di importazione dell'immagine come segue impostando prima la nuova variabile IMPORT_ID restituita sopra ed eseguendo un'altra chiamata API:
ubuntu@gjl-v1:~/testimages$ export IMPORT_ID=e88ce041-210f-4702-85a6-3c885aca27c9
ubuntu@gjl-v1:~/testimages$ curl -H "X-Auth-Token: $OS_AUTH_TOKEN" https://vmimport.uk-1.cloud.global.fujitsu.com/v1/imageimport/$IMPORT_ID/status | jq .
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 441 100 441 0 0 260 0 0:00:01 0:00:01 --:--:-- 260
{
"import_status": "processing",
"id": "7db7298c-859a-45b5-821b-65a2f2d1a38d",
"user_name": "landg",
"password": "*",
"os_type": "ubuntu",
"progress": 70,
"min_disk": "0",
"conversion": true,
"name": "K5CustomImageDemo",
"container_format": "bare",
"min_ram": "0",
"ovf_location": "",
"disk_format": "raw",
"domain_name": "YssmW1yI",
"location": "/v1/AUTH_eadb882573ac40b1b101eac93009a313/myContainer/xenial-server-cloudimg-amd64-disk1.vmdk"
}
ubuntu@gjl-v1:~/testimages$
Una volta completato, la stessa chiamata dovrebbe risultare in un output simile al seguente:
ubuntu@gjl-v1:~/testimages$ curl -H "X-Auth-Token: $OS_AUTH_TOKEN" https://vmimport.uk-1.cloud.global.fujitsu.com/v1/imageimport/$IMPORT_ID/status | jq .
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 882 100 882 0 0 517 0 0:00:01 0:00:01 --:--:-- 517
{
"os_type": "ubuntu",
"protected": false,
"fcx.centos": "true",
"ovf_location": "",
"created_at": "2016-07-29T11:40:14Z",
"name": "K5CustomImageDemo",
"password": "*",
"min_disk": 0,
"BaseImageId": "415b3a0a513aebc27d34c68bd8cdae8c",
"visibility": "private",
"tags": [],
"import_status": "succeeded",
"conversion": true,
"size": 2361393152,
"id": "7db7298c-859a-45b5-821b-65a2f2d1a38d",
"owner": "eadb882573ac40b1b101eac93009a313",
"file": "/v2/images/7db7298c-859a-45b5-821b-65a2f2d1a38d/file",
"updated_at": "2016-07-29T11:40:20Z",
"min_ram": 0,
"container_format": "bare",
"self": "/v2/images/7db7298c-859a-45b5-821b-65a2f2d1a38d",
"disk_format": "raw",
"domain_name": "YssmW1yI",
"location": "/v1/AUTH_eadb882573ac40b1b101eac93009a313/myContainer/xenial-server-cloudimg-amd64-disk1.vmdk",
"progress": 100,
"user_name": "landg",
"schema": "/v2/schemas/image",
"status": "active"
}
ubuntu@gjl-v1:~/testimages$
E ora quando elenchiamo le nostre immagini disponibili, la nuova immagine sarà disponibile per l'uso nel tenant Predefinito.
ubuntu@gjl-v1:~/testimages$ curl -H "X-Auth-Token: $OS_AUTH_TOKEN" https://image.uk-1.cloud.global.fujitsu.com/v2/images | jq .
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 5645 100 5645 0 0 1576 0 0:00:03 0:00:03 --:--:-- 1576
{
"first": "/v2/images",
"schema": "/v2/schemas/images",
"images": [
{
"schema": "/v2/schemas/image",
"min_ram": 0,
"size": 2361393152,
"updated_at": "2016-07-29T11:40:21Z",
"disk_format": "raw",
"created_at": "2016-07-29T11:40:17Z",
"container_format": "bare",
"tags": [],
"name": "K5CustomImageDemo",
"BaseImageId": "415b3a0a513aebc27d34c68bd8cdae8c",
"status": "active",
"visibility": "private",
"self": "/v2/images/7db7298c-859a-45b5-821b-65a2f2d1a38d",
"fcx.centos": "true",
"protected": false,
"id": "7db7298c-859a-45b5-821b-65a2f2d1a38d",
"file": "/v2/images/7db7298c-859a-45b5-821b-65a2f2d1a38d/file",
"owner": "eadb882573ac40b1b101eac93009a313",
"min_disk": 0
},
{
"schema": "/v2/schemas/image",
"min_ram": 0,
"fcx.win": "true",
"size": 24226693120,
"visibility": "public",
"updated_at": "2016-07-15T04:56:49Z",
"disk_format": "qcow2",
"created_at": "2016-07-15T04:28:24Z",
"container_format": "bare",
"tags": [],
"name": "Windows Server 2008 R2 SE SP1 64bit (English) 01",
"status": "active",
"fcx.base_image_id": "20403cb8-4ada-4c5a-b524-d1ff393f0bb7",
"self": "/v2/images/20403cb8-4ada-4c5a-b524-d1ff393f0bb7",
"min_disk": 80,
"protected": true,
"id": "20403cb8-4ada-4c5a-b524-d1ff393f0bb7",
"file": "/v2/images/20403cb8-4ada-4c5a-b524-d1ff393f0bb7/file",
"checksum": "4096a8f17c82e5ce9118c7d9a3e0a20b",
"owner": "31ceb599e8ff48aeb66f2fd748988960"
},
{
"schema": "/v2/schemas/image",
"min_ram": 0,
"fcx.win": "true",
"size": 15858139136,
"visibility": "public",
"updated_at": "2016-07-15T05:07:04Z",
"disk_format": "qcow2",
"created_at": "2016-07-15T02:28:28Z",
"container_format": "bare",
"tags": [],
"name": "Windows Server 2012 R2 SE 64bit (English) 01",
"status": "active",
"fcx.base_image_id": "6e1610db-1115-4260-8dc2-bcdd526a54be",
"self": "/v2/images/6e1610db-1115-4260-8dc2-bcdd526a54be",
"min_disk": 80,
"protected": true,
"id": "6e1610db-1115-4260-8dc2-bcdd526a54be",
"file": "/v2/images/6e1610db-1115-4260-8dc2-bcdd526a54be/file",
"checksum": "56a7fca10e650e7510cdd75012167095",
"owner": "31ceb599e8ff48aeb66f2fd748988960"
},
{
"schema": "/v2/schemas/image",
"min_ram": 0,
"size": 1024983040,
"min_disk": 30,
"visibility": "public",
"updated_at": "2016-07-12T07:32:28Z",
"disk_format": "qcow2",
"created_at": "2016-07-12T06:44:04Z",
"container_format": "bare",
"tags": [],
"name": "CentOS 7.2 64bit (English) 01",
"status": "active",
"fcx.base_image_id": "58fd966f-b055-4cd0-9012-cf6af7a4c32b",
"self": "/v2/images/58fd966f-b055-4cd0-9012-cf6af7a4c32b",
"fcx.centos": "true",
"protected": true,
"id": "58fd966f-b055-4cd0-9012-cf6af7a4c32b",
"file": "/v2/images/58fd966f-b055-4cd0-9012-cf6af7a4c32b/file",
"checksum": "72e90ec33fb5b91cf709e1f2010c4054",
"owner": "31ceb599e8ff48aeb66f2fd748988960"
},
{
"schema": "/v2/schemas/image",
"min_ram": 0,
"size": 1815281664,
"min_disk": 30,
"visibility": "public",
"updated_at": "2016-04-26T02:41:44Z",
"disk_format": "qcow2",
"created_at": "2016-04-26T02:41:44Z",
"container_format": "bare",
"tags": [],
"name": "CentOS 6.5 64bit (English) 04",
"status": "active",
"fcx.base_image_id": "2d1b7b6b-93cf-4a9b-aacc-43ce61b8073c",
"self": "/v2/images/2d1b7b6b-93cf-4a9b-aacc-43ce61b8073c",
"fcx.centos": "true",
"protected": true,
"id": "2d1b7b6b-93cf-4a9b-aacc-43ce61b8073c",
"file": "/v2/images/2d1b7b6b-93cf-4a9b-aacc-43ce61b8073c/file",
"checksum": "d18e84467ee301a5e18a2c8bc50753d2",
"owner": "31ceb599e8ff48aeb66f2fd748988960"
},
{
"schema": "/v2/schemas/image",
"min_ram": 0,
"size": 258474496,
"id": "ffa17298-537d-40b2-a848-0a4d22b49df5",
"visibility": "public",
"updated_at": "2016-04-26T02:41:18Z",
"disk_format": "qcow2",
"created_at": "2016-04-26T02:41:17Z",
"container_format": "bare",
"tags": [],
"name": "Ubuntu Server 14.04 LTS (English) 01",
"status": "active",
"fcx.base_image_id": "ffa17298-537d-40b2-a848-0a4d22b49df5",
"self": "/v2/images/ffa17298-537d-40b2-a848-0a4d22b49df5",
"min_disk": 3,
"protected": true,
"fcx.ubuntu": "true",
"file": "/v2/images/ffa17298-537d-40b2-a848-0a4d22b49df5/file",
"checksum": "89d768444e2f254e76555f8d3bfaed20",
"owner": "31ceb599e8ff48aeb66f2fd748988960"
},
{
"schema": "/v2/schemas/image",
"fcx.rhel": "true",
"min_ram": 0,
"owner": "31ceb599e8ff48aeb66f2fd748988960",
"updated_at": "2016-04-26T02:39:27Z",
"disk_format": "qcow2",
"size": 13928759296,
"created_at": "2016-04-26T02:39:26Z",
"container_format": "bare",
"tags": [],
"name": "Red Hat Enterprise Linux 6.5 64bit (English) 02",
"status": "active",
"visibility": "public",
"fcx.base_image_id": "db9766f0-c95c-4f1c-bb29-304a90405e3e",
"self": "/v2/images/db9766f0-c95c-4f1c-bb29-304a90405e3e",
"min_disk": 40,
"protected": true,
"id": "db9766f0-c95c-4f1c-bb29-304a90405e3e",
"file": "/v2/images/db9766f0-c95c-4f1c-bb29-304a90405e3e/file",
"checksum": "82bc5085232ec45eae6951e5e2ac99cd"
}
]
}
ubuntu@gjl-v1:~/testimages$
Questo è tutto fantastico direte voi... ma non voglio che tutti i miei utenti utilizzino il tenant Predefinito.
- Condivisione di immagini dal Progetto Predefinito all'interno dello stesso dominio/contratto
Se questa immagine deve essere utilizzata da un progetto (tenant) diverso dal progetto Predefinito, è necessario eseguire questi ultimi passaggi.
Configura queste variabili di ambiente:
- MEMBER – l'ID del progetto con il quale desideri condividere l'immagine
- IMAGE_ID – l'ID dell'immagine da condividere
- STATUS – impostato su accepted (accettato)
Ora, sul progetto Predefinito, richiedi la condivisione:
ubuntu@gjl-v1:~/testimages$ export IMAGE_ID=7db7298c-859a-45b5-821b-65a2f2d1a38d
ubuntu@gjl-v1:~/testimages$ export STATUS=accepted
ubuntu@gjl-v1:~/testimages$ export MEMBER=3cef1071f8ff432989f18aa14ce3cc66
ubuntu@gjl-v1:~/testimages$ curl -X POST -s $IMAGE/v2/images/$IMAGE_ID/members -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"member": "'$MEMBER'"}' | jq .
{
"schema": "/v2/schemas/member",
"member_id": "3cef1071f8ff432989f18aa14ce3cc66",
"image_id": "7db7298c-859a-45b5-821b-65a2f2d1a38d",
"updated_at": "2016-07-29T13:20:52Z",
"created_at": "2016-07-29T13:20:52Z",
"status": "pending"
}
ubuntu@gjl-v1:~/testimages$
NOTA: Ora dobbiamo passare al progetto che ha bisogno di accedere all'immagine modificando le impostazioni (TENANT_ID) nel file rc.
Ho creato rapidamente un nuovo file rc a scopo di demo.
Ottenere un token con ambito di applicazione appena creato e accettare la condivisione dell'immagine emettendo i seguenti comandi:
ubuntu@gjl-v1:~/testimages$ source get_token_other.sh
Token set: ff45e8c63af44936bbc533c94025b348
ubuntu@gjl-v1:~/testimages$ curl -X PUT -i $IMAGE/v2/images/$IMAGE_ID/members/$MEMBER -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"status": "'$STATUS'"}'
HTTP/1.1 200 OK
X-Fcx-Endpoint-Request: EXECUTED_REQ001021747_200
Date: Fri, 29 Jul 2016 13:29:04 GMT
Server: Apache
x-openstack-request-id: req-defe3185-7269-4cbd-af63-e521ddcc7270
ETag: "259d0715692c99fa52a81ae571c061a1"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: 95cfe28d-1e45-49a5-bd1a-119ae8ee6f32
X-Runtime: 0.659000
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/json;charset=UTF-8
Content-Length: 220
{"status":"accepted","created_at":"2016-07-29T13:20:52Z","updated_at":"2016-07-29T13:29:04Z","image_id":"7db7298c-859a-45b5-821b-65a2f2d1a38d","member_id":"3cef1071f8ff432989f18aa14ce3cc66","schema":"/v2/schemas/member"}ubuntu@gjl-v1:~/testimages$
Ora possiamo verificare che l'immagine sia stata accettata emettendo la seguente chiamata API
ubuntu@gjl-v1:~/testimages$ curl -X GET -s $IMAGE/v2/images/$IMAGE_ID/members/$MEMBER -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq .
{
"schema": "/v2/schemas/member",
"member_id": "3cef1071f8ff432989f18aa14ce3cc66",
"image_id": "7db7298c-859a-45b5-821b-65a2f2d1a38d",
"updated_at": "2016-07-29T13:29:04Z",
"created_at": "2016-07-29T13:20:52Z",
"status": "accepted"
}
ubuntu@gjl-v1:~/testimages$
E questo è tutto, ragazzi.
Happy Stacking!
Originally published on allthingscloud.eu (2016-07-29).