【OpenStackチャレンジ】 第22回 Glance環境構築編

2016.8.26


はじめに

photo-1422651973727-50f085c0b26f.jpg

今回は、OpenStackのコアコンポーネントの1つであるGlanceを紹介します。
Glanceは、仮想マシンイメージの情報管理、登録、削除をする機能を提供しています。
OpenStackのコンポーネントを理解するには手動でインストールをするのが一番だと思いますのでインストール方法をご紹介していきます!

Glance環境の構成図

以前、Keystoneをインストールした状態のマシンに、OpenStack公式ドキュメントを参考にしてインストールを進めていきます。 インストール後の構成図は以下のようになります。GLCINS-73.PNG

Glanceの動作シーケンス

ユーザーがglance image-createコマンドを実行し、Glanceを操作した時のシーケンスは、以下のようになりました。
①仮想マシンイメージのカタログ情報を送信する。
②仮想マシンイメージのカタログを保存する。
③仮想マシンイメージのカタログ情報登録結果を返信する。
④仮想マシンイメージを転送する。
⑤仮想マシンイメージを保存します。
⑥仮想マシンイメージの保存を完了します。
⑦仮想マシンイメージの状態を要求します。
⑧仮想マシンイメージの状態を返信します。

シーケンス図.png

Glanceをインストールしよう

まずは、システムをアップデートしておきます!
$ sudo apt-get update
$ sudo apt-get dist-upgrade

glanceのデータベースを作成し、アクセス権を付与します。
パスワード入力を求められるので、今回は全てのパスワードをubuntuと入力します。
$ mysql -u root -p << EOF
CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY ubuntu;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%'
IDENTIFIED BY ubuntu;
EOF

Enter password: 

glanceユーザーでログインし、データベースの閲覧が可能であることを確認します。
$ mysql -u glance -p
Enter password:ubuntu
MariaDB[(none)]> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| glance             |
+--------------------+
2 rows in set (0.00 sec)

MariaDB [(none)]> quit

Bye

管理者用の環境設定ファイルを読み込みます。
$ source admin-openrc.sh

ubuntu@controller ~(admin)$

glanceユーザーを作成します。パスワード入力を求められるので、今回はubuntuと入力します。

$ openstack user create --domain default --password-prompt glance 

User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | default                          |
| enabled   | True                             |
| id        | 4594224ddb314b9089603d93cf0c0961 |
| name      | glance                           |
+-----------+----------------------------------+

glanceユーザーが作成されたか確認しましょう。
$ openstack user list

+----------------------------------+--------+
| ID                               | Name   |
+----------------------------------+--------+
| 3b2dd951a5c14565ab362f87a63b92de | admin  |
| 4594224ddb314b9089603d93cf0c0961 | glance |
+----------------------------------+--------+

adminロールをglanceユーザーに追加します。
$ openstack role add --project service --user glance admin
追加されたか確認してみましょう。
$ openstack role list --user glance --project service

+----------------------------------+-------+---------+--------+
| ID                               | Name  | Project | User   |
+----------------------------------+-------+---------+--------+
| c11a7745c86c4997aba3131e96c07b52 | admin | service | glance |
+----------------------------------+-------+---------+--------+

glanceサービスエンティティーを作成します。
$ openstack service create --name glance --description "OpenStack Image service" image
作成されたか確認してみましょう。
$ openstack service show glance

+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Image service          |
| enabled     | True                             |
| id          | 75bcbc710ce8442c9096c4a756154c85 |
| name        | glance                           |
| type        | image                            |
+-------------+----------------------------------+

サービスエンドポイントを作成します。
リージョンは、keystoneをインストールしたときに設定したリージョン「RegionOne」を指定します。
$ openstack endpoint create --region RegionOne image public http://controller:9292

+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 0eca4b199e1d49fca27a7841601b1aa1 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 75bcbc710ce8442c9096c4a756154c85 |
| service_name | glance                           |
| service_type | image                            |
| url          | http://controller:9292           |
+--------------+----------------------------------+

$ openstack endpoint create --region RegionOne image internal http://controller:9292

+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | bcf9928660ea472f8c36b5c4c0705a36 |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 75bcbc710ce8442c9096c4a756154c85 |
| service_name | glance                           |
| service_type | image                            |
| url          | http://controller:9292           |
+--------------+----------------------------------+

$ openstack endpoint create --region RegionOne image admin http://controller:9292

+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | ee2bd4f3fa784c6eb00d9bf0c6091296 |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 75bcbc710ce8442c9096c4a756154c85 |
| service_name | glance                           |
| service_type | image                            |
| url          | http://controller:9292           |
+--------------+----------------------------------+

作成されたか確認してみましょう。
$ openstack endpoint list --service glance (--serviceオプションはKeystone API v3 を用いる場合のみ使用できます。)

+----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------+
| ID                               | Region    | Service Name | Service Type | Enabled | Interface | URL                    |
+----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------+
| 0eca4b199e1d49fca27a7841601b1aa1 | RegionOne | glance       | image        | True    | public    | http://controller:9292 |
| bcf9928660ea472f8c36b5c4c0705a36 | RegionOne | glance       | image        | True    | internal  | http://controller:9292 |
| ee2bd4f3fa784c6eb00d9bf0c6091296 | RegionOne | glance       | image        | True    | admin     | http://controller:9292 |
+----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------+

