@silverjoe

Ansible и `uname -r` или $(uname -r) отрабатывает на локальном хосте. Почему?

Столкнулся с таким багом (или фичей?):
при попытке выполнить команду
ansible group01 -m apt -s -a "name=linux-headers-`uname -r` state=present"

или
ansible group01 -m apt -s -a "name=linux-headers-$(uname -r) state=present"


Получаю в ответ:
hostXXX | FAILED >> {
    "failed": true,
    "msg": "No package matching 'linux-headers-16.1.0' is available"
}


Выполняю из под Mac OS X.
Версия ansible 1.9.3

на удаленном хосте uname -r показывает:
4.2.0-42-generic


если в терминале выполняю uname -r
16.1.0


Почему так? И как это исправить?
  • Вопрос задан
  • 766 просмотров
Решения вопроса 1
@silverjoe Автор вопроса
Было обсуждение, но кто-то удалил, там предложили решение:
Melkij оставил комментарий к ответу на вопрос Ansible и `uname -r` или $(uname -r) отрабатывает на локальном хосте. Почему?
емнип, модуль apt вообще не вызывает bash и подстановка через обратные кавычки работать не будет. Можно дёрнуть через raw команду (command тоже вряд ли сработает, хотя можно попробовать). Можно сделать нормальный плейбук: глянуть в facts, может версия ядра уже собирается и так. Через command дёрнуть uname и register в переменную. Затем дёрнуть apt с конкатенацией имени пакета с этой переменной.


В итоге получилось сделать так:
ansible a-install -m raw -s -a "apt install -y linux-headers-$(uname\ -r)"
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Mystray
@Mystray
NOC
'uname=linux-headers-`uname -r` state=present'
в 'одинарные' кавычки берите, или экранируйте \`
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы