GNU/Linux >> Linux の 問題 >  >> Linux

Linuxシステム自動化のための10のAnsibleモジュール

Ansibleは、IT環境向けの完全な自動化ソリューションです。 Ansibleを使用して、LinuxおよびWindowsサーバーの構成を自動化し、サービスプロビジョニングを調整し、クラウド環境を展開し、ネットワークデバイスを構成することもできます。

Ansibleモジュールはシステム上のアクションを抽象化するため、実装の詳細について心配する必要はありません。目的の状態を説明するだけで、Ansibleはターゲットシステムがそれに一致することを保証します。

このモジュールの可用性はAnsibleの主な利点の1つであり、「バッテリーが含まれている」Ansibleと呼ばれることがよくあります。確かに、多数のタスクのモジュールを見つけることができます。これはすばらしいことですが、初心者から、どこから始めればよいかわからないとよく耳にします。

モジュールの選択は、要件とAnsibleで自動化しようとしているものにのみ依存しますが、AnsibleforLinuxシステム自動化を開始するために必要なモジュールのトップ10を以下に示します。

1。コピー

コピーモジュールを使用すると、Ansibleコントロールノードからターゲットホストにファイルをコピーできます。ファイルのコピーに加えて、所有権、権限、およびSELinuxラベルを宛先ファイルに設定できます。コピーモジュールを使用して「今日のメッセージ」構成ファイルをターゲットホストにコピーする例を次に示します。

- name: Ensure MOTD file is in place
  copy:
    src: files/motd
    dest: /etc/motd
    owner: root
    group: root
    mode: 0644

それほど複雑でないコンテンツの場合は、次のように、ローカルファイルがなくても、コンテンツを宛先ファイルに直接コピーできます。

- name: Ensure MOTD file is in place
  copy:
    content: "Welcome to this system."
    dest: /etc/motd
    owner: root
    group: root
    mode: 0644

このモジュールは同じように機能します。つまり、同じファイルが同じコンテンツと権限でまだ配置されていない場合にのみ、ファイルをコピーします。

コピーモジュールは、静的コンテンツを含む少数のファイルをコピーするための優れたオプションです。多数のファイルをコピーする必要がある場合は、同期モジュールを確認してください。動的コンテンツを含むファイルをコピーするには、templateをご覧ください。 次のモジュール。

2。テンプレート

テンプレートモジュールは、copyと同様に機能します モジュールですが、ターゲットホストにコピーする前に、Jinja2テンプレート言語を使用してコンテンツを動的に処理します。

たとえば、次のように、ターゲットシステム名を表示する「今日のメッセージ」テンプレートを定義します。

$ vi templates/motd.j2
Welcome to {{ inventory_hostname }}.

次に、templateを使用してこのテンプレートをインスタンス化します このようなモジュール:

- name: Ensure MOTD file is in place
  template:
    src: templates/motd.j2
    dest: /etc/motd
    owner: root
    group: root
    mode: 0644

ファイルをコピーする前に、Ansibleはテンプレートを処理して変数を補間し、ターゲットのホストシステム名に置き換えます。たとえば、ターゲットシステム名がrh8-vm03の場合 、結果ファイルは次のとおりです。

Welcome to rh8-vm03.

copy モジュールは、contentを使用するときに変数を補間することもできます パラメータ、template モジュールを使用すると、テンプレートファイルを作成して柔軟性を高めることができます。これにより、forなどのより複雑なコンテンツを定義できます。 ループ、if 条件など。完全なリファレンスについては、Jinja2のドキュメントを確認してください。

このモジュールもべき等であり、ターゲットシステムのコンテンツがすでにテンプレートのコンテンツと一致している場合はファイルをコピーしません。

3。ユーザー

ユーザーモジュールを使用すると、ターゲットシステムでLinuxユーザーを作成および管理できます。このモジュールにはさまざまなパラメータがありますが、最も基本的な形式では、このモジュールを使用して新しいユーザーを作成できます。

たとえば、ユーザーricardoを作成するには UID 2001の場合、グループusersの一部 およびwheel 、およびパスワードmypassworduserを適用します これらのパラメータを持つモジュール:

- name: Ensure user ricardo exists
  user:
    name: ricardo
    group: users
    groups: wheel
    uid: 2001
    password: "{{ 'mypassword' | password_hash('sha512') }}"
    state: present

このモジュールはべき等になろうとしますが、すべてのオプションについてそれを保証することはできません。たとえば、前のモジュールの例を再度実行すると、パスワードが定義された値にリセットされ、実行のたびにシステム内のユーザーが変更されます。この例をべき等にするには、パラメーターupdate_password: on_createを使用します。 、Ansibleがユーザーの作成時にのみパスワードを設定し、その後の実行では設定しないようにします。

