ウェブサイト検索

システム管理タスクに Ansible モジュールを使用する方法 - パート 6


Ansible シリーズのこのパート 6 では、過去のトピックでいくつかの Ansible モジュールについて説明しました。ここからはさらに深く掘り下げて、さまざまなシステム管理タスクの実行に役立つ追加モジュールを紹介します。

各モジュールの基本的な考え方を理解し、特定のタスクを実行するために利用できるオプションを確認します。

このページでは:
  1. Ansible でのソフトウェア パッケージとリポジトリの管理
  2. Ansible を使用したサービスの管理
  3. Ansible を使用したファイアウォールの管理
  4. Ansible を使用したファイルまたはフォルダーのアーカイブ
  5. Ansible を使用してタスクをスケジュールする
  6. Ansible を使用してユーザーとグループを管理する
  7. Ansible を使用してファイルとディレクトリを作成する
  8. Ansible を使用したストレージの管理
  9. Ansible を使用したファイル システムの管理

1. Ansible でのソフトウェア パッケージとリポジトリの管理

Linux システムにパッケージをインストールする場合、ディストリビューションごとに異なるパッケージ マネージャーが付属します。 RedHat ディストリビューションには yum と dnf があり、Debian フレーバーには apt があります。

Ansible にはパッケージと呼ばれるモジュールが付属しているため、システムごとに異なるパッケージ マネージャーを使用する必要がなくなります。ホスト システムの対応するパッケージ マネージャーを自動的に使用するため、作業が容易になります。

ソフトウェアパッケージのインストール

たとえば、DebianRedHat ディストリビューションの両方を含むホストのグループに 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 の特定の組み込みモジュールによって実行できるさまざまなシステム管理タスクについて説明しました。