システム管理タスクに Ansible モジュールを使用する方法 - パート 6
Ansible シリーズのこのパート 6 では、過去のトピックでいくつかの Ansible モジュールについて説明しました。ここからはさらに深く掘り下げて、さまざまなシステム管理タスクの実行に役立つ追加モジュールを紹介します。
各モジュールの基本的な考え方を理解し、特定のタスクを実行するために利用できるオプションを確認します。
このページでは:
- Ansible でのソフトウェア パッケージとリポジトリの管理
- Ansible を使用したサービスの管理
- Ansible を使用したファイアウォールの管理
- Ansible を使用したファイルまたはフォルダーのアーカイブ
- Ansible を使用してタスクをスケジュールする
- Ansible を使用してユーザーとグループを管理する
- Ansible を使用してファイルとディレクトリを作成する
- Ansible を使用したストレージの管理
- Ansible を使用したファイル システムの管理
1. Ansible でのソフトウェア パッケージとリポジトリの管理
Linux システムにパッケージをインストールする場合、ディストリビューションごとに異なるパッケージ マネージャーが付属します。 RedHat ディストリビューションには yum と dnf があり、Debian フレーバーには apt があります。
Ansible にはパッケージと呼ばれるモジュールが付属しているため、システムごとに異なるパッケージ マネージャーを使用する必要がなくなります。ホスト システムの対応するパッケージ マネージャーを自動的に使用するため、作業が容易になります。
ソフトウェアパッケージのインストール
たとえば、Debian と RedHat ディストリビューションの両方を含むホストのグループに htop をインストールするには、 次のようにパッケージモジュールを使用します。以下の install_htop.yml プレイブックに示されています。
---
- name: Install htop on Ubuntu and CentOS
hosts: all
tasks:
- package:
name: htop
state: installed
注: パッケージ名はオペレーティング システムによって異なる場合があります。たとえば、Redhat ディストリビューションには httpd があり、Debian/Ubuntu システムには Apache2 があり、これらはすべて Apache を表します。ウェブサーバー。したがって、これらのパッケージを渡すときは特に注意する必要があります。通常は、変数または条件ステートメントを使用するのが最善です。
2. Ansible を使用したサービスの管理
次に、Linux システム上のサービスを管理するために使用されるサービス モジュールがあります。サービスを開始、停止、または再起動するために使用されます。これを使用してサービスを有効にし、システムの起動時にサービスが自動的に開始されるようにすることもできます。
サービスを開始して有効にする
たとえば、RHEL 8 で Apache Web サーバーを起動して有効にするには、次のようにサービスを使用します。
---
- name: Start and enable httpd service
hosts: webservers
tasks:
- service:
name: httpd
state: started
enabled: yes
サービスを停止する
httpd サービスを停止するには、stopped 属性を渡します。
---
- name: Stop httpd service
hosts: webservers
tasks:
- service:
name: httpd
state: stopped
サービスを再起動する
httpd サービスを再起動するには、restarted 属性を渡します。
---
- name: Restart httpd service
hosts: webservers
tasks:
- service:
name: httpd
state: restarted
3. Ansible を使用したファイアウォールの管理
システム管理者が取り組むもう 1 つの重要なタスクは、ファイアウォールの管理です。 Ansible プレイブックでは、firewalld モジュールと ufw モジュールを使用してこれがはるかに簡単になりました。ポートやサービス、さらには送信元アドレスを許可またはブロックするようにファイアウォールを構成できます。
早速、いくつかの例を見てみましょう。
ファイアウォールでポート 80 を開く/ブロックする
---
- name: Allow port 80
hosts: webservers
tasks:
-firewalld:
port: 80/tcp
permanent: yes
state: enabled
上記のプレイブックでは、ポート 80 がファイアウォールを越えて許可されています。
オプション permanent:yes
を使用すると、ファイアウォール ルールが強制され、再起動後も永続的になります。ただし、このルールはすぐには適用されません。これは再起動後にのみ有効になります。ルールを直ちに適用するには、オプション immediate:yes
を使用します。
許可されるアドレスを指定するには、source:0.0.0.0/0 ステートメントを使用します。
- firewalld:
source: 192.168.0.0/24
zone: public
state: enabled
port オプションの使用を許可するポートの範囲を指定するには、次のようにします。
- firewalld:
port: 213-567/udp
permanent: yes
state: enabled
ポートをブロックするには、次のように状態オプションを無効に変更します。
-firewalld:
port: 80/tcp
permanent: yes
state: disabled
firewalld でサービスを追加/ブロックする
ポートの追加/ブロックとは別に、同じルールをサービスに適用することもできます。そしてそれはとてもシンプルです。 サービスモジュールを使用して、追加するサービスを追加し、状態オプションが有効に設定されていることを確認するだけです。
- firewalld:
service: https
permanent: true
state: enabled
サービスをブロックするには、状態オプションを無効に設定します。
- firewalld:
service: https
permanent: true
state: disabled
4. Ansible を使用したファイルまたはフォルダーのアーカイブ
アーカイブとは、ファイルまたはフォルダーを、持ち運びが容易でサイズが小さい形式に圧縮することを指します。 Ansible にはアーカイブと呼ばれるモジュールが付属しています。ファイルの圧縮は非常に簡単です。必要なのは、ファイルのソース パスと圧縮ファイルの宛先を指定することだけです。
ディレクトリを圧縮する
以下のプレイブックcompress.ymlについて考えてみましょう。
---
- hosts: webservers
tasks:
• name: Compress a folder
archive:
path: /opt/data/web
dest: /tmp/web.gz
上記の Playbook は、/opt/data/web ディレクトリを圧縮し、/tmp/web.gz に保存します。
フォーマットを使用してディレクトリを圧縮する
デフォルトの圧縮形式は .gz
ですが、format 属性を使用して指定できます。次の Playbook をサンプルします。
---
- hosts: webservers
Tasks:
- name: Create a zip archive
archive:
path: /opt/data/web
dest: /tmp/web
format: zip
上記の Playbook は、/opt/data/web ディレクトリを /tmp/web.zip に圧縮します。
ファイルを解凍する
アーカイブ解除 属性を使用して、圧縮ファイルを解凍することもできます。以下のプレイブックを考えてみましょう。
---
- hosts: webservers
tasks:
- name:Uncompress /tmp/web.gz to/opt directory on Ansible controller
unarchive:
src: /tmp/web.bz2
dest: /opt/
上記の Playbook は、ファイル /opt/data/web.gz を Ansible コントローラー上の /opt に解凍します。
リモートノードでファイルを解凍する
リモート ソース システムを指定するには、remote_src=yes
オプションを使用します。
---
- hosts: webservers
tasks:
- name:Uncompress /tmp/web.bz2 to/opt on remote host
unarchive:
src: /tmp/web.bz2
dest: /opt/
remote_src=yes
上記のプレイブックは、リモート ノード上のファイル /tmp/web.bz2 を /opt/ ディレクトリに解凍します。
5. Ansible を使用してタスクをスケジュールする
cron のモジュールは、Ansible Playbook でジョブをスケジュールするのに役立ちます。
スケジュールされたタスクを作成する
以下のプレイブックを考えてみましょう。
---
- hosts: webservers
tasks:
- name: Create a scheduled task
cron:
name: Run employee attendance
job: sh /opt/scripts/attendace.sh
month: 4
day: 5
hour: 17
minute: 00
プレイブックは、4 月 5 日の午後 5 時に出席スクリプトを実行します。
特定の日にスクリプトをスケジュールする
4 月 5 日が月曜日の場合にのみこのスクリプトが実行されるようにスケジュールしたい場合は、weekday: 1 属性を使用します。 cron 表記に従って、0 は日曜日を示し、6 は土曜日を示します。
month: 4
day: 5
hour: 17
minute: 00
weekday: 1
これらのフィールドのいずれかのアスタリスク (*) は、任意の値を示します。
日付にジョブを実行する
平日に関係なく 4 月 5 日の午後 5 時にジョブを実行するには、次のように時間パラメーターを使用します。
month: 4
day: 5
hour: 17
minute: 00
weekday: *
毎月の特定の日にジョブを実行する
毎月 5 日の午後 5 時に cron ジョブを実行するには、以下の設定を使用します。
month: *
day: 5
hour: 17
minute: 00
weekday: *
毎日ジョブを実行する
cron ジョブを毎日午後 5 時に実行するには、次のように時刻設定を設定します。
month: *
day: *
hour: 17
minute: 00
weekday: *
5 時間ごとにジョブを実行する
cron ジョブを 5 時間ごとに実行するには、次のようにステップ値 */5
を使用します。
month: *
day: *
hour: */5
minute: *
weekday: *
6. Ansible を使用してユーザーとグループを管理する
Ansible Playbook 内でユーザーとグループを非常に簡単に管理することもできます。
新しいユーザーを作成する
新しいユーザーを作成するには、図に示すようにユーザー モジュールを使用します。
---
- hosts: webservers
tasks:
- name: Create a new user
user:
name: Jack
UID、グループなどの追加オプションを追加することもできます。
- name: Create a new user
user:
name: Jack
comment: Jack Peters
uid: 1002
group: administrators
shell: /bin/bash
ユーザーを削除する
ユーザーを削除するには、remove:yes
ステートメントを使用します。
- name: Remove the user 'Jack'
user:
name: Jack
state: absent
remove: yes
新しいグループを作成する
新しいグループを作成するには、グループ モジュールを使用します。
- name: Create a group
group:
name: developers
7. Ansible を使用してファイルとディレクトリを作成する
ディレクトリのファイルを作成するには、file モジュールを使用します。
新しいディレクトリを作成する
たとえば、新しいディレクトリを作成します。
---
- hosts: webservers
tasks:
- name: Create a new directory
file:
path: /opt/app
state: directory
所有者、グループ、ファイルのアクセス許可などの他の属性を追加できます。
- hosts: webservers
tasks:
- name: Create a new directory
file:
path: /opt/web
state: directory
owner: www-data
group: www-data
mode: 0644
さらに、recurse: yes ステートメントを使用してディレクトリを再帰的に作成できます。
---
- hosts: webservers
tasks:
- name: Create directories recursively
file:
path: /opt/web/app
state: directory
owner: www-data
group: www-data
mode: 0644
recurse: yes
ファイルを作成する
ファイルを作成するには、state: touch
オプションを使用します。
---
- hosts: webservers
tasks:
- name: Create a new file
file:
path: /opt/web/index.html
state: touch
owner: www-data
group: www-data
mode: 0644
8. Ansible を使用したストレージの管理
lvg モジュールは、LVM ボリュームとグループを構成するために使用されます。
LVMボリュームグループの作成
以下のプレイブックを考えてみましょう。
---
- hosts: webservers
tasks:
• name: Create lVM volume group
lvg:
vg: vg1
pvs: /dev/sda1
pesize: 32
これにより、/dev/sda1
パーティション上に物理エクステント サイズが 32 MB のボリューム グループが作成されます。
作成したら、lvol モジュールを使用して、次のように論理ボリュームを作成します。
論理ボリュームの作成
---
- hosts: webservers
tasks:
- name: Create lVM volume
lvol:
vg: vg1
lv: lvol1
pvs: /dev/sda1
9. Ansible を使用したファイル システムの管理
ブロック デバイス上にファイル システムを作成するには、ファイル システム モジュールを使用します。
ファイルシステムを作成する
以下の Playbook は、ブロック ボリューム上にファイルシステム タイプのxfs を作成します。
---
- hosts: webservers
tasks:
- name: Create a filesystem
filesystem:
fstype: xfs
dev: /dev/vg1/lvol1
ファイルシステムをマウントする
次に、以下のプレイブックに示すようにマウント モジュールを使用してブロック ボリュームのマウントに進むことができます。
---
- hosts: webservers
tasks:
- name: Mount a filesystem
mount:
fstype: xfs
src: /dev/vg1/lvol1
path: /opt/web
state: mounted
結論
これでこのトピックは終了です。 Ansible Playbook の特定の組み込みモジュールによって実行できるさまざまなシステム管理タスクについて説明しました。