Compute

Compute

このセクションにある情報を使用する場合、OpenStack Compute に慣れている必要があります。

環境変数の設定

環境変数の設定および Compute API エンドポイントの認証方法については、認証 を参照してください。

OpenStack クレデンシャルの取得 (API v2)

この例は get_nova_credentials_v2 メソッドを使用します。

def get_nova_credentials_v2():
    d = {}
    d['version'] = '2'
    d['username'] = os.environ['OS_USERNAME']
    d['api_key'] = os.environ['OS_PASSWORD']
    d['auth_url'] = os.environ['OS_AUTH_URL']
    d['project_id'] = os.environ['OS_TENANT_NAME']
    return d

このコードは、credentials.py ファイルにあり、ここからすべてのサンプルがインポートされます。

get_nova_credentials_v2() メソッドを使用して、辞書を生成し、取得します。

credentials = get_nova_credentials_v2()

サーバーの一覧表示 (API v2)

以下のプログラムは、Compute API v2 を用いてサーバーを一覧表示します。

  1. 以下のモジュールをインポートします。

    from credentials import get_nova_credentials_v2
    from novaclient.client import Client
    
  2. Nova クレデンシャルを取得します。Get OpenStack credentials (API v2) を参照してください。

  3. credentials 辞書オブジェクトを使用して、nova_client クライアントオブジェクトをインスタンス化します。

    nova_client = Client(**credentials)
    
  4. nova_client オブジェクトの servers.list を呼び出し、サーバーを一覧表示します。

    print(nova_client.servers.list())
    

サーバーの一覧表示のサンプルコード全体

#!/usr/bin/env python
from credentials import get_nova_credentials_v2
from novaclient.client import Client

credentials = get_nova_credentials_v2()
nova_client = Client(**credentials)

print(nova_client.servers.list())

サーバーの作成 (API v2)

以下のプログラムは、Compute API v2 を用いてサーバー (VM) を作成します。

  1. 以下のモジュールをインポートします。

    import time
    from credentials import get_nova_credentials_v2
    from novaclient.client import Client
    
  2. OpenStack クレデンシャルを取得します。Get OpenStack credentials (API v2) を参照してください。

  3. credentials 辞書オブジェクトを使用して、nova_client クライアントオブジェクトをインスタンス化します。

    nova_client = Client(**credentials)
    
  4. Get the flavor and image to use to create a server. This code uses the cirros image, the m1.tiny flavor, and the private network:

    image = nova_client.images.find(name="cirros")
    flavor = nova_client.flavors.find(name="m1.tiny")
    net = nova_client.networks.find(label="private")
    
  5. サーバーを作成し、ネットワーク、イメージ、フレーバーを使用する方法:

    nics = [{'net-id': net.id}]
    instance = nova_client.servers.create(name="vm2", image=image,
    flavor=flavor, key_name="keypair-1", nics=nics)
    
  6. 「5 秒間スリープする」コマンドを実行します。nova_client.servers.list() を呼び出して、サーバーや仮想マシンが作成されたかどうかを確認します。

    print("Sleeping for 5s after create command")
    time.sleep(5)
    print("List of VMs")
    print(nova_client.servers.list())
    

サーバーの作成のサンプルコード全体

#!/usr/bin/env python
import time
from credentials import get_nova_credentials_v2
from novaclient.client import Client

try:
    credentials = get_nova_credentials_v2()
    nova_client = Client(**credentials)

    image = nova_client.images.find(name="cirros")
    flavor = nova_client.flavors.find(name="m1.tiny")
    net = nova_client.networks.find(label="private")
    nics = [{'net-id': net.id}]
    instance = nova_client.servers.create(name="vm2", image=image,
                                      flavor=flavor, key_name="keypair-1", nics=nics)
    print("Sleeping for 5s after create command")
    time.sleep(5)
    print("List of VMs")
    print(nova_client.servers.list())
finally:
    print("Execution Completed")

サーバーの削除 (API v2)

