Fujitsu K5 UKベースのPublic Cloudにカスタムイメージをアップロードする

2016-07-29

Fujitsu K5 UKベースのPublic Cloudにカスタムイメージをアップロードする

Machine-translated — the English original is authoritative.

注意:すべてのイメージは、契約内のデフォルトプロジェクト(名前が -prj で終わるもの)にアップロードする必要があります。デフォルトプロジェクトにアップロードされた後、そのイメージは契約(ドメイン)内の他のプロジェクトと共有することができます。

他のパブリッククラウドと同様に、FujitsuのK5 OpenStackベースのクラウドは、箱から出してすぐにサーバーデプロイメントを可能にするために、RedHat、CentOS、Ubuntu、Microsoftからのいくつかのデフォルトイメージを提供しています。

しかし、多くの場合、顧客は独自のカスタムアプリケーションや企業コンプライアンスが組み込まれたOSベンダーイメージをすでに構築しています。これらのイメージは、ターゲットハイパーバイザー上で実行可能であり、cloud-initソフトウェアが設定されていることを確認することで、「クラウド対応」にする必要があります。イメージの準備プロセスについてはここでは扱いません。

この例では、UbuntuのOpenStack対応16.04クラウドイメージを使用して、UKリージョンのK5にアップロードします。APIを駆動するために使用しているホストはUbuntu 14.04サーバーです。

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$

KVMはQCOWS2イメージを使用しており、ダウンロードされたイメージもこの形式ですが、K5のイメージアップロードプロセスでは、インポートする際にアップロードイメージがVMDK形式である必要があります。QEMU-IMAGEユーティリティには、QCOWS2からVMDKへのイメージ形式変換機能があります。まずqemu-utilsパッケージをインストールする必要がある場合があります(私の場合は必要ありませんでした)。

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$

これで、正しい形式であり、かつcloud-init対応のカスタムイメージができました。

このプロセスの残りの部分では、こちらで文書化されているAPI呼び出しを使用します。まず、APIとの作業を容易にするためにいくつかの環境変数を設定します。

私のk5Default.rcファイル(環境ファイル)を以下に共有します – このブログに沿って進める場合は、必ず「」を自分の値に置き換えてください。

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

注記:

(a) これは、デフォルトドメインのプロジェクトを使用するように環境を設定します。すべてのイメージはこのプロジェクトにアップロードする必要があり、その後、この契約/ドメイン内の他のプロジェクトと共有できます。

(b) uk-1以外のK5リージョンを使用している場合は、エンドポイントをリージョンに合わせて変更してください。

APIの使用権限があることを確認するためにトークンを取得します。これは繰り返されるプロセスになるため、以下のスクリプトを使用してこのトークンを取得します。

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

このAPI呼び出しには、CONTAINERというコンテナ名の変数を設定する必要があります。この場合、コンテナ名として「myContainer」を以下のように使用します。

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$

次に、イメージのパスとアップロードされるイメージ(オブジェクト)名を定義し、以下のようにK5 Swiftオブジェクトストレージにイメージをアップロードします。

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$

注記:トークンは3時間有効であるため、すべてのAPI呼び出しの前にget_token.shを実行する必要はありません。私のブログ活動は直線的ではなく、ステップ間に大きな間隔があることが多いため、私の『習慣』があります。

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$

最終ステップを行う前に、現在利用可能なすべてのイメージのリストを以下のように取得しましょう。

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$

最後に、インポートプロセスを完了するために以下の環境変数を設定し、API呼び出しを実行する必要があります –

  1. ID – 一意のイメージID(uuigenを使用して生成 – 以下参照)
  2. PASSOWRD – ユーザーパスワードのbase64エンコード版(詳細は以下)
  3. NAME – 最終ユーザーに表示されるイメージ名
  4. LOCATION – イメージをホストするオブジェクトコンテナの場所
  5. OS_TYPE – 使用される基本OS
  6. CONVERSION – trueに設定する必要があります。イメージはVMDKからQCOWS2に自動的に変換されます
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$

これで、イメージがVMDKからQCOWSに変換され、K5 OpenStack Glanceイメージサービスに登録およびインポートされるのを待つだけです。

上記で出力された新しいIMPORT_ID変数を最初に設定し、別の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$

完了すると、同じ呼び出しは以下の例に似た結果を返します。

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$

そして今、利用可能なイメージをリストすると、新しいイメージがデフォルトテナントで使用可能になります。

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$

「これは素晴らしい」とお思いでしょうが…ユーザー全員にデフォルトテナントを使ってほしくないのです。

このイメージをデフォルトプロジェクト以外のプロジェクト(テナント)で使用する場合、最後のいくつかのステップを実行する必要があります。

これらの環境変数を設定します。

  1. MEMBER – イメージを共有したいプロジェクトのID
  2. IMAGE_ID – 共有されるイメージのID
  3. STATUS – acceptedに設定

次に、デフォルトプロジェクトで共有をリクエストします。

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$

注記:これで、rcファイルの設定(TENANT_ID)を変更して、イメージにアクセスする必要があるプロジェクトに切り替える必要があります。

デモ用に新しいrcファイルをすぐに作成しました。

新しくスコープされたトークンを取得し、以下のコマンドを発行してイメージの共有を受け入れます。

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$

これで、以下の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$

これで完了です。

Happy Stacking!

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

← All posts