かべぎわブログ

技術的なことについてかけたらいいな…

Ansibleのexpectで対話型のスクリプトを実行してみる

概要

Ansibleのexpectを利用して対話型のスクリプトを実行してみようと思います。

準備

Ansibleでexpectモジュールを利用するためにはpexpectのインストールが必要です。
以下のコマンドでインストールしておきます。

$ sudo pip install pexpect

playbook例

以下のようなかんじでexpectの下に実行したいコマンドを記載します。
また、responsesで対話型の待受メッセージとそれに対する答えを入力します。
待受メッセージの箇所には正規表現が利用できます。

対話型スクリプト例

こんなかんじのスクリプトをplaybookの中から実行してみます。

実行してみる

実行するとこんな感じです。
wawawaを実行しました と出力されていることがわかります。

$  ansible-playbook expect.yml -v


PLAY [localhost] *********************************************************************************************************************************************

TASK [wget] **************************************************************************************************************************************************
changed: [localhost] => {"changed": true, "cmd": "/home/ec2-user/taiwa.sh", "delta": "0:00:00.155081", "end": "2018-04-29 12:50:29.027492", "rc": 0, "start": "2018-04-29 12:50:28.872411", "stdout": "実行するコマンドを入力してください\r\nwawawa を実行しました", "stdout_lines": ["実行するコマンドを入力してください", "wawawa を実行しました"]}

PLAY RECAP ***************************************************************************************************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=0   

おわりに

対話型のスクリプトをAnsibleで実行することができました。
結構かっちりresponsesでやりとりを記載してあげなければいけないので面倒ではありますが、こういったものもAnsibleをつかって自動化することができそうです!!!

Ansible実践ガイド 第2版 (impress top gear)

Ansible実践ガイド 第2版 (impress top gear)