IDCF テックブログ

IDCF テックブログ

クラウド・データセンターを提供するIDCフロンティアの公式テックブログ

idcfcloud-cliがアップデート!新機能を紹介

こんにちは、藤城(@tafujish)です。今回もidcfcloud-cliの話をします。
予定どおり開発が進みまして、このたびDNS/GSLBコンテンツキャッシュに対応しました。ここでは、追加された機能について紹介します。


f:id:mmurakami75:20171206155607p:plain

idcfcloud-cliはその名のとおり、IDCFクラウドをコマンドラインから操作するためのインターフェースで、今回のように対応サービスを順次拡張していき各サービスを統合しようとしています。idcfcloudコマンドから簡単にAPIを実行できますので、ちょっとしたスクリプト化など自動化を簡単にはじめられます。

インストールや初期設定については以下のエントリーを参照ください。

Ubuntu 16.04 環境
blog.idcf.jp

CentOS 7.x 環境
blog.idcf.jp

既にインストール済みの方は、

$ sudo gem update idcfcloud
$ sudo idcfcloud init

でアップデート可能です。

では、新機能について見ていきましょう。

列選択のオプションが入りました(--fields、--json-path)

--fields

出力結果を表示するときに列(カラム)を指定できるオプションとして--fieldsオプションを追加しました。

例えば、ILBのloadbalancer_idを調べたいとき、以下のように実行すると全部の情報が出てきて見づらいですよね。

