VCP SDK API仕様書

1. VCP SDK の機能仕様とシステム設計について

1.1. VCP SDK の利用環境の前提条件

  • Python バージョン 3.7.3 以上

  • JupyterNotebook: NII クラウド運用チーム提供 Docker イメージ

    https://hub.docker.com/r/niicloudoperation/notebook

  • VCP SDK の展開先ディレクトリ: 環境変数 PYTHONPATH に設定

    環境変数 PYTHONPATH のデフォルト設定: PYTHONPATH=/home/jovyan/vcpsdk

1.2. VCP による仮想システム環境の基本的な構成要素

VCP SDK が扱う仮想システム環境は、以下の構成要素を持つ。

_images/vcp_structure.png
  • Virtual Cloud (VC) - 複数のクラウドにまたがって構築されたひとつの仮想システム環境

  • UnitGroup - サーバ、クライアントなどの相互に関係をもつ異質な Node 群をグループとしてまとめて扱う単位 - 複数の Unit を1つの UnitGroup にまとめることができる

  • Unit - 同質(同じクラウド、同じ計算資源 (cpu, memory, ...) 、同じ用途)である Node をまとめて扱うための単位 - Unit に 属する Node をスケールアウト、スケールインすることができる

  • Node - UnitGroup を構成する個々のノード - パブリッククラウドの仮想マシン (Amazon EC2 インスタンス、Microsoft Azure VM など)やベアメタル・インスタンス (BM) - クラウド環境の個々の VM/BM に VCP で共通環境となるコンテナを起動する。VCPではこのコンテナを「Base コンテナ」と呼ぶ。

1.3. UnitGroup の状態定義

UnitGroup は、その管理下にある Unit と Node の状態により、以下の状態遷移を持つ。

_images/vc_state.png

1.4. Node の状態定義

Node は、クラウド環境の VM/BM の起動状態やネットワーク接続状況により、以下の状態遷移を持つ。

_images/node_state.png

1.5. VCP SDK が扱う計算資源の属性

1.5.1. provider

以下のクラウドプロバイダに対応する。

  • Amazon Web Services (AWS)

  • Microsoft Azure

  • 北海道大学ハイパフォーマンスインタークラウド サーバサービス

  • VMware vSphere

  • さくらのクラウド

  • Oracle Cloud Infrastructure

  • Chameleon Cloud

  • Google Cloud Platform (GCP)

  • オンプレミス・サーバ (On-premises)

1.5.2. spec

クラウド環境の VM/BM における CPU コア数、搭載メモリ量などの設定。 VCP SDK の flavor を定義して設定するか、または項目ごとに値を設定する。

クラウドプロバイダごとの項目は、 spec一覧 を参照。 指定可能な個数や条件は APIドキュメント を参照。

# flavor か取得
spec = sdk.get_spec('aws', 'small')

# カスタマイズ
spec.instance_type = 'm5.xlarge'

1.5.3. flavor

small, large など、クラウド環境の VM/BM の spec 指定を抽象化した形式で扱う設定。

利用者毎に flavor ファイル vcp_flavor.yml の内容をカスタマイズすることができる。

vcp_flavor.yml 記述例

#
# VCP SDK cloud flavor
#

#
# Amazon Web Services (AWS)
#
aws:
    small:
        instance_type: m4.large
        volume_type: gp2
        volume_size: 8
    medium:
        instance_type: m4.xlarge
        volume_type: gp2
        volume_size: 40
    large:
        instance_type: m4.2xlarge
        volume_type: gp2
        volume_size: 100
    gpu:
        instance_type: p2.xlarge
        volume_type: gp2
        volume_size: 40

aws_disk:
    small:
        type: standard
        size: 8
    medium:
        type: standard
        size: 32
    large:
        type: standard
        size: 128

aws_spot:
    small:
        instance_type: m4.large
        volume_type: standard
        volume_size: 8
    medium:
        instance_type: m4.xlarge
        volume_type: standard
        volume_size: 40
    large:
        instance_type: m4.2xlarge
        volume_type: standard
        volume_size: 100

#
# VMware vSphere
#
vmware:
    small:
        num_cpus: 1
        memory: 1024
        disk_size: 40
    medium:
        num_cpus: 2
        memory: 2048
        disk_size: 40
    large:
        num_cpus: 8
        memory: 4096
        disk_size: 100

#
# Hokkaido University High Performance Intercloud Server Service
#
hokudai:
    small:
        flavor_name: '1core-6GB'
        volume_size: 50 # minimum 50G
    medium:
        flavor_name: '2core-8G'
        volume_size: 80
    large:
        flavor_name: '4core-16G'
        volume_size: 100

#
# SAKURA Cloud
#
sakura:
    small:
        sakuracloud_disk_plan: ssd
        sakuracloud_disk_size: 20
        core: 1
        memory: 1
    medium:
        sakuracloud_disk_plan: ssd
        sakuracloud_disk_size: 80
        core: 2
        memory: 4
    large:
        sakuracloud_disk_plan: ssd
        sakuracloud_disk_size: 200
        core: 4
        memory: 8

sakura_disk:
    small:
        sakuracloud_disk_plan: ssd
        sakuracloud_disk_size: 20
    medium:
        sakuracloud_disk_plan: ssd
        sakuracloud_disk_size: 40
    large:
        sakuracloud_disk_plan: ssd
        sakuracloud_disk_size: 249

#
# Microsoft Azure
#
azure:
    small:
        vm_size: Standard_B1s
        disk_size_gb: 40
        managed_disk_type: Standard_LRS
    medium:
        vm_size: Standard_D3_v2
        disk_size_gb: 100
        managed_disk_type: Standard_LRS
    large:
        vm_size: Standard_D4_v2
        disk_size_gb: 100
        managed_disk_type: Premium_LRS

azure_disk:
    small:
        storage_account_type: Standard_LRS
        disk_size_gb: 8
    medium:
        storage_account_type: Standard_LRS
        disk_size_gb: 32
    large:
        storage_account_type: Standard_LRS
        disk_size_gb: 128

#
# Oracle Cloud Infrastructure
#
oracle:
    small:
        shape: VM.Standard.E2.1
        boot_volume_size_in_gbs: 50
    medium:
        shape: VM.Standard.E2.2
        boot_volume_size_in_gbs: 100
    large:
        shape: VM.Standard1.1sd
        boot_volume_size_in_gbs: 250

oracle_disk:
    small:
        size_in_gbs: 20
    medium:
        size_in_gbs: 40
    large:
        size_in_gbs: 250

#
# Google Cloud Platform
#
gcp:
    small:
        machine_type: f1-micro
        disk_size_gb: 40
        disk_type: pd-standard
    medium:
        machine_type: n1-standard-1
        disk_size_gb: 100
        disk_type: pd-ssd
    large:
        machine_type: n1-highcpu-2
        disk_size_gb: 100
        disk_type: pd-ssd

#
# On-premises
#
onpremises:
    default:
        flavor_name: dummy

VCP SDK VCPSDK::df_flavors() を利用して、内容を確認することができる。

_images/df_flavor.png

1.6. VCP SDK API 利用方法

1.6.1. 起動

最もシンプルな VC ノード起動方法は、以下のような 4 ステップの Python コードで実現可能である。

AWS 上に VC ノードを起動するためのサンプルコードを示す。

from common import logsetting
from vcpsdk.vcpsdk import VcpSDK

#
# VCP SDK 初期化
#
vcc_access_token = "ユーザ毎のアクセストークン"

sdk = VcpSDK(vcc_access_token)

#
# UnitGroup 作成
#
ugroup = sdk.create_ugroup('MyUnitGroupName', 'compute')

#
# 作成する Unit の spec 情報を作成
#
spec = sdk.get_spec("aws", "small")

#
# 変更可能な spec
#
# spec.num_nodes = 1
# spec.instance_type = 'm4.large'
# spec.params_v = ['/opt:/opt']
# spec.params_e = ['USER_NAME=test']
# spec.volume_size = 40
# spec.volume_type = "standard" # standard|io1|gp2|sc1|st1
# spec.disks = ['vol-08cbb04b35c8c9545']

# VC ノードの DNS 設定 (設定ファイル vcp_config.yml で記述した値を変更可能)
# spec.dns = [ '1.1.1.1', '1.0.0.1' ] # e.g. Cloudflare
# spec.dns_opt = [ "timeout:60" ]
# spec.dns_search = "example.com"
# spec.hostname = "mynode"

# VC ノードの /etc/hosts に追加 (設定ファイル vcp_config.yml で記述した値を変更可能)
# spec.add_host = [ "myhost:192.168.1.1", "yourhost:192.168.1.200"]

# AWS EC2 インスタンスのタグ設定
# spec.set_tag('key1', 'value1')
# spec.set_tag('key2', 'value2')

# VC ノード に SSH 接続するための公開鍵を設定
spec.set_ssh_pubkey('tmp/id_rsa.pub')   # tmp/id_rsa はあらかじめ作成しておく

#
# 作成した spec 情報を利用して Unit を作成(VCノード起動)
#
unit = ugroup.create_unit("new_sample_server", spec)

create_unit() による VC ノード起動に長時間を要してタイムアウトすると、その戻り値の Unit 情報 (vcpsdk::VcpUnitClass) を取得できない。 その場合でも、結果的に VC ノードの起動が完了していれば、 unit_name を指定して get_unit() を実行することにより Unit 情報を取得し、Unit に対する各種操作を継続することが可能である。

1.6.2. UnitGroup 確認

for ugroup in sdk.find_ugroup():
        print(ugroup)
---
[Vc]
+ type[compute] name[03_sample] owner(user1) vcno(55) state[RUNNING] vcid[fxxxb28xxxxxxxe698e8001995b7b4a2]
...

df_ugroups() の例

_images/df_ugroup.png

1.6.3. 起動した Unit, Node の確認

for node in ugroup.find_nodes():
    print(node)
---
[VcNode]
+ no(1) state[RUNNING] id[13xxxxxxxxxxxxxxx2babc606cb4e60f] \
cloud_instance_address[172.30.2.242] cloud_instance_id[i-0e868711a439130d3]
    ...
---
[VcNode]
+ no(1) state[RUNNING] id[13xxxxxxxxxxxxxxx2babc606cb4e60f] \

pandasのDataFrame形式で出力する方法は、以下の通り。

df_units() の例

_images/df_units.png

df_nodes() の例

# VCコントローラー全体(所有UnitGroup内のみ)
sdk.df_nodes()
# VCコントローラー全体(特権モードで全て)
sdk.df_nodes(privileged=True)
# UnitGroup内
ugroup..df_nodes()
# Unit内
unit.df_nodes()

df_nodes() のdisk例

_images/df_nodes.png

もし、設定などの問題で起動に失敗していた場合、Unit を削除する。

ugroup.delete_units('Unit名', force=True)

指定できる個数、条件は、APIドキュメント を参照。

1.6.4. Node 追加

起動済みの Node と同じ spec の Node を追加することができる。

e.g. Node を5個追加

unit.add_nodes(5)

1.6.5. Node 削除

起動済みの Node を条件指定により削除することができる。

e.g. 起動済みの Node のうち、1個削除

unit.delete_nodes(1)

e.g. 起動済みの Node に対応するクラウドインスタンスの「IP アドレス」を指定して削除

unit.delete_nodes(ip_address="xxx.xxx.xxx.xxx")

指定できる条件は、APIドキュメント を参照。

1.6.6. UnitGroup 初期化 (全 Unit 削除)

UnitGroup 配下の全ての Unit と Node を削除する。

ugroup = sdk.get_ugroup('UnitGroup名')
ugroup.cleanup()

1.6.7. spec のカスタマイズ

spec の各項目は、その属性値を直接設定することができる。

spec = sdk.get_spec('aws', 'small')
spec.volume_size = 80

1.6.8. UnitGroup 情報の確認

利用する VC コントローラの管理下にある UnitGroup 情報を確認する。

for ugroup in sdk.find_ugroups():
    print(ugroup)
    ---
    + type[compute] name[03_sample] owner(user1) vcno(55) state[RUNNING] vcid[fxxxb...]
...

...

指定できる条件は、APIドキュメント を参照。

1.6.9. VPNカタログ情報の確認

VCで利用できるVPNカタログ情報を取得する。