Glanceを設定しよう

glance-api.confの設定を行います。
$ sudo vi /etc/glance/glance-api.conf

[DEFAULT]
...
#DEBUGレベルのロギングを有効にする。
debug = True
#冗長ロギングを有効にする。
verbose = True
#noop通知ドライバーを設定し、通知を無効にする。
notification_driver = noop
...
[database]
#SQLiteデータベースを無効にする。
#sqlite_db = /var/lib/glance/glance.sqlite
#データベースのアクセス方法を設定する。
connection = mysql+pymysql://glance:ubuntu@controller/glance
...
[glance_store]
...
#ローカルファイルシステムを使用するように設定する。
default_store = file
#仮想マシンイメージを格納する場所を設定する。
filesystem_store_datadir = /var/lib/glance/images/
...
[keystone_authtoken]
#Keystoneサービス用エンドポイントを設定する。
auth_uri = http://controller:5000
#Keystone管理用エンドポイントを設定する。
auth_url = http://controller:35357
#パスワード認証に設定する。
auth_plugin = password
#KeystoneのプロジェクトドメインIDを設定する。
project_domain_id = default
#KeystoneのユーザードメインIDを設定する。
user_domain_id = default
#Keystoneのプロジェクト名を設定する。
project_name = service
#Keystoneへアクセスするユーザー名を設定する。
username = glance
#Keystoneへアクセスするパスワードを設定する。
password = ubuntu
...
[paste_deploy]
 ...
#認証サービスへのアクセス方法をKeystoneに設定する。
flavor = keystone   

次のコマンドを実行して正しく設定を行ったか確認しましょう。
$ cat /etc/glance/glance-api.conf | grep -v "^\s*$" | grep -v "^\s*#"

[DEFAULT]
auth_url = http://controller:35357
debug = True
verbose = true
notification_driver = noop
[database]
backend = sqlalchemy
connection = mysql+pymysql://glance:ubuntu@controller/glance
[glance_store]
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
[image_format]
[keystone_authtoken]
auth_uri = http://controller:5000
[matchmaker_redis]
[matchmaker_ring]
[oslo_concurrency]
[oslo_messaging_amqp]
[oslo_messaging_qpid]
[oslo_messaging_rabbit]
[oslo_policy]
[paste_deploy]
[store_type_location_strategy]
[task]
[taskflow_executor]

glance-registry.confの設定を行います。
$ sudo vi /etc/glance/glance-registry.conf

[DEFAULT]
...
#DEBUGレベルのロギングを有効にする。
debug = True
#冗長ロギングを有効にする。
verbose = True
#noop通知ドライバーを設定し、通知を無効にする。
notification_driver = noop
...
[database]
#SQLiteデータベースを無効にする。
#sqlite_db = /var/lib/glance/glance.sqlite
#データベースのアクセス方法を設定する。
connection = mysql+pymysql://glance:ubuntu@controller/glance

[glance_store]
...
#ローカルファイルシステムを使用するように設定する。
default_store =file
#仮想マシンイメージを格納する場所を設定する。
filesystem_store_datadir = /var/lib/glance/images/

[keystone_authtoken]
#Keystoneサービス用エンドポイントを設定する。
auth_uri = http://controller:5000
#Keystone管理用エンドポイントを設定する。
auth_url = http://controller:35357
#パスワード認証に設定する。
auth_plugin = password
#KeystoneのプロジェクトドメインIDを設定する。
project_domain_id = default
#KeystoneのユーザードメインIDを設定する。
user_domain_id = default
#Keystoneのプロジェクト名を設定する。
project_name = service
#Keystoneへアクセスするユーザー名を設定する。
username = glance
#Keystoneへアクセスするパスワードを設定する。
password = ubuntu
...
[paste_deploy]
#認証サービスへのアクセス方法をKeystoneに設定する。
flavor = keystone

次のコマンドを実行して正しく設定を行ったか確認しましょう。
$ cat /etc/glance/glance-registry.conf | grep -v "^\s*$" | grep -v "^\s*#"

[DEFAULT]
debug = True
verbose = true
notification_driver = noop
[database]
backend = sqlalchemy
connection = mysql+pymysql://glance:ubuntu@controller/glance
[glance_store]
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
auth_plugin = password
project_domain_id = default
user_domain_id = default
project_name = service
username = glance
password = ubuntu
[matchmaker_redis]
[matchmaker_ring]
[oslo_messaging_amqp]
[oslo_messaging_qpid]
[oslo_messaging_rabbit]
[oslo_policy]
[paste_deploy]
flavor = keystone

データベースを初期化します。

$ sudo su -s /bin/sh -c "glance-manage db_sync" glance

