Вопрос или проблема
Я пробую это
- 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 }}"
Шаги, которые вам нужно сделать:
- Замените
your_host_group
на вашу группу или хосты в инвентарном файле. - Убедитесь, что у вас есть доступ к системе с использованием Ansible, и факты будут собраны корректно.
- Запустите playbook с помощью команды:
ansible-playbook path/to/your_playbook.yml -i path/to/your_inventory
- Если весь процесс прошел успешно, вы увидите отладочную информацию о
ansible_kernel
, и последующая командаapt-get install
должна выполниться корректно.
Если у вас все еще возникают проблемы, проверьте следующее:
- Убедитесь, что ваш инвентарный файл указан правильно и что у вас есть доступ к целевым хостам.
- Убедитесь, что версия Ansible позволяет собирать факты. Это можно сделать с помощью команды
ansible --version
. - Если факты по каким-либо причинам все равно не собираются, вы можете попробовать использовать
setup
модуль для явного сбора фактов:
- name: Явный сбор фактов
setup:
Добавьте это перед использованием переменной.
Следуя указанным шагам, вы должны быть в состоянии успешно использовать переменную ansible_kernel
и решить вашу задачу.