#ansible
Вопрос:
В соответствии с документацией, когда я выполняю асинхронную специальную команду, я должен получить идентификатор задания, чтобы позже проверить состояние. Этого не может быть:
$ ansible all -a "sleep 60" -P 0 -B 86400
node1 | SUCCESS | rc=-1 >>
node2 | SUCCESS | rc=-1 >>
node0 | SUCCESS | rc=-1 >>
node3 | SUCCESS | rc=-1 >>
$
sleep
Команда выполняется на всех узлах, поэтому задача выполняется правильно:
$ ssh node2 ps aux | grep sleep
$ ansible node2 --user ${USER} --background 3600 --poll 0 --args "/bin/sleep 10s"
node2 | SUCCESS | rc=-1 >>
$ ssh node2 ps aux | grep sleep
user 7232 0.0 0.0 7468 744 ? S 13:54 0:00 /bin/sleep 10s
$
Но у меня нет возможности проверить статус async_status
работы, так как я не знаю идентификатор работы. Есть ли способ перечислить выполняемые в настоящее время асинхронные задания? Или каким-то другим способом получить удостоверение о работе?
Ubuntu 18.04.1, ansible 2.5.1, python 2.7.17.
Комментарии:
1. job_id имеет значение только в контексте сборника, поскольку специальный режим (запуск
ansible
сценария) не порождает фоновые процессы, которые переживают самуansible
команду, и, следовательно, нет задания с идентификатором, который можно было бы проверить позже2. Если вы используете эту
-B
опцию, то процесс действительно переживетansible
команду. В документации, на которую я ссылался, есть раздел «Асинхронные специальные задачи», в котором говорится, что для проверки статуса задания необходимо использовать идентификатор задания.3. После вашего обновления мне интересно, подключаетесь ли вы через
ssh
целевой хост и выполняете ли командуansible
там, подключаясь к себе? Каким будет результатansible node2 --user ${USER} --module-name shell --args "ps aux | grep sleep"
?4. Да, это отлично работает:
$ ansible node2 --user ${USER} --module-name shell --args echo test; echo rc=$?"
выводnode2 | SUCCESS | rc=0 >> test rc=0
(новые строки удалены).5. Не уверен, было ли это вашим намерением, но
exit -1
возвращает ошибку, которую ansible распознает правильно:ansible node2 --user ${USER} --module-name shell --args "echo 'test '; exit -1;"
выводитnode2 | FAILED | rc=2 >> test /bin/sh: 1: exit: Illegal number: -1non-zero return code
Ответ №1:
В соответствии с вашими выводами код возврата rc=-1
и команда sleep
только без полного пути.
В системе RHEL7.9.9 с Ansible 2.9.25 и Python 2.7.5 вывод асинхронной специальной задачи для пользователя выглядит следующим образом
ansible test --user ${USER} --ask-pass --background 3600 --poll 0 --args "/usr/bin/sleep 1m"
SSH password:
test1.example.com | CHANGED => {
"ansible_job_id": "211363790122.167971",
"changed": true,
"finished": 0,
"results_file": "/home/test/.ansible_async/211363790122.167971",
"started": 1
}
test2.example.com | CHANGED => {
"ansible_job_id": "289811848480.63295",
"changed": true,
"finished": 0,
"results_file": "/home/test/.ansible_async/289811848480.63295",
"started": 1
}
и для суперпользователя, такого как
ansible test --user ${USER} --ask-pass --become --background 3600 --poll 0 --args "/usr/bin/sleep 1m"
SSH password:
test1.example.com | CHANGED => {
"ansible_job_id": "494650580974.167671",
"changed": true,
"finished": 0,
"results_file": "/root/.ansible_async/494650580974.167671",
"started": 1
}
test2.example.com | CHANGED => {
"ansible_job_id": "273855897479.62987",
"changed": true,
"finished": 0,
"results_file": "/root/.ansible_async/273855897479.62987",
"started": 1
}
Вы можете выполнить некоторые тесты с помощью нескольких различных специальных команд, таких как
ansible test --user ${USER} --ask-pass --args "python --version"
SSH password:
test1.example.com | CHANGED | rc=0 >>
Python 2.7.5
test2.example.com | CHANGED | rc=0 >>
Python 2.7.5
с полным путем и без него и так далее. А также из-за rc=-1
ansible test --user ${USER} --ask-pass --module-name shell --args "echo test; echo rc=$?"
test1.example.com | CHANGED | rc=0 >>
test
rc=0
ansible test --user ${USER} --ask-pass --module-name shell --args "echo 'test '; exit -1;"
test1.example.com | FAILED | rc=255 >>
test non-zero return code
Комментарии:
1. Вы хотите сказать, что
rc=-1
означает, что команда не началась? Я добавил вывод, который демонстрирует, чтоsleep
запускается, как и ожидалось.2. @user252164, успешная специальная команда обычно возвращает код возврата
CHANGED | rc=0 >>
1
или-1
указывает на ошибку. Однако у меня недостаточно информации о вашем окружении. После вашего обновления мне интересно, подключаетесь ли вы черезssh
целевой хост и выполняете ли командуansible
там, подключаясь к себе?3. Нет, я вызываю
ansible
node0 для запускаsleep
на node2.