Ansibleは、一度に数百のノードを管理できる広く使われている自動化ツールです。Ansibleには多くの素晴らしい機能があり、その1つがAnsible lineinfileモジュールを使用してリモートノードのファイル内の1行を管理する能力です。
Ansilbe lineinfileモジュールは、行の置換、行の更新、特定の行の追加など、ファイル内の1行に対してさまざまなアクションを実行するモジュールです。
このチュートリアルでは、Ansible lineinfileモジュールの概要、動作方法、およびテキストファイルの管理方法について学びます。
前提条件
この記事は、Ansible lineinfileモジュールのステップバイステップのチュートリアルです。一緒に進める場合は、以下の準備が整っていることを確認してください:
- An Ansibleコントローラーホスト – このチュートリアルでは、Ubuntu 18.04.5 LTSマシン上のAnsible v2.9.24を使用します。
- A remote computer to run commands. You’ll need an inventory file set up and one or more hosts already configured to run Ansible command and playbooks on. The remote Linux computer will be called myserver, and the tutorial will use an inventory group called web.
- チュートリアルを正確に追いかける場合、リモートコンピューターにはすでにApacheがインストールされている必要があります。
Ansibleのlineinfileモジュールを使用してテキストファイルを変更する方法についてのチュートリアルを行います。
まず、アドホックコマンドを使用してAnsibleのlineinfileモジュールを実行します。アドホックコマンドは、リモートホストで単一のコマンドをテストまたは実行するための簡単な方法です。
Ansibleコントローラにログインし、次のコマンドを実行します。このコマンドでは、lineinfileモジュール(-m
)を使用してwebマシンに接続し、実行するコマンド(-a
)を渡しています。
この例では、lineinfileモジュールが/etc/hostsファイル内のlocalhostエントリをIPアドレス127.0.0.1
とmyapache
のマッピングで更新します。 127.0.0.1
をmyapache
とマッピングすることで、HTTP://myapache:80でローカルでApacheテストページにアクセスできます。
path
はファイルの場所を示します。regexp
はファイル内の正規表現を検索し、line
パラメータで指定された127.0.0.1 myapache
で更新します。- –becomeフラグを使用すると、特権ユーザーとしてコマンドを実行できます。
web
は、すべてのサーバーのコレクションであるインベントリグループです。ansible.builtin.lineinfile
または単にlineinfileがモジュール名です。
コマンドを実行すると、リモートホスト上で行が正常に更新されたことを示すCHANGEDメッセージが表示されます。

SSHクライアントを使用してリモートノードにログインし、/etc/hostsファイルが新しい値で更新されたかどうかをcat
コマンドを使用して確認します。
以下のように、リモートマシン上でローカルホストのエントリが127.0.0.1 myapache
で正常に更新されました。

Playbook内で複数のテキストファイルを変更する
単一のadhocコマンドを使用してリモートマシンの行を管理する場合は、まあまあですが、複数のファイルに行またはファイル内の複数の行を管理する場合は困難になります。adhocコマンドの代わりに、ansible-playbookコマンドを使用してPlaybook内でAnsible lineinfileモジュールを使用することを検討してください。
では、プレイブック内でAnsible lineinfileモジュールを使用していくつかの行を変更する方法を学びましょう。
Ansibleコントローラーホストにすでにログインしていると仮定します。
1. ホームディレクトリにansible_lineinfile_module_demoという名前のディレクトリを作成します。このディレクトリにはlineinfileモジュールを呼び出すために使用するplaybookが含まれます。
2. my_playbook.ymlという別のファイルを~/ansible_lineinfile_module_demoディレクトリに作成し、以下のYAMLプレイブックの内容を貼り付けます。このプレイブックには、リモートマシンのApacheの異なる設定ファイルの行を管理するためにAnsibleのlineinefile
モジュールを使用する複数のタスクが含まれています。
以下のプレイブックには、次のタスクが含まれています:
1. /etc/sudoersファイルにADMIN
が存在するかをチェックし、存在しない場合は追加します。
2. /etc/apache2/ports.confファイル内でApacheのデフォルトがポート8080でリッスンしていることを確認します。他のポートの行が見つかった場合、lineinfileモジュールはそれをポート8080
に更新します。同様に、/etc/apache2/apache2.confファイルでは、MaxKeepAliveRequests
を1000に、KeepAliveTimeout
を100に更新します。
3. リモートサーバーのindex.html
ページの末尾に、テキスト「Hello This is my Apache Page」を追加します。追加先は/var/www/htmlディレクトリです。
AnsibleプレイブックはYAML形式で書かれています。YAMLについて詳しく知るには、ここをクリックしてください
3. プレイブックを呼び出し、ansible-playbook
コマンドを使用してリモートホスト上のプレイブックで定義されたすべての行を追加または更新します。

以下では、TASKのステータスがchangedであることがわかります。これはリモートホストが適切な状態になく、コマンドが変更されたことを意味します。OKステータスを持つTASKは変更を必要としないことを示します。
4. 次に、お気に入りのSSHクライアントを使用してリモートホストにSSH接続します。
5. 最後に、my_playbook.ymlで定義されたすべての行がリモートホストに追加または更新されているかをcat
コマンドを使用して確認します。
以下のスクリーンショットは、admin
が既にsudoersファイルに追加されていることを確認しています。

また、以下のスクリーンショットは、Apacheがデフォルトでポート8080
でリスニングしていることを確認しています。

最後に、MaxKeepAliveRequests
とKeepAliveTimeout
がそれぞれ1000と100に更新されたかどうかを確認してください。

MaxKeepAliveRequests
and KeepAliveTimeout
in the config file 結論
Ansibleのlineinfileモジュールは、リモートホスト上のテキストファイルを変更する素晴らしい方法です。このモジュールは、プレイブック内のテキストファイルの行を追加、削除、変更するための素晴らしい方法を提供します。
Ansibleのlineinfileモジュールが利益をもたらすと思われる他のユースケースはありますか?