この記事では、Ansibleとは何か、およびその使用方法の非常に広範な概要から始めて、Ansibleプレイブックのさまざまな部分について説明します。 Ansibleは、読みやすいYAML構文を使用して、タスクを自動化できるプレイブックを作成する方法です。これらのプレイブックは、非常に単純なものから非常に複雑なものまでさまざまであり、1つのプレイブックを別のプレイブックに埋め込むこともできます。
ハンドブックを使用したhttpdのインストール
基本的な知識が得られたので、 httpdをインストールする基本的なプレイブックを見てみましょう。 パッケージ。 2つのホストが指定されたインベントリファイルがあり、それらを webに配置しました グループ:
[root@ansible test]# cat inventory
[web]
ansibleclient.usersys.redhat.com
ansibleclient2.usersys.redhat.com
実際のプレイブックを見て、何が含まれているかを見てみましょう。
[root@ansible test]# cat httpd.yml
---
- name: this playbook will install httpd
hosts: web
tasks:
- name: this is the task to install httpd
yum:
name: httpd
state: latest
これを分解すると、プレイブックの最初の行が---
であることがわかります。 。これにより、それがプレイブックの始まりであることを知ることができます。次に、劇の名前を付けました。これは、1回のプレイのみの単純なプレイブックですが、より複雑なプレイブックには複数のプレイを含めることができます。次に、ターゲットにするホストを指定します。この場合、私はウェブを選択しています グループですが、 ansibleclient.usersys.redhat.comのいずれかを指定できます。 またはansibleclient2.usersys.redhat.com 代わりに、両方のシステムをターゲットにしたくない場合。次の行は、実際の作業を行うタスクに取り掛かることをAnsibleに通知します。この場合、私のプレイブックには1つのタスクしかありませんが、必要に応じて複数のタスクを実行できます。ここでは、 httpdをインストールすることを指定します パッケージ。次の行は、 yumを使用することを示しています モジュール。次に、パッケージの名前 httpdを伝えます。 、最新バージョンをインストールしたいのですが。
[読者も気に入っています:Ansibleを使い始める]
httpd.yml
を実行すると プレイブックを2回、ターミナルで入手します:
[root@ansible test]# ansible-playbook httpd.yml
PLAY [this playbook will install httpd] ************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]
TASK [this is the task to install httpd] ***********************************************************************************************************
changed: [ansibleclient2.usersys.redhat.com]
changed: [ansibleclient.usersys.redhat.com]
PLAY RECAP *****************************************************************************************************************************************
ansibleclient.usersys.redhat.com : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ansibleclient2.usersys.redhat.com : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@ansible test]# ansible-playbook httpd.yml
PLAY [this playbook will install httpd] ************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]
TASK [this is the task to install httpd] ***********************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]
PLAY RECAP *****************************************************************************************************************************************
ansibleclient.usersys.redhat.com : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ansibleclient2.usersys.redhat.com : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@ansible test]#
どちらの場合も、 ok =2を受け取ったことに注意してください 、しかし、プレイブックの2回目の実行では、何も変更されていません。 httpdの最新バージョン その時点ですでにインストールされています。
プレイブックで使用できるさまざまなモジュールに関する情報を取得するには、ansible-doc
を使用できます。 指図。例:
[root@ansible test]# ansible-doc yum
> YUM (/usr/lib/python3.6/site-packages/ansible/modules/packaging/os/yum.py)
Installs, upgrade, downgrades, removes, and lists packages and groups with the `yum' package manager. This module only works on Python 2. If you require Python 3 support, see the [dnf] module.
* This module is maintained by The Ansible Core Team
* note: This module has a corresponding action plugin.
< output truncated >
httpdをインストールするプレイブックがあると便利です 、ただし、柔軟性を高めるために、パッケージを httpd としてハードコーディングする代わりに、変数を使用できます。 。そのためには、次のようなプレイブックを使用できます。
[root@ansible test]# cat httpd.yml
---
- name: this playbook will install {{ myrpm }}
hosts: web
vars:
myrpm: httpd
tasks:
- name: this is the task to install {{ myrpm }}
yum:
name: "{{ myrpm }}"
state: latest
ここで、「vars」というセクションを追加し、変数 myrpmを宣言したことがわかります。 httpdの値で 。その後、その myrpmを使用できます プレイブックの変数を調整し、インストールしたいものに合わせて調整します。また、変数を使用してインストールするRPMを指定したので、-e
を使用してコマンドラインで変数を指定することにより、プレイブックに書き込んだ内容を上書きできます。 :
[root@ansible test]# cat httpd.yml
---
- name: this playbook will install {{ myrpm }}
hosts: web
vars:
myrpm: httpd
tasks:
- name: this is the task to install {{ myrpm }}
yum:
name: "{{ myrpm }}"
state: latest
[root@ansible test]# ansible-playbook httpd.yml -e "myrpm=at"
PLAY [this playbook will install at] ***************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]
TASK [this is the task to install at] **************************************************************************************************************
changed: [ansibleclient2.usersys.redhat.com]
changed: [ansibleclient.usersys.redhat.com]
PLAY RECAP *****************************************************************************************************************************************
ansibleclient.usersys.redhat.com : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ansibleclient2.usersys.redhat.com : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@ansible test]#
タスクをより動的にする別の方法は、ループを使用することです。 。このスニペットでは、私が rpmを宣言したことがわかります。 mailxを持つリストとして および後置 。それらを使用するには、loop
を使用します 私の仕事では:
vars:
rpms:
- mailx
- postfix
tasks:
- name: this will install the rpms
yum:
name: "{{ item }}"
state: installed
loop: "{{ rpms }}"
これらの演劇が実行されると、ホストに関する事実が収集されることに気付いたかもしれません:
TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]
これらの事実は、プレイを実行するときに変数として使用できます。たとえば、motd.yml
を作成できます。 次のようなコンテンツを設定するファイル:
“This is the system {{ ansible_facts['fqdn'] }}.
This is a {{ ansible_facts['distribution'] }} version {{ ansible_facts['distribution_version'] }} system.”
そのプレイブックを実行するシステムでは、これらの変数を手動で定義しなくても、正しい完全修飾ドメイン名(FQDN)、オペレーティングシステムの配布、および配布バージョンが設定されます。
[Ansibleについてもっと知りたいですか? RedHatから無料の技術概要コースを受講してください。 Ansible Essentials:自動化の技術概要のシンプルさ。 ]
まとめ
これは、Ansibleプレイブックの外観、さまざまな部分の機能、およびモジュールに関する詳細情報を取得する方法についての簡単な紹介でした。詳細については、Ansibleのドキュメントを参照してください。