このモジュールを使用して、パラメータstate: absentを設定することにより、ユーザーを削除することもできます。 。

user モジュールには、複数のユーザーの側面を管理するための多くのオプションがあります。詳細については、モジュールのドキュメントを参照してください。

4。パッケージ

パッケージモジュールを使用すると、オペレーティングシステムの標準パッケージマネージャーを使用して、ターゲットシステムからソフトウェアパッケージをインストール、更新、または削除できます。

たとえば、ApacheWebサーバーをRedHat Linuxマシンにインストールするには、次のようなモジュールを適用します。

- name: Ensure Apache package is installed
  package:
    name: httpd
    state: present

Ansibleの詳細

  • Ansibleのクイックスタートガイド
  • Ansibleチートシート
  • 無料のオンラインコース:Ansibleの必需品
  • Ansibleをダウンロードしてインストールする
  • eBook:自動化された企業
  • eBook:DevOps用のAnsible
  • 無料のAnsible電子書籍
  • 最新のAnsible記事

このモジュールは配布に依存せず、yum/dnfなどの基盤となるパッケージマネージャーを使用して機能します。 RedHatベースのディストリビューションおよびaptの場合 Debian用。そのため、パッケージのインストールや削除などの基本的なタスクのみを実行します。パッケージマネージャーのオプションをさらに制御する必要がある場合は、ターゲットディストリビューション用の特定のモジュールを使用してください。

また、モジュール自体は異なるディストリビューションで動作しますが、それぞれのパッケージ名は異なる可能性があることに注意してください。たとえば、Red Hatベースのディストリビューションでは、ApacheWebサーバーのパッケージ名はhttpdです。 、Debianでは、apache2 。プレイブックがそれに対処していることを確認してください。

このモジュールはべき等であり、現在のシステム状態が目的の状態と一致する場合は機能しません。

5。サービス

サービスモジュールを使用して、必要なinitシステムを使用してターゲットシステムサービスを管理します。たとえば、systemd。

最も基本的な形式では、サービス名と目的の状態を指定するだけです。たとえば、sshdを開始するには サービス、次のようなモジュールを使用します:

- name: Ensure SSHD is started
  service:
    name: sshd
    state: started

パラメータenabled: yesを指定することで、ターゲットシステムの起動時にサービスが自動的に開始されるようにすることもできます。 。

packageと同じように モジュール、service モジュールは柔軟性があり、さまざまなディストリビューションで機能します。特定のターゲットinitシステムを微調整する必要がある場合は、対応するモジュールを使用してください。たとえば、モジュールsystemd

これまでに見た他のモジュールと同様に、service モジュールもべき等です。

6。 Firewalld

Firewalldモジュールを使用して、firewalldでシステムファイアウォールを制御します Red Hatベースのディストリビューションなど、それをサポートするシステム上のデーモン。

たとえば、ポート80でHTTPサービスを開くには、次のように使用します。

- name: Ensure port 80 (http) is open
  firewalld:
    service: http
    state: enabled
    permanent: yes
    immediate: yes

portを使用して、サービス名の代わりにカスタムポートを指定することもできます パラメータ。この場合、必ずプロトコルも指定してください。たとえば、TCPポート3000を開くには、次を使用します。

- name: Ensure port 3000/TCP is open
  firewalld:
    port: 3000/tcp
    state: enabled
    permanent: yes
    immediate: yes

このモジュールを使用して、他のfirewalldを制御することもできます ゾーンや複雑なルールなどの側面。オプションの包括的なリストについては、モジュールのドキュメントを確認してください。

7。ファイル

ファイルモジュールを使用すると、ファイルとディレクトリの状態を制御して、権限、所有権、SELinuxラベルを設定できます。

たとえば、fileを使用します ディレクトリを作成するモジュール/app ユーザーが所有するricardo 、所有者とグループのusersの読み取り、書き込み、および実行のアクセス許可があります :

- name: Ensure directory /app exists
  file:
    path: /app
    state: directory
    owner: ricardo
    group: users
    mode: 0770

このモジュールを使用して、パラメータrecurse: yesを使用して、ディレクトリのファイルプロパティを再帰的に設定することもできます。 または、パラメータstate: absentを使用してファイルとディレクトリを削除します 。

このモジュールは、ほとんどのパラメーターに対してべき等で動作しますが、一部のパラメーターでは、毎回ターゲットパスを変更する場合があります。詳細については、ドキュメントを確認してください。

8。 lineinfile

lineinfileモジュールを使用すると、既存のファイルの1行を管理できます。ファイルの残りの部分を変更したり、構成ファイル全体をコピーしたりせずに、既存のファイルの対象となる構成を更新すると便利です。

たとえば、次のようにhostsファイルに新しいエントリを追加します。

