REST APIを使ってユーザ登録を半自動化する

 

  1. 目的
    アプライアンス製品を扱っていると、ユーザ登録まで行った状態でお客様へ納品することがあると思います。今回は、大量のユーザ登録を行わなければならなくなった時を想定し、REST APIでのユーザ登録機能を利用してユーザ登録を半自動化することが目的です。
    ※以降は素人の浅知恵で考えたものですのでご注意ください。

  2. 環境
    Cisco DEVNET Sandbox のStealthwatch
    ・Windows10
    Excel
    curl(Windows10に標準でインストールされているもの)
    コマンドプロンプト
  3. 想定フロー
    (1)Excelでユーザ管理表を作成(ユーザ名、パスワード、ロールなどのパラメータ管理表)
    (2)Excelからjsonファイルを生成する
    (3)batファイルを実行し、REST APIの実行(REST APIの引数としてjsonを指定)
    ※今回は(3)の部分をとりあげます

  4. batファイルの中身
    curl -s -k -c cookies.txt -d "username=ユーザ名&password=パスワード" https://IPアドレス/token/v2/authenticate

    for %%i in (*.json) do (
        curl -k -b cookies.txt -H "Content-type: application/json" -X POST --data "@%%i" https://IPアドレス/smc-users/rest/v1/user
    )
    pause 
    1行目では認証を行っています。
    3行目以降ではbatファイルが存在するフォルダにある「.json」ファイルの数だけユーザ登録処理を実行しています。
    4行目では、「--data "@%%i"」を指定することで、フォルダに存在するjsonファイル名をREST APIに引き渡しています。ここでポイントとなるのは、json形式で直接記述するのではなく、jsonファイルを引数に指定していることです。

  5. jsonファイルの中身
    jsonファイルの中身は以下のようになっています。
    {
      "userName""test2",
      "fullName""test2",
      "emailAddress""",
      "authenticationServiceName""local",
      "dataRoleId"0,
      "functionRoleIds": [0],
      "webFunctionRoleIds": [1],
      "password""パスワード",
      "isAdmin"true
    }
  6. 参考資料

    Cisco DevNet: APIs, SDKs, Sandbox, and Community for Cisco Developers

    https://developer.cisco.com/docs/stealthwatch/enterprise/#!user-management-api

    qiita.com

     

  7. 愚痴
    StealthwatchのREST APIのドキュメントが分かりにくかった。
    StealthwatchのREST APIのドキュメントは以下のような感じ。最初はユーザ管理のREST APIのURLが分かりませんでした。。。

    f:id:kmwti:20200921170724p:plain

    で、どこにURLが書いてあるかというと、上記画像にある「GET」とか「POST」のところをクリックすると出てくる以下の画面の「Try it」を選択した後に表示される画面に書いてあった。。

    f:id:kmwti:20200921171100p:plain

    f:id:kmwti:20200921171223p:plain

  8. 余談
    jsonファイルに複数ユーザー書いておけば、一気に登録できるかと思ったけど、できなかった。REST APIが1ユーザずつの登録にしか対応していないかもしれない。(それかjsonの書き方が悪かった?)
    とりあえずは、batで複数ファイルを繰り返し処理するようにして解決した。