初心者向け Ansible チュートリアル: プレイブック、コマンド、例

Ansibleとは何ですか?

Ansible は、ソフトウェア プロビジョニング、構成管理、およびソフトウェア展開のためのオープン ソースの自動化およびオーケストレーション ツールです。 Ansible は、Unix のようなシステムを簡単に実行および構成できます。 Windows インフラストラクチャをコードとして提供するシステム。これには、システムの構成と管理のための独自の宣言型プログラミング言語が含まれています。

Ansible は、インストールの単純さ、クライアントへの接続に関する使いやすさ、Ansible クライアント用のエージェントの欠如、およびスキルの多さで人気があります。 経由で接続することで機能します。 SSH そのため、クライアント側に特別なエージェントは必要ありません。また、モジュールをクライアントにプッシュすることにより、モジュールはクライアント側でローカルに実行され、出力が Ansible サーバーにプッシュバックされます。

SSH を使用するため、SSH キーを使用してクライアントに非常に簡単に接続でき、プロセス全体が簡素化されます。ホスト名や IP アドレス、SSH ポートなどのクライアントの詳細は、インベントリ ファイルと呼ばれるファイルに保存されます。インベントリ ファイルを作成して入力すると、Ansible で使用できるようになります。

Ansible を使用する理由

Ansible を使用することの重要な利点/利点をいくつか紹介します。

  • Ansible の最も重要な利点の XNUMX つは、誰でも無料で使用できることです。
  • Ansible をインストールして使用するのに特別なシステム管理者のスキルは必要なく、公式ドキュメントは非常に包括的です。
  • プラグイン、モジュール、インベントリ、プレイブックに関するモジュール性により、Ansible は大規模な環境を調整するための完璧なパートナーとなっています。
  • Ansible は非常に軽量かつ一貫性があり、オペレーティング システムや基盤となるハードウェアに関する制約はありません。
  • また、エージェントレス機能と OpenSSH セキュリティ機能の使用により、非常に安全です。
  • Ansible の導入を促進するもう XNUMX つの利点は、包括的なドキュメントと学びやすい構造と構成によって決まるスムーズな学習曲線です。

Ansibleの歴史

ここでは、Ansible の歴史における重要なランドマークを示します。

  • 2012 年 XNUMX 月に Ansible プロジェクトが開始されました。 これは、Cobbler および Func、Fedora Unified Network Controller の作成者である Michael DeHaan によって最初に開発されました。
  • 当初はAnsibleWorks Incと呼ばれていたAnsibleツールに資金を提供していた会社は、2015年にRedHatに買収され、その後RedHatとともに傘下に移りました。 IBM.
  • 現在、Ansible は Fedora Linux、RHEL、Centos などのディストリビューションに含まれています。 Oracle Linux。

Ansible で使用される重要な用語

  • Ansibleサーバー

    Ansible がインストールされ、すべてのタスクと Playbook が実行されるマシン

  • モジュール

    基本的に、モジュールはクライアント側で実行されるコマンドまたは同様の Ansible コマンドのセットです。

  • 仕事

    タスクは、完了すべき単一の手順で構成されるセクションです

  • 職種

    後でプレイブックで呼び出されるタスクと関連ファイルを整理する方法

  • 事実

    収集ファクト操作でグローバル変数からクライアントシステムから取得した情報

  • 棚卸

    Ansibleクライアントサーバーに関するデータを含むファイル。後の例ではhostsファイルとして定義されています。

  • プレイ

    プレイブックの実行

  • ハンドラ

    ノーティファイアが存在する場合にのみ呼び出されるタスク

  • 通知機能

    出力が変更された場合にハンドラーを呼び出すタスクに属するセクション

  • タグ

    タスクに設定された名前。後で特定のタスクまたはタスクのグループのみを発行するために使用できます。

Linux での Ansible のインストール

選択肢を比較検討し、Ansible を選択することに決めたら、次のステップは Ansible をシステムにインストールすることです。 さまざまなインストール手順を実行します。 Linux 最も人気のあるディストリビューションについては、次の小さなチュートリアルで説明します。

Centos/RedHat システムに Ansible をインストールする

ステップ1) EPEL リポジトリをインストールする

[root@ansible-server ~]# sudo yum install epel-release

ステップ2) ansible パッケージをインストールする

[root@ansible-server ~]# sudo  yum install -y ansible

Centos/RedHat システムに Ansible をインストールする

ansible をインストールする Ubuntu/Debian システム

ステップ1) パッケージのアップデートを実行する

$ sudo apt update

ステップ2) software-properties-common パッケージをインストールする

$ sudo apt install software-properties-common

ステップ3) Ansible個人パッケージアーカイブをインストールする

$ sudo apt-add-repository ppa:ansible/ansible

ステップ4) ansible をインストールする

$ sudo apt update
$ sudo apt install ansible

Ansible のアドホック コマンド

Ansible を使用する最も簡単な方法の XNUMX つは、アドホック コマンドを使用することです。 これらは、XNUMX つのサーバーまたは複数のサーバー上でいくつかのコマンドを発行する場合に使用できます。 アドホック コマンドは将来の使用のために保存されませんが、目的のサーバーと対話するための高速な方法を表します。

この Ansible チュートリアルでは、host1 と host2 を含む単純な XNUMX つのサーバーのホスト ファイルが構成されます。

すべてのホストで ping コマンドを発行することで、Ansible サーバーからホストにアクセスできることを確認できます。

[root@ansible-server test_ansible]# ansible -i hosts all -m ping
host1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Ansible のアドホック コマンド

説明:

  1. コマンドのステータス (この場合は SUCCESS)
  2. コマンドが実行されたホスト
  3. -m パラメーターを介して発行されるコマンド (この場合は ping)
  4. -i パラメータを使用すると、hosts ファイルを指定できます。


必要に応じて、特定のホストでのみ同じコマンドを発行できます。

[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2
host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Ansible のアドホック コマンド

説明:

  1. 制限パラメーターを使用すると、ホストのファイル内の特定のホストに対してのみコマンドを発行できます。
  2. インベントリーファイルで定義されているホストの名前

ファイルを複数の宛先に迅速にコピーする必要がある場合は、SCP を使用する ansible のコピー モジュールを使用できます。 したがって、コマンドとその出力は次のようになります。

[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"
host1 | SUCCESS => {
    "changed": true,
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "dest": "/tmp/testfile",
    "gid": 0,
    "group": "root",
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e",
    "mode": "0644",
    "owner": "root",
    "size": 0,
    "src": "/root/.ansible/tmp/ansible-tmp-1562216392.43-256741011164877/source",
    "state": "file",
    "uid": 0
}
host2 | SUCCESS => {
    "changed": true,
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "dest": "/tmp/testfile",
    "gid": 0,
    "group": "root",
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e",
    "mode": "0644",
    "owner": "root",
    "size": 0,
    "src": "/root/.ansible/tmp/ansible-tmp-1562216392.6-280302911361278/source",
    "state": "file",
    "uid": 0
}

Ansible のアドホック コマンド

説明:

  1. 定義されたコピーモジュール
  2. この場合、モジュールの引数はソースの絶対パスと宛先の絶対パスです。
  3. Ansible コマンド出力には、コピー コマンドの成功と、ファイルの整合性チェックのための sha1 または md5 チェックサム、所有者、サイズ、権限などのメタデータなどのその他の詳細が反映されます。パッケージを複数のサーバーにインストールするのは簡単です。Ansible には、yum、apt、dnf などの使用されるインストーラーと対話するモジュールがいくつかあります。

次の例では、yum モジュールを介して XNUMX つの Centos ホストにパッケージをインストールする方法を示します。

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'
host1 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [


"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.xservers.ro\n * epel: fedora.mirrors.telekom.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: remi.schlundtech.de\n * remi-safe: remi.schlundtech.de\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version                Repository       Size\n================================================================================\nInstalling:\n ncdu            x86_64            1.14-1.el7             epel             51 k\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nInstalled:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}
host2 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.leadhosts.com\n * epel: mirrors.nav.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: mirrors.uni-ruse.bg\n * remi-safe: mirrors.uni-ruse.bg\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version                Repository       Size\n================================================================================\nInstalling:\n ncdu            x86_64            1.14-1.el7             epel             51 k\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nInstalled:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}

Ansible のアドホック コマンド

説明:

  1. この例では Yum モジュールが使用されています
  2. これはモジュール引数を定義します。この場合、パッケージの名前とその状態を選択します。 たとえば、状態が存在しない場合、パッケージが検索され、見つかった場合は削除されます。
  3. 黄色で色付けされている場合は、状態が変更された ansible コマンドの出力が表示されます。これは、この場合、パッケージが見つかってインストールされたことを意味します。
  4. ansible 経由で発行された yum install コマンドのステータス。 この場合、パッケージ ncdu.x86_64 0:1.14-1.el7 がインストールされました。

もちろん、アップデート、インストール、最新バージョン、削除など、すべての yum インストーラー オプションを ansible 経由で使用できます。

以下の例では、同じコマンドを発行して、以前にインストールされた ncdu パッケージを削除しています。

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'
host1 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version               Repository        Size\n================================================================================\nRemoving:\n ncdu            x86_64            1.14-1.el7            @epel             87 k\n\nTransaction Summary\n================================================================================\nRemove  1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nRemoved:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}
host2 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version               Repository        Size\n================================================================================\nRemoving:\n ncdu            x86_64            1.14-1.el7            @epel             87 k\n\nTransaction Summary\n================================================================================\nRemove  1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nRemoved:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}

