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

Ansibleの事実の紹介

Ansible事実 ターゲットノード(構成するホストノード)について収集され、コントローラーノードに返されるデータです。 AnsibleファクトはJSON形式で保存され、統計に基づいてタスクに関する重要な決定を行うために使用されます。事実はansible_factsにあります 変数。AnsibleEngineによって管理されます。 リアルタイムデータに従ってホストと同期する際には、Ansibleファクトが主要な役割を果たします。 。

[次のこともお勧めします:AnsibleTowerの紹介]

Ansibleファクトとは正確には何であり、どのように使用されますか?

Ansibleファクトは、接続するホスト固有のシステムデータとプロパティです。事実は、IPアドレス、BIOS情報、システムのソフトウェア情報、さらにはハードウェア情報である可能性があります。 Ansibleファクトは、管理者がシステムの状態に関する情報を持たずに直接アクションを実行するのではなく、現在の状態に基づいてホストを管理するのに役立ちます。

シナリオは次のとおりです。すべてのLinuxホストにApacheウェブサーバーをインストールする必要があります。 Red Hat Enterprise Linux(RHEL)ベースのホストがRed Hat Package Manager(RPM)およびyum/dnfと連携することをご存知でしょう。 。他のLinuxディストリビューションは、独自のパッケージマネージャーを使用しているため、変更を加えたり、それらの違いを参照したりせずに、異なるシステムで同じタスクを実行することはできません。パッケージ名もディストリビューションによって異なります。たとえば、RHELシステムでは、Apache Webサーバーパッケージはhttpdですが、他のディストリビューションではapache2という名前です。

この問題を実証するためのAnsibleプレイブックは次のとおりです。

- hosts: all
  tasks:
  - package:
      name: "httpd"
      state: present
    when ansible_facts["os_name"] == "RedHat"
  - package:
      name: "apache2"
      state: present
    when ansible_facts["os_name"] == "Ubuntu"

ここで、スクリプトはAnsibleファクトを使用してシステムに関する情報を収集し、それに応じて操作を実行します。 RHELシステムにインストールすると、Ubuntuベースのパッケージが自動的にスキップされます。その逆も同様です。同様に、システムに利用可能なリソースが最小限の場合は、Ansibleファクトを使用して操作を実行できます。

つまり、システム管理者はAnsibleファクトを使用して、タスクを実行するタイミングと実行しないタイミングのパラメーターを指定することで、Ansibleをよりスマートにすることができます。

事実へのアクセス

Ansibleファクトはsetupを使用します プレイブックを実行する前に毎回事実を収集するためのモジュール。

Ansibleアドホックコマンドの使用

1.アドホックコマンドを使用してAnsibleファクトにアクセスする

setup モジュールは、リモートホストからコントローラーノードにすべての詳細をフェッチし、それらを画面に直接ダンプして、事実をユーザーに表示します。

ansible all -m setup

2.Ansibleファクトから特定の値を除外する

ここでは、setup モジュールは、システムに関する事実を取得するために使用され、さらに、フィルターを使用します Ansibleファクトからの値を表示するための引数。

ansible all -m setup -a "filter=ansible_cmdline"

:Ansibleファクトは、プレイブックを操作する場合にのみ取得されます。アドホックコマンドを使用してAnsibleファクトにアクセスするには、setupを使用します モジュール。

Ansibleプレイブックの使用

AnsibleプレイブックのAnsibleファクトから変数にアクセスするには、 ansibleを使用せずに実際の名前を使用する必要があります キーワード。

ansible_facts["ansible_system"]❌

ansible_facts["system"]✔️

gather_facts Ansibleプレイブックのモジュールはsetupを実行します デフォルトでは、各プレイブックの冒頭にモジュールがあり、リモートホストに関する事実を収集します。

3.Ansibleプレイブックを使用してファクトにアクセスする

Ansibleファクトを取得し、プレイブックを使用して表示します。

    - hosts: all
      tasks:
      - debug:
          var: ansible_facts

4.Ansibleプレイブックを使用して特定の事実にアクセスする

Ansibleファクトを取得し、フィルタリングし、プレイブックを使用して表示します。

    - hosts: all
      tasks:
      - debug:
          var: ansible_facts["cmdline"]

Ansibleファクトとデータ型

AnsibleファクトはJSON形式で保存され、次の3つの主要なカテゴリに分類できます。

リスト :アイテムのリストを保存し、保存された情報は角かっこで囲まれています [] 。これらは主に、複数の値を持つ可能性のあるファクトです(例:system_capablities) 。リストには、角かっこを使用してインデックスを指定してアクセスします。

    ansible_facts["all_ipv6_addresses"][1]
    ansible_facts["all_ipv6_addresses"][2]

辞書 :データをキーと値のペアのコレクションとして格納し、情報を中括弧で囲んで格納します {} 。これらは主に、内部にサブファクトがあるファクトです(例:memory_mb) 。辞書にはドット演算子を使用してアクセスします。

    ansible_facts.memory_mb.real

安全でないテキスト :このタイプの変数にはサブパートがなく、データを直接保存します(例:machine) 。 Ansible Unsafe Textには、ファクト名を使用して直接アクセスできます。

    ansible_facts["machine"]

type_debugを使用します フィルタして、Ansibleファクトのデータ型をチェックします。

- hosts: all
  tasks:
  - debug:
      var: ansible_facts["all_ipv6_addresses"]|type_debug
  - debug:
      var: ansible_facts["memory_mb"]|type_debug
  - debug:
      var: ansible_facts["machine"]|type_debug

type_debug filterは、ファクトの値を出力せずに、指定されたファクトのデータ型を要求します。

[システム自動化についてもっと知りたいですか? RedHatの無料の本であるTheAutomatedEnterpriseを始めましょう。 ]

まとめ

Ansibleファクトは、構成するシステムに関するデータです。これらの事実は、タスクをいつ処理するかについての条件を提供することにより、Ansibleシステムをインテリジェントにします。 Ansibleファクトを指定または使用せずに処理することもできますが、スクリプトが失敗したり、変更することを意図していないファイルの一部が変更されたりする可能性があるため、システム管理者としての仕事はより忙しくなります。

Ansibleの事実の詳細については、公式ドキュメントを参照してください。


Linux
  1. GNUAutotoolsの紹介

  2. diffコマンドの概要

  3. Dockerの概要

  1. viエディターの紹介

  2. RHCE Ansibleシリーズ#4:Ansible変数、ファクト、レジスタ

  3. Plesk:はじめに

  1. Ansibleプレイブックの脱構築

  2. AnsibleのYAMLを理解する

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