sacloud / docker-machine-sakuracloud

:cherry_blossom:SAKURA CLOUD driver for docker-machine
Apache License 2.0
33 stars 3 forks source link

Add standalone mode for setting config #24

Closed yamamoto-febc closed 8 years ago

yamamoto-febc commented 8 years ago

Overview

docker-machine-driver-sakuracloudを直接起動時にオプション指定することで 環境変数設定用モードでの起動を行う。 環境変数を設定しておくことで以降のcreate時にその設定を利用できる。

bash-completionを合わせて実装することで export SAKURACLOUD_ACCESS_TOKEN='xxxxxxx'というコマンドを直接実行するより 楽に設定値入力できるようになる。

Commands

list:現在の環境変数設定一覧を表示


$ ./docker-machine-driver-sakuracloud list

 ===== Setting List for SAKURA CLOUD =====
  Parameter Name       | Environment variable | Value|
  -----------------------------------------------------------------------
  Access Token :  $SAKURACLOUD_ACCESS_TOKEN : xxxxxx-xxxxxx-xxxxxx
  Access Token Secret :  $SAKURACLOUD_ACCESS_TOKEN_SECRET :  xxxxxxxxxxxxxxxxxxxx
  Region :  $SAKURACLOUD_REGION :  tk1a
  CPU Core  : $SAKURACLOUD_CORE : 1 (default)

set:指定の値を設定


# usage :  set [parameter name] [value]

# bash-completion (parameter name)
$ ./docker-machine-driver-sakuracloud set [tab]
token secret region cpu diskplan disksize filter memory (and more...)

# bash-completion (parameter value)
# 可能ならさくらのクラウドAPIをコールして設定可能な値を取得する
# 例:パケットフィルタ設定時の補完(登録済みのフィルタを一覧表示)
$ ./docker-machine-driver-sakuracloud set filter [tab]
==== region(is1a) packet filters ====
default_filter filter_for_public

# setting
$ ./docker-machine-driver-sakuracloud set region tk1a

clear:指定の値をクリア


# usage :  clear [parameter name]

# bash-completion
$ ./docker-machine-driver-sakuracloud clear [tab]
token secret region cpu memory disk plan disksize (and more...) # 設定値がある項目だけ表示

# clear
$ ./docker-machine-driver-sakuracloud clear region

info:指定の値の説明/現在の設定値を表示


# usage :  info [parameter name]

# bash-completion
$ ./docker-machine-driver-sakuracloud info [tab]
token secret region cpu memory disk plan disksize (and more...)

# info
$ ./docker-machine-driver-sakuracloud info region

===== Setting for SAKURA CLOUD =====

Name : region
Description : The resion to create the server in.
Values : is1a / is1b / tk1a (default : is1a)
Current : is1a(default)
yamamoto-febc commented 8 years ago

設定をどうやって他プロセスと共用するか?

1) 環境変数を使う。create前にeval $(docker-machine-driver-sakuracloud env)みたいにする 2) 別途設定ファイルを持ちcreate時に自動で読み込むようにする

どちらの場合でも環境変数を親プロセス(bashなど)へ直接は渡せないため 設定値を保持しておく仕組みが必要。

以下の形で実装してみる。

  1. _$MACHINE_STORAGEPATH/drivers/sakuracloud/ 配下に設定ファイル(JSON)を格納

    保存場所の取得にはmcndirs.getBaseDir()が使えるはず

  2. BaseDriver#SetConfigFromFlags で設定ファイルの内容を反映

    優先度は

    1) コマンドライン引数
    2) 環境変数
    3) 設定ファイル

とする。

:question: createの時だけ設定ファイルの内容を反映できるか

yamamoto-febc commented 8 years ago

Listオプションの出力サンプル

$ ./docker-machine-driver-sakuracloud list 
+------------------------+-------------+------------------------------------------------------------------+
|          NAME          | VALUE FROM  |                         CURRENT SETTING                          |
+------------------------+-------------+------------------------------------------------------------------+
| access-token           | Environment | xxxxxxxx-9999-999x-x9xx-x99x9x999x99                             |
| access-token-secret    | Environment | xxxxxxxxxxxxxxxxx                                                |
| region                 | File        | tk1a                                                             |
| core                   | (Default)   | 1                                                                |
| memory-size            | (Default)   | 1                                                                |
| connected-switch       | (Default)   | (empty)                                                          |
| private-ip-only        | (Default)   | (empty)                                                          |
| private-ip             | (Default)   | (empty)                                                          |
| private-ip-subnet-mask | (Default)   | (empty)                                                          |
| gateway                | (Default)   | (empty)                                                          |
| disk-plan              | (Default)   | 4                                                                |
| disk-name              | (Default)   | (empty)                                                          |
| disk-size              | (Default)   | 20480                                                            |
| disk-connection        | (Default)   | virtio                                                           |
| password               | (Default)   | (empty)                                                          |
| group                  | (Default)   | (empty)                                                          |
| auto-reboot            | (Default)   | (empty)                                                          |
| ignore-virtio-net      | (Default)   | (empty)                                                          |
| packet-filter          | (Default)   | (empty)                                                          |
| private-packet-filter  | (Default)   | (empty)                                                          |
| upgrade-kernel         | (Default)   | (empty)                                                          |
+------------------------+-------------+------------------------------------------------------------------+