2016-08-19 10:25:53.634 4597 DEBUG oslo_db.sqlalchemy.engines [-] MySQL server mode set to STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION _check_effective_sql_mode /usr/lib/python2.7/dist-packages/oslo_db/sqlalchemy/engines.py:256
2016-08-19 10:25:53.636 4597 DEBUG migrate.versioning.repository [-] Loading repository /usr/lib/python2.7/dist-packages/glance/db/sqlalchemy/migrate_repo... __init__ /usr/lib/python2.7/dist-packages/migrate/versioning/repository.py:76
2016-08-19 10:25:53.668 4597 DEBUG migrate.versioning.script.base [-] Loading script /usr/lib/python2.7/dist-packages/glance/db/sqlalchemy/migrate_repo/versions/001_add_images_table.py... __init__ /usr/lib/python2.7/dist-packages/migrate/versioning/script/base.py:27
2016-08-19 10:25:53.668 4597 DEBUG migrate.versioning.script.base [-] Script /usr/lib/python2.7/dist-packages/glance/db/sqlalchemy/migrate_repo/versions/001_add_images_table.py loaded successfully __init__ /usr/lib/python2.7/dist-packages/migrate/versioning/script/base.py:30
2016-08-19 10:25:53.669 4597 DEBUG migrate.versioning.script.base [-] Loading script /usr/lib/python2.7/dist-packages/glance/db/sqlalchemy/migrate_repo/versions/002_add_image_properties_table.py... __init__ /usr/lib/python2.7/dist-packages/migrate/versioning/script/base.py:27
2016-08-19 10:25:53.669 4597 DEBUG migrate.versioning.script.base [-] Script /usr/lib/python2.7/dist-packages/glance/db/sqlalchemy/migrate_repo/versions/002_add_image_properties_table.py loaded successfully __init__ /usr/lib/python2.7/dist-packages/migrate/versioning/script/base.py:30
2016-08-19 10:25:53.670 4597 DEBUG migrate.versioning.script.base [-] Loading script /usr/lib/python2.7/dist-packages/glance/db/sqlalchemy/migrate_repo/versions/003_add_disk_format.py... __init__ /usr/lib/python2.7/dist-packages/migrate/versioning/script/base.py:27

エラーが起きなければ成功です。

Glanceの設定を反映させるため、Glanceを再起動します。
$ service glance-registry restart

glance-registry stop/waiting
glance-registry start/running, process 4709

$ service glance-api restart

glance-api stop/waiting
glance-api start/running, process 4737

Glanceでエラーが起きていないことをログで確認します。
$ tailf /var/log/glance/glance-api.log

2016-08-19 10:27:44.617 4737 DEBUG glance_store.location [-] Registering scheme https with {'location_class': <class 'glance_store._drivers.http.StoreLocation'>, 'store': <glance_store._drivers.http.Store object at 0x7f17f2eb2310>, 'store_entry': 'http'} register_scheme_map /usr/lib/python2.7/dist-packages/glance_store/location.py:90
2016-08-19 10:27:44.618 4737 DEBUG glance_store.backend [-] Attempting to import store file _load_store /usr/lib/python2.7/dist-packages/glance_store/backend.py:151
2016-08-19 10:27:44.619 4737 DEBUG glance_store.capabilities [-] Store glance_store._drivers.filesystem.Store doesn't support updating dynamic storage capabilities. Please overwrite 'update_capabilities' method of the store to implement updating logics if needed. update_capabilities /usr/lib/python2.7/dist-packages/glance_store/capabilities.py:98
2016-08-19 10:27:44.620 4737 DEBUG glance_store.backend [-] Registering store file with schemes ('file', 'filesystem') create_stores /usr/lib/python2.7/dist-packages/glance_store/backend.py:198
2016-08-19 10:27:44.621 4737 DEBUG glance_store.driver [-] Late loading location class glance_store._drivers.filesystem.StoreLocation get_store_location_class /usr/lib/python2.7/dist-packages/glance_store/driver.py:95
2016-08-19 10:27:44.621 4737 DEBUG glance_store.location [-] Registering scheme file with {'location_class': <class 'glance_store._drivers.filesystem.StoreLocation'>, 'store': <glance_store._drivers.filesystem.Store object at 0x7f17f2eb2b10>, 'store_entry': 'file'} register_scheme_map /usr/lib/python2.7/dist-packages/glance_store/location.py:90
2016-08-19 10:27:44.622 4737 DEBUG glance_store.location [-] Registering scheme filesystem with {'location_class': <class 'glance_store._drivers.filesystem.StoreLocation'>, 'store': <glance_store._drivers.filesystem.Store object at 0x7f17f2eb2b10>, 'store_entry': 'file'} register_scheme_map /usr/lib/python2.7/dist-packages/glance_store/location.py:90
2016-08-19 10:27:44.623 4737 INFO glance.common.wsgi [-] Starting 1 workers
2016-08-19 10:27:44.626 4737 INFO glance.common.wsgi [-] Started child 4748
2016-08-19 10:27:44.629 4748 INFO eventlet.wsgi.server [-] (4748) wsgi starting up on http://0.0.0.0:9292/

$ tailf /var/log/glance/glance-registry.log