$ idcfcloud ilb list_loadbalancers
{
  "status": 200,
  "message": "",
  "data": [
    {
      "id": "476b0e9f-ee26-4630-ab64-51edaa10aad4",
~略~

表示したい列名を--fieldsで指定することで絞って表示可能です。複数ある場合は「,」で区切ります。

$ idcfcloud ilb list_loadbalancers --fields=name,id
[
  {
    "name": "clitest",
    "id": "476b0e9f-ee26-4630-ab64-51edaa10aad4"
  },
  {
    "name": "clitest2",
    "id": "9b6fbe71-ead1-4b74-afb6-db8447065d76"
  },
  {
    "name": "clitest3",
    "id": "d3bca49d-c70a-42b1-9cdb-376843db4ea5"
  }
]

Table形式やCSV形式にも対応しています。

$ idcfcloud ilb list_loadbalancers -o csv --fields=name,id
name,id
clitest,476b0e9f-ee26-4630-ab64-51edaa10aad4
clitest2,9b6fbe71-ead1-4b74-afb6-db8447065d76
clitest3,d3bca49d-c70a-42b1-9cdb-376843db4ea5

--json-path

上記のように--fieldsオプションは手軽でよいのですが、カラムの中が配列だと表示しません。こういった配列の中のデータの取り出しなど、情報を一部抽出し表示させるために、--json-pathオプションを追加しました。オプション名のとおりJSONPath形式で指定が可能です。

例えば、ILBのリストから配列であるconfigs以下の内容を抜き出す場合は、次のようになります。

$ idcfcloud ilb list_loadbalancers --json-path='$..configs'
[
  [
    {
      "id": "65ac4726-4ec1-45aa-8168-71bdad2997c5",
      "port": 80,
      "loadbalancer_id": "476b0e9f-ee26-4630-ab64-51edaa10aad4",
~略~

これら2つ--json-pathと--fieldsを組み合わせることも可能で、たとえばconfig_idを抜き出したい場合は次のように組み合わせます。

$ idcfcloud ilb list_loadbalancers --json-path='$..configs' --fields=id
[
  [
    {
      "id": "65ac4726-4ec1-45aa-8168-71bdad2997c5"
    }
  ],
  [
    {
      "id": "4d5ecb9d-a54a-4ce8-8092-39304018bae4"
    }
  ],
  [
    {
      "id": "20d0e565-e876-4bc3-8960-1a9569ae7236"
    }
  ]
]

コンテンツキャッシュを試してみる

次に今回新たに追加されたコンテンツキャッシュ(CDN)のAPIを実行してみます。キャッシュの削除やワンタイムURLの発行など、CLIで実行できると便利なことが多いのではないでしょうか。

登録されているコンテンツキャッシュのリストの出力は、以下のとおりです。

$ idcfcloud cdn get_fqdn_list '{"api_key":"eHECQ5pdKKIoyxEJOFrzgwN-JqSyR3JMc1Ivf_AmN4uoj3LxzJmmImxgs9CEeorts-JXDRdO4NvmxkviPc-sDG"}'
{
  "status": 200,
  "message": "",
  "data": {
    "status": "success",
    "customer_domain": [
      {
        "id": "4436",
        "customer_id": "65",
        "cache_fqdn": "p1irv22ozsvv61.cdn.jp.idcfcloud.com",
        "cache_dir": "/",
        "origin_fqdn": "cdnorg.ds.jp-east.idcfcloud.com",
~略~

よく使いそうなものだと、キャッシュされたコンテンツの削除です。たとえば、img003.pngからimg010.pngまで間違ってアップしちゃったので削除したい、といったときに使えます。

$ idcfcloud cdn delete_cache '{"api_key":"eHECQ5pdKKIoyxEJOFrzgwN-JqSyR3JMc1Ivf_AmN4uoj3LxzJmmImxgs9CEeorts-JXDRdO4NvmxkviPc-sDG","delete_path":"http://cdnorg.ds.jp-east.idcfcloud.com/img003.png"}'
{
  "status": 200,
  "message": "",
  "data": {
    "status": "success",
    "messages": "We accept the cache deleted successfully."
  }
}

DNS/GSLBを試してみる

次に、今回新たに追加されたDNS/GSLBのAPIを実行してみます。私は自宅のDynamic DNSを IDCFクラウド DNSで構築しているのですが、API直よりもCLIを使った方がシンプルに実装できそうですね、どこかで置き換えようと思います。

登録されているゾーンの一覧は、次のように実行します。

$ idcfcloud dns list_zones -o table --fields=uuid,name
+------------------------------------+---------------+
|uuid                                |name           |
|92b7067a-75c0-4cd6-aaa4-7d8a4c1349ac|example.com    |
|faafa764-75d6-468a-b572-c0688ee141d0|example.net    |
|698ff2f7-0f03-48b3-bf8d-85f0789479fe|example.org    |
|d2656f15-80de-4191-81c0-b168f883c7ec|example.jp     |
|058ec764-7e47-41a6-9939-758ad9ecb265|sub.example.com|
+------------------------------------+---------------+

上記ゾーンのexample.comのレコード一覧は、次のように実行します。

$ idcfcloud dns list_records "92b7067a-75c0-4cd6-aaa4-7d8a4c1349ac" -o table --fields=uuid,name,type,content
+------------------------------------+----------------+----+-----------+
|uuid                                |name            |type|content    |
~略~
|3641e5d9-f3eb-413b-927e-f28fb3eced7e|www.example.com |A   |203.0.113.1|
|4c200167-5679-49ea-b7aa-d77e72c91165|example.com     |A   |203.0.113.1|
|27fba561-4f42-41a5-8c98-0d87f3ec759c|www.example.com |AAAA|2001:db8::1|
+------------------------------------+----------------+----+-----------+

www.example.comのIPアドレスを203.0.113.99へ変更するには、次のように実行します。

$ idcfcloud dns update_record "92b7067a-75c0-4cd6-aaa4-7d8a4c1349ac" "3641e5d9-f3eb-413b-927e-f28fb3eced7e" '{"content":"203.0.113.99"}'
{
  "status": 200,
  "message": "",
  "data": {
    "uuid": "3641e5d9-f3eb-413b-927e-f28fb3eced7e",
    "name": "www.example.com",
    "type": "A",
    "content": "203.0.113.99",
    "ttl": 3600,
    "description": "",
    "created_at": "2017-12-01T11:56:42+09:00",
    "updated_at": "2017-12-04T20:40:11+09:00"
  }
}

コンピューティング(Beta)を試してみる

コンピューティングについては、想定よりも開発がはかどったためベータという形で実装しました。一通りテストを実施しましたので利用いただいて問題ないですが、今後実装や挙動が変更される可能性があります。ベータにつき問い合わせがあってもサポートはありませんので、不具合や要望があればGitHubの方へ、イシューかプルリクを上げていただければ嬉しいです。

仮想マシン作成までのコマンドの流れを紹介します。

1. 仮想マシンをリストする。

$ idcfcloud compute listVirtualMachines

2. ゾーンをリストする。

$ idcfcloud compute listZones

3. サービスオファリング(マシンタイプ)をリストする。

$ idcfcloud compute listServiceOfferings

4. IDCFクラウド標準テンプレートをリストする。

$ idcfcloud compute listTemplates '{"templatefilter":"featured"}'

5. SSHキーペアをリストする。

$ idcfcloud compute listSSHKeyPairs

6. 1~5で確認した情報をもとに、faradゾーン、Light.S1、CentOS7.4、keyname1というSSHキーペアで、vmtest1という名前のマシンを作成する。

$ idcfcloud compute deployVirtualMachine '{"zoneid":"f4583787-7bff-461a-b026-73942911ca8b","serviceofferingid":"bd226b3b-6ae7-454d-b53d-c886f7eebe42","templateid":"49160f13-abbf-4f57-a711-110069d4da7b","keypair":"keyname1","name":"vmtest1"}'

なお、コンピューティングの正式版は来年2月にリリース予定です。

まとめ

idcfcloud-cliの第二弾対応として、DNS/GSLBコンテンツキャッシュに対応しました。ベータですがコンピューティングにも対応し、主要なサービスにはほぼ対応しましたので、まだ使ったことない方はこれを機に試していただければ嬉しいです。今後も、コンピューティングの正式対応や、新サービス・新機能にも順次対応していきますのでご期待ください。

Copyright © IDC Frontier Inc.