ansible 및 예상되는 문제

ansible 및 예상되는 문제

bash 스크립트에서 ansible의 Expect 도구를 사용하고 싶습니다. 먼저 쉘 스크립트를 실행하십시오. 변수를 확인하세요 $JAVA_HOME. 설정했는데 $JAVA_HOMEAnsible에서 오류가 발생합니다.

내 :env$JAVA_HOME

[root@portal bin]# env | grep JAVA
JAVA_HOME=/usr/java/jdk1.8.0_161

그리고 내 껍질:

#!/usr/bin/expect -f

set timeout 1    
spawn /opt/install.sh

expect  "\[input\] Are you installing the application at the central data center? \[yes/no default: yes\]? \[yes\]\r"
send    "yes\r"

expect  "\[input\] What is the code of central data center \[default: 01\]? \[01\]\r"
send    "01\r"

expect  "What is ip or hostname of your server \[default: localhost\]? \[localhost\]\r"
send     "portal\r"

내 스크립트:

- name: --- run portal expect ---
  shell: |
    cd /opt/
    chmod +x portal
    ./portal

Ansible이 마침내 오류를 보고했습니다.

TASK [ansible-portal : --- run portal expect ---]
****************************************************************************************************
fatal: [portal]: FAILED! => {"changed": true, "cmd": "cd /opt/installer/bin/\n chmod +x portal\n ./portal", "delta": "0:00:00.015509", "end": "2018-07-07 14:01:57.971794",
"msg": "non-zero return code", "rc": 1, "start": "2018-07-07 14:01:57.956285", "stderr": "send: spawn id exp6 not open\n    
while executing\n\"send    \"yes\\r\"\"\n    (file \"./portal\" line 8)", "stderr_lines": ["send: spawn id exp6 not open", "    
while executing", "\"send    \"yes\\r\"\"", "    (file \"./portal\" line 8)"], "stdout": "spawn /opt/installer/bin/install.sh\r\nChecking input tasks\r\nSetting 
ANT_HOME\r\nChecking Java\r\nError: No JAVA_HOME is set", "stdout_lines": 
["spawn /opt/installer/bin/install.sh", "Checking input tasks", "Setting ANT_HOME",
 "Checking Java", "Error: No JAVA_HOME is set"]}

평소대로 스크립트를 실행하는 데 문제가 없습니다.

답변1

$JAVA_HOME대화형 셸에 대해 설정되어 있지만 Ansible 플레이북을 실행할 때 원격 서버에서 플레이북을 실행하는 셸이 아직 설정되지 않았을 수 있습니다 $JAVA_HOME.

그러나 이는 Ansible의 문제가 아니며 작업이 실행될 때 매개변수로 설정하면 됩니다.

- name: --- run portal expect ---
  shell: |
    cd /opt/
    chmod +x portal
    ./portal
  environment:
    JAVA_HOME: /usr/java/jdk1.8.0_161

인용하다

관련 정보