- name: Ensure host rh8-vm03 in hosts file
  lineinfile:
    path: /etc/hosts
    line: 192.168.122.236 rh8-vm03
    state: present

このモジュールを使用して、パラメータregexpを適用することにより、既存の行を変更することもできます。 置き換える既存の行を探します。たとえば、sshd_configを更新します PermitRootLogin yesの行を変更してルートログインを防止するファイル PermitRootLogin noへ :

- name: Ensure root cannot login via ssh
  lineinfile:
    path: /etc/ssh/sshd_config
    regexp: '^PermitRootLogin'
    line: PermitRootLogin no
    state: present

注:この変更を有効にするには、サービスモジュールを使用してSSHDサービスを再起動します。

このモジュールもべき等ですが、行を変更する場合は、不必要な変更を避けるために、正規表現が元の状態と更新された状態の両方に一致することを確認してください。

9。アーカイブ解除

unarchiveモジュールを使用して、tarなどのアーカイブファイルの内容を抽出します またはzip ファイル。デフォルトでは、アーカイブファイルを抽出する前にコントロールノードからターゲットマシンにコピーします。パラメータremote_src: yesを指定して、この動作を変更します 。

たとえば、.tar.gzのコンテンツを抽出します 次の構文でターゲットホストにすでにダウンロードされているファイル:

- name: Extract contents of app.tar.gz
  unarchive:
    src: /tmp/app.tar.gz
    dest: /app
    remote_src: yes

一部のアーカイブテクノロジでは、ターゲットシステムで追加のパッケージを使用できるようにする必要があります。たとえば、パッケージunzip .zipを抽出するには ファイル。

使用するアーカイブ形式に応じて、このモジュールは完全に機能する場合と機能しない場合があります。不要な変更を防ぐために、パラメータcreatesを使用できます アーカイブの内容を抽出するときにこのモジュールが作成するファイルまたはディレクトリを指定します。このファイルまたはディレクトリがすでに存在する場合、モジュールはコンテンツを再度抽出しません。

10。コマンド

コマンドモジュールは、ターゲットシステムで任意のコマンドを実行できる柔軟なモジュールです。このモジュールを使用すると、コマンドがあれば、ターゲットシステム上でほとんどすべてのことを実行できます。

commandにもかかわらず モジュールは柔軟で強力なので、注意して使用する必要があります。別の適切なモジュールが利用可能な場合は、コマンドモジュールを使用してタスクを実行することは避けてください。たとえば、できた commandを使用してユーザーを作成します useraddを実行するモジュール コマンドですが、すべき userを使用する 代わりに、モジュールは多くの詳細を抽象化するため、コーナーケースを処理し、必要な場合にのみ構成が変更されるようにします。

モジュールが利用できない場合、またはカスタムスクリプトやプログラムを実行する場合は、command モジュールはまだ素晴らしいリソースです。たとえば、このモジュールを使用して、ターゲットマシンにすでに存在するスクリプトを実行します。

- name: Run the app installer
  command: "/app/install.sh"

デフォルトでは、Ansibleはコマンドを毎回実行するため、このモジュールはべき等ではありません。 commandを作成するには モジュールのべき等、whenを使用できます 適切な条件が存在する場合、またはcreatesの場合にのみコマンドを実行する条件 unarchiveモジュールの例と同様の引数。

次は何ですか?

これらのモジュールを使用すると、構成ファイルのコピー、テンプレート作成、変更、ユーザーの作成、パッケージのインストール、システムサービスの開始、ファイアウォールの更新などにより、Linuxシステム全体を構成できます。

Ansibleを初めて使用する場合は、プレイブックを作成してこれらのモジュールを組み合わせてシステムを自動化する方法に関するドキュメントを確認してください。これらのタスクの一部は、機能するために昇格された特権で実行する必要があります。詳細については、特権昇格のドキュメントを確認してください。

Ansible 2.10以降、モジュールはコレクションに編成されています。このリストのほとんどのモジュールは、ansible.builtinの一部です。 コレクションであり、デフォルトでAnsibleで使用できますが、一部は他のコレクションの一部です。コレクションのリストについては、Ansibleのドキュメントを確認してください。


Linux
  1. 自動化のためにAnsibleとanacronを使用する方法

  2. Linuxとは何ですか?非技術ユーザー向けガイド

  3. Linuxシステム管理のためのAnsibleの役割の簡単な紹介

  1. Linuxシステム管理者向けのAnsibleの謎を解き明かす

  2. アセンブリの Linux システム コール テーブルまたはチートシート

  3. 仮想マシンを使用した Linux モジュールの開発/テストは安全ですか?

  1. 信頼性の高いLinuxシステム自動化のための8つのヒント

  2. Linuxシステム自動化の候補を特定するための3つのステップ

  3. 3システム管理者に役立つLinuxコマンド