Package: conoha-client
conoha-clientconoha-client はConoHa APIをいい感じに組み合わせて叩く「ConoHa VPS」用 Command Line Interface (CLI) です。
Linux サーバー(=VM)の作成・保存・削除・経過時間の確認などが簡単に実行できます。開発環境に VPS を利用する場合、睡眠時間分の費用も請求される月額課金は無駄が多い一方、
利用時間分のみ請求される時間課金は効率的です。時間課金での利用には頻繁な VM 操作が必要であり、そのために conoha-client を作成しました。主な機能←詳細を開く/閉じるVM の不本意な追加課金が発生しないように待ってから VM を保存・削除する Graceful Remove見やすく強化された VM 一覧 e.g. 作成からの経過時間が確認できるVM(=サーバー)のライフサイクルの操作 e.g. 作成・削除・停止・再起動 etcスナップショット(VM 由来の docker image)の保存スナップショットから VM を復元リスト系コマンドの表示形式指定 e.g. json or table詳細VM の不本意な追加課金が発生しないように待ってから VM を保存・削除する Graceful Removeログイン中の全ユーザーにブロードキャストメッセージを通知しつつ VM の停止・スナップショット・削除する$cclilsvmipv4statuselapsedimage_namememoryMBn_cpustorageGBsshkeyvm_id
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------0xxx.x.xxx.xxxACTIVE80days,15:54:24vmi-kusanagimanager8-0.4.0-centos-7.9-amd64-100gb10242100key-2023-08-24-23-0927c3379a-6510-4757-8b1c-069981be3b351yyy.y.yyy.yyACTIVE0:02:53vmi-ubuntu-20.04-amd64-30gb512130conoha-client-2023-11-07-15-45ead20a7d-db9d-493c-8297-8581ba8b56b4# 本来は1時間後に削除する設定を6分後に変更して実行している例$cclivmrm-gracefullyeadebug-snapshot-h0.1
elapsedfromcreatedVM(ead20a7d-db9d-493c-8297-8581ba8b56b4):0:03:56

