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

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

管理対象システムには常に多くの違いがあります。このため、Ansible変数の操作方法を学ぶ必要があります。

このチュートリアルでは、変数Ansibleを定義および参照する方法を学習します。また、Ansibleファクトを使用して管理対象ノードの情報を取得する方法についても学習します。

さらに、レジスタを使用してタスク出力をキャプチャする方法も学習します。

ここが初めての場合は、このシリーズの前の章をご覧ください:

  • Ansible RHCE#1:導入とインストール
  • Ansible RHCE#1:アドホックコマンドの実行
  • Ansible RHCE#1:プレイブックを理解する

パート1:Ansibleでの変数の操作

まず変数から始めましょう。これはすべてYMLファイルに書き込まれることに注意してください。

変数の定義と参照

varsを使用できます プレイブック内で直接変数を定義するキーワード。

たとえば、 fav_colorを定義できます 変数を変更し、その値を次のように黄色に設定します。

---
- name: Working with variables
  hosts: all
  vars:
    fav_color: yellow

では、 fav_color をどのように使用(参照)しますか? 変数? Ansibleは、Jinja2テンプレートシステムを使用して変数を処理します。このシリーズではJinja2について説明する専用のチュートリアルがありますが、今のところは非常に基本的なことを知っている必要があります。

fav_colorの値を取得するには 変数;次のように、中かっこで囲む必要があります。

My favorite color is {{ fav_color }}

変数が行の最初の要素(または唯一の要素)である場合は、次のように引用符を使用する必要があることに注意してください。

"{{ fav_color }} is my favorite color."

それでは、 variables-playbook.ymlという名前のプレイブックを作成しましょう。 これをすべてまとめます:

[[email protected] plays]$ cat variables-playbook.yml 
---
- name: Working with variables
  hosts: node1
  vars:
    fav_color: yellow
  tasks:
    - name: Show me fav_color value
      debug:
        msg: My favorite color is {{ fav_color }}.

デバッグを使用しました モジュールとmsg fav_colorの値を出力するモジュールオプション 変数。

プレイブックを実行すると、次のようにお気に入りの色が表示されます。

[[email protected] plays]$ ansible-playbook variables-playbook.yml 

PLAY [Working with variables] **************************************************

TASK [Gathering Facts] *********************************************************
ok: [node1]

TASK [Show me fav_color value] *************************************************
ok: [node1] => {
    "msg": "My favorite color is yellow."
}

PLAY RECAP *********************************************************************
node1                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
リストと辞書の作成

リストとディクショナリを使用して、複数値の変数を定義することもできます。たとえば、 port_numsという名前のリストを定義できます。 値を次のように設定します:

  vars:
    port_nums: [21,22,23,25,80,443]

次の方法を使用してport_numsを定義することもできます。 これは同等です:

vars:
    port_nums:
      - 21
      - 22
      - 23
      - 25
      - 80
      - 443

port_numsのすべての値を出力できます 次のように:

All the ports {{ port_nums }}

特定のリスト要素にアクセスすることもできます:

First port is {{ port_nums[0] }}

リスト要素にアクセスするためにインデックス(位置)を使用していることに注意してください。

usersという名前の辞書を定義することもできます 次のように:

vars:
    users:
      bob:
        username: bob
        uid: 1122
        shell: /bin/bash
      lisa:
        username: lisa
        uid: 2233
        shell: /bin/sh

辞書要素にアクセスするために使用できる2つの異なる方法があります:

  • dict_name ['key']-> users ['bob'] ['shell']
  • dict_name.key-> users.bob.shell

キーを使用して辞書要素にアクセスしていることに注意してください。

これで、変数-playbook.ymlを編集できます 動作中のリストと辞書を表示するためのプレイブック:

[[email protected] plays]$ cat variables-playbook.yml 
---
- name: Working with variables
  hosts: node1
  vars:
    port_nums: [21,22,23,25,80,443]
 
    users: 
      bob:
        username: bob
        uid: 1122
        shell: /bin/bash
      lisa:
        username: lisa
        uid: 2233
        shell: /bin/sh
  tasks:
    - name: Show 2nd item in port_nums
      debug:
        msg: SSH port is {{ port_nums[1] }}

    - name: Show the uid of bob
      debug:
        msg: UID of bob is {{ users.bob.uid }}

これで、プレイブックを実行して、 port_numsの2番目の要素を表示できます。 ボブのuidを表示します:

[[email protected] plays]$ ansible-playbook variables-playbook.yml 

PLAY [Working with variables] **************************************************

TASK [Show 2nd item in port_nums] **********************************************
ok: [node1] => {
    "msg": "SSH port is 22"
}

TASK [Show the uid of bob] *****************************************************
ok: [node1] => {
    "msg": "UID of bob is 1122"
}
外部変数を含める

プレイブックにタスクをインポート(または含める)できるのと同じように。変数でも同じことができます。つまり、プレイブックでは、外部ファイルで定義された変数を含めることができます。

実例を示すために、 myvars.ymlという名前のファイルを作成しましょう。 port_numsが含まれています リストとユーザー 辞書:

[[email protected] plays]$ cat myvars.yml 
---
port_nums: [21,22,23,25,80,443]

users:
  bob:
    username: bob
    uid: 1122
    shell: /bin/bash
  lisa:
    username: lisa
    uid: 2233
    shell: /bin/sh

全文を読む

記事の残りの部分は、LHBメンバーのみが利用できます。今すぐ無料でサインアップして、この記事の残りの部分と、すべてのメンバー限定の投稿にアクセスできます。また、隔週で開催されるLinuxニュースレターを購読することもできます。

購読すでにアカウントをお持ちですか?サインイン
Linux
  1. 自動化のためにAnsibleとanacronを使用する方法

  2. LinuxにAnsibleをインストールしてテストする方法

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

  1. RHCE Ansibleシリーズ#8:AnsibleVaultを使用したコンテンツの暗号化

  2. RHCE Ansibleシリーズ#7:Jinja2テンプレート

  3. RHCE Ansibleシリーズ#6:Ansibleでの意思決定

  1. RHCE Ansibleシリーズ#5:Ansibleループ

  2. RHCE Ansibleシリーズ#11:Ansibleを使用したシステムの管理

  3. RHCE Ansibleシリーズ#10:RHELシステムの役割