Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Don't merge] sacloud/services準拠サービスの呼び出しサポート #908

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

yamamoto-febc
Copy link
Member

@yamamoto-febc yamamoto-febc commented Apr 19, 2022

あらかじめusacloud側に登録しておいた https://github.com/sacloud/services に準拠したサービスを呼び出し/実行するサブコマンドdynamicを実装

⚠️ この実装は試験的なもので、設計/実装のためのフィードバックを得るためのものであり、マージしない。
実際にdynamicサブコマンドを実装する場合は別PRで対応する。

実行方法

usacloud dynamicサブコマンドとして実行する。
引数にはプラットフォーム [サービス名]+ コマンドを指定する。
パラメータを渡したい時は--dataを用いる。

出力はusacloud restなどと同じくJSONのみ。

実行例

# 専用サーバPHYのサービス一覧を取得
$ usacloud dynamic phy service find

# パラメータを渡す
$ usacloud dynamic phy service find --data '{"ProductCategory": "server"}'

# サーバの起動
$ usacloud dynamic phy server power --data '{"Id": "(サーバID)", "Operation": "on"}'

# ネストしたリソースの例(ここではサーバ配下のポート一覧)
$ usacloud dynamic phy server port find --data '{"ServerId": "(サーバID)"}'

# (このPRでは未実装) オブジェクトストレージ/バケット一覧
$ usacloud dynamic object-storage bucket find

# (このPRでは未実装) IaaSサーバ一覧
$ usacloud dynamic iaas server find

今後の展開

ヘルプ表示やシェル補完は未実装だが、sacloud/services経由でメタデータを参照可能なので実装可能なはず。

@yamamoto-febc
Copy link
Member Author

従来のusacloud実装(iaasサブコマンド)との比較

メリット

  • 従来のcore.Resource + core.Commandを手作業で定義+コード生成という仕組みが不要、実装負荷が低い
  • sacloud/services自体がリソースのネストに対応しており、ネストをうまく使うことで各コマンドでのパラメータ指定がシンプルになる。

デメリット

  • 現状だとパラメータ指定はJSONで行う必要があり、シェル補完を利用したアドホックなコマンドライン操作に向かない

課題/未実装

  • ヘルプ表示
  • シェル補完

@yamamoto-febc yamamoto-febc force-pushed the feature/dynamic-service-command branch from a3b961d to bfd480c Compare April 21, 2022 07:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant