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

Ansibleプレイブックの脱構築

この記事では、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のドキュメントを参照してください。


Linux
  1. AnsiblePlaybookの作成方法

  2. Ansibleプレイブックを使用してワークステーションとサーバーの更新を管理する

  3. Ansibleプレイブックを使用してChronyデーモンを構成します

  1. 追加の変数をAnsibleプレイブックに渡す方法

  2. Ansibleプレイブックを使用してソフトウェアパッケージをインストールする方法

  3. リモートホストの OS バージョンを取得するために Ansible プレイブックを作成する方法

  1. Ansible Playbookドライラン:Playbookをチェックモードで実行する

  2. Ansible Playbook:Playbookを作成および構成する方法

  3. Ansible Playbookでタグを使用する方法(例)