58

Ansible ファクトを変数として使用する方法を学習しようとしていますが、わかりません。走ると…

$ ansible localhost -m setup

...システムのすべての事実を一覧表示します。ansible_facts.ansible_date_time.date を試して使用するためにランダムに選択しましたが、使用方法がわかりません。走ると…

$ ansible localhost -m setup -a "filter=ansible_date_time"
localhost | success >> {
    "ansible_facts": {
        "ansible_date_time": {
            "date": "2015-07-09",
            "day": "09",
            "epoch": "1436460014",
            "hour": "10",
            "iso8601": "2015-07-09T16:40:14Z",
            "iso8601_micro": "2015-07-09T16:40:14.795637Z",
            "minute": "40",
            "month": "07",
            "second": "14",
            "time": "10:40:14",
            "tz": "MDT",
            "tz_offset": "-0600",
            "weekday": "Thursday",
            "year": "2015"
        }
    },
    "changed": false
}

だから、それは明らかにそこにあります。でも走ると…

$ ansible localhost -a "echo {{ ansible_facts.ansible_date_time.date }}"
localhost | FAILED => One or more undefined variables: 'ansible_facts' is undefined

$ ansible localhost -a "echo {{ ansible_date_time.date }}"
localhost | FAILED => One or more undefined variables: 'ansible_date_time' is undefined

$ ansible localhost -a "echo {{ date }}"
localhost | FAILED => One or more undefined variables: 'date' is undefined

ここに来ていないのは何ですか?ファクトを変数として使用するにはどうすればよいですか?

4

5 に答える 5

95

このコマンドansible localhost -m setupは基本的に「localhost に対してセットアップ モジュールを実行する」ことを示しており、セットアップ モジュールは出力に表示される事実を収集します。

コマンドを実行するとecho、セットアップ モジュールが実行されていないため、これらの事実は存在しません。このようなものをテストするためのより良い方法は、 ansible-playbook を使用して、次のような Playbook を実行することです。

- hosts: localhost
  tasks:
      - debug: var=ansible_date_time

      - debug: msg="the current date is {{ ansible_date_time.date }}"

これは Playbook として実行されるため、タスクが実行される前に localhost のファクトが収集されます。上記のプレイブックの出力は次のようになります。

PLAY [localhost] **************************************************

GATHERING FACTS ***************************************************************
ok: [localhost]

TASK: [debug var=ansible_date_time] *******************************************
ok: [localhost] => {
    "ansible_date_time": {
        "date": "2015-07-09",
        "day": "09",
        "epoch": "1436461166",
        "hour": "16",
        "iso8601": "2015-07-09T16:59:26Z",
        "iso8601_micro": "2015-07-09T16:59:26.896629Z",
        "minute": "59",
        "month": "07",
        "second": "26",
        "time": "16:59:26",
        "tz": "UTC",
        "tz_offset": "+0000",
        "weekday": "Thursday",
        "year": "2015"
    }
}

TASK: [debug msg="the current date is {{ ansible_date_time.date }}"] **********
ok: [localhost] => {
    "msg": "the current date is 2015-07-09"
}

PLAY RECAP ********************************************************************
localhost      : ok=3    changed=0    unreachable=0    failed=0
于 2015-07-09T17:02:03.223 に答える