ansible espera não funcionar para vários valores de prompt

0

Eu preciso instalar o agente nginx para openam usando ansible.

enquanto instala o nginx_agent pedindo várias perguntas enquanto executa o script ,

     ************************************************************************
    Welcome to the OpenSSO Policy Agent for NGINX
    ************************************************************************

    Enter the URL where the OpenAM server is running.
    Please include the deployment URI also as shown below:
    (http://opensso.sample.com:58080/opensso)
    **OpenSSO server URL: sss**
    Enter the Agent profile name
    **Agent Profile Name: sss**
    Enter the password to be used for identifying the Agent.
    *THIS IS NOT PASSWORD FILE*
    **Agent Password:** 
    -----------------------------------------------
    SUMMARY OF YOUR RESPONSES
    -----------------------------------------------
    OpenSSO server URL : sss
    Agent Profile name : sss
    Agent Password:     sss
    **Continue with Installation?
    [y/N]: y**

então, eu tenho que usar o módulo em ansible:

- expect:
    command: sh /opt/nginx_agent/bin/agentadmin.sh
    responses:
        OpenSSO server URL: "http://openam.test.mobi:8080/openam"
        Agent Profile Name: "nginx"
        Agent Password: "test.mobi2"
        (^Con[^\n]*\n+[^\n]*)+: "y" 

Mas, continua Continuar com a instalação?         [y / N]:

aceita, URL do servidor do OpenSSO: valor, consulte

Referência:

     "stdout_lines": [
         "************************************************************************", 
         "Welcome to the OpenSSO Policy Agent for NGINX", 
         "************************************************************************", 
         "", 
         "Enter the URL where the OpenAM server is running.", 
         "Please include the deployment URI also as shown below:", 
         "(http://opensso.sample.com:58080/opensso)", 
         "OpenSSO server URL: Enter the Agent profile name", 
         "Agent Profile Name: Enter the password to be used for identifying the Agent.", 
         "*THIS IS NOT PASSWORD FILE*", 
         "Agent Password: ", 
         "-----------------------------------------------", 
         "SUMMARY OF YOUR RESPONSES", 
         "-----------------------------------------------", 
         "OpenSSO server URL : http://openam.test.mobi:8080/openam", 
         "Agent Profile name : nginx", 
         "Agent Password:     test.mobi2", 
         "Continue with Installation?", 
         "[y/N]: http://openam.test.mobi:8080/openam", 
         "test.mobi2"
     ]

Sugira-me o que sinto falta nesta configuração. Como corrigir isso

    
por Rajkumar .E 26.12.2016 / 08:26

1 resposta

0

Eu tentaria ignorar o Continue with Installation? e apenas correspondesse na linha [y/N] .

substitua (^Con[^\n]*\n+[^\n]*)+: "y" por 'y/N' : 'y'

Ansible usa o módulo pexpect que nem sempre faz o que você esperaria. Por exemplo, o EOL é '\r\n' , não '\n' .

Veja os documentos aqui .

Aqui está um teste rápido:

/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'

Aqui está uma maneira mais fácil de fazer isso sem usar esperar.

Se você observar o script agentadmin.sh, verá que as respostas a todas as perguntas são armazenadas em variáveis de ambiente, por exemplo

while [ -z ${OPENAM_URL} ]; do

Se você pré-definir todos eles no seção de ambiente do seu manual de jogo o script deve ser executado sem qualquer intervenção do usuário. Não há necessidade de esperar.

Então, algo como:

environment:
  OPENAM_URL: whatever_1
  AGENT_PROFILE_NAME: whatever_2
  AGENT_PASSWORD: whatever_3
  CONFIRM: y

- shell: /opt/nginx_agent/bin/agentadmin.sh
    
por 26.12.2016 / 23:58