Playbook не может прочитать local_facts, когда файлы фактов созданы в той же playbook - PullRequest
0 голосов
/ 02 октября 2019

У меня есть простая книга игр, в которой я пытаюсь отправить файлы local_fact на удаленные хосты, а затем выполняю задачи на основе сравнения локальных фактов. Однако файлы фактов создаются на удаленном хосте, как и ожидалось, но не читаются

Я думал, что должна быть задержка между созданием файла и чтением, поэтому я жду, чтобы убедиться, что файл создан до того, как он будет прочитан

`- hosts: "{{ target }}"
   vars:
     abc:  "10"
     xyz:  "11"

  tasks:

- name: write custom fact
  copy:
    dest: /etc/ansible/facts.d/somefact_b.fact
    owner: root
    group: root
    mode: 0644
    content: |
      {'some_var1': {{ abc|int }}}

- name: write custom fact
  copy:
    dest: /etc/ansible/facts.d/somefact_a.fact
    owner: root
    group: root
    mode: 0644
    content: |
     {'some_var2': {{ xyz|int }}}

- wait_for:
    path: /etc/ansible/facts.d/somefact_b.fact

- wait_for:
    path: /etc/ansible/facts.d/somefact_a.fact

- debug: var=ansible_local.somefact_a.some_var1

- debug: var=ansible_local.somefact_b.some_var2

- debug:
    msg: "Everything Looks Good"
  when: ansible_local.somefact_a.some_var1 != ansible_local.somefact_b.some_var2`

1 Ответ

0 голосов
/ 02 октября 2019

Q: "Не читается в первый раз, если одна и та же книга воспроизведения перезапускается, она отлично работает."

A: Начать новое воспроизведение внутрита же самая книга воспроизведения.

- hosts: "{{ target }}"
  vars:
    abc:  "10"
    xyz:  "11"
  tasks:
    - name: write custom fact
      copy:
        ...

- hosts: "{{ target }}"
  tasks:
    - debug: var=ansible_local.somefact_a.some_var1
    - debug: var=ansible_local.somefact_b.some_var2
      ...

Например, книга воспроизведения ниже

- hosts: test_01
  tasks:
    - copy:
        dest: /etc/ansible/facts.d/somefact_a.fact
        content: |
          {"some_var1": 10}

- hosts: test_01
  tasks:
    - debug:
        var: ansible_local.somefact_a.some_var1

дает

ok: [test_01] => {
    "ansible_local.somefact_a.some_var1": "10"
}

Примечания

1) настройка необходима для чтения переменных

$ ansible -i hosts test_01 -m setup -a "filter=ansible_local"
test_01 | SUCCESS => {
    "ansible_facts": {
        "ansible_local": {
            "somefact_a": {
                "some_var1": 10
            }
        }
    }, 
    "changed": false
}

2) Без настройка переменные недоступны

$ ansible -i hosts test_01 -m debug -a "var=ansible_local"
test_01 | SUCCESS => {
    "ansible_local": "VARIABLE IS NOT DEFINED!"
}

3) Тот же отрицательныйрезультат может быть достигнут с gather_facts: false

- hosts: test_01
  gather_facts: false
  tasks:
    - debug:
        var: ansible_local.somefact_a.some_var1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...