ジョブスケジューラ「Rundeck」をインストールし、WebUIでクライアントサーバのジョブを実行するところまで



「Rundeck」とは、WebUIやAPIで複数サーバにcron実行が出来るオープンソース
Java製のジョブスケジューラです。

今回はLinuxに「Rundeck」をインストールし
WebUIでクライアントサーバのジョブを実行するところまでを説明します。

環境：CentOS 6.5 

#JRE7のインストール
```
# yum install java-1.7.0 
```

#Rundeckリポジトリの追加
```
# rpm -Uvh http://repo.rundeck.org/latest.rpm 
```

#Rundeck本体のインストール
```
# yum install rundeck 
# service rundeckd start
```

また次の設定をしておかないとログイン時にうまくいかないので、
インストール後、指定したIPでブラウザアクセスできるよう下記の設定を行います。

```
# cat /etc/rundeck/rundeck-config.properties
#loglevel.default is the default log level for jobs: ERROR,WARN,INFO,VERBOSE,DEBUG
loglevel.default=INFO
rdeck.base=/var/lib/rundeck

#rss.enabled if set to true enables RSS feeds that are public (non-authenticated)
rss.enabled=false
# change hostname here
grails.serverURL=http://接続するIPを指定する:4440
dataSource.dbCreate = update
dataSource.url = jdbc:h2:file:/var/lib/rundeck/data/rundeckdb;MVCC=true;TRACE_LEVEL_FILE=4
```
#ジョブの作成
http://｛指定したIP｝:4440 でブラウザにアクセスします。

![201609110507_000.JPG](https://qiita-image-store.s3.amazonaws.com/0/126270/89b260f0-dbdc-3f7d-6178-26a854a7bde9.jpeg)

ユーザ名admin、初期パスワードadminでログインします。
すると下記のように Welcome 画面が表示されます。

![20160326023132.png](https://qiita-image-store.s3.amazonaws.com/0/126270/7416defb-f6bf-e61b-cd05-a76fcaf46e57.png)


プロジェクトを作成します。
「Project Name」と「Default Node Executor」の空欄に何でもいいので
名前を決めます。

![201609130620_000.JPG](https://qiita-image-store.s3.amazonaws.com/0/126270/79809abe-8e0c-40c8-5ecb-76b01e49fcdb.jpeg)

公開鍵を配置するディレクトリは今回デフォルトで指定します。
SSH Key File path「/var/lib/rundeck/.ssh/id_rsa」

これで Create をクリックしてプロジェクトを作成します。

プロジェクトを作成後、
Jobs 画面を開いて、「Create Job」から「＋New Job…」を選択します。　
![201609130633_000.JPG](https://qiita-image-store.s3.amazonaws.com/0/126270/6ef2be0e-3ee7-9353-f2ad-77e6aede2bb6.jpeg)

Create New Job の画面になります。　
![201609240220_000.JPG](https://qiita-image-store.s3.amazonaws.com/0/126270/57124c80-f881-f3a0-fa5a-c8c01bae3ece.jpeg)

Job Name には 空欄に何でもいいので名前を決めます。
Workflow では、Add a Step で Command を選択します。
Command として 「 uname -n 」 を指定します。(他のlinuxコマンドでも構いません)

Nodes では、それぞれのノードでコマンドを実行するため 
Dispatch to Nodes(各ノードに対しSSH経由で実行)を選択します。

Node Filter に .　* を入力し、Set Filter をクリックします。　
ほかの項目はデフォルトのままで構いません。　
　
これで Create をクリックしてジョブを作成します。　


![201609240224_000.JPG](https://qiita-image-store.s3.amazonaws.com/0/126270/63f64c98-f5c4-7e1e-d809-a5383cd57d32.jpeg)

ジョブが作成された事を確認いたしました。


##ホスト、クライアントサーバ側での鍵、sudo設定

ジョブを実行するサーバにRundeckサーバからSSHアクセスできるようにする必要があります。
プロジェクト作成時にはデフォルトで/var/lib/rundeck/.ssh/id_rsaとなっていました。
実際にCLIからSSHの鍵ペアがあるか確認してみます。

```
------ホストサーバにて実施---------

# ll /var/lib/rundeck/.ssh/
total 8
-rw------- 1 rundeck rundeck 1679 Aug 27 10:31 id_rsa
-rw-r--r-- 1 rundeck rundeck  382 Aug 27 10:31 id_rsa.pub
```

公開鍵と秘密鍵があります。
公開鍵をジョブを実行したいクライアントサーバにRundeckユーザを作成し
配置場所を作成します。


```
------クライアントサーバにて実施---------

# useradd rundeck
# su - rundeck
$ mkdir /home/rundeck/.ssh
$ chmod 700 /home/rundeck/.ssh
$ vi /home/rundeck/.ssh/authorized_keys
$ chmod 600 /home/rundeck/.ssh/authorized_keys
```
ノードの追加はWEBブラウザからは出来ず、Rundeckサーバの/var/rundeck/projects/プロジェクト名/etc/resources.xmlを編集して追加します

```
------ホストサーバにて実施---------

# vi /var/rundeck/projects/rundeck-test/etc/resources.xml
<?xml version="1.0" encoding="UTF-8"?>

<project>
  <node name="localhost" description="Rundeck server node" tags="" hostname="localhost" osArch="amd64" osFamily="unix" osName="Linux" osVersion="3.10.0-327.el7.x86_64" username="rundeck"/>
  <node name="web01" description="Rundeck server node1" tags="" hostname="クライアントIPアドレス" osArch="amd64" osFamily="unix" osName="Linux" osVersion="3.10.0-327.el7.x86_64" username="rundeck"/>
</project>
```

では、先ほどの作成したジョブを実行します。　
Run Job Now をクリックします。　

![201609200543_000.JPG](https://qiita-image-store.s3.amazonaws.com/0/126270/7a22740d-6ba6-0909-9964-189e635be3f3.jpeg)


しかし、このままジョブを実行しようとしても
対象サーバに鍵を置いておらず、
尚且つttyの関係で以下のコマンドエラーとなります。

##その① ttyが無い
rootユーザにてvisudoを編集し以下の設定を追加します。

```
#visudo

 Defaults requiretty
 ↓
 # Defaults requiretty
```

しかし、このままでは下記のメッセージが表示されます。

##その② sudo: 端末 (tty) が存在せず、パスワードを尋ねる (askpass) プログラムが指定されていません

rootユーザにてvisudoを編集し以下の設定を追加します。

```
#visudo

(一番下に追加)
ssh_user ALL=(ALL) NOPASSWD:ALL
```

「ssh_user」はここでは「rundeck」とします。

##公開鍵をクライアントサーバに転送します
rundeckがインストールされているホストサーバで下記を実行します

```
------ホストサーバにて実施---------

cat /var/lib/rundeck/.ssh/id_rsa.pub | ssh rundeck@{クライアントIP} "cat >> /home/rundeck/.ssh/authorized_keys"
```

もう一度、先ほどの失敗したジョブを再実行します。　
Run Job Now をクリックします。

実行結果が表示されます。

![201609200549_000.JPG](https://qiita-image-store.s3.amazonaws.com/0/126270/8a69f242-246e-8162-2342-5aa0e184d5e0.jpeg)

COMPLETEが100%となれば、成功です。
Log Outputのタブにてコマンド出力結果を確認する事も出来ます。

おめでとうございます！