Ansible のアドホック コマンド

説明:

  1. yum コマンドの出力には、パッケージが削除されたことが示されています。

Ansible がクライアントのサーバーと対話するために使用するもう 1 つの便利で重要な機能は、システムに関するいくつかの事実を収集することです。つまり、システムからハードウェア、ソフトウェア、およびバージョン情報を取得し、各値を後で使用できる変数に保存します。

ansible 経由で変更するシステムに関する詳細情報が必要な場合は、次のコマンドを使用できます。 セットアップ モジュールはシステム変数から事実を収集します。

Ansible のアドホック コマンド

Ansible プレイブック

Ansible プレイブック スクリプトを通じてリモート システムにコマンドを送信する方法です。Ansible プレイブックは、1 つ以上のシステムに対してスクリプトを実行することで、複雑なシステム環境を構成して柔軟性を高めるために使用されます。Ansible プレイブックは、プログラミング言語というよりも、構成言語に近い傾向があります。

Ansible Playbook コマンドは YAML 形式を使用するため、必要な構文はそれほど多くありませんが、インデントを尊重する必要があります。 名前が示すように、プレイブックはプレイのコレクションです。 Playbook を通じて、一部のホストに特定のロールを指定し、他のホストに他のロールを指定できます。 そうすることで、非常に多様なシナリオで複数のサーバーを XNUMX つの Playbook で調整できます。

Ansible プレイブックの例を続ける前にすべての詳細を正確に把握するには、まずタスクを定義する必要があります。これらは、ロールとプレイブックの Ansible モジュールへのインターフェースです。

ここで、以下のような複数のタスクを含む XNUMX つのプレイに XNUMX つのプレイブックを含む例を通して、Ansible プレイブックについて学習しましょう。

---

- hosts: group1
  tasks:
  - name: Install lldpad package
    yum:
      name: lldpad
      state: latest
  - name: check lldpad service status
    service:
      name: lldpad
      state: started

Ansible プレイブック

上記の Ansible Playbook の例では、ホストのファイル内のホストの group1 は、yum モジュールを使用した lldpad パッケージのインストールの対象となっており、その後、主に systemd アンサンブルと対話するために使用されるサービス モジュールを使用して、インストール後に作成されたサービス lldpad が開始されます。

説明:

  1. プレイブックが実行されるホストのグループ
  2. Yum モジュールは、このタスクで lldpad をインストールするために使用されます。
  3. サービス モジュールは、インストール後にサービスが稼働しているかどうかを確認するために使用されます。

各Ansibleプレイブックはインベントリファイルで動作します。インベントリファイルには、次のような詳細をより適切に制御できるようにグループに分けられたサーバーのリストが含まれています。 IPアドレス 各ホストの SSH ポート。