以下のプログラムは、Compute API v2 を用いてサーバー (VM) を削除します。

  1. 以下のモジュールをインポートします。

    import time
    from credentials import get_nova_credentials_v2
    from novaclient.client import Client
    
  2. Nova クレデンシャルを取得します。Get OpenStack credentials (API v2) を参照してください。

  3. credentials 辞書オブジェクトを使用して、nova_client クライアントオブジェクトをインスタンス化します。

    nova_client = Client(**credentials)
    
  4. vm1 サーバーが存在するかどうかを確認します。

    1. サーバーを一覧表示します (servers_list)。
    2. Iterate over servers_list and compare name with vm1.
    3. 一致する場合、server_exists 変数を True に設定し、for ループを抜けます。
    servers_list = nova_client.servers.list()
    server_del = "vm1"
    server_exists = False
    
    for s in servers_list:
        if s.name == server_del:
            print("This server %s exists" % server_del)
            server_exists = True
            break
    
  5. サーバーが存在する場合、nova_client.servers オブジェクトの delete メソッドを実行します。

    nova_client.servers.delete(s)
    

サーバーの削除のサンプルコード

#!/usr/bin/env python
from credentials import get_nova_credentials_v2
from novaclient.client import Client

credentials = get_nova_credentials_v2()
nova_client = Client(**credentials)

servers_list = nova_client.servers.list()
server_del = "vm1"
server_exists = False

for s in servers_list:
    if s.name == server_del:
        print("This server %s exists" % server_del)
        server_exists = True
        break
if not server_exists:
    print("server %s does not exist" % server_del)
else:
    print("deleting server..........")
    nova_client.servers.delete(s)
    print("server %s deleted" % server_del)

サーバーの更新 (API v2)

以下のプログラムは、Compute API v2 を用いてサーバー (VM) の名前を更新します。

  1. 以下のモジュールをインポートします。

    from credentials import get_nova_credentials_v2
    from novaclient.client import Client
    from utils import print_server
    

    print_serverutils.py に定義されているメソッドです。以下のコード全体に示されたとおり、サーバーの詳細を表示します。

    def print_server(server):
        print("-"*35)
        print("server id: %s" % server.id)
        print("server name: %s" % server.name)
        print("server image: %s" % server.image)
        print("server flavor: %s" % server.flavor)
        print("server key name: %s" % server.key_name)
        print("user_id: %s" % server.user_id)
        print("-"*35)
    
  2. OpenStack クレデンシャルを取得します。Get OpenStack credentials (API v2) を参照してください。

  3. credentials 辞書オブジェクトを使用して、nova_client クライアントオブジェクトをインスタンス化します。

    nova_client = Client(**credentials)
    
  4. server_id を用いて server インスタンスを取得します。print_server メソッドを呼び出し、詳細を表示します。

    server_id = '99889c8d-113f-4a7e-970c-77f1916bfe14'
    server = nova_client.servers.get(server_id)
    n = server.name
    print_server(server)
    
  5. 新しい name 変数の値を用いて、server オブジェクトの server.update を呼び出します。

    server.update(name = n + '1')
    
  6. サーバーの更新されたインスタンスを取得します。

    server_updated = nova_client.servers.get(server_id)
    
  7. 再び print_server を呼び出し、更新したサーバーの詳細を確認します。

    print_server(server_updated)
    

サーバーの更新のサンプルコード全体

#!/usr/bin/env python

from credentials import get_nova_credentials_v2
from novaclient.client import Client
from utils import print_server

credentials = get_nova_credentials_v2()
nova_client = Client(**credentials)

# Change the server_id specific to your environment

server_id = '99889c8d-113f-4a7e-970c-77f1916bfe14'
server = nova_client.servers.get(server_id)
n = server.name
print_server(server)

server.update(name=n +'1')
server_updated = nova_client.servers.get(server_id)
print_server(server_updated)

フレーバーの一覧表示 (API v2)

