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

Ansibleとは何ですか?

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

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

SSH を使用するため、SSH キーを使用してクライアントに非常に簡単に接続でき、プロセス全体が簡素化されます。クライアントのtailsホスト名や 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 によって買収されました。 later RedHat とともに、の傘下に移行しました。 IBM.
  • 現在、Ansible は Fedora Linux、RHEL、Centos などのディストリビューションに含まれています。 Oracle Linux。

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

  • Ansibleサーバー

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

  • モジュール

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

  • 仕事

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

  • 職種

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

  • 事実

    Gather-facts 操作を使用してグローバル変数からクライアント システムからフェッチされた情報

  • 棚卸

    Ansible クライアント サーバーに関するデータを含むファイル。で定義 later ホストファイルとしての例

  • プレイ

    プレイブックの実行

  • ハンドラ

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

  • 通知機能

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

  • タグ

    使用可能なタスクに設定された名前 later 特定のタスクまたはタスクのグループだけを発行します。

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 をインストールする

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

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

$ sudo apt update

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

$ sudo apt install software-properties-common

ステップ3) ansible 個人用パッケージをインストールする archive

$ 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. copy コマンドやその他のコマンドの成功を反映する Ansible コマンド出力tails ファイルの整合性チェックのための 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 つの便利で重要な機能は、システムに関する情報を収集することです。したがって、システムからハードウェア、ソフトウェア、およびバージョン情報を取得し、それぞれの値を変数に保存します。 later 中古で。

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

Ansible のアドホック コマンド

Ansible プレイブック

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

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

すべてのデを得るにはtails 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 Playbook はインベントリ ファイルで動作します。インベントリ ファイルには、サーバーの管理を強化するためにグループに分けられたサーバーのリストが含まれています。tails ような 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 ファイルが含まれています。 ディレクトリ テンプレートとディレクトリ ファイルには、ロール内のタスクで使用されるファイルとテンプレートが含まれている必要があります。

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

[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 プレイブックです。他のホストではない場合はすべてのホストで実行されますwise コマンド ラインで指定すると、ポート 22 (SSH) で root ユーザーとして実行され、ロールを実行する前にファクトが収集され、前述の 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

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

$ sudo apt install software-properties-common

ansible 個人用パッケージをインストールする archiDebian/Ubuntu システム上で動作

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

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

$ 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

まとめ

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

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

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