この Ansible プレイブックの例に使用できるインベントリー ファイルは以下のようになります。 group1 と group2 という名前の 1 つのグループがあり、それぞれ host2 と hostXNUMX が含まれます。

[group1]
host1 ansible_host=192.168.100.2 ansible_ssh_port=22
[group2]
host2 ansible_host=192.168.100.3 ansible_ssh_port=22

Ansible プレイブック

説明:

  1. グループ名
  2. ホスト名、IP アドレスおよび SSH ポート。この場合はデフォルトの 22 です。

今回は 1 つのホストに対する XNUMX つのプレイを含む、もう XNUMX つの便利な Ansible プレイブックの例が次のサンプルです。 最初のホスト グループ groupXNUMX では、selinux が有効になります。 有効にすると、ホストの画面にメッセージが表示されます。

XNUMX 番目のホスト グループの場合、httpd パッケージは、ansible_os_family が RedHat で、ansible_system_vendor が HP の場合にのみインストールされます。

Ansible_os_family と ansible_system_vendor は、gather_facts オプションで収集された変数であり、この条件付き例のように使用できます。

---

- hosts: group1
  tasks:
  - name: Enable SELinux
    selinux:
      state: enabled
    when: ansible_os_family == 'Debian'
    register: enable_selinux

  - debug:
      Imsg: "Selinux Enabled. Please restart the server to apply changes."
    when: enable_selinux.changed == true

- hosts: group2
  tasks:
  - name: Install apache
    yum:
      name: httpd
      state: present
    when: ansible_system_vendor == 'HP' and ansible_os_family == 'RedHat'

Ansible プレイブック

説明:

  1. when 句の例。この場合、OS の種類は Debian です。 ansible_os_family 変数は、gather_facts 機能によって収集されます。
  2. タスクの出力は、将来使用できるように、enable_selinux という名前で登録されます。
  3. when 句の別の例。この場合、SELinux が実際に以前に有効になっていた場合は、ホスト ユーザーにメッセージが表示されます。
  4. XNUMX つのルールで構成される when 句の別の例

タスクの他に、ハンドラーと呼ばれる特定のタスクもいくつかあります。 ハンドラーには、プレイブック全体で一意の名前が必要です。 これらは通常のタスクと同じように機能しますが、通知機能を介してハンドラーに通知できます。

Playbook の実行中にハンドラーが通知されない場合、ハンドラーは実行されません。 ただし、複数のタスクがハンドラーに通知する場合、これはすべてのタスクが終了した後に XNUMX 回だけ実行されます。

以下に示す例では、特定のタスクに別のタスクを呼び出す通知セクションがあることがわかります。 最初のタスクの出力が変更されると、ハンドラー タスクが呼び出されます。 最も良い例は、構成ファイルを変更し、その後その特定のサービスを再起動することです。

---

- hosts: group2
  tasks:
  - name: sshd config file modify port
    lineinfile:
     path: /etc/ssh/sshd_config
     regexp: 'Port 28675'
     line: '#Port 22'
    notify:
       - restart sshd
handlers
    - name: restart sshd
      service: sshd
        name: sshd
        state: restarted

この場合、最初のタスクである「sshd config file modify port」が変更されると、つまり、そもそもポートが 28675 でなければ変更され、タスクは同じ名前のハンドラーに実行を通知します。 , sshd サービスが再起動されます。

Ansible プレイブック

説明:

  1. 通知者の例
  2. ハンドラーの例

Ansible の役割

広範なプレイブックを扱う場合、タスクを役割に分割する方が簡単です。 これは、将来ロールを再利用する場合にも役立ちます。 ロールはタスクの集合であり、ある Playbook から別の Playbook に移動でき、独立して実行できますが、Playbook ファイルを通じてのみ実行できます。

ロールは別のディレクトリに保存され、特定のディレクトリ構造を持ちます。

[root@ansible-server test2]# tree
.
`-- role1
    |-- defaults
    |   `-- main.yml
    |-- handlers
    |   `-- main.yml
    |-- meta
    |   `-- main.yml
    |-- README.md
    |-- tasks
    |   `-- main.yml
    |-- tests
    |   |-- inventory
    |   `-- test.yml
    `-- vars
        `-- main.yml