以下のプログラムは、Compute API v2 を用いてフレーバーとその詳細を一覧表示します。

  1. 以下のモジュールをインポートします。

    from credentials import get_nova_credentials_v2
    from novaclient.client import Client
    from utils import print_flavors
    

    print_flavors メソッドは utils.py に定義されています。フレーバーの詳細を表示します。

    def print_flavors(flavor_list):
        for flavor in flavor_list:
           print("-"*35)
           print("flavor id : %s" % flavor.id)
           print("flavor name : %s" % flavor.name)
           print("-"*35)
    
  2. OpenStack クレデンシャルを取得します。Get OpenStack credentials (API v2) を参照してください。

  3. credentials 辞書オブジェクトを使用して、nova_client クライアントオブジェクトをインスタンス化します。

    nova_client = Client(**credentials)
    
  4. nova_client.flavors オブジェクトの list() を呼び出し、フレーバーを一覧表示します。

    flavors_list =  nova_client.flavors.list()
    
  5. print_flavors を呼び出し、フレーバーの詳細、ID、名前を表示します。

    print_flavors(flavors_list)
    

フレーバーの一覧表示のサンプルコード全体

#!/usr/bin/env python

from credentials import get_nova_credentials_v2
from novaclient.client import Client
from utils import print_flavors

credentials = get_nova_credentials_v2()
nova_client = Client(**credentials)

flavors_list = nova_client.flavors.list()
print_flavors(flavors_list)

Floating IP の一覧表示 (API v2)

以下のプログラムは、Compute API v2 を用いて Floating IP アドレスとその詳細を一覧表示します。

  1. 以下のモジュールをインポートします。

    from credentials import get_nova_credentials_v2
    from novaclient.client import Client
    from utils import print_values_ip
    

    print_hosts メソッドは utils.py に定義されています。floating_ip オブジェクトの詳細を表示します。

    def print_values_ip(ip_list):
        ip_dict_lisl = []
        for ip in ip_list:
            print("-"*35)
            print("fixed_ip : %s" % ip.fixed_ip)
            print("id : %s" % ip.id)
            print("instance_id : %s" % ip.instance_id)
            print("ip : %s" % ip.ip)
            print("pool : %s" % ip.pool)
    
  2. OpenStack クレデンシャルを取得します。Get OpenStack credentials (API v2) を参照してください。

  3. credentials 辞書オブジェクトを使用して、nova_client クライアントオブジェクトをインスタンス化します。

    nova_client = Client(**credentials)
    
  4. nova_client.floating_ips オブジェクトの list() を呼び出し、Floating IP を一覧表示します。

    ip_list = nova_client.floating_ips.list()
    
  5. print_values_ip を呼び出し、Floating IP オブジェクトの詳細を表示します。

    print_values_ip(ip_list)
    

Floating IP の一覧表示のサンプルコード全体

#!/usr/bin/env python

from credentials import get_nova_credentials_v2
from novaclient.client import Client
from utils import print_values_ip

credentials = get_nova_credentials_v2()
nova_client = Client(**credentials)
ip_list = nova_client.floating_ips.list()
print_values_ip(ip_list)

ホストの一覧表示 (API v2)

以下のプログラムは、Compute API v2 を用いてホストを一覧表示します。

  1. 以下のモジュールをインポートします。

    from credentials import get_nova_credentials_v2
    from novaclient.client import Client
    from utils import print_hosts
    

    print_hosts メソッドは utils.py に定義されています。host オブジェクトの詳細を表示します。

    def print_hosts(host_list):
        for host in host_list:
           print("-"*35)
           print("host_name : %s" % host.host_name)
           print("service : %s" % host.service)
           print("zone : %s" % host.zone)
           print("-"*35)
    
  2. OpenStack クレデンシャルを取得します。Get OpenStack credentials (API v2) を参照してください。

  3. credentials 辞書オブジェクトを使用して、nova_client クライアントオブジェクトをインスタンス化します。

    nova_client = Client(**credentials)
    
  4. nova_client.hosts オブジェクトの list() を呼び出し、ホストを一覧表示します。

    host_list = nova_client.hosts.list()
    
  5. print_hosts(host_list) を呼び出し、host オブジェクトの詳細を表示します。

    print_hosts(host_list)
    

ホストの一覧表示のサンプルコード全体

#!/usr/bin/env python

from credentials import get_nova_credentials_v2
from novaclient.client import Client
from utils import print_hosts

credentials = get_nova_credentials_v2()
nova_client = Client(**credentials)
host_list = nova_client.hosts.list()

print_hosts(host_list)
Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.