ฉันได้เขียนภารกิจที่ไม่น่าเชื่อนี้เพื่อเรียกใช้กระบวนการในกล่องคนจรจัดระยะไกล (อันที่จริงแล้วไฟล์ ansible นั้นมีความยาวกว่านี้มาก แต่นี่เป็นตัวทำซ้ำที่ เท่านั้น เรียกใช้สคริปต์เริ่มต้น)
---
- hosts: myappname_server
vars_files:
- install_myappname_vars.yaml
gather_facts: false
sudo: true
sudo_user: "{{ project_name }}"
tasks:
- name: Restart application
command: "{{ project_target_dir_env }}/run"
args:
chdir: "{{ project_target_dir_env }}"
มันทำงานร่วมกับ vars เหล่านี้ในไฟล์ vars ที่รวม:
---
project_name: myappname
project_source_dir_files: files/myappname
project_source_dir_env: "{{ project_source_dir_files }}/environment_files"
project_target_root: /home/myappname
project_target_dir_env: "{{ project_target_root }}/bin"
แนวคิดคือการใช้ผู้ใช้ "myappname" ในกล่องระยะไกล (นามแฝงอย่างถูกต้องโดย "myappname_server" การเล่นอื่น ๆ ที่ฉันเรียกใช้ทำงานได้ดี) เพื่อเรียกใช้ "/ home / myappname / bin / run" หลังจากเปลี่ยนไดเรกทอรีเป็น "/ บ้าน / myappname / bin" หากฉันทำด้วยตนเองทุกอย่างทำงานได้ดีเช่น dirs มีอยู่ไฟล์สามารถอ่านได้สคริปต์ทำงานได้ดีมาก แต่ถ้าฉันรันสคริปต์สิ่งที่ดูเหมือนจะผิดกับรุ่นของรหัสการเรียกใช้ ansible ฉันและหวังว่าจะเป็นเช่นนั้นหรือไม่) มันพูดไม่ได้เหรอ?
ฉันใช้ -vvvv เพื่อรับข้อมูลจำนวนมาก:
monsterkill@monsterkill-ub-dt:~/playbooks$ ansible-playbook install_myappname_restart.yaml -vvvv
PLAY [myappname_server] **********************************************************
TASK: [Restart application] ***************************************************
<vagrant1> ESTABLISH CONNECTION FOR USER: vagrant
<vagrant1> REMOTE_MODULE command chdir=/home/myappname/bin /home/myappname/bin/run
<vagrant1> EXEC ['ssh', '-C', '-tt', '-vvv', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=60s', '-o', 'ControlPath=/home/monsterkill/.ansible/cp/ansible-ssh-%h-%p-%r', '-o', 'Port=22', '-o', 'IdentityFile=/home/monsterkill/insecure_private_key', '-o', 'KbdInteractiveAuthentication=no', '-o', 'PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey', '-o', 'PasswordAuthentication=no', '-o', 'User=vagrant', '-o', 'ConnectTimeout=10', 'vagrant1', "/bin/sh -c 'mkdir -p /tmp/ansible-tmp-1422343063.07-259463565013754 && chmod a+rx /tmp/ansible-tmp-1422343063.07-259463565013754 && echo /tmp/ansible-tmp-1422343063.07-259463565013754'"]
<vagrant1> PUT /tmp/tmpBduhE7 TO /tmp/ansible-tmp-1422343063.07-259463565013754/command
<vagrant1> EXEC ['ssh', '-C', '-tt', '-vvv', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=60s', '-o', 'ControlPath=/home/monsterkill/.ansible/cp/ansible-ssh-%h-%p-%r', '-o', 'Port=22', '-o', 'IdentityFile=/home/monsterkill/insecure_private_key', '-o', 'KbdInteractiveAuthentication=no', '-o', 'PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey', '-o', 'PasswordAuthentication=no', '-o', 'User=vagrant', '-o', 'ConnectTimeout=10', 'vagrant1', "/bin/sh -c 'chmod a+r /tmp/ansible-tmp-1422343063.07-259463565013754/command'"]
<vagrant1> EXEC ['ssh', '-C', '-tt', '-vvv', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=60s', '-o', 'ControlPath=/home/monsterkill/.ansible/cp/ansible-ssh-%h-%p-%r', '-o', 'Port=22', '-o', 'IdentityFile=/home/monsterkill/insecure_private_key', '-o', 'KbdInteractiveAuthentication=no', '-o', 'PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey', '-o', 'PasswordAuthentication=no', '-o', 'User=vagrant', '-o', 'ConnectTimeout=10', 'vagrant1', u'/bin/sh -c \'sudo -k && sudo -H -S -p "[sudo via ansible, key=ucmsbsauynfzeeyxwdmgfduwovdneeqg] password: " -u myappname /bin/sh -c \'"\'"\'echo SUDO-SUCCESS-ucmsbsauynfzeeyxwdmgfduwovdneeqg; /usr/bin/python /tmp/ansible-tmp-1422343063.07-259463565013754/command\'"\'"\'\'']
<vagrant1> EXEC ['ssh', '-C', '-tt', '-vvv', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=60s', '-o', 'ControlPath=/home/monsterkill/.ansible/cp/ansible-ssh-%h-%p-%r', '-o', 'Port=22', '-o', 'IdentityFile=/home/monsterkill/insecure_private_key', '-o', 'KbdInteractiveAuthentication=no', '-o', 'PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey', '-o', 'PasswordAuthentication=no', '-o', 'User=vagrant', '-o', 'ConnectTimeout=10', 'vagrant1', "/bin/sh -c 'rm -rf /tmp/ansible-tmp-1422343063.07-259463565013754/ >/dev/null 2>&1'"]
failed: [vagrant1] => {"cmd": ["/home/myappname/bin/run"], "failed": true, "rc": 8}
msg: [Errno 8] Exec format error
FATAL: all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/home/monsterkill/install_myappname_restart.yaml.retry
vagrant1 : ok=0 changed=0 unreachable=0 failed=1
ฉันพยายามทำสิ่งต่าง ๆ เช่น:
- เล่นรอบกับเครื่องหมายทับหลังจากไดเรกทอรี
- ใช้กับพา ธ สัมพัทธ์และพา ธ สัมบูรณ์บนเครื่องรีโมต
- ทำงานกับและไม่มี sudo และ sudo_user ในงานของฉัน
ฉันรู้ว่าโมดูล ansible อื่น ๆ ทั้งหมดที่ฉันใช้กับ vars พวงเดียวกันจาก playbooks ใกล้เคียงบางตัวก็ใช้ได้ดี สิ่งในตัวเช่นกลุ่มผู้ใช้ไฟล์ apt ไม่เก็บถาวรคัดลอก โปรดทราบว่าจำนวนของสิ่งเหล่านี้ยังต้องการสิ่งที่กลุ่ม / ผู้ใช้ที่จะต้องถูกต้องดังนั้นฉันรู้ว่าทุกอย่างดี
/ แก้ไข: ฉันรู้ว่าเส้นทางไปยังสคริปต์การทำงานนั้นถูกต้องเพราะถ้าฉันเปลี่ยนชื่อสคริปต์การเรียกใช้และเรียกใช้ playbook ฉันจะได้รับข้อผิดพลาดอื่น ("msg: [Errno 2] ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว" . ดังนั้นจริง ๆ แล้วพยายามเรียกใช้สคริปต์การเรียกใช้ที่มีอยู่ แต่ล้มเหลว
แต่ดูเหมือนว่าจะไม่มีอะไรทำงาน เกิดอะไรขึ้นเกิดอะไรขึ้นกับสิ่งที่ EXEC ชิ้นสุดท้ายสร้างขึ้น? ขอบคุณที่สละเวลา.