7 directories, 8 files

デフォルト ディレクトリ内の yaml ファイルには、プレイブックとともに使用されるデフォルト変数のリストが含まれています。 handlers ディレクトリは、ハンドラーを保存するために使用されます。 メタディレクトリには、作成者と役割の依存関係に関する情報が含まれている必要があります。 タスク ディレクトリには、ロールのメイン yaml ファイルがあります。

テスト ディレクトリにはサンプル yaml プレイブック ファイルとサンプル インベントリ ファイルが含まれており、主に実際のロールを作成する前のテスト目的で使用されます。

vars ディレクトリには、ロールで使用されるすべての変数が定義される yaml ファイルが含まれています。 ディレクトリ テンプレートとディレクトリ ファイルには、ロール内のタスクで使用されるファイルとテンプレートが含まれている必要があります。

ロールのディレクトリ ツリーを作成するには、最後のパラメータであるロール名を指定して次のコマンドを使用する必要があります。

[root@ansible-server test2]# ansible-galaxy init role1

Ansible はテンプレートともうまく連携します。 テンプレート用の言語としてJinja2を使用しています。

次の例では、基本的な jinja2 テンプレートがどのように見えるかを確認し、それをロールで使用します。

実行時に、サーバーがどのデータセンターに配置されているかに応じて、変数「resolver_ip_addresses」を使用して、それぞれがデータセンターに対応する複数のネームサーバーから選択できます。

{% for resolver in resolver_ip_addresses %}
nameserver {{ resolver }}
{% endfor %}

options timeout:1
options attempts:5
options rotate

この例では、Playbook ディレクトリに、データセンターに応じて異なる値を持つsolver_ip_addresses という名前の変数を含む、いくつかの変数が定義されています。

- name: Set resolver for server
  template:
    src: dns.j2
    dest: /etc/resolv.conf
    group: root
    owner: root
    mode: "0644"
    tag: resolver	

Ansible の役割

説明:

  1. 使用するテンプレートの名前。 テンプレートはロール パスのテンプレート ディレクトリにあります
  2. クライアント側で、テンプレートに置き換えられるファイル名の宛先パス。
  3. 宛先ファイルの権限

役割タスクには、名前が属性付けされたタグ フィールドを持つこともできます。 複数のタスクが同じタグを共有できます。 Ansible Playbook を実行するときにタグも指定できるため、それらのタスクが実行されます。

Ansible のケーススタディ

このセクションでは、XNUMX つの役割を持つ重要な Ansible Playbook のケーススタディを分析します。 この目的は、前に説明したことの実際的な例を示すことです。 この Ansible プレイブック チュートリアルで以前に使用した例の一部が、このプレイブックで適応されて使用されます。

以下は Playbook のディレクトリ構造です。 使用される Yaml ファイルは p4.yml です。

[root@ansible-server test_ansible]# ls -lrth
total 16K
-rw-r--r--. 1 root root   0 Jul  3 10:13 testfile
-rw-r--r--. 1 root root 203 Jul  3 13:30 p1.yml
-rw-r--r--. 1 root root 125 Jul  3 15:00 hosts
-rw-r--r--. 1 root root 488 Jul  3 16:40 p2.yml
-rw-r--r--. 1 root root 188 Jul  4 17:33 p4.yml
drwxr-xr-x. 5 root root  47 Jul  4 17:35 roles
[root@ansible-server test_ansible]# cd roles
[root@ansible-server roles]# ls -lrth
total 12K
drwxr-xr-x. 9 root root 4.0K Jul  4 12:52 httpd
drwxr-xr-x. 9 root root 4.0K Jul  4 13:55 selinux
drwxr-xr-x. 9 root root 4.0K Jul  4 16:54 resolver

Playbook には XNUMX つの役割があります。XNUMX つはリゾルバーと呼ばれるもので、サーバーから /etc/resolv.conf 宛先にファイルをコピーすることでサーバー上に特定のネームサーバーを設定します。 もう XNUMX つは httpd と呼ばれるもので、yum モジュールを使用して httpd パッケージをインストールします。XNUMX つ目は SELinux を有効にして、ログインしているユーザーにシステムを再起動するように通知します。 各ロールは ansible-galaxy コマンドを使用して作成されました。

