ansible คาดว่าจะไม่ทำงานสำหรับค่าพรอมต์หลายค่า


0

ฉันต้องติดตั้งตัวแทน nginx สำหรับ openam โดยใช้ ansible

ในขณะที่ติดตั้ง nginx_agent มันถาม คำถามหลายข้อในขณะที่เรียกใช้สคริปต์ ,

     ************************************************************************
    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**

ดังนั้นฉันได้ใช้โมดูลคาดหวังใน 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" 

แต่มัน ดำเนินการติดตั้งต่อไปหรือไม่         [Y / N]:

ใช้เวลา URL เซิร์ฟเวอร์ OpenSSO: เห็นคุณค่า

อ้างอิง:

     "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"
     ]

แนะนำฉันสิ่งที่ฉันพลาดในการกำหนดค่านี้ วิธีแก้ไขปัญหานี้

คำตอบ:


0

ฉันจะพยายามเพิกเฉยต่อ 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 ${OPENAM_URL} ]; do

หากคุณกำหนดไว้ล่วงหน้าทั้งหมดใน ส่วนสภาพแวดล้อมของ playbook ของคุณ สคริปต์ควรรันโดยไม่มีการแทรกแซงของผู้ใช้ ไม่จำเป็นต้องคาดหวัง

ดังนั้นสิ่งที่ชอบ:

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

- shell: /opt/nginx_agent/bin/agentadmin.sh

ฉันลองวิธีการของคุณ แต่ฉันยังมีปัญหาเดียวกัน
Rajkumar .E

ลองรันด้วย ansible-playbook -vvv playbook.yml
glebaron
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.