print(sdk.get_vpn_catalog("aws"))
---
{'default': {'aws_availability_zone': 'ap-northeast-1a', 'aws_vpc_subnet_id': 'subnet-0a743...', 'private_network_ipmask': '172.30.2.0/24', 'aws_vpc_security_group_id': 'sg-0a56...', 'aws_region': 'ap-northeast-1'}}

引数でproviderを省略すると、全providerの情報を一括して取得できる。

# 全部
catalogs = sdk.get_vpn_catalog()

for provider in catalogs.keys():
    if provider in ["onpremises"]:
        continue
    print("== provider {}".format(provider))
    print(catalogs[provider])
---
== provider oracle
{'default': {'oracle_subnet_id': 'ocid1.subnet.oc1.ap-tokyo-1.aaxx...', 'oracle_availability_domain': 'mkro:AP-TOKYO-1-AD-1', 'private_network_ipmask': '172.24.2.0/24', 'oracle_tenancy_ocid': 'ocid1.tenancy.oc1..aa...', 'oracle_compartment_id': 'ocid1.compartment.oc1..a...', 'oracle_region': 'ap-tokyo-1'}}
== provider sakura
{'default': {'sakura_private_subnet_gateway_ip': '172.20.1.4', 'sakura_local_switch_id': '1...', 'private_network_ipmask': '172.20.1.0/24', 'sakura_zone': 'tk1a'}}
== provider aws
{'default': {'aws_availability_zone': 'ap-northeast-1a', 'aws_vpc_subnet_id': 'subnet-0a743...', 'private_network_ipmask': '172.30.2.0/24', 'aws_vpc_security_group_id': 'sg-0a56...', 'aws_region': 'ap-northeast-1'}}
== provider azure
{'default': {'private_network_ipmask': '172.21.1.0/24', 'azure_location': 'Japan East', 'azure_resource_group_name': 'niivcp', 'azure_vnet_name': 'vcc3013', 'azure_subnet_name': 'vcc3013subnet', 'azure_security_group_name': 'vcc3013-main-nsg'}}
== provider aws_spot
{'default': {'aws_availability_zone': 'ap-northeast-1a', 'aws_vpc_subnet_id': 'subnet-0a7...', 'private_network_ipmask': '172.30.2.0/24', 'aws_vpc_security_group_id': 'sg-0a5...', 'aws_region': 'ap-northeast-1'}}    ...

指定できる条件は、APIドキュメント を参照。

1.6.10. 何か問題があったらバージョン情報を確認

バグ報告や質問などは、VCP SDK のバージョン情報を添えてご報告ください。

# VCP SDK バージョン確認
sdk.version()
---
    vcplib:
      filename: /home/jovyan/vcpsdk/vcplib/occtr.py
      version: 20.08.0+20200831

    vcpsdk:
      filename: /home/jovyan/vcpsdk/vcpsdk/vcpsdk.py
      version: 20.10.0+20201001

      plugin:
        aws: 1.2+20191001
        aws_disk: 1.0+20190408
        aws_spot: 1.1+20191001
        azure: 1.2+20191001
        vmware: 1.1+20191001
        azure_disk: 1.0+20190408
        sakura: 1.1+20191001
        sakura_disk: 1.0+20190930
        oracle: 1.0+20200331
        oracle_disk: 1.0+20200331
        aic: 1.2+20191001
        abc: 1.3+20190408
        hokudai: 1.1+20191001
        chameleon: 1.0+20200831
        chameleon_ext: 20200731
        gcp: 1.0+20190408
        onpremises: 1.0+20190408

    vc_controller:
      host: 10.0.0.1
      name: vcc3060
      wait_timeout_sec: 1000(default 15min)
      vc_controller: 20.10.0+20201001
      vc_controller_git_tag: nightly-20200511-15-g8dd969e

      plugin:
        sakura: 1.1+20200401
        aws: 1.2+20200401
        abc: 1.3+20200401
        gcp: 1.0+20200401
        vmware: 1.1+20200401
        aws_spot: 1.1+20200401
        azure: 1.2+20200401
        aic: 1.2+20200401
        chameleon: 1.0+20200401
        hokudai: 1.1+20200401
        oracle: 1.0+20200401

1.6.11. Chameleon Cloud の例

Chameleon を使用する上で他のクラウドプロバイダと異なる点は、 クラウドインスタンスを起動する前に「予約」操作が必要なことである。

物理サーバおよびネットワークの予約処理は VC 利用者自身で行う必要がある。

  • ネットワーク予約

_images/chameleon_flow.png

Chameleon Cloud 上で VC ノードを起動するためのサンプルコードを示す。

from common import logsetting
from vcpsdk.vcpsdk import VcpSDK

#
# VCP SDK 初期化
#
vcc_access_token = "ユーザ毎のアクセストークン"

sdk = VcpSDK(vcc_access_token)

# VC コントローラ環境に登録済みのクラウドネットワークセグメント情報 (VPNカタログ) を取得
vpn_catalog_name = "default"
vpn_catalog = vcpsdk.get_vpn_catalog("chameleon", catalog_name=vpn_catalog_name)

#
# ネットワーク確認
#
# Chameleon Network の予約用 Extension を生成
network_ext = sdk.get_extension("chameleon_network")
network_ext.setup(vpn_catalog)

# ネットワークの存在チェック
assert network_ext.network_exists(), "not exist sharedwan1"

#
# ホスト (物理サーバ) の予約
#
host_ext = vcpsdk.get_extension("chameleon")

# ホスト予約に必要な属性
node_type = "compute_skylake"
min_instances = 1
max_instances = 3

# 日付はUTCで指定する
start_dt = datetime.datetime.utcnow()
start_date=start_dt.strftime("%Y-%m-%d %H:%M")
end_date=(start_dt + datetime.timedelta(days=7)).strftime("%Y-%m-%d %H:%M") # 7日

host_ext.setup(
    node_type,
    start_date=start_date,
    end_date=end_date,
    min_instances=min_instances,
    max_instances=max_instances,
    lease_name_prefix = "S003",        # lease_name の prefix
    vpn_catalog=vpn_catalog,
)

# ホスト予約をリクエスト
lease_info = host_ext.reserve_host()
lease_info.wait()

# 予約IDを取得 (create_unitで必要)
reservation_id = lease_info.reservation_id

#---------------------------------------------------

#
# UnitGroupの作成
#
ugroup = sdk.create_ugroup('UnitGroup名', 'compute')

#
# 作成する Unit の spec 情報を作成
#
spec = sdk.get_spec("chameleon", "default")
spec.reservation = reservation_id       # 予約済み reservation_id

#
# 変更可能な spec
#
# クラウドのマシンイメージ設定
# spec.cloud_image = 'niivcp-20170616'

# VC ノード に SSH 接続するための公開鍵を設定
spec.set_ssh_pubkey('tmp/id_rsa.pub')

# VC ノードのタグ設定は Chameleon Cloud ではサポートしない

#
# 作成した spec 情報を利用して Unit を作成(VCノード起動)
# (注意) ホスト予約の開始時刻の到来後に create_unit を呼ぶこと
#
unit_name = 'chameleon_server'
unit = ugroup.create_unit(unit_name, spec, wait_for=True, verbose=0)

1.7. VCP SDK の設定ファイル

VCP SDK を利用する VC コントローラ環境に対応したクラウドプロバイダの情報を 設定ファイル vcp_config.yml にあらかじめ記述しておく。

vcp_config.yml のデフォルトの展開先 PATH は以下のとおり。

/notebooks/notebook/vcp_config/vcp_config.yml

この PATH は VCP SDK 初期化時に config_dir='config directory' を指定することで変更可能である。

sdk = VcpSDK('アクセストークン', config_dir="./my_config")

vcp_config.yml は、 実行するnotebookの directory配下の以下の場所が有効となる。

./my_config/vcp_conig.yml

vcp_config.yml のサンプルを以下に示す。

#
# VC Controller
#
vcc:
    host: VC Controller IP address
    name: VC Controller Name

    # 以降省略可。ネットワーク接続方式により必要な場合のみ
    # DNAT情報などを管理者に問い合わせる。
    # insecure_request_warning: False
    # vcc_port: VCP REST API port
    # vault_port: vault servivce port
    # private_ip: VC Controller private IP

    # VC ノードなどの起動・終了待ち時間の調整
    wait_timeout_sec: 1000  # default 1000sec = 15minutes

# spec_options:
#    # http://docs.docker.jp/engine/userguide/networking/default_network/donfigure-dns.html
#    dns:
#      - 8.8.8.8
#    dns_search: example.com
#    add_host:
#      - "my_grafana:10.0.0.1"
#      - "my_gw:172.30.1.10"
#      - "my_manager:10.0.0.200"
#    options:
#      - timeout:60
#    hostname: mynode

#
# Amazon Web Services (AWS)
#
aws:
    access_key: "アクセスキーID"
    secret_key: "シークレットアクセスキー"
    private_network: "default"

#
# VMware vSphere
#
vmware:
    user: "ユーザ名"
    password: "パスワード"
    private_network: "default"

#
# Hokkaido University High Performance Intercloud Server Service
#
hokudai:
    user_name: "ユーザ名"
    password: "パスワード"
    private_network: "default"

#
# SAKURA Cloud
#
sakura:
    sakura_token: "APIキーのアクセストークン"
    sakura_secret: "APIキーのアクセストークンシークレット"
    sakura_private_network: "default"

#
# Oracle Cloud Infrastructure
#
oracle:
    user_ocid: "ユーザーのOCID"
    fingerprint: "公開キーのフィンガープリント"
    private_key: "秘密鍵"
    private_network: "default"

#
# Microsoft Azure
#
azure:
    subscription_id: "サブスクリプションID"
    client_id: "クライアントID"
    client_secret: "クライアントシークレット"
    tenant_id: "テナントID"
    private_network: "default"

#
# Chameleon Cloud
#
chameleon:
    application_credential_id: "application_credential_id"
    application_credential_secret: "application_credential_secret"
    private_network: "default"

#
# Google Cloud Platform
#
gcp:
    credentials: "クレデンシャル情報 (JSON文字列をBase64エンコードして1行で表現した値)"
    private_network: "default"

1.7.1. JupyterNotebookからVCコントローラに直接接続できないネットワーク構成の場合対応

例えば、下図のようにJupyterNotebookがサービスネットワーク外で、DNAT経由でVCコントローラにアクセスする場合は、 以下の項目を設定して対応できる。

_images/vcc_setting.png
  • insecure_request_warning: VCコントローラアクセス時のSSL証明書のエラー対応(True: エラー回避)

  • vcc_port: VCP REST API port番号(default 443)

  • vault_port: vault servivce port番号(default 8443)

  • private_ip: VcNodeからVC コントローラにアクセスするための、VC コントローラのIP(default vcc: host)

1.7.2. VcNode DNS の設定

VcNode上のbase container の DNS を spec で設定できる

例えば、以下のように dns (DNS server IP)、 hostname を設定する。

spec.dns = "1.1.1.1"
spec.hostname = "server01"

VcNode の base container を起動するdocker command は、以下のようになる。

docker run --hostname server01 --dns=1.1.1.1 ...

DNSの設定項目

  • dns

  • dns_search

  • add_host

  • options

  • hostname

docker の DNS option についての詳細は、以下のdocker公式ドキュメントを参照

http://docs.docker.jp/engine/userguide/networking/default_network/donfigure-dns.html

1.8. 特権モード機能

バージョン21.11 でVC コントローラに機能追加された、特権モード(privileged)機能を利用するために、 Superuser トークン所有者は、VCP SDK の各APIに引数 privileged=True をつけて特権モードを行使できる。

通常のモードでは、ユーザが所有している UnitGroup のみ、参照、操作することができる。 特権モードでは、ユーザが所有していない UnitGroup も、参照、操作することができる。

また、特権モードを行使できるのは、VC コントローラにアクセスするためのアクセスキーが、super ユーザとして登録されている場合のみである。 regular ユーザが、特権モードを行使しようとすると、権限エラーとなる。

例) 特権モードの指定方法

# 通常モード
ugroup.df_nodes()
# または、
ugroup.df_nodes(privileged=False)

# 特権モード
ugroup.df_nodes(privileged=True)

1.9. spec 一覧

1.9.1. provider 共通の spec

