2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

記事投稿キャンペーン 「2024年!初アウトプットをしよう」

【Ansible備忘録】Ansibleで対話型のコマンドに対応する(expectモジュール)

Posted at

本記事のターゲット

  • Ansible初学者
  • 実務でAnsibleを使用しているエンジニア
  • 対話型、対話形式のコマンドやインストールの自動化に困っている方

前書き

ソフトウェアの中には、dnfモジュールではなく「install.sh」のようなシェルスクリプトを実行してインストールするものがあります。
その際、実行するだけでインストールを完了してくれるものもあれば、インストール途中に質問を投げかけ「yes/no」を入力させる対話型のものもあります。

もし対話型のソフトウェアのインストールをAnsibleで自動化する場合、Shellモジュール等でそのまま実行しても質問のタイミングでこけてしまいます。
自動化を実現する為には「expectモジュール」を活用する必要があるので、以下にその方法を記載します。

尚、今回はapacheのインストールを例に紹介します。

「ん?apacheならdnfモジュールを使えば良いのでは?:thinking:

とかいう野暮なことは聞かないでください。
(対話型インストールのソフトウェアを探すのは流石にシンドイ…:expressionless:


※参考にする場合は自己責任でお願いします。
※expectモジュールを使用する場合、pexpectを対象ノード側にインストールしておく必要があります。

expectモジュールの記載例

main.yml
- name: apacheのインストール(dnfモジュール未使用) #任意の名称
  expect:
    command: dnf install httpd
    responses:
      "Is this ok \\[y/N\\]": y

command

shellモジュールやcommandモジュールのように実行したいコマンドを記載します。

responses

"<質問内容>":<回答内容>

上記のように記載します。
「:」より左側の質問内容部分はインストール途中で確認を求められる際の文章になります。

image.png

responses記載時の注意点

「:」よりも左側の質問内容の文中に[]()?.などの正規表現として用いられる記号が含まれている場合、\\ を使用してエスケープする必要があります。

裏ワザ(自己責任)

[]、()、?、.などの正規表現として用いられる記号が含まれている場合、「\\」を使用してエスケープする必要があります。

と上述しましたが、複数の正規表現が使われている場合、上手くエスケープできないことがあります。

そこで[]()?.などの正規表現が含まれていない部分のみをresponsesに記載してみたところ、コケることなく正常終了しました。:sweat_smile:

質問文の全文ではなく、一部が記載されていれば問題ないと判断されるみたいですね。
ただ、詳細設計書に質問内容自体も記載されている現場の場合、この方法はNGを喰らうかもしれませんね…

記載例
- name: apacheのインストール(dnfモジュール未使用) #任意の名称
  expect:
    command: dnf install httpd
    responses:
      "Is this ok": y

終わりに

主要なミドルウェアはdnfモジュールでインストール可能ですが、場合によっては"PJ特有"のミドルウェアを使用することもしばしばあります。(大人の事情的な。。)
rpmが配布されているミドルウェアであれば良いのですが、必ずしもそうとは限りません。
もしAnsibleで自動化する必要がある上、インストールするミドルウェアが対話型インストールだった場合、今回紹介した「expectモジュール」を活用して頂ければと思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?