リゾルバーの役割、main.yml タスク:

Ansible のケーススタディ

Httpd ロール、main.yml タスク:

Ansible のケーススタディ

Selinux ロール、main.yml タスク:

Ansible のケーススタディ

以下は、定義された p4.yml プレイブックです。コマンドラインで特に指定がない場合はすべてのホストで実行され、ポート 22 (SSH) でルート ユーザーとして実行され、ロールを実行する前にファクトを収集し、前述の XNUMX つのロールすべてを実行します。各ロールは、ansible-playbook コマンドラインで –t パラメータを使用してタグを指定することにより、個別に実行できます。

---

- hosts: all
  user: root
  port: 22
  gather_facts: True
  roles:
    - { role: selinux, tags: selinux }
    - { role: httpd, tags: httpd }
    - { role: resolver, tags: resolver }

4 つのホストで pXNUMX.yml プレイブックを実行し、出力を解釈します。 同じコマンドを –check パラメーターを使用して予行演習として実行できます。 パスワード認証を使用する場合は、-k パラメータを使用します。

Ansible のケーススタディ

説明:

  1. p4.yml を実行する Ansible-playbook コマンド
  2. Playbook は SELinux ロールがすでに有効になっているためスキップします。
  3. Ansible は httpd パッケージがすでにインストールされていることが判明したため、ok を返します。
  4. リゾルバーが設定され、ロールリゾルバーのステータスが変更されました。

Ansible コマンドのチートシート

Centos/RHEL システムに EPEL リポジトリをインストールする

[root@ansible-server ~]# sudo yum install epel-release

Ansible パッケージを Centos/RHEL システムにインストールする

[root@ansible-server ~]# sudo  yum install -y ansible

Debian/ でパッケージの更新を実行します。Ubuntu システム

$ sudo apt update

software-properties-common パッケージを Debian/ にインストールします。Ubuntu システム

$ sudo apt install software-properties-common

DebianにAnsible個人パッケージアーカイブをインストールする/Ubuntu システム

$ sudo apt-add-repository ppa:ansible/ansible

Ansible を Debian/ にインストールするUbuntu システム

$ sudo apt update
$ sudo apt install ansible

インベントリ ファイルに定義されている hosts という名前のすべてのサーバーに対して ping コマンドを発行します。

 
[root@ansible-server test_ansible]# ansible -i hosts all -m ping

host2 でのみ ping コマンドを発行します。

[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2

ファイル「testfile」をインベントリ ファイル内のすべてのホストにコピーします。

[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"

すべてのホストに ncdu パッケージをインストールする

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'

すべてのホスト上の ncdu パッケージを削除します

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'

role1 という名前のロールのディレクトリ構造を構築します。

[root@ansible-server test2]# ansible-galaxy init role1

p4.yml プレイブックのドライラン

[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml --check

すべてのホストに対してパスワード認証を使用して p4.yml プレイブックを実行します

[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml -k

製品概要

テクノロジーが急速に変化し続け、同時に信じられないほど急速に成長している世界では、システム管理者と DevOps エンジニアは、日常的なタスクを自動化し、大規模なサーバー プールを調整する方法についてさまざまなアプローチを考える必要があります。

たくさんありますが Ansible の代替 いくつかの違いはあるものの、同じことを行うさまざまな (Chef、Puppet) が存在しますが、Ansible は、そのシンプルさ、セキュリティの向上、そして最も重要なスムーズな学習曲線によって、それらすべてを上回りました。 これらの品質と Ansible の迅速な導入を考慮して、Ansible の操作をよりシームレスに初めて体験できるように、サンプルが満載のチュートリアルを作成しました。

この Ansible の基本チュートリアルでは、Ansible について説明し、その歴史について少しお話ししました。Ansible の長所と、さまざまな規模のインフラストラクチャの自動化とオーケストレーションに Ansible がもたらす利点について説明しました。Ansible で使用される重要な用語を定義し、Ansible プレイブックの構造を定義しました。すべての情報には、詳細な説明と徹底的な例が添えられています。