Я бы попытался игнорировать Continue with Installation?
и просто сопоставить на [y/N]
линии.
заменить (^Con[^\n]*\n+[^\n]*)+: "y"
на'y/N' : 'y'
Ansible использует модуль pexpect, который не всегда делает то, что вы ожидаете. Например, EOL есть '\r\n'
, а не '\n'
.
Смотрите документы здесь .
Вот быстрый тест:
/root/junk.sh echo 'Enter the Agent profile name' read -p "Agent Profile Name: " AGENT_PROFILE_NAME echo $AGENT_PROFILE_NAME > junk.dat echo "Continue with installation" read -p "[y/N] : " CONFIRM echo $CONFIRM >> junk.dat play: - expect: command: sh /root/junk.sh responses: 'Profile Name' : "oook" 'y/N' : 'y'
Вот более простой способ сделать это без использования ожидаемого.
Если вы посмотрите на скрипт agentadmin.sh, то увидите, что ответы на все вопросы хранятся в переменных среды, т.е.
while [ -z $ ]; do
Если вы предварительно определили все из них в разделе среды вашей игровой книги, сценарий должен выполняться без какого-либо вмешательства пользователя. Не нужно ожидать.
Так что-то вроде:
environment: OPENAM_URL: whatever_1 AGENT_PROFILE_NAME: whatever_2 AGENT_PASSWORD: whatever_3 CONFIRM: y - shell: /opt/nginx_agent/bin/agentadmin.sh