Подтвердить что ты не робот

Необязательная переменная даты

Я пытаюсь научиться использовать 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

Чего я не получу здесь? Как использовать факты как переменные?

4b9b3361

Ответ 1

Команда ansible localhost -m setup в основном говорит: "Запустите модуль установки с локальным хостом", а модуль настройки собирает факты, которые вы видите на выходе.

При запуске команды echo эти факты не существуют, поскольку модуль установки не был запущен. Лучшим способом тестирования таких вещей было бы использование загрузочной книги для воспроизведения пьесы, которая выглядит примерно так:

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

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

Потому что это работает как информация о файлах для воспроизведения, которые собираются перед локальными хостами. Вывод этой пьесы будет примерно таким:

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

Ответ 2

Модуль поиска ansible прекрасно работает для меня. Yml это:

- hosts: test
  vars:
    time: "{{ lookup('pipe', 'date -d \"1 day ago\" +\"%Y%m%d\"') }}"

Вы можете заменить любую команду датой, чтобы получить результат команды.

Ответ 3

Обратите внимание, что команда ansible не собирает факты, а команда ansible-playbook делает. При запуске ansible -m setup в модуле настройки выполняется сбор фактов, поэтому вы получаете факты, но запуск ansible -m command не выполняется. Поэтому факты недоступны. Вот почему другие ответы включают файлы YAML в Playbook и показывают, что поиск работает.

Ответ 4

Опция filter фильтрует только подраздел первого уровня ниже ansible_facts

Ответ 5

  • hosts: localhost vars: plan_date: 2018-02-10 test_time: "{{'date +'% d-% m-% Y '-d" {{plan_date}} "}}" задачи:
    • debug: var = test_time

получить ошибку, когда я заменил переменную дату здесь.