Hochladen eines benutzerdefinierten Images in die britische Public Cloud von Fujitsu K5

2016-07-29

Hochladen eines benutzerdefinierten Images in die britische Public Cloud von Fujitsu K5

Machine-translated — the English original is authoritative.

HINWEIS: Alle Images müssen im Standardprojekt Ihres Vertrags hochgeladen werden (der Name endet mit -prj). Nach dem Hochladen in das Standardprojekt kann das Image mit den anderen Projekten innerhalb des Vertrags (Domain) geteilt werden.

Wie bei allen Public Clouds bietet Fujitsus K5 OpenStack-basierte Cloud mehrere Standard-Images von RedHat, CentOS, Ubuntu und Microsoft an, um schnelle Serverbereitstellungen out of the box zu ermöglichen.

Dennoch haben Kunden häufig bereits ihre eigenen OS-Hersteller-Images mit maßgeschneiderten Anwendungen oder integrierter Unternehmens-Compliance erstellt. Diese Images müssen lediglich „cloud-tauglich“ gemacht werden, indem sichergestellt wird, dass sie auf dem Ziel-Hypervisor ausgeführt werden können und die cloud-init-Software konfiguriert ist. Der Prozess zur Vorbereitung der Images wird hier nicht behandelt.

In diesem Beispiel verwende ich Ubuntus OpenStack-fertiges 16.04 Cloud-Image und lade es in die K5-Region im Vereinigten Königreich hoch. Der Host, den ich zur Steuerung der APIs verwende, ist ein Ubuntu 14.04-Server.

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$

Obwohl KVM QCOWS2-Images verwendet und das heruntergeladene Image dieses Formats ist, erfordert der K5-Image-Hochladevorgang, dass das zu importierende Image im VMDK-Format vorliegt. Das QEMU-IMAGE-Tool kann das Image-Format von QCOWS2 in VMDK konvertieren. Es kann erforderlich sein, zunächst das Paket qemu-utils zu installieren (obwohl dies in meinem Fall nicht notwendig war).

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$

Wir haben nun ein benutzerdefiniertes Image im korrekten Format, das auch cloud-init-fähig ist.

Wir werden nun API-Aufrufe verwenden, wie hier für den Rest dieses Prozesses dokumentiert. Zunächst richten wir einige Umgebungsvariablen ein, um die Arbeit mit der API zu erleichtern.

Meine k5Default.rc-Datei (Umgebungsdatei) wird unten geteilt – bitte stellen Sie sicher, dass Sie die „“-Platzhalter durch Ihre eigenen Werte ersetzen, wenn Sie diesem Blog folgen.

#!/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

Hinweise:

(a) Dies richtet meine Umgebung ein, um das Projekt der Standarddomain zu verwenden. Alle Images müssen in dieses Projekt hochgeladen werden und können dann mit den anderen Projekten innerhalb dieses Vertrags/der Domain geteilt werden.

(b) Wenn Sie eine andere K5-Region als uk-1 verwenden, stellen Sie bitte sicher, dass Sie alle Endpunkte an Ihre Region anpassen.

Einen Token abrufen, um sicherzustellen, dass wir zur Verwendung der API autorisiert sind. Ich werde das folgende Skript verwenden, um diesen Token abzurufen, da dies ein wiederholbarer Prozess sein wird.

#!/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

Dieser API-Aufruf erfordert, dass eine Container-Namen-Variable, CONTAINER, festgelegt ist. In diesem Fall verwenden wir „myContainer“ für den Container-Namen wie folgt:

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$

Als Nächstes definieren wir den Pfad zum Image und den Image-(Objekt)-Namen, der hochgeladen werden soll, und laden dann das Image in den K5 Swift Object Storage hoch wie folgt:

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$

Hinweis: Der Token sollte 3 Stunden gültig sein, daher ist es nicht notwendig, get_token.sh vor jedem API-Aufruf auszuführen. Meine Blogging-Aktivitäten verlaufen tendenziell nicht linear, und es können erhebliche Pausen zwischen meinen Schritten liegen, daher meine „Gewohnheit“.

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$

Bevor wir die letzten Schritte durchführen, lassen Sie uns schnell eine Liste aller aktuell verfügbaren Images wie folgt abrufen:

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$

Schließlich müssen wir die folgenden Umgebungsvariablen festlegen, um den Importvorgang abzuschließen, und dann den API-Aufruf ausführen –

  1. ID – eindeutige Image-ID (generiert mit uuidgen – siehe unten)
  2. PASSOWRD – eine base64-codierte Version Ihres Benutzerpassworts (Details unten)
  3. NAME – der Image-Name, der den Endbenutzern angezeigt wird
  4. LOCATION – der Speicherort des Objektcontainers, der das Image hostet
  5. OS_TYPE – das verwendete Basis-Betriebssystem
  6. CONVERSION – muss auf true gesetzt sein, Images werden automatisch von VMDK in QCOWS2 konvertiert
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$

Nun ist es nur noch ein Warten darauf, dass das Image von VMDK zurück in QCOWS konvertiert und dann in den K5 OpenStack Glance-Image-Dienst registriert und importiert wird.

Überprüfen Sie den Image-Importstatus, indem Sie zunächst die oben ausgegebene neue IMPORT_ID-Variable festlegen und dann einen weiteren API-Aufruf tätigen:

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$

Sobald der Vorgang abgeschlossen ist, sollte derselbe Aufruf zu einer ähnlichen Ausgabe wie der folgenden führen:

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$

Und wenn wir nun unsere verfügbaren Images auflisten, ist das neue Image im Standard-Tenant für die Verwendung verfügbar.

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$

Das ist alles großartig, werden Sie sagen…aber ich möchte nicht, dass alle meine Benutzer den Standard-Tenant verwenden.

Wenn dieses Image von einem anderen Projekt (Tenant) als dem Standardprojekt verwendet werden muss, sind die folgenden letzten Schritte erforderlich.

Richten Sie diese Umgebungsvariablen ein:

  1. MEMBER – die ID des Projekts, mit dem Sie das Image teilen möchten
  2. IMAGE_ID – die ID des zu teilenden Images
  3. STATUS – auf „accepted“ (akzeptiert) setzen

Nun fordern Sie vom Standardprojekt das Teilen an:

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$

HINWEIS: Nun müssen wir zum Projekt wechseln, das Zugriff auf das Image benötigt, indem wir die Einstellungen (TENANT_ID) in der rc-Datei ändern.

Ich habe schnell eine neue rc-Datei zu Demonstrationszwecken erstellt.

Rufen Sie einen neu skopierten Token ab und akzeptieren Sie die Image-Teilung, indem Sie die folgenden Befehle ausführen:

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$

Nun können wir überprüfen, ob das Image akzeptiert wurde, indem wir den folgenden API-Aufruf tätigen

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$

Und das war's, Leute.

Happy Stacking!

Originally published on allthingscloud.eu (2016-07-29).

← All posts