Я пытаюсь запустить ansible docker container через веб-страницу, но не нашел решения, только частично.
У меня есть index.html
<html>
<body>
<form action = "adduser.php" method = "get">
Server: <input type = "text" value = "<?php echo $name?>" name = "name"><br>
<input type = "submit">
</form>
</body>
</html>
adduser.php
<?php
chdir("aatool");
echo getcwd();
$hosts = $_POST["name"];
echo "$hosts";
// $hosts = escapeshellarg($hosts);
//echo ".escapeshellarg($hosts)";
$output = shell_exec('sudo docker run -i --network=host centos7-ansible ansible-playbook --private-key=ky.pem --extra-vars admin_password=test -e hosts = ".escapeshellarg($hosts)." chpass.yml');
echo "<pre>$output</pre>";
?>
Вывод веб-страницы:
/var/www/html/aatool PLAY RECAP *********************************************************************
Журналы контейнера Docker:
PLAY RECAP *********************************************************************
Журнал ошибок Apache:
[:error] [pid 40367] [client x.x.x.x:61812] PHP Notice: Undefined index: name in /var/www/html/adduser.php on line 4, referer: http://x.x.x.x/
Если я передаю значение hosts напрямую, например hosts=all, все работает отлично, но если я попытаюсь получить значение из php-формы, оно не хочет работать. Я пробовал все, что мог найти, и этот код дал мне лучший результат, но все еще не работал. Я надеюсь, что я найду здесь помощь
Спасибо.






Ваша ФОРМА отправляется методом GET, но ваш код проверяет переменную $_POST. Попробуйте установить hosts из $_GET или изменить FORM на POST.
docker inspect 7d8845d1449e "Cmd": [ "ansible-playbook", "--private-key=ky.pem", "--extra-vars", "admin_password=test", "-e", "hosts=.escapeshellarg ().", "chpass.yml" Невозможно добавить весь вывод из-за ограничения количества символов
Вы можете попробовать изменить -e hosts = ".escapeshellarg($hosts)." на -e hosts='.escapeshellarg($host).' - есть сочетание одинарных/двойных кавычек, означающих, что строка escapeshellarg отправляется в докер
Я работал с одинарными кавычками... и хотел попробовать, но был уверен, что это бессмысленно :) Спасибо.
Спасибо, Мэтью, но это все еще не решает мою проблему. Я получаю тот же вывод веб-страницы, error_log ничего не показывает, журналы контейнеров докеров имеют тот же вывод.