provider 共通の spec 項目は、以下の通り。

# 起動する VC ノードの個数
spec.num_nodes = 1

# Base コンテナ起動時の VOLUME (-v, --volume) パラメータ
spec.params_v = ['/opt:/opt']
# Base コンテナ起動時の環境変数 ENV (-e) パラメータ
spec.params_e = ['USER_NAME=test']

# VC ノードに SSH 接続するための公開鍵ファイル
spec.set_ssh_pubkey('tmp/id_rsa.pub')

1.9.2. provider 固有の spec

クラウドプロバイダとオプショナル機能の対応状況

Provider

Fixed IP

Attach volume

Tag

Disk API

Power API

aws

azure

aws_spot

×

×

sakura

×

oracle

vmware

×

×

×

×

chameleon

×

×

×

×

×

hokudai

×

×

×

×

abc

×

×

×

×

aic

×

×

×

×

2. VCP SDK

2.1. SDKベースクラス(vcpsdk/vcpsdk)

class VcpExtClass(config_dir, vcc_access_token)

VCP 各Cloud毎のExt 情報管理用

find_extension(provider_name)

プロバイダ名からextension情報を生成

パラメータ:

provider_name -- real cloud provider名

戻り値:

VcpExtResource Object

class VcpSDK(vcc_access_token='', config_dir='', verbose=0)

VCP SDKベースクラス

サンプルコード

# 初期化(confi_dir省略時は、 `/notebooks/notebook/vcp_config` )
sdk = VcpSDK('アクセストークン',
            config_dir="vcp_config.yml, vcp_flavor.yml のdirectory")

# バージョン情報
sdk.version()

# フレーバー情報
sdk.df_flavors('プロバイダ名')

# vaultやdocker registory のurl情報
sdk.vcc_info()

# spec作成
spec = sdk.get_spec('プロバイダ名', 'flavor名')

# UnitGroup情報出力
sdk.df_ugroups()

# UnitGroup情報取得
ugroups = sdk.find_ugroups()
ugroup = sdk.get_ugroup('UnitGroup名')

# 既存サーバ用 ssh 公開鍵取得
sdk.get_publickey()

# UnitGroupの作成
ugroup = sdk.create_ugroup('UnitGroup名', 'compute|storage')
authority()

authority 情報の取得

結果サンプル

{
    'role': 'fullaccess',
    'user_name': 'nobody',
    'user_role': 'regular'
}
戻り値:

authority情報

property config_dir

config ファイルのディレクトリ

create_ugroup(ugroup_name, ugroup_type='compute', privileged=False)

UnitGroupの作成

パラメータ:
  • ugroup_name -- vc名

  • ugroup_type -- vcタイプ compute|storage

  • privileged -- 特権モードを指定する場合は True、指定しない場合は False (デフォルト)

戻り値:

UnitGroup情報(vcpsdk::VcpUnitGroupClass)

df_flavors(provider_name)

flavor定義の一覧(DataFrame形式)

パラメータ:

provider_name -- 表示対象とするプロバイダ名

df_nodes(privileged=False)

All node一覧(DataFrame形式)

パラメータ:

privileged -- 特権モードを指定する場合は True、指定しない場合は False (デフォルト)

df_ugroups(privileged=False)

UnitGroup 一覧(DataFrame)

パラメータ:

privileged -- 特権モードを指定する場合は True、指定しない場合は False (デフォルト)

find_ugroups(ugroup_name='', vcid='', vcno='', state=None, ugroup_type='', privileged=False)

検索条件にマッチするVC検索

パラメータ:
  • ugroup_name -- 検索条件Vc名

  • vcid -- 検索条件vcid

  • vcno -- 検索条件vcno

  • ugroup_type -- 検索条件UnitGroupタイプ

  • privileged -- 特権モードを指定する場合は True、指定しない場合は False (デフォルト)

戻り値:

UnitGroup情報(vcpsdk::VcpUnitGroupClass)

注釈

  • 検索条件指定が複数あれば、AND条件とする

get_extension(provider_name)

extension(plugin拡張項目)情報の取得

パラメータ:

provider_name -- プロバイダ名

戻り値:

extensionのリソース情報(vcpsdk::VcpExtResource)

get_publickey()

既存サーバ用 ssh 公開鍵取得

戻り値:

ssh 公開鍵文字列

get_spec(provider_name, flavor)

Spec情報の取得

パラメータ:
  • provider_name -- プロバイダ名

  • flavor -- small, medium, large などのfalvor文字列

戻り値:

SPECのリソース情報(vcpsdk::VcpSpecResource)

get_ugroup(ugroup_name, privileged=False)

unit group名を指定して、UnitGroup取得

パラメータ:
  • ugroup_name -- vc名

  • privileged -- 特権モードを指定する場合は True、指定しない場合は False (デフォルト)

戻り値:

UnitGroup情報(vcpsdk::VcpUnitGroupClass)

get_vpn_catalog(provider=None, vpn_catalog_name='default')

VC Controller からVPNカタログ情報を取得する

パラメータ:
  • provider -- プロバイダ名

  • vpn_catalog_name -- VPNカタログ名

戻り値:

vpnカタログ情報

vcc_info()

VC Controllerに関する情報の取得

return:

VCCに関する情報

結果サンプル

