ansible переменная как переменная окружения

Вопрос или проблема

Я пробую это

- name: Установить необходимые пакеты
 shell: "apt-get instal linux-headers-{{ ansible_kernel }}"

Однако получаю вместо этого

{"msg": "Задача включает опцию с неопределенной переменной. Ошибка: 'ansible_kernel' не определена\

Я могу увидеть эту переменную с помощью

ansible -i myinventoryfile myhost -m setup | grep kernel

и также

ansible -i myinventoryfile myhost -m shell -a "uname -r"

как я могу это исправить?

Работает для меня.

% cat facts.yml
#!/usr/bin/env ansible-playbook
- name: тест
  hosts: somehost.example.edu
  tasks:
  - debug: var=ansible_kernel

  - shell: "echo {{ ansible_kernel }} > /tmp/thisisverybaddonotuse"
% ./facts.yml

PLAY [тест] ***

TASK [Сбор фактов] ***
ok: [somehost.example.edu]

TASK [debug] ***
ok: [somehost.example.edu] => {
    "ansible_kernel": "3.10.0-693.21.1.el7.x86_64"
}

TASK [command] ***
changed: [somehost.example.edu]

PLAY RECAP ***
somehost.example.edu  : ok=3    changed=1    unreachable=0    failed=0

% ssh somehost.example.edu "cat /tmp/thisisverybaddonotuse"
3.10.0-693.21.1.el7.x86_64

Возможно, вы не собираете факты или делаете что-то другое, что неясно из ограниченной информации в вашем посте.

Ответ или решение

Во-первых, проблема, с которой вы столкнулись, скорее всего связана с тем, что Ansible не собирает факты на вашей целевой системе или по другой причине не может получить доступ к переменной ansible_kernel.

При использовании Ansible, факты — это встроенные переменные, которые собираются автоматически и содержат информацию о целевой системе. Переменная ansible_kernel должна быть доступна после выполнения шага сбора фактов. Если факты не собираются, вы можете столкнуться с ошибкой "переменная не определена".

Чтобы решить эту проблему, убедитесь, что включен сбор фактов в вашей задаче. Вот пример Ansible playbook, который собирает факты и использует переменную ansible_kernel в команде shell:

---
- name: Установка необходимых пакетов
  hosts: your_host_group
  gather_facts: yes  # Убедитесь, что факты собираются
  tasks:
    - name: Отладка: показать переменную ansible_kernel
      debug:
        var: ansible_kernel

    - name: Установка linux-headers
      shell: "apt-get install linux-headers-{{ ansible_kernel }}"

Шаги, которые вам нужно сделать:

  1. Замените your_host_group на вашу группу или хосты в инвентарном файле.
  2. Убедитесь, что у вас есть доступ к системе с использованием Ansible, и факты будут собраны корректно.
  3. Запустите playbook с помощью команды:
    ansible-playbook path/to/your_playbook.yml -i path/to/your_inventory
  4. Если весь процесс прошел успешно, вы увидите отладочную информацию о ansible_kernel, и последующая команда apt-get install должна выполниться корректно.

Если у вас все еще возникают проблемы, проверьте следующее:

  • Убедитесь, что ваш инвентарный файл указан правильно и что у вас есть доступ к целевым хостам.
  • Убедитесь, что версия Ansible позволяет собирать факты. Это можно сделать с помощью команды ansible --version.
  • Если факты по каким-либо причинам все равно не собираются, вы можете попробовать использовать setup модуль для явного сбора фактов:
- name: Явный сбор фактов
  setup:

Добавьте это перед использованием переменной.

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

Оцените материал
Добавить комментарий

Капча загружается...