2016-08-19 10:27:43.253 4709 DEBUG glance.common.config [-] keystone_authtoken.username    = glance log_opt_values /usr/lib/python2.7/dist-packages/oslo_config/cfg.py:2233
2016-08-19 10:27:43.254 4709 DEBUG glance.common.config [-] image_format.container_formats = ['ami', 'ari', 'aki', 'bare', 'ovf', 'ova'] log_opt_values /usr/lib/python2.7/dist-packages/oslo_config/cfg.py:2233
2016-08-19 10:27:43.254 4709 DEBUG glance.common.config [-] image_format.disk_formats      = ['ami', 'ari', 'aki', 'vhd', 'vmdk', 'raw', 'qcow2', 'vdi', 'iso'] log_opt_values /usr/lib/python2.7/dist-packages/oslo_config/cfg.py:2233
2016-08-19 10:27:43.254 4709 DEBUG glance.common.config [-] oslo_policy.policy_default_rule = default log_opt_values /usr/lib/python2.7/dist-packages/oslo_config/cfg.py:2233
2016-08-19 10:27:43.255 4709 DEBUG glance.common.config [-] oslo_policy.policy_dirs        = ['policy.d'] log_opt_values /usr/lib/python2.7/dist-packages/oslo_config/cfg.py:2233
2016-08-19 10:27:43.255 4709 DEBUG glance.common.config [-] oslo_policy.policy_file        = policy.json log_opt_values /usr/lib/python2.7/dist-packages/oslo_config/cfg.py:2233
2016-08-19 10:27:43.255 4709 DEBUG glance.common.config [-] ******************************************************************************** log_opt_values /usr/lib/python2.7/dist-packages/oslo_config/cfg.py:2235
2016-08-19 10:27:43.257 4709 INFO glance.common.wsgi [-] Starting 1 workers
2016-08-19 10:27:43.259 4709 INFO glance.common.wsgi [-] Started child 4747
2016-08-19 10:27:43.261 4747 INFO eventlet.wsgi.server [-] (4747) wsgi starting up on http://0.0.0.0:9191/

glance.sqliteファイルを削除します。
$ sudo rm /var/lib/glance/glance.sqlite

rm: cannot remove '/var/lib/glance/glance.sqlite': No such file or directory

上のように、glance.sqliteファイルがない場合もあります。

Glanceの動作確認しよう

テスト目的に使用されるCirrOSイメージを登録して、Glanceの動作確認を行います。

CirrOSの仮想マシンイメージをダウンロードしましょう。
$ sudo wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img

--2016-08-19 10:31:49--  http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
Resolving download.cirros-cloud.net (download.cirros-cloud.net)... 64.90.42.85
Connecting to download.cirros-cloud.net (download.cirros-cloud.net)|64.90.42.85|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13287936 (13M) [text/plain]
Saving to: 'cirros-0.3.4-x86_64-disk.img'

100%[============================================================================>] 13,287,936   441KB/s   in 20s    

2016-08-19 10:32:09 (656 KB/s) - 'cirros-0.3.4-x86_64-disk.img' saved [13287936/13287936]

ダウンロードできたか確認してみましょう!
$ ls

admin-openrc.sh  cirros-0.3.4-x86_64-disk.img 

 cirros-0.3.4-x86_64-disk.imgが確認できました。

ダウンロードしたCirrOSの仮想マシンイメージをGlanceに登録します。
$ glance image-create --name cirros --file cirros-0.3.4-x86_64-disk.img --disk-format qcow2 --container-format bare --visibility public --progress

100%[=============================>] 100%
+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | ee1eca47dc88f4879d8a229cc70a07c6     |
| container_format | bare                                 |
| created_at       | 2016-08-19T01:32:44Z                 |
| disk_format      | qcow2                                |
| id               | d2dfb2d3-dd00-4231-8ec9-93b26f756d8e |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | cirros                               |
| owner            | 3d32b382c8414883880233fcc3f8eba7     |
| protected        | False                                |
| size             | 13287936                             |
| status           | active                               |
| tags             | []                                   |
| updated_at       | 2016-08-19T01:32:45Z                 |
| virtual_size     | None                                 |
| visibility       | public                               |
+------------------+--------------------------------------+
オプション 説明
name 仮想マシンイメージの名前
file 仮想マシンイメージのファイル名
disk-format 仮想マシンイメージのディスク形式
例:qcow2、raw、iso、vhd、vmdk
container-format 仮想マシンイメージのコンテナ形式
例:docker、bare、ovf
visibility 仮想マシンイメージの有効範囲
例:public、private
progress 仮想マシンイメージ登録状況の表示

コマンドラインクライアントの動作を詳細に把握したい場合は、デバッグオプションを使用します。
デバックオプションを使用することで、実際に行われているAPIとのやり取りを確認することができます。
$ glance --debug image create --name cirros --file cirros-0.3.4-x86_64-disk.img --disk-format qcow2 --container-format bare --visibility public --progress

curl -g -i -X POST -H 'Accept-Encoding: gzip, deflate' -H 'Accept: */*' -H 'User-Agent: python-glanceclient' -H 'Connection: keep-alive' -H 'X-Auth-Token: {SHA1}8695d5ad6e953e9a29b9cba00041120e9b7ba11f' -H 'Content-Type: application/json' -d '{"container_format": "bare", "disk_format": "qcow2", "name": "cirros", "visibility": "public"}' http://controller:9292/v2/images

HTTP/1.1 201 Created
Content-Length: 550
Connection: keep-alive
Location: http://controller:9292/v2/images/2a847e2b-1f7a-4324-9ad5-829e277633a6
Date: Fri, 19 Aug 2016 01:34:10 GMT
Content-Type: application/json; charset=UTF-8
X-Openstack-Request-Id: req-542cdf05-05b4-42b2-8a47-6a2662cdbadf