{
  { "host": "10.0.0.1:443" },
  { "vault_url": "https://10.0.0.1:8443" },
  { "docker_registry": {
    "official":  "10.0.0.1:5000",
    "user":  "10.0.0.1:5001"
  }
}
property verbose

VCP Lib:verbose

version()

VCP Libのバージョン出力

class VcpSpecClass(config_dir)

VCP 各Cloud毎のResource(spec) 情報管理用

find_spec(provider_name, flavor)

プロバイダ名と、flavorからspec情報を生成

パラメータ:
  • provider_name -- real cloud provider名

  • flavor -- フレーバー名(ex small, medium, large)

戻り値:

スペックリソースobject

class VcpUnitClass(ugroup, unit)

VcpUnitクラス(VCP Lib::VcUnit & VCP Lib::VcNode相当)

サンプルコード

...
ugroup = sdk.create_ugroup('UnitGroup名', 'compute|storage')
unit = ugroup.create_unit('Unit名', spec)

# Unit内のnodeをpower off
unit.power_off_nodes()

# Unit内のnodeをpower on
unit.power_on_nodes()

# Node追加
unit.add_nodes(ノード数)

# Node削除
unit.delete_nodes(ノード数)

# Node情報出力
unit.df_nodes()

# Node情報取得
ips = unit.find_ip_adresses()
nodes = unit.find_nodes()
add_nodes(num_add_nodes=1, ip_addresses=[], ip_address=None, mac_addresses=[], mac_address=None, wait_for=True, verbose=0, privileged=False)

Nodeの追加

パラメータ:
  • num_add_nodes -- 追加起動Node数

  • ip_addresses -- 追加起動するNodeのIPアドレス(配列)

  • ip_address -- 追加起動するNodeのIPアドレス

  • mac_addresses -- 追加起動するNodeのMACアドレス(配列)

  • mac_address -- 追加起動するNodeのMACアドレス

  • wait_for -- nodeの起動待ち条件(True: 待つ)

  • verbose -- verbose=0 でverboseなし

  • privileged -- 特権モードを指定する場合は True、指定しない場合は False (デフォルト)

戻り値:

node情報(vcplib::VcNode配列)

注釈

  • ip_address と ip_addresses を両方指定すると和集合として扱う

  • ip_address と ip_addresses を storageタイプのunitに指定するとエラーとする

  • ip_addresses, ip_address のいずれかを指定した場合、num_add_nodes を無視する

delete_nodes(num_delete_nodes=None, node_no=None, cloud_instance_id=None, ip_addresses=None, ip_address=None, wait_for=True, verbose=0, privileged=False)

検索条件にマッチするNode削除

パラメータ:
  • num_delete_nodes -- 削除対象Node最大数

  • node_no -- 検索条件node_no

  • cloud_instance_id -- 検索条件cloud_instance_id

  • ip_addresses -- 検索条件cloud_instance_address(配列)

  • ip_address -- 検索条件cloud_instance_address

  • wait_for -- nodeの削除待ち条件(True: 待つ)

  • verbose -- verbose=0 でverboseなし

  • privileged -- 特権モードを指定する場合は True、指定しない場合は False (デフォルト)

戻り値:

node情報(vcplib::VcNode配列)

注釈

  • 検索条件は、最大1個のみ指定可能

  • 検索条件未指定の場合は、num_delete_nodes=1 のみ指定と同様

  • wait_for=False の場合、複数nodeの削除はできない。(node削除は1個ずつ)

df_nodes(privileged=False)

node一覧(DataFrame形式)

パラメータ:

privileged -- 特権モードを指定する場合は True、指定しない場合は False (デフォルト)

find_nodes(node_id='', node_state='', node_no='', ip_addresses=[], ip_address=None, cloud_instance_id=None, mapper=None, privileged=False)

検索条件にマッチするnode検索

パラメータ:
  • node_id -- 検索条件node_id

  • node_state -- 検索条件node_state

  • node_no -- 検索条件node_no

  • ip_addresses -- 検索条件cloud_instance_addresses

  • ip_address -- 検索条件cloud_instance_address

  • cloud_instance_id -- 検索条件cloud_instance_id

  • mapper -- 検索結果のnodeに適用する関数

  • privileged -- 特権モードを指定する場合は True、指定しない場合は False (デフォルト)

戻り値:

node情報(vcplib::VcNode配列)

注釈

  • ip_address と ip_addresses を両方指定すると和集合として扱う

  • 検索条件指定が複数あれば、AND条件とする

  • 複数nodeの場合、node_no の昇順にsortした結果を返す

property name

VCP Lib::VcUnit の name

power_off_nodes(num_power_off_nodes=None, node_no=None, cloud_instance_id=None, ip_addresses=None, ip_address=None, wait_for=True, privileged=False, verbose=0)

検索条件にマッチするNodeのInstanceのpower off

パラメータ:
  • num_power_off_nodes -- power off対象Node最大数

  • node_no -- 検索条件node_no

  • cloud_instance_id -- 検索条件cloud_instance_id

  • ip_addresses -- 検索条件cloud_instance_address(配列)

  • ip_address -- 検索条件cloud_instance_address

  • wait_for -- nodeの監視開始待ち条件(True: 待つ)

  • privileged -- 特権モードを指定する場合は True、指定しない場合は False (デフォルト)

  • verbose -- verbose=0 でverboseなし

戻り値:

node情報(vcplib::VcNode配列)

注釈

  • 検索条件は、最大1個のみ指定可能

  • 検索条件未指定の場合は、num_power_off_nodes=1 のみ指定と同様

  • wait_for=False の場合、複数nodeのpower offはできない。(node power offは1個ずつ)

power_on_nodes(num_power_on_nodes=None, node_no=None, cloud_instance_id=None, ip_addresses=None, ip_address=None, wait_for=True, privileged=False, verbose=0)

検索条件にマッチするNodeのInstanceのpower on

パラメータ:
  • num_power_on_nodes -- power on対象Node最大数

  • node_no -- 検索条件node_no

  • cloud_instance_id -- 検索条件cloud_instance_id

  • ip_addresses -- 検索条件cloud_instance_address(配列)

  • ip_address -- 検索条件cloud_instance_address

  • wait_for -- nodeの監視開始待ち条件(True: 待つ)

  • privileged -- 特権モードを指定する場合は True、指定しない場合は False (デフォルト)

  • verbose -- verbose=0 でverboseなし

戻り値:

node情報(vcplib::VcNode配列)

注釈

  • 検索条件は、最大1個のみ指定可能

  • 検索条件未指定の場合は、num_power_on_nodes=1 のみ指定と同様

  • wait_for=False の場合、複数nodeのpower onはできない。(node power onは1個ずつ)

property state

VCP Lib::VcUnit の state

unwatch()

Unit監視停止

注釈

power_off_nodes() の利用を推奨

unwatch_nodes(num_watch_nodes=None, node_no=None, cloud_instance_id=None, ip_addresses=None, ip_address=None, privileged=False, verbose=0)

検索条件にマッチするNodeの監視停止

パラメータ:
  • num_watch_nodes -- unwatch対象Node最大数

  • node_no -- 検索条件node_no

  • cloud_instance_id -- 検索条件cloud_instance_id

  • ip_addresses -- 検索条件cloud_instance_address(配列)

  • ip_address -- 検索条件cloud_instance_address

  • privileged -- 特権モードを指定する場合は True、指定しない場合は False (デフォルト)

  • verbose -- verbose=0 でverboseなし

戻り値:

node情報(vcplib::VcNode配列)

注釈

  • power_on_nodes の利用を推奨

watch(wait_for=True)

Unit監視開始

パラメータ:

wait_for -- nodeの削除待ち条件(True: 待つ)

注釈

power_on_nodes() の利用を推奨

watch_nodes(num_watch_nodes=None, node_no=None, cloud_instance_id=None, ip_addresses=None, ip_address=None, wait_for=True, privileged=False, verbose=0)

検索条件にマッチするNodeの監視開始

パラメータ:
  • num_watch_nodes -- watch対象Node最大数

  • node_no -- 検索条件node_no

  • cloud_instance_id -- 検索条件cloud_instance_id

  • ip_addresses -- 検索条件cloud_instance_address(配列)

  • ip_address -- 検索条件cloud_instance_address

  • wait_for -- nodeの監視開始待ち条件(True: 待つ)

  • privileged -- 特権モードを指定する場合は True、指定しない場合は False (デフォルト)

  • verbose -- verbose=0 でverboseなし

戻り値:

node情報(vcplib::VcNode配列)

注釈

  • power_off_nodes の利用を推奨

class VcpUnitGroupClass(vc=None, vcp_config='')

VcpUnitGroupClassクラス(VCLIB::Vc相当) サンプルコード

# 初期化
sdk = VcpSDK('アクセストークン',
            config_dir="vcp_config.yml, vcp_flavor.yml のdirectory")
spec = sdk.get_spec('プロバイダ名', 'flavor名')
# UnitGroup作成
ugroup = sdk.create_ugroup('UnitGroup名', 'compute|storage')

# Unit作成
unit = ugroup.create_unit('Unit名', spec)

# Unit削除
ugroup.delete_units('Unit名')

# 各種情報出力
ugroup.df_units()
ugroup.df_nodes()

# 各種情報取得
ips = ugroup.find_ip_address()
units = ugroup.find_units()
unit = ugroup.get_unit('Unit名')
nodes = ugroup.find_nodes()

# UnitGroup削除
ugroup.cleanup()

# UnitGroupの所有者変更
ugroup.change_owner("new_owner")
change_owner(new_owner, privileged=False)

VCの所有者変更

パラメータ:

new_owner -- 新しい所有者

cleanup(wait_for=True, privileged=False)

VC初期化(Vc配下の全てのUnitとNodeを削除)

パラメータ:
  • privileged -- 特権モードを指定する場合は True、指定しない場合は False (デフォルト)

  • wait_for -- nodeの削除待ち条件(True: 待つ)

create_unit(unit_name, spec, wait_for=True, privileged=False, verbose=-1)

Unit作成

パラメータ:
  • unit_name -- 起動Unit名

  • spec -- 起動spec情報

  • wait_for -- nodeの起動待ち条件(True: 待つ)

  • privileged -- 特権モードを指定する場合は True、指定しない場合は False (デフォルト)

  • verbose -- verbose=0 でverboseなし

戻り値:

Unit情報(vcpsdk::VcpUnit)

delete_units(unit_name, wait_for=True, force=False, privileged=False, verbose=0)

検索条件にマッチするUnit削除

パラメータ:
  • name -- 検索条件Unit名

  • wait_for -- nodeの削除待ち条件(True: 待つ)

  • force -- force=Trueで、配下にnodeが存在してもnode毎削除する

  • privileged -- 特権モードを指定する場合は True、指定しない場合は False (デフォルト)

  • verbose -- verbose=0 でverboseなし

df_nodes(privileged=False)

node一覧(DataFrame形式)

パラメータ:

privileged -- 特権モードを指定する場合は True、指定しない場合は False (デフォルト)

df_units(privileged=False)

unit一覧(DataFrame形式) :param privileged: 特権モードを指定する場合は True、指定しない場合は False (デフォルト)

find_nodes(unit_name='', node_id='', node_state='', node_no='', ip_addresses=[], ip_address=None, cloud_instance_id=None, mapper=None, privileged=False)

検索条件にマッチするnode検索

パラメータ:
  • unit_name -- 検索条件unit名

  • node_id -- 検索条件node_id

  • node_state -- 検索条件node_state

  • node_no -- 検索条件node_no

  • ip_addresses -- 検索条件cloud_instance_addresses(配列)

  • ip_address -- 検索条件cloud_instance_address

  • cloud_instance_id -- 検索条件cloud_instance_id

  • mapper -- 検索結果のnodeに適用する関数

  • privileged -- 特権モードを指定する場合は True、指定しない場合は False (デフォルト)

戻り値:

node情報(vcplib::VcNode配列)

注釈

  • ip_address と ip_addresses を両方指定すると和集合として扱う

  • 検索条件指定が複数あれば、AND条件とする

find_units(unit_name='', privileged=False)

検索条件にマッチするunit検索

パラメータ:
  • unit_name -- 検索条件Unit名

  • privileged -- 特権モードを指定する場合は True、指定しない場合は False (デフォルト)

戻り値:

VcpUnit情報

注釈

  • 検索条件指定がない場合、UnitGroup内の全てのUnitを返す

get_unit(unit_name, privileged=False)

unit名を指定してunit取得

パラメータ:
  • unit_name -- ユニット名

  • privileged -- 特権モードを指定する場合は True、指定しない場合は False (デフォルト)

戻り値:

Unit情報(vcpsdk::VcpUnitClass)

property name

Unit groupの名前を取得する

property owner

vcplib::Vcの owner

property state

vcplib::Vcの state

update_ugroup_name(ugroup_name, ugroup_type='compute', privileged=False)

UnitGroup名を設定

パラメータ:
  • ugroup_name -- unitGroup名

  • ugroup_type -- compute | storage

  • privileged -- 特権モードを指定する場合は True、指定しない場合は False (デフォルト)

2.2. SDK plugins for AWS (vcpsdk/plugins/aws)

class VcpSpecResourceAws(provider_name, flavor, config_dir)

サンプルコード

spec = sdk.get_spec("aws", "small")
#
# 変更できること
#
# spec.num_nodes = 1
# spec.params_v = ['/opt:/opt']
# spec.params_e = ['USER_NAME=test']
# spec.ip_addresses = ['起動するnodeの静的なIPアドレス']

# aws依存パラメータ
#   https://www.terraform.io/docs/providers/aws/index.html
# spec.instance_type = 'm4.large'
# spec.volume_size = 40
# spec.volume_type = "standard" # standard|io1|gp2|sc1|st1

# 追加で使用するVolume
# spec.disks = ['vol-08cbb04b35c8c9545']    # volume_id 指定
# or
# my_disks = disk_unit.find_nodes()
# spec.disks = [my_disks[0]]   # VC disk指定

# cloud上のタグ設定
# spec.set_tag('key1', 'value1')
# spec.set_tag('key2', 'value2')

# cloud上のAMIイメージ設定
# spec.cloud_image = 'niivcp-20170616'

# base containerにssh loginするためのssh公開鍵情報を設定
spec.set_ssh_pubkey('tmp/id_rsa.pub')
cci(name)

CCI生成

パラメータ:

name -- unit名

戻り値:

CCI文字列

property cloud_image

AWSに依存するAMIのイメージ名

property disks

AWSに依存するEBS volume id

property instance_type

AWSに依存するinstance_type

注釈

  • VCP SDK flavorで設定可能

property ip_addresses

AWSのVPC上の静的ip_address_list

property num_nodes

起動するnode数

version = '1.2+20191001'
property volume_size

AWSに依存するvolume_size (単位:GB)

注釈

  • VCP SDK flavorで設定可能

property volume_type

AWSに依存するvolume_type

注釈

  • VCP SDK flavorで設定可能

2.3. SDK plugins for Azure (vcpsdk/plugins/azure)

class VcpSpecResourceAzure(provider_name, flavor, config_dir)

サンプルコード

spec = sdk.get_spec("azure", "small")
#
# 変更できること
#
# spec.num_nodes = 1
# spec.params_v = ['/opt:/opt']
# spec.params_e = ['USER_NAME=test']
# spec.ip_addresses = ['起動するnodeの静的なIPアドレス']

# Azure 依存パラメータ
#   https://www.terraform.io/docs/providers/azurerm/index.html
# spec.vm_size = 'Standard_LRS' # Standard_LRS|Premium_LRS ...
# spec.disk_size_gb = 40
# spec.managed_disk_type = "standard" # standard|io1|gp2|sc1|st1

# 追加で使用するVolume
# spec.disks = ['azure-volume-abc']
# or
# my_disks = disk_unit.find_nodes()
# spec.disks = [my_disks[0]]   # VC disk指定

# cloud上のイメージ設定
# spec.cloud_image = 'niivcp-20170616'

# cloud上のタグ設定
spec.set_tag('key1', 'value1')
spec.set_tag('key2', 'value2')

# base containerにssh loginするためのssh公開鍵情報を設定
spec.set_ssh_pubkey('tmp/id_rsa.pub')
cci(name)

CCI生成

パラメータ:

name -- unit名

戻り値:

CCI文字列

property cloud_image

Azureに依存する cloud_image

property disk_size_gb

Azureに依存する disk_size_gb (単位:GB)

注釈

  • VCP SDK flavorで設定可能

property disks

Azureに依存する ext_managed_disk

property ip_addresses
property managed_disk_type

Azureに依存する managed_disk_type

注釈

  • VCP SDK flavorで設定可能

property num_nodes

起動するnode数

version = '1.2+20191001'
property vm_size

Azureに依存する vm_size

注釈

  • VCP SDK flavorで設定可能

2.4. SDK plugins for Sakura (vcpsdk/plugins/sakura)

class VcpSpecResourceSakura(provider_name, flavor, config_dir)

サンプルコード

spec = sdk.get_spec("sakura", "small")

#
# 変更できること
#
# spec.num_nodes = 1
# spec.params_v = ['/opt:/opt']
# spec.params_e = ['USER_NAME=test']
# spec.ip_addresses = ['起動するnodeの静的なIPアドレス']

# さくらのクラウド依存
#   https://sacloud.github.io/terraform-provider-sakuracloud/
# spec.num_cores = 1
# spec.memory = 100
# spec.image = "vcp/base:1.1"
# spec.sakuracloud_disk_plan = 'ssd' # or 'hdd'
# spec.sakuracloud_disk_size = 100

# cloud上のVMイメージ設定
# spec.cloud_image = 'niivcp-20170616'

# base containerにssh loginするためのssh公開鍵情報を設定
spec.set_ssh_pubkey('tmp/id_rsa.pub')
cci(name)

CCI生成

パラメータ:

name -- unit名

戻り値:

CCI文字列

property cloud_image

Sakuraのクラウドに依存するcloud_image

property disks

Sakuraに依存するdisk id

property ip_addresses

SakuraのVPC上の静的ip_address_list

property memory

Sakuraのクラウドに依存する memory

注釈

  • VCP SDK flavorで設定可能

property num_cores

Sakuraのクラウドに依存する num_cores

注釈

  • VCP SDK flavorで設定可能

property sakuracloud_disk_plan

Sakuraのクラウドに依存する sakuracloud_disk_plan

注釈

  • VCP SDK flavorで設定可能

property sakuracloud_disk_size

Sakuraのクラウドに依存する sakuracloud_disk_size (単位:GB)

注釈

  • VCP SDK flavorで設定可能

version = '1.1+20191001'

2.5. SDK plugins for AIC(vcpsdk/plugins/aic)

class VcpSpecResourceAic(provider_name, flavor, config_dir)

サンプルコード

spec = sdk.get_spec("aic", "default")
#
# 変更できること
#
# spec.num_nodes = 1
# spec.flavor_name = 'cn000' # AIC/ABCの環境依存
# cloud上のVMイメージ設定
# spec.cloud_image = 'niivcp-20170616'
# base containerにssh loginするためのssh公開鍵情報を設定
spec.set_ssh_pubkey('tmp/id_rsa.pub')
cci(name)

CCI生成

パラメータ:

name -- unit名

戻り値:

CCI文字列

property cloud_image

AICに依存するcloud_image

property flavor_name

AICに依存するフレーバー名

注釈

  • VCP SDK flavorで設定可能

property ip_addresses
property num_nodes

起動するnode数

version = '1.2+20191001'

2.6. SDK plugins for ABC (vcpsdk/plugins/abc)

class VcpSpecResourceAbc(provider_name, flavor, config_dir)

サンプルコード

spec = sdk.get_spec("abc", "default")
#
# 変更できること
#
# spec.num_nodes = 1
# spec.flavor_name = 'cn000' # AIC/ABCの環境依存
# cloud上のVMイメージ設定
# spec.cloud_image = 'niivcp-20170616'
# base containerにssh loginするためのssh公開鍵情報を設定
spec.set_ssh_pubkey('tmp/id_rsa.pub')
cci(name)

CCI生成

パラメータ:

name -- unit名

戻り値:

CCI文字列

property cloud_image

ABCに依存するcloud_image

property flavor_name

AICに依存するフレーバー名

注釈

  • VCP SDK flavorで設定可能

property ip_addresses
property num_nodes

起動するnode数

version = '1.3+20190408'

2.7. SDK plugins for GCP (vcpsdk/plugins/gcp)

class VcpSpecResourceGcp(provider_name, flavor, config_dir)

サンプルコード

spec = sdk.get_spec("gcp", "small")
#
# 変更できること
#
# spec.num_nodes = 1
# spec.params_v = ['/opt:/opt']
# spec.params_e = ['USER_NAME=test']
# spec.ip_addresses = ['起動するnodeの静的なIPアドレス']

# Google Cloud Platform 依存
#   https://www.terraform.io/docs/providers/google/index.html
# spec.machine_type = 'n1-standard-1'  # f1-micro|n1-standard-1|...
# spec.disk_size_gb = 40
# spec.disk_type = "pd-standard" # pd-standard|pd-sd|...

# 追加で使用するVolume
# spec.disks = ['vol-08cbb04b35c8c9545']

# cloud上のGCPイメージ設定
# spec.cloud_image = 'niivcp-20170616'

# base containerにssh loginするためのssh公開鍵情報を設定
spec.set_ssh_pubkey('tmp/id_rsa.pub')
cci(name)

CCI生成

パラメータ:

name -- unit名

戻り値:

CCI文字列

property cloud_image

GCPに依存するcloud_image

property disk_size_gb

GCPに依存するdisk_size_gb (単位:GB)

注釈

  • VCP SDK flavorで設定可能

property disk_type

GCPに依存するdisk_type

注釈

  • VCP SDK flavorで設定可能

property disks

GCPに依存するdisk

property ip_addresses

GCPのVPC上の静的ip_address_list

property machine_type

GCPに依存するmachine_type

注釈

  • VCP SDK flavorで設定可能

property num_nodes

起動するnode数

version = '1.0+20190408'

2.8. SDK plugins for Onpremises (vcpsdk/plugins/onpremises)

class VcpSpecResourceOnpremises(provider_name, flavor, config_dir)

サンプルコード

spec = sdk.get_spec("onpremises", "default")
#
# 変更できること
#
spec.network_if = 'eth9'
spec.user_name = 'ubuntu'   # ssh login user
spec.ip_addresses = ['起動するnodeの静的なIPアドレス']

# base containerにssh loginするためのssh公開鍵情報を設定
spec.set_ssh_pubkey('tmp/id_rsa.pub')
cci(name)

CCI生成

パラメータ:

name -- unit名

戻り値:

CCI文字列

property ip_addresses

onpremisesに依存する ip_address_list

property network_if

onpremisesに依存する network_if

property user_name

onpremisesに依存する ssh login名

version = '1.0+20190408'

2.9. SDK plugins for AWS Disk (vcpsdk/plugins/aws_disk)

class VcpSpecResourceAwsDisk(provider_name, flavor, config_dir)

サンプルコード

spec = sdk.get_spec("aws_disk", "small")
#
# 変更できること
#

# aws 依存パラメータ
#   https://www.terraform.io/docs/providers/aws/index.html
# spec.cloud_image = 'AMI-XXXXXX'
# spec.num_disks = 1
# spec.type = "standard" # standard|io1|gp2|sc1|st1
# spec.size = 40

# cloud上のタグ設定
# spec.set_tag('key1', 'value1')
# spec.set_tag('key2', 'value2')

# cloud上のsnapshot名
# spec.cloud_image = 'niivcp-20170616'
cci(name)

CCI生成

パラメータ:

name -- unit名

戻り値:

CCI文字列

property cloud_image

AWSに依存するAMIのイメージ名

property size

AWSに依存するdisk size (単位:GB)

注釈

  • VCP SDK flavorで設定可能

property type

AWSに依存するdisk type

注釈

  • VCP SDK flavorで設定可能

version = '1.0+20190408'

2.10. SDK plugins for Azure Disk (vcpsdk/plugins/azure_disk)

class VcpSpecResourceAzureDisk(provider_name, flavor, config_dir)

サンプルコード

spec = sdk.get_spec("azure_disk", "small")
#
# 変更できること
#
# spec.num_disks = 1

# Azure 依存パラメータ
#   https://www.terraform.io/docs/providers/azurerm/index.html
# spec.storage_account_type = "Standard_LRS"
# spec.disk_size_gb = 40

# cloud上のAzureイメージ名
# spec.cloud_image= 'niivcp-xxxx'

# cloud上のタグ設定
# spec.set_tag('key1', 'value1')
# spec.set_tag('key2', 'value2')
cci(name)

CCI生成

パラメータ:

name -- unit名

戻り値:

CCI文字列

property cloud_image

Azureに依存する cloud_image

property disk_size_gb

Azureに依存するsize (単位:GB)

注釈

  • VCP SDK flavorで設定可能

property storage_account_type

Azureに依存するdisk type

注釈

  • VCP SDK flavorで設定可能

version = '1.0+20190408'

2.11. SDK plugins for Sakura Disk (vcpsdk/plugins/sakura_disk)

class VcpSpecResourceSakuraDisk(provider_name, flavor, config_dir)

サンプルコード

spec = sdk.get_spec("sakura_disk", "small")
#
# 変更できること
#
# spec.num_disks = 1

# さくらのクラウド依存
#   https://sacloud.github.io/terraform-provider-sakuracloud/
# spec.cloud_image = 'archive-001'
# spec.sakuracloud_disk_plan = "ssd" # ssd/hdd
# spec.sakuracloud_disk_size = 40 # 20GB,40GB,100GB,250GB,500GB,1TB
cci(name)

CCI生成

パラメータ:

name -- unit名

戻り値:

CCI文字列

property cloud_image

Sakuraに依存するアーカイブのイメージ名

property sakuracloud_disk_plan

Sakuraに依存するdisk type

注釈

  • VCP SDK flavorで設定可能

property sakuracloud_disk_size

Sakuraに依存するdisk size

注釈

  • VCP SDK flavorで設定可能

version = '1.0+20190930'

2.12. SDK plugins for AWS Spot Instance (vcpsdk/plugins/aws_spot)

class VcpSpecResourceAwsSpot(provider_name, flavor, config_dir)

サンプルコード

spec = sdk.get_spec("aws_spot", "small")
#
# 変更できること
#
# spec.num_nodes = 1
# spec.params_v = ['/opt:/opt']
# spec.params_e = ['USER_NAME=test']
# spec.ip_addresses = ['起動するnodeの静的なIPアドレス']

# aws 依存パラメータ
#   https://www.terraform.io/docs/providers/aws/index.html
# spec.instance_type = 'm4.large'
# spec.volume_size = 40
# spec.volume_type = "standard" # standard|io1|gp2|sc1|st1

# spot instace専用
# spec.spot_type = 'one-time'   # one-time: spotがなくなったらVcNode終了
                                # persistent: spotがなくなったらVcNode一時停止
# spec.spot_price = "0.5"       # スポットインスタンスの1時間当たりの料金(USドル)
# spec.block_duration_minutes = 300 # スポットインスタンスの継続時間 60, 120, 180, 240, 300, or 360

# 追加で使用するVolume
# spec.disks = ['vol-08cbb04b35c8c9545']    # volume_id 指定
# or
# my_disks = disk_unit.find_nodes()
# spec.disks = [my_disks[0]]   # VC disk指定

# cloud上のタグ設定(spot requestに付与)
# spec.set_tag('key1', 'value1')
# spec.set_tag('key2', 'value2')

# cloud上のAMIイメージ設定
# spec.cloud_image = 'niivcp-20170616'

# base containerにssh loginするためのssh公開鍵情報を設定
spec.set_ssh_pubkey('tmp/id_rsa.pub')
property block_duration_minutes

AWSに依存するblock_duration_minutes

cci(name)

CCI生成

パラメータ:

name -- unit名

戻り値:

CCI文字列

property spot_price

AWSに依存するspot_price - スポットインスタンスの1時間当たりの料金(USドル)

property spot_type

AWSに依存するspot_type

注釈

  • one-time | persistent

version = '1.1+20191001'

2.13. SDK plugins for VMware (vcpsdk/plugins/vmware)

class VcpSpecResourceVmware(provider_name, flavor, config_dir)

サンプルコード

spec = sdk.get_spec("vmware", "small")
#
# 変更できること
#
# spec.num_nodes = 1
# spec.params_v = ['/opt:/opt']
# spec.params_e = ['USER_NAME=test']
# spec.ip_addresses = ['起動するnodeの静的なIPアドレス']

# VMware 依存
#   https://www.terraform.io/docs/providers/vsphere/index.html
# spec.num_cpus = 4
# spec.memory = 1024 # MB
# spec.disk_size = 40

# クラウドイメージ(テンプレートとするVMWareの仮想マシンの名前)
# spec.cloud_image = 'niivcp-20181216'

# base containerにssh loginするためのssh公開鍵情報を設定
spec.set_ssh_pubkey('tmp/id_rsa.pub')
cci(name)

CCI生成

パラメータ:

name -- unit名

戻り値:

CCI文字列

property cloud_image

VMwareに依存するクラウドイメージ(テンプレートとするVMWareの仮想マシンの名前)

property disk_size

VMwareに依存するdisk_size (単位:GB)

注釈

  • VCP SDK flavorで設定可能

property ip_addresses

VMwareのVPC上の静的ip_address_list

property mac_addresses

VMwareのmac_address_list

property memory

VMwareに依存するmemory

注釈

  • VCP SDK flavorで設定可能

property num_cpus

VMwareに依存するnum_cpus

注釈

  • VCP SDK flavorで設定可能

property num_nodes

起動するnode数

version = '1.1+20191001'

2.14. SDK plugins for Hokudai (vcpsdk/plugins/hokudai)

class VcpSpecResourceHokudai(provider_name, flavor, config_dir)

サンプルコード

spec = sdk.get_spec("hokudai", "default")
#
# 変更できること
#
# spec.num_nodes = 1

# 北海道大学ハイパフォーマンスインタークラウド サーバサービス依存
# spec.flavor_name = 'cn000'
# spec.volume_size =  40 # G

# cloud上のVMイメージ設定
# spec.cloud_image = 'niivcp-20170616'
# base containerにssh loginするためのssh公開鍵情報を設定
spec.set_ssh_pubkey('tmp/id_rsa.pub')
cci(name)

CCI生成

パラメータ:

name -- unit名

戻り値:

CCI文字列

property cloud_image

北大Cloudに依存するcloud_image

property flavor_name

北大Cloudに依存するフレーバー名

注釈

  • VCP SDK flavorで設定可能

property ip_addresses
property num_nodes

起動するnode数

version = '1.1+20191001'
property volume_size

北大Cloudに依存するディスクサイズ (単位:GB)

注釈

  • VCP SDK flavorで設定可能

2.15. SDK plugins for Oracle Cloud (vcpsdk/plugins/oracle)

class VcpSpecResourceOracle(provider_name, flavor, config_dir)

サンプルコード

spec = sdk.get_spec("oracle", "small")

#
# 変更できること
#
# spec.num_nodes = 1
# spec.params_v = ['/opt:/opt']
# spec.params_e = ['USER_NAME=test']
# spec.ip_addresses = ['起動するnodeの静的なIPアドレス']

# OracleCloud依存
#   https://docs.oracle.com/cd/E97706_01/Content/Compute/References/computeshapes.htm
# spec.shape = 'VM.Standard.E2.1.Micro'
# spec.image = "vcp/base:1.6.1"
# spec.boot_volume_size_in_gbs = 100

# 追加で使用するVolume
# spec.disks = ['ocid1.volume.oc1.ap-tokyo-1.ab...']    # volume_id 指定
# or
# my_disks = disk_unit.find_nodes()
# spec.disks = [my_disks[0]]   # VC disk指定

# cloud上のVMイメージ設定
# spec.cloud_image = 'niivcp-20170616'

# cloud上のタグ設定
# spec.set_tag('key1', 'value1')
# spec.set_tag('key2', 'value2')

# base containerにssh loginするためのssh公開鍵情報を設定
spec.set_ssh_pubkey('tmp/id_rsa.pub')
property boot_volume_size_in_gbs

OracleCloudに依存する boot_volume_size_in_gbs (単位:GB)

注釈

  • VCP SDK flavorで設定可能

cci(name)

CCI生成

パラメータ:

name -- unit名

戻り値:

CCI文字列

property cloud_image

OracleCloudに依存するcloud_image

property disks

Oracleに依存するBlock Volume のOCID

property ip_addresses

OracleCloudのVPC上の静的ip_address_list

property shape

OracleCloudに依存する shape

注釈

  • VCP SDK flavorで設定可能

version = '1.0+20200331'

2.16. SDK plugins for Oracle Cloud Disk (vcpsdk/plugins/oracle_disk)

class VcpSpecResourceOracleDisk(provider_name, flavor, config_dir)

サンプルコード

spec = sdk.get_spec("oracle_disk", "small")
#
# 変更できること
#
# spec.num_disks = 1

# OracleCloud のコピー元の Volume の OCID を指定
# spec.cloud_image = 'ocid1.volume.oc1.region.abxhi....'

# spec.size_in_gbs = 50 # 50 GB and 32768 GB
cci(name)

CCI生成

パラメータ:

name -- unit名

戻り値:

CCI文字列

property cloud_image

OracleCloudに依存するコピー元の Volume の OCID

property size_in_gbs

OracleCloudに依存するdisk size (単位:GB)

注釈

  • VCP SDK flavorで設定可能

version = '1.0+20200331'

2.17. SDK plugins for Chameleon Cloud (vcpsdk/plugins/chameleon)

class VcpSpecResourceChameleon(provider_name, flavor, config_dir)

サンプルコード

# chameleon の flavor は、 予約時に指定済みのため、
# "default" 固定
spec = sdk.get_chameleon_spec("chameleon", "default")

#
# 変更できること
#
# spec.num_nodes = 1
# cloud上のVMイメージ設定
# spec.cloud_image = 'CC-Ubuntu18.04'

# 予約ID
spec.reservation = "予約時に取得した予約識別子文字列"

# base containerにssh loginするためのssh公開鍵情報を設定
spec.set_ssh_pubkey('tmp/id_rsa.pub')
cci(name)

CCI生成

パラメータ:

name -- unit名

戻り値:

CCI文字列

property cloud_image

chameleonに依存するAMIのイメージ名

property ip_addresses

chameleonのVPC上の静的ip_address_list

注釈

chameleon の sharedwan1 のネットワークを使用しているときは、静的IPアドレスを指定できない

property num_nodes

起動するnode数

property reservation

chameleon のインスタンス予約時の予約ID

version = '1.0+20200831'

2.18. SDK plugins for Chameleon Cloud extension (vcpsdk/plugins/chameleon_ext)

class VcpChameleonOpenrc(provider_name, config_dir, token, verbose=0)

Chamelenon Extentsions の BASEクラス (内部クラスであるためAPI上は無視してよい)

class VcpExtResourceChameleon(provider_name, config_dir, token, verbose=0)

Chameleon クラウドインスタンスの予約を行うクラス

サンプルコード

# vpnカタログ情報を取得
vpn_catalog_name = "default"
vpn_catalog = vcpsdk.get_vpn_catalog("chameleon", catalog_name=vpn_catalog_name)

host_ext = vcpsdk.get_extension("chameleon")

# 指定可能項目
node_type = "compute_skylake"
min_instances = 1
max_instances = 3

host_ext.setup(
    node_type,
    start_date=start_date,
    end_date=end_date,
    min_instances=min_instances,
    max_instances=max_instances,
    lease_name_prefix = "S003",
    vpn_catalog=vpn_catalog,
)

# インスタンスの予約
lease_info = host_ext.reserve_host()
lease_info.wait()

print("host_lease_id is {}".format(lease_info.host_lease_id))
print("reservation_id is {}".format(lease_info.reservation_id))
print("status is {}".format(lease_info.status))
reserve_host()

クラウドインスタンスの予約を実行する。

戻り値:

クラウドインスタンスの予約結果 ( vcpsdk.plugins.chameleon_ext.VcpExtResourceChameleonHostLeaseInfo )

setup(node_type, start_date=None, end_date=None, min_instances=1, max_instances=1, vcpus=None, memory_mb=None, disk_gb=None, lease_name_prefix=None, vpn_catalog=None)

chameleon のホストの予約情報を作成する (実際の予約処理は reserve_host関数で行う)

パラメータ:
  • node_type -- chameleon 上での node_type

  • start_date -- 予約の開始時刻 (タイムゾーンはUTCで YYYY-mm-dd HH:MM 形式) Noneを指定した場合は、呼び出し時の時刻が使われる。

  • end_date -- 予約の終了時刻 (タイムゾーンはUTCで YYYY-mm-dd HH:MM 形式) Noneを指定した場合は、1日後

  • min_instances -- 最小台数

  • max_instances -- 最大台数

  • vcpus -- VCPU数 future use

  • memory_mb -- メモリ容量(MBytes) future use

  • disk_gb -- Disk容量(GBytes) future use

  • lease_name_prefix -- Chameleon のlease 名に付けるprefix

  • vpn_catalog -- VPNカタログ情報

注釈

vcpus, memory_mb, disk_gb の指定は現状の実装では、無視する。

class VcpExtResourceChameleonHostLeaseInfo(provider_name, config_dir, token, verbose=0)

Chameleon クラウドインスタンスの予約結果

サンプルコード

# lease idを使って情報取得
info_ext = vcpsdk.get_extension("chameleon_host_lease_info")
info_ext.setup(lease_info.host_lease_id, vpn_catalog)
print(info_ext)

print("host_lease_id is {}".format(info_ext.host_lease_id))
print("reservation_id is {}".format(info_ext.reservation_id))
print("status is {}".format(info_ext.status))

# 予約の延長
info_ext.extend()

# 予約の削除
info_ext.delete()

# 予約の完了まで待つ
info_ext.wait()
delete()

ホストの予約を削除する。

extend(weeks=None, days=None, hours=None)

予約を延長する。 weeks, days, hours のどれか一つを選んで指定する。複数の引数が指定された場合、単位が長い方の指定を優先する。

引数を指定しない場合、1日予約を延長する

chameleonの仕様により、予約の延長ができるのは予約が切れる48時間まえ。 その時間外に呼ぶと予約延長操作は失敗する。 予約に失敗した場合は例外を送出する。

パラメータ:
  • weeks -- 延長する週

  • days -- 延長する日数

  • hours -- 延長する時間

property host_lease_id

lease IDを返す。

property reservation_id

reservation IDを返す。CCIのreservationに指定する。

setup(host_lease_id, vpn_catalog)

chameleon のホストの予約情報を設定する

パラメータ:
  • host_lease_id -- ホストの予約情報識別子

  • vpn_catalog -- VPNカタログ情報

property status

lease状態を返す

戻り値:

leaseの状態

  • STARTING 予約情報を作成中

  • PENDING 予約開始時刻が到来していない

  • ACTIVE 予約開始時刻が到来した

  • ERROR エラーが発生した

update()

ホストの予約情報を再取得する。

wait()

leaseの状態(status)がACTIVEになるまで待つ

class VcpExtResourceChameleonNetwork(provider_name, config_dir, token, verbose=0)

chameleon上でvlanセグメントを予約し、ネットワークを構築する。sharedwan1 を使用する場合は不要。

サンプルコード

# vpnカタログ情報を取得
vpn_catalog_name = "default"
vpn_catalog = vcpsdk.get_vpn_catalog("chameleon", catalog_name=vpn_catalog_name)

# Chameleon Network の予約用 extension を生成
network_ext = vcpsdk.get_ext("chameleon_network")
network_ext.setup(vpn_catalog)

# 期間 %Y-%m-d %H:%M (省略可) を指定して、Chameleon Network を予約
#    start_date = start_dt.strftime("%Y-%m-%d %H:%M")
network_ext.create_network(start_date=start_date, end_date=end_date)
create_network(start_date=None, end_date=None)

vlanセグメントを予約し、予約できた場合にネットワーク、サブネットを作成する。

network_exists()
property network_name
setup(vpn_catalog)

chameleon のネットワークの予約情報を作成する

パラメータ:

vpn_catalog -- VPNカタログ情報

2.19. SDK plugins for mdx extension (vcpsdk/plugins/mdx_ext)

class MdxResourceExt(init_token=None, endpoint='https://oprpl.mdx.jp')

mdx REST API にアクセスするためのPythonクライアントライブラリ。

mdx REST API による仮想マシンの作成、状態取得、ネットワーク設定などの機能を提供する。

パラメータ:
  • init_token -- mdx ユーザポータルから取得した mdx REST API 認証トークン

  • endpoint -- mdx REST API エンドポイント URL (オプショナル)

add_allow_acl_ipv4_info(allow_acl_spec)

指定したセグメントにAllow ACL IPv4を追加する

パラメータ:

allow_acl_spec -- 以下のような、追加するAllow ACL IPv4の仕様

{
  "segment": ネットワークセグメントID
  "src_address": Src IPv4アドレス
  "src_mask": Srcマスク
  "src_port": Srcポート
  "dst_address": Dst IPv4アドレス
  "dst_mask": Dstマスクの文字列表現
  "dst_port": Dstポートの文字列表現
  "protocol": プロトコル "ICMP" "TCP" "UDP" のいずれか
}
delete_allow_acl_ipv4_info(acl_ipv4_id)
パラメータ:

acl_ipv4_id -- 削除対象の Allow ACL IPv4 ID

deploy_vm(vm_name, vm_spec, wait_for=True)

仮想マシンのデプロイを実行する。wait_forが True の場合、仮想マシンにIPv4アドレスが付与されるまで待つ。

パラメータ:
  • vm_name -- 仮想マシン名

  • vm_spec -- 仮想マシンの仕様(ハードウェアのカスタマイズ項目)

{
  "catalog": カタログID
  "disk_size": 仮想ディスクサイズ(GB)
  "gpu": GPU数(数値を文字列で指定)
  "pack_type": パックタイプ(※通常プロジェクトの場合に指定) "gpu" または "cpu" を指定
  "pack_num": パック数(※通常プロジェクトの場合に指定)
  "network_adapters": [
     {
        "adapter_number": ネットワーク番号
        "segment": ネットワークセグメントID
     }
  ],
  "shared_key": 仮想マシンへのSSH接続用公開鍵の文字列
  "storage_network": ストレージネットワーク "sr-iov", "pvrdma", "portgroup" のいずれかを指定
  "template_name": vCenter上の仮想マシンテンプレート名
}
パラメータ:

wait_for -- 仮想マシンにIPv4アドレスが付与されるまで待つ場合 True を指定

戻り値:

仮想マシン情報。詳細は get_vm_info() を参照のこと。

destroy_vm(vm_name, wait_for=True)

仮想マシンの削除を実行する。事前に仮想マシンを PowerOFF 状態にしておく必要がある。

パラメータ:
  • vm_name -- 仮想マシン名

  • wait_for -- 削除完了を待つ場合 True を指定

dnat_iter()
get_allow_acl_ipv4_info(segment_id)

Allow ACL IPv4情報の取得

パラメータ:

segment_id -- ネットワークセグメントID

戻り値:

以下のような、プロジェクトに属するAllow ACL IPv4の情報のリスト

[
  {
    "uuid": Allo ACL IPv4 ID
    "src_address": Srcアドレス
    "src_mask":  Srcマスク (string で指定 例: "24")
    "src_port": Srcポート (string)
    "dst_address": Dstアドレス
    "dst_mask": Dstマスク(string で指定 例: "24")
    "dst_port": Dstポート (string)
    "protocol": プロトコル "ICMP" "TCP" "UDP" のいずれか
  }
]
get_assigned_projects()

ユーザに紐付いたプロジェクト情報を取得する

戻り値:

以下のような、プロジェクト情報のリスト

[
  {
    "uuid": 機関ID
    "name": 機関名
    "projects": [
       {
          "uuid": プロジェクトID
          "name": プロジェクト名
          "type": プロジェクトのタイプ "専有" "通常" のいずれか
          "expired": プロジェクトの期限が切れたか否か (boolean)
       }
    ]
  }
]
get_current_project()

操作対象のmdxのプロジェクトの取得

戻り値:

以下のような、プロジェクトに属するAllow ACL IPv4の情報のリスト

{
   "uuid": プロジェクトID
   "name": プロジェクト名
   "type": プロジェクトのタイプ "専有" "通常" のいずれか
   "expired": プロジェクトの期限が切れたか否か (boolean)
}
get_dnat()

プロジェクトに属するDNAT情報の取得

戻り値:

以下のような、プロジェクトに属する DNAT 情報のリスト

[
  {
    "uuid": DNAT ID
    "pool_address": 転送元グローバルIPv4アドレス
    "segument": セグメント名
    "dst_address": 転送先プライベートIPアドレス
  }
]
get_project_history()

プロジェクト内における操作履歴の情報を取得する

戻り値:

以下のような、プロジェクト操作履歴情報のリスト

[
  {
    "uuid": 操作履歴ID
    "project": プロジェクトID
    "user_name": 操作ユーザ名
    "type": 操作種別
    "object_uuid": 操作対象オブジェクトID
    "object_name": 操作対象オブジェクト名
    "start_datetime": 開始日付 (YYYY-mm-dd HH:MM:SS)
    "end_datetime": 終了日付 (YYYY-mm-dd HH:MM:SS)
    "status": ステータス "Running" "Completed" "Failed" のいずれか
    "progress": 進捗率 (%)
    "error_message": エラーメッセージ
    "error_detail": エラー詳細
  }
]
get_segment_summary(segment_id)

ネットワークセグメントのサマリ情報を取得する

パラメータ:

segment_id -- ネットワークセグメントID

戻り値:

以下のような、ネットワークセグメントのサマリ情報

{
  "vlan_id": VLAN ID
  "vni": VNI
  "ip_range": IPアドレス範囲
}
get_segments()

プロジェクトに紐付いたネットワークセグメント情報を取得する。

戻り値:

以下のような、プロジェクトに紐付いたネットワークセグメント情報のリスト

[
  {
    "uuid": ネットワークセグメントID
    "name": ネットワークセグメント名
    "default": プロジェクト作成時に作成されるデフォルトのネットワークセグメントか否か(boolean)
  }
]
get_vm_catalogs()

プロジェクトに紐づいた仮想マシンデプロイカタログ情報を取得する

戻り値:

以下のような、カタログのリスト

[
  {
    "uuid": カタログID
    "name": カタログ名
    "type": カタログのタイプ
    "template_name": vCenter上の仮想マシンテンプレート名
    "os_type": OS種別 "Linux", "Windows" のいずれか
    "os_name": OS名 (例: "CentOS")
    "os_version": OSバージョン
    "hw_version": ハードウェアバージョン
    "description": 説明
    "login_username": OSログインユーザ名
  }
]
get_vm_info(vm_name)

仮想マシンの詳細情報を取得する

パラメータ:

vm_name -- 仮想マシン名

戻り値:

以下のような仮想マシン情報

{
  "name": 仮想マシン名
  "vm_id": 仮想マシンID
  "os_type": OSタイプ
  "status": 仮想マシンの状態 "PowerON" "PowerOFF" "Suspended" "NotFound" "Deploying" "Detached" のいずれか
  "vmware_tools": [
     {
       "status": VMware Tools状態
       "version": VMware Toolsバージョン
     }
  ],
  "cpu": CPU数
  "memory": メモリ量の文字列表現 (例: "2 GB")
  "gpu": GPU数の文字列表現 (例: "1")
  "service_networks": [
    {
      "adapter_number": ネットワーク番号
      "ipv4_address": IPv4アドレスのリスト
      "ipv6_address": IPv6アドレスのリスト
      "segment": ネットワークセグメント名
    }
  ],
  "storage_networks": [
    {
      "adapter_number": ネットワーク番号
      "ipv4_address": IPv4アドレスのリスト
      "ipv6_address": IPv6アドレスのリスト
      "type": ネットワークタイプ "sr-iov", "pvrdma", "portgroup" のいずれか
    }
  ],
  "hard_disks": [
    {
      "disk_number": 仮想ディスク番号
      "device_key": 仮想ディスクデバイスキー
      "capacity": 仮想ディスクサイズ
      "datastore": データストア名
    }
  ],
  "dvd_media": ゲストOSがマウントしているISOイメージ
  "vcenter": vCenter
  "esxi": ESXi名
  "pack_type": パックタイプ "cpu", "gpu" のいずれか
  "pack_num": パック数
}
get_vm_list()

プロジェクトに属する仮想マシン情報を取得する

戻り値:

以下のような、仮想マシン情報のリスト

[
  {
    "uuid": 仮想マシンID
    "name": 仮想マシン名
    "status": 仮想マシン状態 "PowerON" "PowerOFF" "Suspended" "NotFound" "Deploying" "Detached" のいずれか
    "vcenter": vCenter
    "running_tasks": 実行中のタスクのリスト
  }
]
login(auth_info)

mdx REST API 認証トークンを発行する(開発用) 通常利用時は mdx ユーザポータルから認証トークンを取得し、__init__ の init_token 引数に指定すること。

パラメータ:

auth_info -- 以下のような、mdx REST APIの認証情報

{
   "username": mdx REST API ユーザ名
   "password": mdx REST API パスワード
}
power_off_vm(vm_name, wait_for=True)

仮想マシンの強制停止 (PowerOFF) を実行する。

パラメータ:
  • vm_name -- 仮想マシン名

  • wait_for -- 強制停止の完了を待つ場合 True を指定

power_on_vm(vm_name, wait_for=True)

仮想マシンの起動 (PowerON) を実行する。

パラメータ:
  • vm_name -- 仮想マシン名

  • wait_for -- 起動の完了を待つ場合 True を指定

power_shutdown_vm(vm_name, wait_for=True)

仮想マシンのゲストOSのシャットダウンを実行する。

パラメータ:
  • vm_name -- 仮想マシン名

  • wait_for -- シャットダウンの完了を待つ場合 True を指定

project_history_iter()

プロジェクト操作履歴をイテレータとして返す。

reboot_vm(vm_name, wait_for=True)

仮想マシンの再起動を実行する。

パラメータ:
  • vm_name -- 仮想マシン名

  • wait_for -- 再起動の完了を待つ場合 True を指定

refresh_token()

mdx REST API 認証トークンを更新する

set_current_project_by_name(project_name)

操作対象のmdxのプロジェクトをプロジェクト名で設定する

set_current_project_id(project_id)

操作対象のmdxのプロジェクトIDを設定する

vm_info_iter()

仮想マシン一覧をイテレータとして返す。

3. VCP LIB

3.1. VC Contoller REST APIアクセス用下位レベルライブラリのうち、VcNode操作系

class VcNode(unit, node_json)

VCP Lib のVcNodeリソース

add_publickey(add_publickey_path, private_key_path=None, ssh_user_name=None)

VcNode のBaseContainer上で$HOME/.ssh/authorized_keys に公開鍵を追加

パラメータ:
  • add_publickey_path -- 新規追加する公開鍵のpath

  • private_key_path -- VcNode起動時に指定した秘密鍵以外を利用する場合に指定

  • ssh_user_name -- ssh 実行時のユーザ名。defaultは、root

backup()

Node のcontainer image をVC Controller上にバックアップする

config()

NODE情報取得

VC Controllerから最新のVC情報を取得して保存

delete()

Node削除

docker_cp(src, dest, options=[], cwd=None, ssh_user_name='root', private_key_path=None)

BaseコンテナとAppコンテナ間のファイルのコピー

パラメータ:
  • src -- コピー元のファイルパス

  • dest -- コピー先のファイルパス

  • options -- コマンドラインオプション

  • cwd -- 作業ディレクトリ

  • ssh_user_name -- SSH接続時のユーザ名(デフォルト"root")

  • private_key_path -- SSHの秘密鍵のパス

戻り値:

標準出力の文字列

docker_exec(container, options=[], cmd=[], ssh_user_name='root', private_key_path=None)
パラメータ:
  • container -- 対象とするコンテナ

  • options -- コマンドラインオプション

  • cmd -- コンテナ内で実行するコマンドライン

  • ssh_user_name -- SSH接続時のユーザ名(デフォルト"root")

  • private_key_path -- SSHの秘密鍵のパス

戻り値:

標準出力と標準エラー出力のタプル

docker_image_inspect(image, options=[], ssh_user_name='root', private_key_path=None)
パラメータ:
  • image -- 対象とするイメージ

  • options -- コマンドラインオプション

  • ssh_user_name -- SSH接続時のユーザ名(デフォルト"root")

  • private_key_path -- SSHの秘密鍵のパス

戻り値:

出力をPython Dictionary形式に変換したもの

docker_image_ls(options=[], ssh_user_name='root', private_key_path=None)
パラメータ:
  • options -- コマンドラインオプション

  • ssh_user_name -- SSH接続時のユーザ名(デフォルト"root")

  • private_key_path -- SSHの秘密鍵のパス

戻り値:

出力をDataFrameにしたもの

docker_image_rm(image, options=[], ssh_user_name='root', private_key_path=None)
パラメータ:
  • image -- 対象とするイメージ

  • options -- コマンドラインオプション

  • ssh_user_name -- SSH接続時のユーザ名(デフォルト"root")

  • private_key_path -- SSHの秘密鍵のパス

docker_image_tag(src_image, dest_image, ssh_user_name='root', private_key_path=None)
パラメータ:
  • src_image -- 元のイメージ名

  • dest_image -- タグ付けした後のイメージ名

  • options -- コマンドラインオプション

  • ssh_user_name -- SSH接続時のユーザ名(デフォルト"root")

  • private_key_path -- SSHの秘密鍵のパス

docker_info(options=[], ssh_user_name='root', private_key_path=None)
パラメータ:
  • options -- コマンドラインオプション

  • ssh_user_name -- SSH接続時のユーザ名(デフォルト"root")

  • private_key_path -- SSHの秘密鍵のパス

戻り値:

標準出力の文字列

docker_inspect(container, options=[], ssh_user_name='root', private_key_path=None)
パラメータ:
  • container -- 対象とするコンテナ

  • options -- コマンドラインオプション

  • ssh_user_name -- SSH接続時のユーザ名(デフォルト"root")

  • private_key_path -- SSHの秘密鍵のパス

戻り値:

出力をPython Dictionary形式に変換したもの

docker_logs(container, options=[], ssh_user_name='root', private_key_path=None)
パラメータ:
  • options -- コマンドラインオプション

  • ssh_user_name -- SSH接続時のユーザ名(デフォルト"root")

  • private_key_path -- SSHの秘密鍵のパス

戻り値:

ログの文字列

docker_network_inspect(network, options=[], ssh_user_name='root', private_key_path=None)
パラメータ:
  • network -- 対象とするネットワーク

  • options -- コマンドラインオプション

  • ssh_user_name -- SSH接続時のユーザ名(デフォルト"root")

  • private_key_path -- SSHの秘密鍵のパス

戻り値:

出力をPython Dictionary形式に変換したもの

docker_network_ls(options=[], ssh_user_name='root', private_key_path=None)
パラメータ:
  • options -- コマンドラインオプション

  • ssh_user_name -- SSH接続時のユーザ名(デフォルト"root")

  • private_key_path -- SSHの秘密鍵のパス

戻り値:

出力をDataFrameにしたもの

docker_ps(options=[], ssh_user_name='root', private_key_path=None)
パラメータ:
  • options -- コマンドラインオプション

  • ssh_user_name -- SSH接続時のユーザ名(デフォルト"root")

  • private_key_path -- SSHの秘密鍵のパス

戻り値:

出力をDataFrameにしたもの

docker_pull(image, options=[], ssh_user_name='root', private_key_path=None)
パラメータ:
  • image -- 対象とするイメージ

  • options -- コマンドラインオプション

  • ssh_user_name -- SSH接続時のユーザ名(デフォルト"root")

  • private_key_path -- SSHの秘密鍵のパス

戻り値:

標準出力の文字列

docker_push(image, options=[], ssh_user_name='root', private_key_path=None)
パラメータ:
  • image -- 対象とするイメージ

  • options -- コマンドラインオプション

  • ssh_user_name -- SSH接続時のユーザ名(デフォルト"root")

  • private_key_path -- SSHの秘密鍵のパス

戻り値:

標準出力の文字列

docker_restart(container, options=[], ssh_user_name='root', private_key_path=None)

Appコンテナのrestart

パラメータ:
  • container -- 対象とするコンテナ

  • options -- コマンドラインオプション

  • ssh_user_name -- SSH接続時のユーザ名(デフォルト"root")

  • private_key_path -- SSHの秘密鍵のパス

docker_rm(container, options=[], ssh_user_name='root', private_key_path=None)

Appコンテナの削除

パラメータ:
  • container -- 対象とするコンテナ

  • options -- コマンドラインオプション

  • ssh_user_name -- SSH接続時のユーザ名(デフォルト"root")

  • private_key_path -- SSHの秘密鍵のパス

docker_run(image, options=[], cmd=[], ssh_user_name='root', private_key_path=None)
パラメータ:
  • container -- 実行するイメージ

  • options -- コマンドラインオプション

  • cmd -- コンテナ内で実行するコマンドライン

  • ssh_user_name -- SSH接続時のユーザ名(デフォルト"root")

  • private_key_path -- SSHの秘密鍵のパス

戻り値:

標準出力と標準エラー出力のタプル

docker_start(container, options=[], ssh_user_name='root', private_key_path=None)

Appコンテナのstart

パラメータ:
  • container -- 対象とするコンテナ

  • options -- コマンドラインオプション

  • ssh_user_name -- SSH接続時のユーザ名(デフォルト"root")

  • private_key_path -- SSHの秘密鍵のパス

docker_stop(container, options=[], ssh_user_name='root', private_key_path=None)

Appコンテナのstop

パラメータ:
  • container -- 対象とするコンテナ

  • options -- コマンドラインオプション

  • ssh_user_name -- SSH接続時のユーザ名(デフォルト"root")

  • private_key_path -- SSHの秘密鍵のパス

docker_volume_inspect(volume, options=[], ssh_user_name='root', private_key_path=None)
パラメータ:
  • volume -- 対象とするボリューム

  • options -- コマンドラインオプション

  • ssh_user_name -- SSH接続時のユーザ名(デフォルト"root")

  • private_key_path -- SSHの秘密鍵のパス

戻り値:

出力をPython Dictionary形式に変換したもの

docker_volume_ls(options=[], ssh_user_name='root', private_key_path=None)
パラメータ:
  • options -- コマンドラインオプション

  • ssh_user_name -- SSH接続時のユーザ名(デフォルト"root")

  • private_key_path -- SSHの秘密鍵のパス

戻り値:

出力をDataFrameにしたもの

power_off()

VcNode の instance をpower off

power_on()

VcNode の instance をpower on

resume()

Node Resume(docker start)

scp(src, dst, private_key_path=None, ssh_user_name=None)

local fileをVcNode の BaseContainer上にコピー(scp)する

パラメータ:
  • src -- local fileのpath

  • dst -- BaseContainer上のpath

  • private_key_path -- VcNode起動時に指定した秘密鍵以外を利用する場合に指定

  • ssh_user_name -- ssh 実行時のユーザ名。defaultは、root

ssh_exec(cmd, cwd=None, private_key_path=None, stdin_fd=None, output_decode=True, ssh_user_name=None)

VcNode のBaseContainer上でssh を実行

パラメータ:
  • cmd -- BaseContainer上で起動するコマンド文字列

  • cwd -- BaseContainer上の実行カレントディレクトリ

  • private_key_path -- VcNode起動時に指定した秘密鍵以外を利用する場合に指定

  • stdin_fd -- ssh の起動時にstdinとして渡したいファイルディスクリプタ

  • output_decode -- ssh の結果データを True:decodeする(default) / False:decodeしない

  • ssh_user_name -- ssh 実行時のユーザ名。defaultは、root

戻り値:

実行結果の stdout, stderr ファイルディスクリプタ

サンプルコード

(out, err) = node.ssh_exec("ls -la")
print(out)

fd = open("sample.txt")
(out, err) = node.ssh_exec("sed 's/abc/def/' > remote_sample.txt", stdin_fd=fd)
start()

Node Start(cloud instance create)

stop()

Node Stop(cloud instance terminate)

suspend()

Node Suspend(docker stop)

unwatch()

Node の監視を停止する

watch()

Node の監視を開始する

4. VCP CLI操作説明書

4.1. 概要

オンデマンド構築機能で オブジェクトストレージ機能である Amazon S3 および Azure Blob Storage を操作するコマンドを 提供する。

対象とするクラウドプロバイダーは、以下の通り。

4.2. VCPとクラウドオブジェクトストレージの概念の対応付け

VCP上でクラウドオブジェクトストレージを扱う際のモデルは、以下のようにする。

VCP

AWS(s3)

Azure(Blog Storage)

volume

ストレージアカウント

volume

Bucket

Container

file

object

Blob

参考 Azure のBlob Storageのモデル

image0

4.3. 機能概要

Linux環境(JupyterNotebook、もしは各VcNode上)で実行できるコマンドラインツールを提供する。

コマンドラインツールは、 vcpcli と呼ぶ。

vcpcli の機能は以下の通り。

Usage:
  vcp storage [--debug] create [--no-verify] [--public] <bucket_path>
  vcp storage [--debug] drop [--no-verify] <bucket_path>
  vcp storage [--debug] ls [--no-verify] <path>
  vcp storage [--debug] cp [--no-verify] <src_path> <dest_path>
  vcp storage [--debug] rm [--no-verify] <path>
  vcp configure
  vcp -h
  vcp --version

Options:
  -h --help    ... ヘルプを表示
  --public     ... createコマンドのオプション。作成するvolumeやfileをpublic-access可能とする
  --debug      ... デバッグモード
  --no-verify  ... Vaultへのアクセス時にSSLの検証を省く

Commands:
  configure  ... 設定ファイルのテンプレートを出力する
  storage    ... ストレージの操作

    create   ... ボリュームを作成
    drop     ... ボリュームを削除
    ls       ... ボリューム、オブジェクトの一覧を表示する。引数は接頭辞。
    cp       ... オブジェクトをコピーする
    rm       ... オブジェクトを削除する

Parameters:
  path: storage種別://volume名/file名 ... storage種別(aws-s3|azure-blob)

Environment variables:
  TOKEN: VCC APIアクセストークン
  VCPCLI_CONFIG_DIR: 設定ファイルconfig.ymlがあるディレクトリ(デフォルト $HOME/.vcpcli)

4.4. 認証情報の取得方法

AWS、Azure にアクセスするめの認証情報(アクセスキーなど)は、VC コントローラ上のVaultサーバから取得する。

そのため、vcpcli を利用するためには、VCP SDKと同様にVC コントローラアクセス用のアクセストークンのが必要である。

認証サーバのVaultサーバ上の保存場所は、設定ファイルに記述する。

設定ファイルについては後述

...
aws:
  access_key: vault://cubbyhole/aws_access_key
  secret_key: vault://cubbyhole/aws_secret_key
  region:

azure:
  tenant_id: vault://cubbyhole/azure_tenant_id
  client_id: vault://cubbyhole/azure_client_id
  client_secret: vault://cubbyhole/azure_client_secret

  #
  azure_resource_group_name: fillme
  # 設定する
  azure_location: fillme
...

4.5. ユーザ操作説明

4.5.1. インストール手順

vcpcli をツールを実行するサーバにインストールする方法は、以下の通り。

  1. vcpcliが使用するVCコントローラアクセス用CA証明書のインストール

    • CA証明書がインストールできない場合は、 --no-verify オプション を使用する。

  2. 必要とするライブラリ、ツールのインストール方法

    • AWS API呼出用の python ライブラリをpipインストールする。

    requirements.txt

    wscli==1.11.139
    docopt==0.6.2
    azure-cli==2.0.59
    ruamel.yaml==0.15.74
    
    • TOKENという環境変数にVCC APIアクセストークンを設定する

4.5.2. 設定手順

vcpcli の設定ファイルは、 $HOME/.vcpcli/config に下記のように記述する。

$HOME/.vcpcli/config.yml の例:

vcc:
  # VCコントローラのIPアドレス
  host: 192.168.1.1

aws:
  access_key: vault://cubbyhole/aws_access_key
  secret_key: vault://cubbyhole/aws_secret_key
  # VPNカタログの情報と同じ
  region: ap-northeast-1

azure:
  tenant_id: vault://cubbyhole/azure_tenant_id
  client_id: vault://cubbyhole/azure_client_id
  client_secret: vault://cubbyhole/azure_client_secret

  # VPNカタログの情報と同じ
  azure_resource_group_name: fillme
  azure_location: fillme

4.5.3. コマンド概要

  • volume作成

  • volume削除

  • オブジェクトのアップロード

  • オブジェクトのダウンロード

  • ボリュームの一覧表示

  • オブジェクトの一覧表示

  • オブジェクトの削除

4.5.3.1. volume作成
export TOKEN=VCCアクセストークン
vcp storage create [--public] aws://<bucketname>

AzureのBlobにおけるストレージアカウントとBlobコンテナをvcpcliでは 両方ボリュームとみなす。

export TOKEN=VCCアクセストークン
vcp storage create azure://<storage_account_name>
vcp storage create [--public] azure://<storage_account_name>/<container_name>
vcp storage create azure://<storage_account_name>
vcp storage create azure://<storage_account_name>/<container_name>
4.5.3.2. volume削除
export TOKEN=VCCアクセストークン
vcp storage drop azure://<storage_account_name>
vcp storage drop azure://<storage_account_name>/<container_name>
4.5.3.3. オブジェクトのアップロード
export TOKEN=VCCアクセストークン
vcp storage cp <local_src_path> aws://<bucketname>/<dest_path>
vcp storage cp <local_src_path> azure://<storage_account_name>/<container_name>/<dest_path>

すでに同じ名前のオブジェクトがある場合は上書きする。

4.5.3.4. オブジェクトのダウンロード
export TOKEN=VCCアクセストークン
vcp storage cp aws://<bucketname>/<src_path> <local_dest_path>
vcp storage cp azure://<storage_account_name>/<container_name>/<src_path> <local_dest_path>
4.5.3.5. ボリュームの一覧表示
export TOKEN=VCCアクセストークン
vcp storage ls aws://
vcp storage ls azure://

コンテナの一覧

export TOKEN=VCCアクセストークン
vcp storage ls azure://<storage_account_name>/
4.5.3.6. オブジェクトの一覧表示
export TOKEN=VCCアクセストークン
vcp storage ls aws://<bucketname>/<path>
vcp storage ls azure://<storage_account_name>/<container_name>/<path>
4.5.3.7. オブジェクトの削除
export TOKEN=VCCアクセストークン
vcp storage rm aws://<bucketname>/<path>
export TOKEN=VCCアクセストークン
vcp storage rm azure://<storage_account_name>/<container_name>/<path>

4.6. 制限事項

4.6.1. Bucket名 / ストレージアカウント名の制限

  • AWS S3 のBucket 名称は 3 ~ 63 文字の長さで、英数字と . (ピリオド) および - (ハイフン) を使用可能

  • Azure のストレージアカウントは 3 〜 24 文字の長さで、英数小文字と数字を使用可能

4.6.2. 操作の制限

  • AWS S3, Azure Files の疑似ディレクトリ構造はサポートしない。(フォルダのコピーと削除は利用できない)

  • AWS S3 と Azure Files間のcopy(cp)は、vcpcli 実行マシン上に一時ファイルを作成する。大きなファイルサイズの転送時は、実行マシン上の残りディスク容量を超えないように注意する。