Téléchargement d'une image personnalisée sur le Cloud Public K5 UK de Fujitsu
2016-07-29
Machine-translated — the English original is authoritative.
REMARQUE : Toutes les images doivent être téléchargées dans le Projet par défaut de votre contrat (le nom se termine par -prj). Une fois téléchargée dans le projet par défaut, l'image peut être partagée avec les autres projets du contrat (domaine).
Comme pour tous les clouds publics, le cloud K5 OpenStack de Fujitsu fournit plusieurs images par défaut de RedHat, CentOS, Ubuntu et Microsoft pour faciliter le déploiement rapide des serveurs dès la sortie de la boîte.
Cependant, les clients ont souvent déjà construit leurs propres images de fournisseur de système d'exploitation avec des applications personnalisées ou la conformité corporative intégrée. Ces images doivent simplement être rendues « prêtes pour le cloud » en s'assurant qu'elles sont capables de s'exécuter sur l'hyperviseur cible et que le logiciel cloud-init est configuré. Le processus de préparation de l'image n'est pas couvert ici.
Dans cet exemple, j'utiliserai l'image cloud Ubuntu 16.04 prête pour OpenStack et la téléchargerai sur K5 dans la région du Royaume-Uni. L'hôte que j'utilise pour piloter les API est un serveur Ubuntu 14.04.
- Téléchargez l'image d'exemple depuis 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$
- Convertir l'image au format VMDK
Bien que KVM utilise des images QCOWS2 et que l'image téléchargée soit de ce format, le processus de téléchargement d'image K5 nécessite que l'image téléchargée soit au format VMDK lors de l'importation. L'utilitaire QEMU-IMAGE a la capacité de convertir le format d'image de QCOWS2 à VMDK. Il peut être nécessaire d'installer d'abord le paquet qemu-utils (bien que cela n'ait pas été nécessaire dans mon cas).
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$
Nous avons maintenant une image personnalisée au format correct et également prête pour cloud-init.
- Configuration de l'environnement
Nous utiliserons désormais les appels API tels que documentés ici pour la suite de ce processus. Nous configurerons initialement certaines variables d'environnement pour faciliter l'utilisation de l'API.
Mon fichier k5Default.rc (fichier d'environnement) est partagé ci-dessous – veuillez vous assurer de remplacer les «
#!/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
Notes :
(a) Cela configure mon environnement pour utiliser le projet du domaine par défaut. Toutes les images doivent être téléchargées dans ce projet, puis elles peuvent être partagées avec les autres projets de ce contrat/domaine.
(b) Si vous utilisez une région K5 autre que uk-1, veuillez vous assurer de modifier toutes les extrémités (endpoints) pour qu'elles correspondent à votre région.
Obtenir un jeton pour s'assurer que nous sommes autorisés à utiliser l'API. J'utiliserai le script ci-dessous pour obtenir ce jeton, car il s'agira d'un processus répétable.
#!/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
- Créer un conteneur Swift basé sur K5 OpenStack pour stocker l'image
Cet appel API nécessite que la variable de nom de conteneur, CONTAINER, soit définie. Dans ce cas, nous utiliserons « myContainer » pour le nom du conteneur comme suit :
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$
- Télécharger l'image dans un conteneur Swift basé sur K5 OpenStack
Ensuite, nous définirons le chemin vers l'image et le nom de l'image (objet) à télécharger, puis nous téléchargerons l'image vers le stockage d'objets K5 Swift comme suit :
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$
Note : Le jeton doit durer 3 heures, il n'est donc pas nécessaire d'exécuter get_token.sh avant chaque appel API. Mon activité de blogage n'a pas tendance à être linéaire et il peut y avoir des pauses significatives entre mes étapes, d'où ma « habitude ».
- Vérifier que le téléchargement est terminé – comparer les tailles de fichiers
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$
- Enregistrer et importer l'image dans K5 OpenStack
Avant d'effectuer les étapes finales, obtenons rapidement une liste de toutes les images actuellement disponibles comme suit :
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$
Enfin, nous devons définir les variables d'environnement suivantes pour terminer le processus d'importation, puis exécuter l'appel API –
- ID – identifiant d'image unique (généré à l'aide de uuigen – voir ci-dessous)
- MOT_DE_PASSE – une version encodée en base64 de votre mot de passe utilisateur (détails ci-dessous)
- NOM – le nom de l'image qui sera visible par les utilisateurs finaux
- EMPLACEMENT – l'emplacement du conteneur d'objets hébergeant l'image
- TYPE_OS – le système d'exploitation de base utilisé
- CONVERSION – doit être défini sur true, les images seront converties de VMDK à QCOWS2 automatiquement
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$
Maintenant, il ne reste plus qu'à attendre que l'image soit convertie de VMDK à QCOWS, puis enregistrée et importée dans le service d'images Glance de K5 OpenStack.
Vérifiez l'état d'importation de l'image comme suit en définissant d'abord la nouvelle variable IMPORT_ID sortie ci-dessus, puis en effectuant un autre appel 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$
Une fois terminé, le même appel devrait donner un résultat similaire à ce qui suit :
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$
Et maintenant, lorsque nous listons nos images disponibles, la nouvelle image sera disponible pour une utilisation dans le locataire par défaut.
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$
Je vous entends dire : « C'est super, mais je ne veux pas que tous mes utilisateurs utilisent le locataire par défaut. »
- Partage d'images depuis le Projet par défaut dans le même domaine/contrat
Si cette image doit être utilisée par un projet (locataire) autre que le projet par défaut, ces dernières étapes doivent être effectuées.
Configurez ces variables d'environnement :
- MEMBRE – l'ID du projet avec lequel vous souhaitez partager l'image
- IMAGE_ID – l'ID de l'image à partager
- STATUS – défini sur accepted (accepté)
Maintenant, sur le projet par défaut, demandez le partage :
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$
REMARQUE : Nous devons maintenant passer au projet qui a besoin d'accéder à l'image en modifiant les paramètres (TENANT_ID) dans le fichier rc.
J'ai rapidement créé un nouveau fichier rc à des fins de démonstration.
Obtenez un nouveau jeton avec scope et acceptez le partage d'image en émettant les commandes suivantes :
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$
Nous pouvons maintenant vérifier que l'image a été acceptée en émettant l'appel API suivant
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$
Et c'est tout, les amis.
Bon empilement !
Originally published on allthingscloud.eu (2016-07-29).