Broadcastmessagefromuser@hostname(pts/10)(MonNov1314:17:412023VM(ead20a7d-db9d-493c-8297-8581ba8b56b4)makesadditionalchargewhenittakes6minutes.SoitwillsaveandremovethisVMrightnow.

Ittook0:00:02tostopVM(ead20a7d-db9d-493c-8297-8581ba8b56b4)saveprogressis25%
saveprogressis50%
saveprogressis50%
saveprogressis50%
saveprogressis50%
saveprogressis100%
Ittook0:00:55tosaveVM(ead20a7d-db9d-493c-8297-8581ba8b56b4)VM(ead20a7d-db9d-493c-8297-8581ba8b56b4)wasremoved
DurationtimeofVM(ead20a7d-db9d-493c-8297-8581ba8b56b4)was0:04:55見やすく強化された VM 一覧 e.g. 作成からの経過時間が確認できる$cclilsvmipv4statuselapsedmemoryMBn_cpustorageGBsshkeyvm_id
----------------------------------------------------------------------------------------------------------------------------0xxx.x.xxx.xxxACTIVE75days,19:07:4710242100key-2023-08-24-23-0927c3379a-6510-4757-8b1c-069981be3b35VM(=サーバー)のライフサイクルの操作 e.g. 作成・削除・停止・再起動 etcvm_id や image_id を前方一致で検索・補完するため、値全てを入力しなくてもよいconoha-client ではccli vm add -m 0.5 -d ubuntu -v 20.04のように分かりやすく簡単で指定できる。
他の CLI ツール では VM 作成に使用するイメージやスペックを指定するために image_id や flavor_id を調査・入力する必要があり面倒# 512MB = 0.5GBのメモリ、ubuntuのバージョン20.04でVMを新規追加$cclivmadd-m0.5-dubuntu-v20.04
VM(uuid=5f11867c-d01f-4dde-a8cb-00ffb8e1eacb)wasaddednewly
$cclilsvm# 追加されたことを確認ipv4statuselapsedmemoryMBn_cpustorageGBsshkeyvm_id
--------------------------------------------------------------------------------------------------------------------------------------0xxx.x.xxx.xxxACTIVE75days,19:17:4710242100key-2023-08-24-23-0927c3379a-6510-4757-8b1c-069981be3b351yyy.y.yy.yyBUILD-1day,23:59:48512130conoha-client-2023-11-07-15-455f11867c-d01f-4dde-a8cb-00ffb8e1eacb# VMを停止$cclivmstop5f
5f11867c-d01f-4dde-a8cb-00ffb8e1eacbwasshutdowned.
$cclilsvmipv4statuselapsedmemoryMBn_cpustorageGBsshkeyvm_id
--------------------------------------------------------------------------------------------------------------------------------------0xxx.x.xxx.xxxACTIVE75days,19:22:4710242100key-2023-08-24-23-0927c3379a-6510-4757-8b1c-069981be3b351yyy.y.yy.yySHUTOFF0:04:48512130conoha-client-2023-11-07-15-455f11867c-d01f-4dde-a8cb-00ffb8e1eacb# VMを起動$cclivmboot5f
5f11867c-d01f-4dde-a8cb-00ffb8e1eacbwasbooted.
$cclilsvmipv4statuselapsedmemoryMBn_cpustorageGBsshkeyvm_id
--------------------------------------------------------------------------------------------------------------------------------------0xxx.x.xxx.xxxACTIVE75days,19:22:4710242100key-2023-08-24-23-0927c3379a-6510-4757-8b1c-069981be3b351yyy.y.yy.yyACTIVE0:04:48512130conoha-client-2023-11-07-15-455f11867c-d01f-4dde-a8cb-00ffb8e1eacbスナップショット(VM 由来の docker image)の保存# VMを停止しておかないとスナップショットを保存できない$cclivmstop5f
5f11867c-d01f-4dde-a8cb-00ffb8e1eacbwasshutdowned.
$cclilsvmipv4statuselapsedmemoryMBn_cpustorageGBsshkeyvm_id
--------------------------------------------------------------------------------------------------------------------------------------0xxx.x.xxx.xxxACTIVE75days,19:22:4710242100key-2023-08-24-23-0927c3379a-6510-4757-8b1c-069981be3b351yyy.y.yy.yySHUTOFF0:04:48512130conoha-client-2023-11-07-15-455f11867c-d01f-4dde-a8cb-00ffb8e1eacb# スナップショット名「test」としてimage_id=5f...を保存$cclisnapshotsave5ftest5f11867c-d01f-4dde-a8cb-00ffb8e1eacbwassnapshotastest.
$cclisnapshotlsimage_idnamedistappmin_diskprogresscreatedsizeGB
------------------------------------------------------------------------------------------------------------------------07abc6c4c-935d-4a4a-a4e9-a02cd80c74f5testUbuntu-20.04-64bit30252023-11-08T17:56:00+09:000# しばらくすると、progress:100となり、スナップショットの保存が完了する$cclisnapshotlsimage_idnamedistappmin_diskprogresscreatedsizeGB
------------------------------------------------------------------------------------------------------------------------07abc6c4c-935d-4a4a-a4e9-a02cd80c74f5testUbuntu-20.04-64bit301002023-11-08T17:56:00+09:007.9245スナップショットから VM を復元# スナップショットを保存したのでVMを削除$cclivmrm5f
5f11867c-d01f-4dde-a8cb-00ffb8e1eacbwasremoved.
$cclilsvmipv4statuselapsedmemoryMBn_cpustorageGBsshkeyvm_id
----------------------------------------------------------------------------------------------------------------------------0xxx.x.xxx.xxxACTIVE75days,19:39:4710242100key-2023-08-24-23-0927c3379a-6510-4757-8b1c-069981be3b35# image_id=7a...のスナップショット、メモリ0.5GBでVMを作成$cclisnapshotrestore7a0.5
VM(uuid=f73538f7-cc42-427b-aae8-e9222f7b76e7)wasrestoredfromtestsnapshot
$cclilsvmipv4statuselapsedmemoryMBn_cpustorageGBsshkeyvm_id
--------------------------------------------------------------------------------------------------------------------------------------0xxx.x.xxx.xxxACTIVE75days,19:40:4710242100key-2023-08-24-23-0927c3379a-6510-4757-8b1c-069981be3b351yyy.y.yyy.yyBUILD-1day,23:59:44512130conoha-client-2023-11-07-15-45f73538f7-cc42-427b-aae8-e9222f7b76e7# しばらくするとステータスがACTIVEになる$cclilsvmipv4statuselapsedmemoryMBn_cpustorageGBsshkeyvm_id
--------------------------------------------------------------------------------------------------------------------------------------0xxx.x.xxx.xxxACTIVE75days,19:41:4710242100key-2023-08-24-23-0927c3379a-6510-4757-8b1c-069981be3b351yyy.y.yyy.yyACTIVE0:00:44512130conoha-client-2023-11-07-15-45f73538f7-cc42-427b-aae8-e9222f7b76e7リスト系コマンドの表示形式指定 e.g. json or tablegrep や jq コマンドなどのパイプ処理に便利# json形式$cclilsvm--json[{"ipv4":"xxx.x.xxx.xxx","status":"ACTIVE","elapsed":"75 days, 19:53:47","memoryMB":1024,"n_cpu":2,"storageGB":100,"sshkey":"key-2023-08-24-23-09","vm_id":"27c3379a-6510-4757-8b1c-069981be3b35"},{"ipv4":"yyy.y.yyy.yy","status":"ACTIVE","elapsed":"0:12:44","memoryMB":512,"n_cpu":1,"storageGB":30,"sshkey":"conoha-client-2023-11-07-15-45","vm_id":"f73538f7-cc42-427b-aae8-e9222f7b76e7"}]# tableのカラム名などを削除$cclilsvm-p
xxx.x.xxx.xxxACTIVE75days,19:53:4710242100key-2023-08-24-23-0927c3379a-6510-4757-8b1c-069981be3b35
yyy.y.yyy.yyACTIVE0:12:44512130conoha-client-2023-11-07-15-45f73538f7-cc42-427b-aae8-e9222f7b76e7# 表示カラムを絞る$cclilsvm-kipv4-kelapsedipv4elapsed
--------------------------------0xxx.x.xxx.xxx75days,19:54:471yyy.y.yyy.yy0:13:44# where句みたいにstorageGB = 30 の行を表示$cclilsvm-wstorageGB30ipv4statuselapsedmemoryMBn_cpustorageGBsshkeyvm_id
-----------------------------------------------------------------------------------------------------------------------------0yyy.y.yyy.yyACTIVE0:13:44512130conoha-client-2023-11-07-15-45f73538f7-cc42-427b-aae8-e9222f7b76e7使い方インストールPyPIからインストールpip3intallconoha-clientすると、python3 のエンドポイントに ccli が追加され、実行可能になります。help オプション本ツールは python の CLI 用ライブラリclickを利用しています。
使用可能なコマンドやオプションは help オプションで随時確認できます。
サブコマンドに対しても help オプションは使用可能です。//例
$ccli--help
Usage:ccli[OPTIONS]COMMAND[ARGS]...root.

Options:--helpShowthismessageandexit.

Commands:lsimglistimagelsinvoice課金一覧.lsorder契約一覧.lspaid入金履歴.lsplanListvmplan.lsvmlistVMashumanfriendlysnapshotスナップショット=ユーザーがVMから作成したイメージ.sshkeyキーペアCRUD.vmVM追加・削除など環境変数の設定API を使用するためのトークンを取得するを参考に ConoHa のダッシュボードを参照して環境変数を設定する# ConoHa VPSのダッシュボード由来の情報 mustexportOS_USERNAME=***# APIユーザー > ユーザー名exportOS_PASSWORD=***# APIユーザー > パスワードexportOS_TENANT_ID=***# テナント情報 > テナントIDexportOS_CONOHA_REGION_NO=?# エンドポイントのtyo?の数字 e.g. https://account.tyo3.conoha.io/v1/... => 3# VM作成に関わる環境変数 optionalexportOS_ADMIN_PASSWORD=***# VMのrootユーザーのパスワードexportOS_SSHKEY_NAME=***# VMに登録するsshのキーペア名exportOS_TEMPLATE_READ=~/.ssh/...# 新規作成したVMの情報を適用するテンプレートexportOS_TEMPLATE_WRITE=~/.ssh/...# 適用したテンプレートの出力先テンプレートの例# ~/.ssh/conf.d/dev/template

Host dev
  HostName ${ipv4}
  Port 22
  User gotoh
  IdentityFile ~/.ssh/conf.d/dev/id_rsa
  ServerAliveInterval 60 #sshの自動切断を防ぐために記述
  ForwardX11 yes
  ForwardAgent yes${ipv4}の部分が作成した VM の値で置き換わった内容がOS_TEMPLATE_WRITEで指定したパスに出力される${key}の key にはccli lsvmのカラム名が使用できるシェル補完機能conoha-client は CLI 用ライブラリclickを使用しています。click はシェル補完機能が利用できます。~/.bashrcに以下を追記してください。# ~/.bashrc
. <(curl -s https://raw.githubusercontent.com/shogogoto/conoha-client/main/conoha-client.bash)ただし、ネットワーク経由で取得したコードを直接実行するこの方法は重大なセキュリティリスクのようです。不安な方は本リポジトリのルートディレクトリのconoha-client.bashの内容をコピペして~/.bashrcに追記してください。以下に転記しておきます.# conoha-client.bash_ccli_completion(){localIFS=$'\n'localresponseresponse=$(envCOMP_WORDS="${COMP_WORDS[*]}"COMP_CWORD=$COMP_CWORD_CCLI_COMPLETE=bash_complete$1)forcompletionin$response;doIFS=','readtypevalue<<<"$completion"if[[$type=='dir']];thenCOMPREPLY=()compopt-odirnameselif[[$type=='file']];thenCOMPREPLY=()compopt-odefaultelif[[$type=='plain']];thenCOMPREPLY+=($value)fidonereturn0}_ccli_completion_setup(){complete-onosort-F_ccli_completionccli}_ccli_completion_setup;開発動機PC はシンクライアントに限る低スペック PC で個人開発するのに限界を感じた私は VPS を開発環境として利用することを考えました。PC くらい買えって？時代はシェアリングエコノミー。
自分が専有する資源は、自分が使用していない間には場所を奪うだけの置物と化します。
クラウド時代において、PC は低スペックなシンクライアントに徹するべきです。そうすれば、スペースと費用が節約できるはずです。なぜ「ConoHa VPS」なのかいろんな VPS がある中で ConoHa VPS を選んだ理由は以下です。１時間毎の時間課金で VPS が利用可能多くの VPS は月額課金であり、寝ている間にも課金されるのはいただけない※WebArena Indigoも時間課金プランを提供しているようだスナップショットを 50GB まで無料で使用できる時間課金では、削除する VM の状態を無料で保存できることは重要GMO(9449)の株主優待が使える(年間 1 万円分)なぜ既存ツールを使わなかったのか時間課金を意識した既存ツールが見当たらなかったためです。ConoHa APIと１対１対応しただけの単純な CLI では不満がありました。
サーバーを起動・停止・削除＋ α だけではなく、サーバー作成からの時間経過を知りたい次の 1 時間に突入して追加で課金される前にサーバー削除を予約したいサーバーの状態を保存・復元を簡単したいなどの機能は頻繁にサーバーを削除する時間課金では重要です。開発環境構築パッケージのインストールプロジェクトルートで以下を実行poetryinstallpre-commit 設定git commit 前に linter を動かす準備poetryruntaskpre-commitテスト実行プロジェクトルートで以下を実行poetryruntasktestファイルを追加・更新することを検知して、自動でユニットテストを実行したい場合は以下poetryruntasktest-watchリリース方法poetry 経由で PyPI にリリースする
poetry 拡張の poetry-dynamic-versioning によって、
git tag を PyPI のバージョンとして動的に設定・リリースするgittagvx.x.x

poetrypublish--build