2015年8月25日火曜日

[CentOS7][Rundeck] プロジェクトを作成する


[CentOS7][Rundeck] Rundeck2.5.3 をインストールする」 の続きです。

Rundeck がインストールできたので、さっそく、使ってみます。
Rundeckで、まず、最初にやることは、プロジェクトの作成です。

Rundeck の主要なUIは、下記の 2 つです。
  • GUI: HTML ベースのグラフィカルなコンソール
  • CUI: Shell ツール
どちらのインターフェイスからも、プロジェクト作成・リソースの閲覧・ディスパッチ(コマンドの発信)・ジョブの保存と実行が可能です。
ユーザマニュアル 参照)

さらに Rundeck にはサーバーのプログラムとやり取りできる WebAPI も用意されていす。
Rundeck API 参照)

今回は、GUI、CUI、WebAPIを使って、プロジェクトの作成と削除をしてみます。


GUIでプロジェクトを作成


ブラウザでコンソールを開いてログインすると、初期状態ではプロジェクトが無いので下図のように表示されます。
[New Project ] をクリックします。



[Project Name] を入力します。
他のパラメータは、とりあえずデフォルトでOKです。後で設定を変えられます。



画面を下方向にスクロールして、[Create] をクリックすると、プロジェクトが作成されます。



プロジェクトの作成が成功すると、下図のように表示されます。
赤枠で示した場所にプロジェクト名が表示され、ここをクリックすると他のプロジェクトを選択したり、新しいプロジェクトを作成するためのメニューが表示されます。



赤枠で示した場所をクリックすると、プロジェクトの一覧が表示されます。
プロジェクトのパラメータ設定や、削除をしたい場合は、[Configure]をクリックします。



[Delete Project]タブをクリックして、[Delete this Project] をクリックすると、プロジェクトを削除できます。





CUIでプロジェクトを作成


Rundeck をインストールしたサーバに root でログインし、 rundeck ユーザにスイッチします。
下記のようにコマンドを実行すると、"sandbox02" という名称のプロジェクトが作成されます。
[rundeck@centos7 ~]$ rd-project -a create -p sandbox02
Project was created: sandbox02

プロジェクトの設定変更や削除は、GUIで行います。

コマンドの詳細は下記URLを参照してください。



WebAPIでプロジェクトを作成


WebAPIを実行するには認証する必要があります。
認証しないでWebAPIを実行すると以下のようなエラーになります。
<result error='true' apiversion='13'><error code='unauthorized'><message>(unauthenticated) is not authorized for: /api/1/projects</message></error></result>
トークンを使用する方法は難しそうなので、今回はパスワード認証を試します。
以下のようにコマンドを実行して admin でログインし、cookie のセッションIDをファイルに保存します。
[rundeck@centos7 rundeck]$ curl -s -L -c /tmp/cookies -b /tmp/cookies -d j_username=admin -d j_password=admin http://localhost:4440/j_security_check > /dev/null
/tmp/cookies を見ると、以下のようにセッションIDが保存されています。
[rundeck@centos7 rundeck]$ cat /tmp/cookies
# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

localhost       FALSE   /       FALSE   0       JSESSIONID      bl7b9lk5rwz2lpp9brjte5cy
10.1.0.80       FALSE   /       FALSE   0       JSESSIONID      1vdzooskdoirmee5cube3tvo5
このcookieを指定して、WebAPIを実行します。 プロジェクトの一覧を表示してみます。
[rundeck@centos7 rundeck]$ curl -b /tmp/cookies  http://localhost:4440/api/1/projects
<result apiversion="13" success="true">
  <projects count="1">
    <project>
      <name>sandbox02</name>
      <description></description>
    </project>
  </projects>
</result>
プロジェクトが1つあるのがわかります。
 新規で "sandbox03" プロジェクトを作成してみます。リクエストは XML形式とJSON形式2つありますが、今回は、JSON形式を試します。
[rundeck@centos7 rundeck]$ curl -b /tmp/cookies -H 'Content-Type: applion' -X POST -d '{ "name": "sandbox03" }' http://localhost:4440/api/11/projects
{"url":"http://10.1.0.80:4440/api/13/project/sandbox03","name":"sandbox03","description":"","config":{"project.name":"sandbox03","project.ssh-authentication":"privateKey","service.NodeExecutor.default.provider":"jsch-ssh","resources.source.1.config.includeServerNode":"true","resources.source.1.config.generateFileAutomatically":"true","resources.source.1.config.file":"/var/rundeck/projects/sandbox03/etc/resources.xml","project.ssh-keypath":"/var/lib/rundeck/.ssh/id_rsa","service.FileCopier.default.provider":"jsch-scp","resources.source.1.type":"file"}}
実行結果は、プロジェクトのパラメータがJSON形式で表示されます。
プロジェクト一覧を表示すると、sandbox03 が表示されます。
[rundeck@centos7 rundeck]$ curl -b /tmp/cookies  http://localhost:4440/api/1/projects
<result success='true' apiversion='13'>
  <projects count='2'>
    <project>
      <name>sandbox02</name>
      <description></description>
    </project>
    <project>
      <name>sandbox03</name>
      <description></description>
    </project>
  </projects>
</result>
こんどは、sandbox03 プロジェクトを削除して、一覧表示してみます。
[rundeck@centos7 rundeck]$ curl -b /tmp/cookies -X DELETE http://localhost:4440/api/11/project/sandbox03
[rundeck@centos7 rundeck]$ curl -b /tmp/cookies  http://localhost:4440/api/1/projects
<result success='true' apiversion='13'>
  <projects count='1'>
    <project>
      <name>sandbox02</name>
      <description></description>
    </project>
  </projects>
</result>
sandbox03 プロジェクトが削除されました。