jHako APIを動かしてみる(備忘録)
初めに
jHako開発者の小松さんにjHakoはブラウザの表示やブラウザからの動作を全てAPIで行っていると聞いたので、jHakoのjobnet編集画面にあるjobnetのテストで使う「実行」もAPIで実行できる筈。
これができれば、Zabbixで障害検知してアクションでjHakoの障害復旧jobnetが実行できる!
と言う訳で、実際に試してみました。
Advanced REST Clientで動かす
実はこの備忘録を作る前に試しているので鼻歌交じりで試したのですが…
jobnetの実行が404 NOT FOUND、Advanced REST Clientが新しくなったら動かない!
で、調査してみました。
URLは合っているのに404 NOT FOUND…
『URLあってるよなー』とか『ブラウザから動くよなー』とか独り言呟き1時間…
『HEAD足りてないかな?』とcookieを渡したら動きました。(笑)
ログイン時に帰ってくるcookieの値を渡す必要があると様です。(笑)
まとめ
下記でZabbixからjHakoの連携ができる筈
1)Python等でjHako APIでログイン、jobnet実行を行うスクリプト組む
2)Zabbixが障害検知したらアクションでスクリプト実行する
尚、jHakoのアカウントで障害対応用のアカウント作った方が良いかと。
ブラウザでログインしているアカウントで、Advanced REST Clientからログインしたら怒られました。(笑)
以下、jHako APIのログインとjobnet実行に関する情報
ログイン
URL:http://{jHakoサーバのIPアドレス}/jhako/sessions.json
HEAD:Content-Type:application/json
Body
{
"session": {
"name": "admin",
"fullname": "",
"kind": 0,
"password": "jhako",
"password_confirmation": "",
"language": "en",
"email": "",
"created_at": null,
"updated_at": null
}
}
jobnetの実行
URL
http://{jHakoサーバのIPアドレス}/jhako/proc_topjobnets.jsonHEAD:
Content-Type:application/json
Cookie: remember_token=xxxxxxxxxxxxxxxxxxxxxx;Body
{
"proc_topjobnet": {
"name": "test",
"description": "",
"kind": 10,
"hold": false,
"skip": false,
"timeout": 0,
"created_at": null,
"updated_at": null,
"jobunit_id": 13,
"status": 0,
"start_time": null,
"end_time": null,
"timeout_occur": false,
"force_start": false,
"force_stop": false,
"proc_jobunit_id": 0,
"proc_alarm_id": 0,
"mode": 1,
"schedule_time": null,
"run_type": 0,
"delay_limit": 1,
"path": ""
}
}
上記はtestと言うjobnetが実行します。
cookieはログイン時のレスポンスヘッダのSet-Cookie:にあるremember_tokenの値を設定します。
コメント
@komatsuyuji![:thumbsup: :thumbsup:](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAABiM0N1AAAAwFBMVEVMaXH/3Fz/2lr/3Fz/3F3/3Fz/3Fz/213/3F3/3F3/21z//0H/3Fz/3Fz/3Fz/3Fz/3V7/3Vz/3Fr/3F3/3Fz/3lz/3F3/3F3/3Fz/1V3/3F3/2lf/3F3/3Fz/3F3/3Fz/2134wFP0rE37zlj3uFH/3F3xnkf6xlXzpkr1sU7+11v8zFf91Frwm0f1rEz7yVb3uVHyokn90Fnwmkb5wlT2tE/0qUzvlkXvl0X/21z/2lz3t1D4v1P4vlL4vFL3u1G+aGdJAAAAJXRSTlMA9RY35ut07vrbpgHE1Ee6Hy8O4owngFdfBfEKmrOTZz717qTgxAWpKQAAAxRJREFUeAGs1MWBAzEMBVANMzPP5ReR/gsLM+1G8rvbFpoeGL7naHB8nWQyFydeTiIjLkoSiXDRy0IqcNWQhIarkQRy3IQkUOHGIoEGN25AfDPu5PLun6TElm5wR7AlNhTVKMSdSFVmPrHVuGcTV+DhnkFcK+71HXH5uJfwF1ZTVKIFikoUKipRigdmbS9tExtZqg+c9XhPc8woTCZ/nA/Xx/Fa6fnHBZrwG9eMEt82unc/yK4Su0xyHIaCAKxhZmZ8IjNT4tz/VivVkEG03++kLblem9R4HNKSFauceCmf553cTLI2QS3PqoEaJzQs4kUepX4DX/ZedTeiIVJXWpkIZRHA7i0a2AOVFlc2nkjasJ4jIrez9KK871hIcVbN9QDwZF0RE78s4E/jp1G+jIuQJsHXprNUnvIHWxAVP41Ag6ceyX2QrmxBiQhKwe7MJSgCu3WXc0RbsLk/sM1RVAk4ziPPN8Ud2gcyHE11ycRUkyidpj7bg1paKdUBpmVYdL2oIIdbh641RWVTkzOHICi/aoUNpaMP9qCv013KseO+R76qIqd66B0NbIFaqB4ALrpC8mUfd0UR77sE4a+CG227BMlN2CbyGA3sgJq8cnB7QexBDm3bREP3ANq2lWD05BTkVUJBIi/lDahdo6E140B+yeQ9RNRN9iL1f8/cjVuQj7XVCGSNCVy5BYEXVEbkAA3tgk5Dvy4ishcqn8gxKK6EJP3qhaxbXMi+/dybgg/HoFb+gXLVUkWNI8Jf0Ii2BkQe1Qe9DTQCOv3wHqnQPjiuaCGCGOjtqd9m1Ve2gIPWPpLsFYEGm5e0jcY2jSepYj5v7Rcj6cgykFImOpHQMmSsi/vlgpDIn79onoAWTyqteEv9VUTJN5SNnvzHczarhKDoOsZYGIZlSZMEYxyI8mFyiSbOQAvLLbSgdosmDjZBg8vT3FgesQYutR2QQaCxc4em1rdAIzDcSJ7R3PGu4WTXwQIUttaRKkmzprSuhJorNraBlNYv1VErTdDJFdK5e73ePzza29oZe8NV9rYzcnF4OVnOP85s6Fbz4WEsAAAAAElFTkSuQmCC)
0
https://github.com/komatsuyuji/jhako/tree/master/frontends/app/controllers
を読んだら、webapi仕様はすべてばれます。
現状だと、webapi実行が面倒です。→すべての操作は、内部IDが必要となります。
NAME指定のほうがいいですね。