{"status": "queued", "name": "cirros", "tags": [], "container_format": "bare", "created_at": "2016-08-19T01:34:10Z", "size": null, "disk_format": "qcow2", "updated_at": "2016-08-19T01:34:10Z", "visibility": "public", "self": "/v2/images/2a847e2b-1f7a-4324-9ad5-829e277633a6", "min_disk": 0, "protected": false, "id": "2a847e2b-1f7a-4324-9ad5-829e277633a6", "file": "/v2/images/2a847e2b-1f7a-4324-9ad5-829e277633a6/file", "checksum": null, "owner": "3d32b382c8414883880233fcc3f8eba7", "virtual_size": null, "min_ram": 0, "schema": "/v2/schemas/image"}

curl -g -i -X PUT -H 'Accept-Encoding: gzip, deflate' -H 'Accept: */*' -H 'User-Agent: python-glanceclient' -H 'Connection: keep-alive' -H 'X-Auth-Token: {SHA1}8695d5ad6e953e9a29b9cba00041120e9b7ba11f' -H 'Content-Type: application/octet-stream' http://controller:9292/v2/images/2a847e2b-1f7a-4324-9ad5-829e277633a6/file

[=============================>] 100%

HTTP/1.1 204 No Content
Date: Fri, 19 Aug 2016 01:34:11 GMT
Connection: keep-alive
Content-Type: text/html; charset=UTF-8
Content-Length: 0
X-Openstack-Request-Id: req-97bded73-a603-4467-a72a-6c5cc98210e1
curl -g -i -X GET -H 'Accept-Encoding: gzip, deflate' -H 'Accept: */*' -H 'User-Agent: python-glanceclient' -H 'Connection: keep-alive' -H 'X-Auth-Token: {SHA1}8695d5ad6e953e9a29b9cba00041120e9b7ba11f' -H 'Content-Type: application/octet-stream' http://controller:9292/v2/images/2a847e2b-1f7a-4324-9ad5-829e277633a6

HTTP/1.1 200 OK
Date: Fri, 19 Aug 2016 01:34:11 GMT
Connection: keep-alive
Content-Type: application/json; charset=UTF-8
Content-Length: 584
X-Openstack-Request-Id: req-3463f860-8a2c-435d-afd0-e5fafbb77494

{"status": "active", "name": "cirros", "tags": [], "container_format": "bare", "created_at": "2016-08-19T01:34:10Z", "size": 13287936, "disk_format": "qcow2", "updated_at": "2016-08-19T01:34:11Z", "visibility": "public", "self": "/v2/images/2a847e2b-1f7a-4324-9ad5-829e277633a6", "min_disk": 0, "protected": false, "id": "2a847e2b-1f7a-4324-9ad5-829e277633a6", "file": "/v2/images/2a847e2b-1f7a-4324-9ad5-829e277633a6/file", "checksum": "ee1eca47dc88f4879d8a229cc70a07c6", "owner": "3d32b382c8414883880233fcc3f8eba7", "virtual_size": null, "min_ram": 0, "schema": "/v2/schemas/image"}

+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | ee1eca47dc88f4879d8a229cc70a07c6     |
| container_format | bare                                 |
| created_at       | 2016-08-19T01:34:10Z                 |
| disk_format      | qcow2                                |
| id               | 2a847e2b-1f7a-4324-9ad5-829e277633a6 |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | cirros                               |
| owner            | 3d32b382c8414883880233fcc3f8eba7     |
| protected        | False                                |
| size             | 13287936                             |
| status           | active                               |
| tags             | []                                   |
| updated_at       | 2016-08-19T01:34:11Z                 |
| virtual_size     | None                                 |
| visibility       | public                               |
+------------------+--------------------------------------+

curlコマンドによってREST APIが発行され、仮想マシンイメージのカタログ情報の送信/仮想マシンイメージ転送/状態確認まで行っていることが確認できます。

登録したCirrOSの仮想マシンイメージを確認してみましょう。
$ glance image-list

+--------------------------------------+--------+
| ID                                   | Name   |
+--------------------------------------+--------+
| 2a847e2b-1f7a-4324-9ad5-829e277633a6 | cirros |
+--------------------------------------+--------+

仮想マシンイメージを確認することができました!

仮想マシンイメージの詳細を確認してみましょう。
$ glance image-show 2a847e2b-1f7a-4324-9ad5-829e277633a6 

+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | ee1eca47dc88f4879d8a229cc70a07c6     |
| container_format | bare                                 |
| created_at       | 2016-08-19T01:34:10Z                 |
| disk_format      | qcow2                                |
| id               | 2a847e2b-1f7a-4324-9ad5-829e277633a6 |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | cirros                               |
| owner            | 3d32b382c8414883880233fcc3f8eba7     |
| protected        | False                                |
| size             | 13287936                             |
| status           | active                               |
| tags             | []                                   |
| updated_at       | 2016-08-19T01:34:11Z                 |
| virtual_size     | None                                 |
| visibility       | public                               |
+------------------+--------------------------------------+

仮想マシンイメージを削除し、確認してみましょう。
$ glance image-delete 2a847e2b-1f7a-4324-9ad5-829e277633a6
$ glance image-show 2a847e2b-1f7a-4324-9ad5-829e277633a6

'Controller' object has no attribute 'resource_class'

仮想マシンイメージが削除できました!

おわりに

Swiftに引き続きGlanceの手動インストールを紹介しました。
Glanceは単純なように感じたかもしれませんが、OpenStackの6つあるコアコンポーネントの1つです。
コアコンポーネントの理解を深めることにより、OpenStackの全体像が分かってくると思います。
次回は、コアコンポーネントの1つCinderについて紹介していきたいと思っています。

