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


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

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

  1. Managing Software Packages and Repositories in Ansible
  2. Managing Services Using Ansible
  3. Managing Firewall with Ansible
  4. Archiving Files or Folders with Ansible
  5. Schedule Tasks with Ansible
  6. Manage Users and Groups with Ansible
  7. Create Files and Directories with Ansible
  8. Managing Storage with Ansible
  9. Managing File Systems with Ansible

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

Ansibleにはpackageというモジュールが付属しており、システムごとに異なるパッケージマネージャーを使用する必要がありません。ホストシステムの対応するパッケージマネージャーを自動的に使用するため、作業が簡単になります。

たとえば、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があり、これらはすべてApacheWebサーバーを示しています。したがって、これらのパッケージを渡すときは特に注意が必要です。通常、変数または条件文を使用するのが最善です。

次に、Linuxシステムでサービスを管理するために使用されるサービスモジュールがあります。サービスを開始、停止、または再起動するために使用されます。また、これを使用してサービスを有効にし、システムの起動時にサービスを自動的に開始することもできます。

たとえば、RHEL8でApacheWebサーバーを起動して有効にするには、次のようにサービスを使用します。

---
- 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

システム管理者が行うもう1つの重要なタスクは、ファイアウォールの管理です。 Ansibleプレイブックでは、firewalldモジュールとufwモジュールを使用することでこれがはるかに簡単になりました。ポートやサービス、さらには送信元アドレスを許可またはブロックするようにファイアウォールを構成できます。

飛び込んで、いくつかの例を見てみましょう。

---
- 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

次のように、ポートオプションの使用を許可するポートの範囲を指定します。

- firewalld:
    port: 213-567/udp
    permanent: yes
    state: enabled

ポートをブロックするには、次のように状態オプションを無効に変更します。

-firewalld:
	port: 80/tcp
     permanent: yes
     state: disabled

ポートを追加/ブロックする以外に、同じルールをサービスに適用することもできます。そして、それは非常に簡単です。サービスモジュールを使用して、追加するサービスを追加し、stateオプションが有効に設定されていることを確認するだけです。

- firewalld:
    service: https
    permanent: true
    state: enabled

サービスをブロックするには、状態オプションを無効に設定します。

- firewalld:
    service: https
    permanent: true
    state: disabled

アーカイブとは、ファイルまたはフォルダーを、簡単に移植でき、サイズが小さい形式に圧縮することです。 Ansibleには、アーカイブと呼ばれるモジュールが付属しています。ファイルの圧縮は、それが得るのと同じくらい簡単です。必要なのは、ファイルのソースパスと圧縮ファイルの宛先を指定することだけです。

以下のプレイブックcompress.ymlについて考えてみます。

---
- hosts: webservers
  tasks:

    • name: Compress a folder
archive:
        path: /opt/data/web
        dest: /tmp/web.gz

上記のプレイブックは/ opt/data/webディレクトリを圧縮し、それを/tmp/web.gzに保存します。

デフォルトの圧縮形式は .gz ですが、これはformat属性を使用して指定できます。次のプレイブックを試してみてください。

---
- hosts: webservers
  Tasks:

  - name: Create a zip archive 
    archive:
     path: /opt/data/web
     dest: /tmp/web
     format: zip

上記のプレイブックは、/ opt/data/webディレクトリを/tmp/web.zipに圧縮します。

unarchive属性を使用して、圧縮ファイルを解凍することもできます。以下のプレイブックを検討してください。

---
- hosts: webservers
  tasks:

 - name:Uncompress /tmp/web.gz to/opt directory  on Ansible controller
   unarchive:
     src: /tmp/web.bz2
     dest: /opt/

上記のプレイブックは、ファイル/opt/data/web.gzをAnsibleコントローラーの/ optに解凍します。

リモートソースシステムを指定するには、 remote_src u003d 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 /ディレクトリに解凍します。

cronモジュールは、AnsiblePlaybooksでジョブをスケジュールするのに役立ちます。

以下のプレイブックを検討してください。

---
- 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: *

毎日午後5時にcronジョブを実行するには、次のように時間設定を設定します。

month: *
day: *
hour: 17
minute: 00
weekday: *

5時間ごとにcronジョブを実行するには、図のようにステップ値 */5 を使用します。

month: *
day: *
hour: */5
minute: *
weekday: *

Ansibleプレイブック内のユーザーとグループを非常に簡単に管理することもできます。

新しいユーザーを作成するには、図のようにユーザーモジュールを使用します。

---
- 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

ディレクトリのファイルを作成するには、ファイルモジュールを使用します。

たとえば、新しいディレクトリを作成します。

---
- 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

lvgモジュールは、LVMボリュームとグループを構成するために使用されます。

以下のプレイブックを検討してください。

---
- hosts: webservers
  tasks: 
    • name: Create lVM volume group
lvg: 
 vg: vg1
 pvs: /dev/sda1
 pesize: 32

これにより、/dev/sda1 パーティションの上に32MBの物理エクステントサイズのボリュームグループが作成されます。

作成したら、lvolモジュールを使用して、図のように論理ボリュームを作成します

---
    - hosts: webservers
      tasks: 

       - name: Create lVM volume
    lvol: 
    vg: vg1
    lv: lvol1
    pvs: /dev/sda1

ブロックデバイス上にファイルシステムを作成するには、ファイルシステムモジュールを使用します。

以下のプレイブックは、ブロックボリューム上に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

これでトピックは終わりです。 AnsiblePlaybookの特定の組み込みモジュールで実行できるさまざまなシステム管理タスクについて説明しました。