今回も最後までお付き合いを頂き、ありがとうございました。

文:河合 紀彦

photo-1443479579455-1860f114bf77.jpg

参考サイト

OpenStack公式ドキュメント

OpenStack構築手順Liberty版



OpenStackと同じカテゴリーの記事


OpenStack手動インストールと同じカテゴリーの記事



RSS
最近のエントリー
2017.4.21
【検証自動化】第6回 AT-CLabを使ってみる
2017.4.21
【OSSチャレンジ】第4回 Elasticsearch紹介
2017.4. 7
【OSC2017 Tokyo/Spring】OpenStackを宇宙で!?
2017.3.28
【OSSチャレンジ】 第3回 Bacula紹介:後編
2017.3. 9
【OpenStackチャレンジ】 第29回 Ocata紹介編
2017.2.24
【OSSチャレンジ】 第2回 Docker紹介編
2017.2.20
【OSSチャレンジ】 第1回 Bacula紹介:前編
2017.2. 1
【体験記】最後のフロンティア!? ~ミャンマー 体験記~
2017.1.18
【データベース】pgpool-IIによるDBサーバ負荷分散
2016.12.16
【ログ解析】第2回Splunkのログ解析
2016.12. 9
LPIC304 体験記
2016.11.19
【OSC2016 Tokyo/Fall】VRとOpenStackを連携
2016.11.11
【次世代通信技術】 第1回 5G入門編
2016.10.28
【ログ解析】第1回Splunkの紹介と起動
2016.10.21
【OpenStackチャレンジ】 第28回 Stackalytics登録編
2016.10.14
【OpenStackチャレンジ】 第27回 OpenStack Newton紹介編
2016.10. 7
【検証自動化】第5回 Selenium IDEで記録したテストをJenkinsのジョブから実行する ~PC一台でブラウザテストを自動化~【後編】
2016.9.30
【OpenStackチャレンジ】 第26回 Neutron環境構築編
2016.9.23
【いまさら聞けない!エンジニアの基本シリーズ】 第6回 きれいなログにするためのLinuxお作法
2016.9.16
【OpenStackチャレンジ】 第25回 Nova環境構築編
2016.9. 9
【OpenStackチャレンジ】 第24回 Cinder環境構築編
2016.9. 2
【OpenStackチャレンジ】 第23回 OpenStackコミュニティ~翻訳編
2016.8.26
【OpenStackチャレンジ】 第22回 Glance環境構築編
2016.8.19
【検証自動化】第4回 Selenium IDEでテストケースを記録・実行する ~PC一台でブラウザテストを自動化~【前編】
2016.8. 9
【OpenStackチャレンジ】 第21回 OpenStackコミュニティ 日本語翻訳チーム参加編
2016.8. 5
【OpenStackチャレンジ】 第20回 構成管理ツール「Ansible」を用いたOpenStack上のサーバ構築
2016.7.29
【検証自動化】第3回 IT検証フォーラム2016に出展しました!
2016.7.22
【OpenStackチャレンジ】 第19回 OpenStack Upstream Training編
2016.7.15
【検証自動化】第2回 TestShell+TestCenter連携編
2016.7. 8
【OpenStackチャレンジ】 第18回 HEAT紹介編
2016.7. 4
QNAP紹介(Dockerコンテナ&OpenStack Swift連携)
2016.6.26
【いまさら聞けない!エンジニアの基本シリーズ】 第5回 GitHubを使いこなそう
2016.6.19
【OpenStackチャレンジ】 第17回 Zabbix環境構築編
2016.6.12
【検証自動化】第1回 TestShell編
2016.6. 5
【OpenStackチャレンジ】 第16回 Mirantis 「OpenStack FUEL管理」セミナー紹介編
2016.5.29
【OpenStackチャレンジ】 第15回 Swift環境構築編
2016.5.22
【OpenStackチャレンジ】 第14回 Keystone環境構築編
2016.5.15
【OpenStackチャレンジ】 第13回 Mirantis OpenStack紹介編
2016.5. 2
【OpenStackチャレンジ】 第12回DevStack~ Ironic環境構築編
2016.4.24
【OpenStackチャレンジ】 第11回 インフラエンジニア必見のOpenStackセミナーを開催しました!
2016.4.17
【OpenStackチャレンジ】 第10回 OpenStack Mitaka紹介編
2016.4.10
【Linuxを使いこなす】 CentOSのローカルリポジトリを構築しよう
2016.4. 3
【OpenStackチャレンジ】 第9回 仮想マシンが起動するコンピュートノードを指定してみよう
2016.3.29
【OpenStack チャレンジ】 第8回 ゲストマシンの性能比較をしてみました!
2016.3.19
【OSC2016】第3回 ChatOpsでOpenStackをAPIから制御する
2016.3.12
【OSC2016】第2回Let'sChat Hubot編
2016.3. 4
【OSC2016】第1回ChatOpsの構築
2016.1.31
【OpenStackチャレンジ】 第7回 DevStack~All-In-One Single Machine編
2016.1.22
【OpenStackチャレンジ】 第6回 policy.json紹介編
2016.1.13
【OpenStackチャレンジ】 第5回 Ceilometerについて知ろう!
2016.1. 8
【いまさら聞けない!エンジニアの基本シリーズ】 第4回 VMware基本動作編
2015.12.24
【1年間ありがとう!】2015年度エンジニアブログ アクセスランキング発表!
2015.12.18
【SDNチャレンジ】 第29回 Mininet編
2015.12.14
【いまさら聞けない!エンジニアの基本シリーズ】 第3回 VMwareインストール編
2015.12.10
【OpenStackチャレンジ】第4回 ConoHaでOpenStack環境を構築!
2015.12. 4
【いまさら聞けない!エンジニアの基本シリーズ】 第2回 VirtualBox基本動作編
2015.12. 4
【OpenStackチャレンジ】 第3回 OpenDaylight(Lithium)との連携に挑戦!
2015.11.27
【いまさら聞けない!エンジニアの基本シリーズ】 第1回 VirtualBoxインストール編
2015.11.20
【SDNチャレンジ】 第28回 WiresharkでOpenFlowを解析しよう!
2015.11.15
OpenStackの技術者認定資格「OPCEL認定試験」に合格しました!
2015.11. 9
「Windows Server 2003」から「Windows Server 2012 R2」への移行に不安を抱えるお客様へ
2015.11. 6
【SDNチャレンジ】 第27回 OpenMUL編
2015.10.30
【SDNチャレンジ】 第26回 ONOS-BGPルータ編
2015.10.23
【SDNチャレンジ】 第25回 ONOS GUI編 / [告知]10/24(土),25(日)にOSCに出展します!
2015.10.16
【SDNチャレンジ】 第24回 ONOSインストール編
2015.10. 9
【SDNチャレンジ】 第23回 OpenDaylightユーザ会に参加しました/Lithiumインストール編
2015.10. 2
【SDNチャレンジ】 第22回 Trema-edge編
2015.9.29
【OpenStackチャレンジ】 番外編 10/26(月)からLPI-Japanの「OPCEL認定試験」がスタートします!
2015.9.25
【SDNチャレンジ】 第21回 POX編
2015.9.18
【OpenStackチャレンジ】 第2回 コンポーネント紹介編
2015.9.11
【SDNチャレンジ】 第20回 Floodlight編
2015.9. 4
【OpenStackチャレンジ】 第1回 OpenStackインストール編
2015.9. 3
【ウェブサイトのロードテストをする】 最終回 Siege編
2015.8.28
【SDNチャレンジ】 第19回 Raspberry Piでユースケースに挑戦!
2015.8.21
【SDNチャレンジ】 第18回 OF-Patch動作編
2015.8.13
【SDNチャレンジ】 第17回 OF-Patch紹介編
2015.8. 7
Windows10をインストールしてみました!
2015.8. 4
【ウェブサイトのロードテストをする】 第3回 Tsung編
2015.7.31
【SDNチャレンジ】 第16回 Ryuコントローラインストール編
2015.7.25
【SDNチャレンジ】 第15回 Open vSwitch性能試験編
2015.7.17
【SDNチャレンジ】 第14回 Tcpreplay編
2015.7.17
RedHat OpenStack 管理者認定試験に合格しました!
2015.7.11
【SDNチャレンジ】 第13回 Vyattaコントローラ REST API編
2015.7. 3
【SDNチャレンジ】 第12回 Vyattaコントローラ動作編
2015.7. 1
【ウェブサイトのロードテストをする】 第2回 curl-loader編
2015.6.26
【SDNチャレンジ】 第11回 OpenDaylight動作編②
2015.6.19
【SDNチャレンジ】 第10回 OpenDaylight動作編①
2015.6.18
【ウェブサイトのロードテストをする】 第1回 Apache JMeter編
2015.6.12
【SDNチャレンジ】 第9回 リピーターハブとラーニングスイッチの動作比較編
2015.6. 5
【SDNチャレンジ】 第8回 Tremasharkインストール編
2015.5.25
【SDNチャレンジ】 第7回 帯域制御・ファイアウォール・パケット書換え編
2015.5.22
【SDNチャレンジ】 第6回 ラーニングスイッチ作成編
2015.5.15
【SDNチャレンジ】 第5回 Raspberry Pi2にOpen vSwitchをインストール
2015.5. 8
【SDNチャレンジ】 第4回 5/13(水)、14(木)、15(金)の展示会にて検証自動化デモを実施します!
2015.4.27
【SDNチャレンジ】 第3回 Tremaリピーターハブ編
2015.4.21
【SDNチャレンジ】 第2回 OpenFlowコントローラ作成編
2015.4.14
【SDNチャレンジ】 第1回 Tremaインストール編
2014.8.20
【注意!】8月13日のWindows Updateを適用すると起動できなくなる事例が報告されています!
2014.5.23
約6割の企業が悩んでいるのに、対策しないんですか...?
2014.1. 9
新年あけましておめでとうございます。
2013.12.24
2013年エンジニアブログ アクセスランキング発表!
2013.12.17
コミュニケーション「活性化」の第一歩
2013.10.29
なぜ儲かっているのか分からない!?
2013.10.15
「何を変えるのか、何に変えるのか、どのように変えるのか」
2013.9.17
ブラック企業にドラッカーがアドバイスするとしたら?
2013.9. 4
蟻の穴から堤も崩れる
2013.8. 6
派閥じゃなくて、理念の元に仕事をしよう!
2013.7.31
知識は使ってナンボです!
2013.7.30
御社の相互理解度はどれくらい?
2013.7. 3
何故、それが読まれたか~上半期・エンジニアブログ閲覧数ランキング~
2013.6.12
「何」を知っているかではなく、「誰」が知っているか
2013.5.28
戦後、人間尊重の信念を貫きとおした1人の経営者がいた!
2013.5.24
健康な心が、健康な会社を作る。
2013.4.26
『社長にはもうついていけません・・・』
2013.4.23
仕事と生活をバランスさせるには?
2013.4. 2
組織に必要なのは「ゆらぎ」と・・・?
2013.3.21
代表小林、バングラディシュの地に再度降り立つ
2013.3.14
色々作っちゃいました!
2013.3. 5
「心のバランスシート」に着目していますか?
2013.2. 6
Office2013発売!で、何が変わった?
2013.2. 1
「想いを語る夕べ」が新宿から30分の場所で開催可能に!
2012.12.25
エンジニアブログ番外編:決戦は「ひなたかなた」
2012.12.19
2012年エンジニアブログ&Facebook閲覧数ランキング発表!
2012.11.29
プロセス見直すのはいいけれど...大事なこと忘れてません?
2012.10.31
「仕事」と「個々の生活」の両立~ワーク・ライフ・バランス~
2012.10.26
Windows8発売!で何が起こる?
2012.10. 9
腹が減っては打ち合わせは出来ぬ?~アドック近辺ランチスポット・カフェ編~
2012.10. 2
iPhone5発売!LTE普及には切実な背景が...
2012.9.12
「だれを選ぶか」をまず決めて、その後に「何をすべきか」を決める。
2012.8.17
会社を回すのに大事な3つの感覚。
2012.8. 7
プロジェクトはたいてい失敗に終わるんです。
2012.7.19
『目の前に壁があったら、突き破るしかねえんだよ』by鬼塚
2012.7. 2
大手企業も多数協賛する「東京経営塾」の塾長とは!?
2012.6.15
メンタルヘルスケアジャパン2012報告!
2012.6. 4
御社の理念浸透力はどれくらい?!
2012.5.14
メンタルヘルスケアジャパン2012参加のお知らせ
2012.4.27
東京スカイツリーと地デジとADOC
2012.4.17
マイボトル・マイカップキャンペーン/エンジニアブログ1周年記念
2012.3.14
第1回「想いを語る夕べ」体験会レポート~伝えることの難しさ~
2012.2.29
想いを語る夕べ報告書を新聞にしちゃいました!
2012.2. 6
月刊『ニュートップリーダー』に記事掲載&"想いを語る夕べ"体験会やります!
2012.1.31
【第4回】想いを語る夕べ~フォロー編~
2012.1.23
タニタの社員食堂は"トップの想い"から生まれた!?
2012.1.13
【第3回】想いを語る夕べ~実施編~
2011.12.27
オフィスで簡単エクササイズ!
2011.12.13
【第2回】想いを語る夕べ~準備編~
2011.11.24
【第1回】想いを語る夕べ~誕生編~
2011.11.17
「責任感だけで仕事をしていた・・・。」が「自らサービスを作り上げ、喜びを感じたい!」という熱い想いに変わるまで
2011.11. 8
アドックインターナショナルはGoogleのまわし者!?
2011.10.11
あなたのその行動、誰かに監視されてませんか?
2011.9.28
たったこれだけのことで、チームに一体感が生まれる!?
2011.9.22
ADOCersがITS健康保険組合の野球大会に出場します!
2011.9.21
アドックに入社するとコンサートホールで歌えてグァムに行けるってホント?
2011.8.30
アドック社員元気の素!?
2011.8.16
電力使用制限発動!罰金は100万円!?PC電力管理ソフトのススメ
2011.8. 9
「ネットトラブル調査隊」対象エリア拡大しました!(後日談付き)
2011.8. 1
Windows7にはメールソフトが付いてない!?
2011.7.22
「社長の想いを語る夕べ」プログラムのご紹介
2011.7.12
64ビット版Windowsへの移行について
2011.7. 8
検証やテストを自動化する際に気を付けなければいけない3つの事
2011.7. 5
地デジと周波数再編とADOC
2011.6.29
アドックインターナショナルの節電対策とスーパークールビズ
2011.6.27
あるレンタカー事業会社のケース
2011.6.20
ラボルームのご紹介
2011.6.17
Interop Tokyo 2011に行ってきました!
2011.6. 7
ADOCの保守サービスと震災対応
2011.5.31
"メンタルヘルスケア・ジャパン2011"レポート
2011.5.19
「おばあちゃん家」
2011.5.11
スマートフォンは急速に普及している・・・?
2011.5. 9
ADOCの品質改善活動への取り組み事例をご紹介
2011.4.19
ADOCのお花見と節電への取り組み
2011.4. 6
復興支援のため東北へ向かっていた弊社の社員2名が戻ってきました!その2
2011.3.31
復興支援のため東北へ向かっていた弊社の社員2名が戻ってきました!
2011.3.28
弊社パートナーが被災地支援のサービス開始
2011.3.25
震災により表面化した携帯通信網の弱さ
2011.2.28
エンジニアブログスタートのお知らせ
カテゴリー
月別アーカイブ

<