Ansible ล้มเหลวด้วย / bin / sh: 1: / usr / bin / python: ไม่พบ


187

ฉันพบข้อผิดพลาดที่ไม่เคยเห็นมาก่อน นี่คือคำสั่งและข้อผิดพลาด:

$ ansible-playbook create_api.yml

PLAY [straw] ******************************************************************

GATHERING FACTS ***************************************************************
failed: [104.55.47.224] => {"failed": true, "parsed": false}
/bin/sh: 1: /usr/bin/python: not found


TASK: [typical | install required system packages] *****************************
FATAL: no hosts matched or all hosts have already failed -- aborting


PLAY RECAP ********************************************************************
           to retry, use: --limit @/Users/john/create_api.retry

104.55.47.224               : ok=0    changed=0    unreachable=0    failed=1

นี่คือไฟล์ create_api.yml:

---

- hosts: api
  remote_user: root
  roles:
    - api

และนี่คือไฟล์โฮสต์:

[api]
104.55.47.224

ฉันสามารถลบส่วนบทบาทและจะไม่ทำให้เป็นงานแรก แต่มันจะทำเฉพาะกับบรรทัด/bin/sh: 1: /usr/bin/python: not foundเท่านั้น เกิดอะไรขึ้นที่นี่?


หมายเหตุ:ในกรณีที่มีใครส่งที่อยู่ IP และไม่สามารถรับคำตอบคุณควรรู้ว่าฉันได้เปลี่ยนที่อยู่ IP ตั้งแต่การวางรหัส

ติดตั้งEDIT python ไว้ภายในเครื่องปัญหาคือไม่ได้ติดตั้งไว้ในเครื่องระยะไกลซึ่งใช้ Ubuntu 15.04

คำตอบ:


171

ฉัน stumbled เมื่อข้อผิดพลาดนี้ทำงานเบิ้ลในอูบุนตู 15.10เซิร์ฟเวอร์เพราะเรือกับงูหลาม 3.4.3และเบิ้ลต้องหลาม 2

นี่คือprovision.ymlรูปลักษณ์ของฉันตอนนี้:

- hosts: my_app
  sudo: yes
  remote_user: root
  gather_facts: no
  pre_tasks:
    - name: 'install python2'
      raw: sudo apt-get -y install python

  tasks:
    - name: 'ensure user {{ project_name }} exists'
      user: name={{ project_name }} state=present
  • อย่าลืมตัวเลือก -y (บอกว่าใช่ทุกคำถาม) ด้วย apt-get (หรือโมดูลดิบจะติดอยู่ในที่เงียบ)

  • gather_facts: no สายก็สำคัญเช่นกัน (เพราะเราไม่สามารถรวบรวมข้อเท็จจริงโดยไม่มีงูใหญ่)


12
ดังนั้นบทบาทต่อ ๆ มาจึงไม่สามารถใช้ข้อเท็จจริงได้ ... มีวิธีรวบรวมข้อเท็จจริงอีกครั้งหรือไม่? aha, stackoverflow.com/questions/31054453/…
stephen

16
โปรดทราบว่าบรรทัด 'gather_facts: no' ก็สำคัญเช่นกัน
rcreswick

6
@ surfer190 ค้นหาที่ยอดเยี่ยม! ฉันยังพบว่าการเพิ่มaction: setupเป็น pre_task สุดท้ายยังทำงานดี :)
mrooney

1
@ surfer190 ดูคำตอบของฉันที่นี่หากคุณใช้ EC2 กับ ansible คุณสามารถใช้ CloudInit เพื่อติดตั้ง python2 เพื่อให้คุณสามารถใช้รวบรวมข้อเท็จจริงตามปกติ
Miroslav

1
ในกรณีที่ทุกคนก็ยังสงสัยว่ามันไม่ได้เป็นสิ่งที่จำเป็นในการเรียกใช้rawงานในการติดตั้งหลาม 2 pre_tasks; tasksงานปกติก็ดีเหมือนกัน แต่การวางไว้pre_tasksกับอีกงานหนึ่งเพื่อเรียกsetupโมดูลAnsible เช่นกันจะช่วยให้มั่นใจได้ว่าข้อเท็จจริงจะพร้อมใช้งานสำหรับบทบาทใด ๆ ที่กำหนดให้กับโฮสต์
Kenny Evitt

125

Ansible 2.2 มีภาพตัวอย่างเทคโนโลยีของการสนับสนุน Python 3 เพื่อใช้ประโยชน์จากนี้ (ดังนั้นคุณจึงไม่จำเป็นต้องติดตั้งหลาม 2 บน Ubuntu 16.04) เพียงแค่ตั้งค่าตัวเลือกการตั้งค่าไปansible_python_interpreter /usr/bin/python3ซึ่งสามารถทำได้บนพื้นฐานต่อโฮสต์ในไฟล์สินค้าคงคลังของคุณ:

[db]
123.123.123.123 ansible_python_interpreter=/usr/bin/python3

ฉันพยายามเพิ่ม / usr / bin / python ให้กับตัวแปรนี้ แต่มันไม่ทำงาน การเพิ่ม python3 ทำงานแทนและปัญหานี้ได้รับการแก้ไขแล้ว
Deep LF

98

โซลูชันที่ 1:

หากคุณกำลังใช้Ansible >2.2.0งานคุณสามารถตั้งansible_python_interpreterค่าตัวเลือกการกำหนดค่าเป็น/usr/bin/python3:

ansible my_ubuntu_host -m ping -e 'ansible_python_interpreter=/usr/bin/python3'

หรือในไฟล์คลังโฆษณาของคุณ:

[ubuntu_hosts]
<xxx.xxx.xxx.xxx>

[ubuntu_hosts:vars]
ansible_python_interpreter=/usr/bin/python3

โซลูชันที่ 2:

หากคุณกำลังใช้งานอยู่Ansible <2.2.0คุณสามารถเพิ่มสิ่งเหล่านี้pre_tasksลงใน playbook ของคุณ:

gather_facts: False
pre_tasks:
  - name: Install python for Ansible
    raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal)
    register: output
    changed_when: output.stdout != ""
    tags: always
  - setup: # aka gather_facts

อัปเดต ด้วยansible 2.8.xคุณไม่จำเป็นต้องกังวลเกี่ยวกับมันมันทำงานนอกกรอบสำหรับหลาม> 3.5 สำหรับทั้งตัวควบคุมและเครื่องเป้าหมาย


หากคุณเรียกใช้ playbooks โดยใช้แท็กตรวจสอบให้แน่ใจว่าคุณเพิ่มแท็ก: กับงานตั้งค่าเสมอมิฉะนั้นสิ่งที่น่าเชื่อถือจะไม่รวบรวมข้อเท็จจริงเมื่อคุณใช้แท็ก
Ionut Bajescu

16
ฉันมีansible 2.3.0.0และมันไม่ได้ผลนอกกรอบ ข้อผิดพลาดเดียวกับที่โพสต์โดย OP
Coder

ในกรณีที่ไม่ชัดเจนคุณต้องเพิ่มสิ่งนี้ไปยังไฟล์โฮสต์สินค้าคงคลังไม่รวม vars รวมกล่าวคือมันอยู่ในไฟล์สินค้าคงคลังเดียวกับที่อยู่ / ชื่อโฮสต์
Shawn Mehan

32

คุณสามารถใช้โมดูล rawเพื่อติดตั้ง Python บนโฮสต์ระยะไกล:

- raw: sudo apt-get install python-simplejson

11
เพื่อให้แน่ใจว่าสิ่งนี้จะได้รับการเรียกก่อนงานในบทบาทของคุณและก่อนการอ้างอิงใด ๆ ในไฟล์ meta ของคุณให้เพิ่มเข้าไปใน playbook ของคุณ: pre_tasks: - raw: sudo apt-get install python-simplejson
Laurens Rietveld

5
โปรดสังเกตว่าใน playbook ของคุณต้องยังปิดการใช้งาน gather_facts หรือนี้จะล้มเหลวก่อนที่จะใช้คำสั่งดิบ (gather_facts: ไม่)
rcreswick

@rcreswick นั่นเป็นปัญหาของฉันและทางออกของคุณใช้ได้สำหรับฉัน ขอบคุณมาก. ฉันใส่บรรทัด "gather_facts: no" ในไฟล์ .yml หลักของฉัน (setup-ansible.yml) และดำเนินการ playbook ด้วยคำสั่งนี้: "ansible-playbook -i โฮสต์ setup-ansible.yml --flush-cache -vvvvvv -kK " ฉันใช้ตัวเลือก "-kK" กับ ansible-playbook เนื่องจากการติดตั้งอูบุนตูเริ่มต้นต้องใช้รหัสผ่านเพื่อทำ "sudo"
Ali Yousefi Sabzevar

ทำไมคุณถึงติดตั้ง simplejson และไม่ใช่ pytghon แต่พูดถึงการติดตั้ง python
Henning

@Henning python-simplejsonเขียนด้วย Python ดังนั้นจึงต้องใช้ Python simplejson ยังเป็นข้อกำหนดสำหรับโมดูลแกนกลางส่วนใหญ่ โดยการติดตั้งpython-simplejsonผ่านapt-get/ yumคุณยังติดตั้งหลามและดังนั้นจึงครอบคลุมการอ้างอิงเบิ้ลทุกขั้นพื้นฐาน ...
udondan

18

เพื่อสรุปคำตอบของคนอื่น ๆ ต่อไปนี้เป็นการตั้งค่าแบบรวมที่เหมาะกับฉัน:

 - hosts: all
   become: true
   gather_facts: false

   # Ansible requires python2, which is not installed by default on Ubuntu Xenial
   pre_tasks:
     - raw: sudo apt-get -y install python-simplejson
     # action: setup will gather facts after python2 has been installed
     - action: setup

14

โดยส่วนตัวแล้วฉันพบวิธีแก้ปัญหาที่เป็นไปได้ 3 ข้อสำหรับปัญหานี้ซึ่งทำงานได้ดีในสถานการณ์ต่าง ๆ

ตัวเลือก 1 - ตั้งค่าansible_python_interpreter: /usr/bin/python3สำหรับโฮสต์ที่python3ติดตั้งโดยค่าเริ่มต้น

ฉันคิดว่านี่เป็นวิธีการที่เหนือกว่าสำหรับการแก้ปัญหาหากคุณมีวิธีจัดกลุ่มโฮสต์ของคุณด้วยการpython3ติดตั้งโดยค่าเริ่มต้นหรือไม่ เท่าที่ฉันทราบpython3มีให้ใน Ubuntu ทุกรุ่นที่ 16.04 ขึ้นไป

  • หากโฮสต์ทั้งหมดของคุณมีแน่นอนpython3คุณสามารถเพิ่มตัวแปรในgroup_vars/all.yml(หรือเทียบเท่า) ของคุณ:
# group_vars/all.yml

ansible_python_interpreter: /usr/bin/python3
  • หากโฮสต์บางแห่งของคุณไม่มีpython3และคุณมีวิธีติดแท็กเมื่อใช้พื้นที่โฆษณาแบบไดนามิก (เช่นการติดแท็ก AWS ec2.py) คุณสามารถใช้ตัวแปรกับโฮสต์บางแห่งเช่นนี้:
# group_vars/tag_OS_ubuntu1804.yml

ansible_python_interpreter: /usr/bin/python3
  • หากคุณใช้คลังโฆษณาแบบสแตติกและสามารถจัดกลุ่มโฮสต์ตามว่ามีpython3หรือไม่คุณสามารถทำสิ่งนี้ได้:
# inventory/hosts

[python2_hosts]
centos7_server

[python3_hosts]
u1804_server

[python3_hosts:vars]
ansible_python_interpreter=/usr/bin/python3

ฉันชอบตัวเลือกนี้มากที่สุดเพราะมันไม่ต้องการการเปลี่ยนแปลงในรีโมตโฮสต์และมีการเปลี่ยนแปลงตัวแปรเพียงเล็กน้อยเมื่อเทียบกับตัวเลือกที่ 2 และ 3 ซึ่งต้องการการเพิ่มเติมสำหรับ playbook ทุกตัว

ตัวเลือก 2 - ติดตั้ง Python 2 โดยใช้ raw

ตัวเลือกนี้ต้องวางการเล่นที่ด้านบนสุดของ playbook ทุกอันgather_facts: falseที่ใช้rawในการติดตั้งpython:

- name: install python2 on all instances
  hosts: "*"
  gather_facts: false
  tasks:
    - name: run apt-get update and install python
      raw: "{{ item }}"
      loop:
        - sudo apt-get update
        - sudo apt-get -y install python
      become: true
      ignore_errors: true

ignore_errors: trueเป็นสิ่งจำเป็นหากคุณวางแผนที่จะเรียกใช้การเล่นบนโฮสต์ที่ไม่ได้apt-getติดตั้ง (เช่นอะไรก็ตามที่ใช้ RHEL) มิฉะนั้นจะเกิดข้อผิดพลาดในการเล่นครั้งแรก

วิธีนี้ใช้ได้ผล แต่ต่ำที่สุดในรายการของฉันด้วยเหตุผลบางประการ:

  1. ต้องไปที่ด้านบนสุดของทุก playbook (ตรงข้ามกับตัวเลือก 1)
  2. ถือว่าaptอยู่ในระบบและละเว้นข้อผิดพลาด (ตรงข้ามกับตัวเลือก 3)
  3. apt-get คำสั่งช้า (ตรงข้ามกับตัวเลือก 3)

ตัวเลือก 3 - /usr/bin/python -> /usr/bin/python3ใช้Symlinkraw

ฉันไม่ได้เห็นวิธีการแก้ปัญหาที่เสนอโดยคนอื่น ไม่เหมาะ แต่ฉันคิดว่ามันยอดเยี่ยมกว่าตัวเลือก 2 ในหลาย ๆ วิธี ข้อเสนอแนะของฉันคือการใช้rawเพื่อเรียกใช้คำสั่ง shell เพื่อ symlink /usr/bin/python -> /usr/bin/python3หากpython3อยู่ในระบบและ pythonไม่ได้:

- name: symlink /usr/bin/python -> /usr/bin/python3
  hosts: "*"
  gather_facts: false
  tasks:
    - name: symlink /usr/bin/python -> /usr/bin/python3
      raw: |
        if [ -f /usr/bin/python3 ] && [ ! -f /usr/bin/python ]; then
          ln --symbolic /usr/bin/python3 /usr/bin/python; 
        fi
      become: true

วิธีนี้คล้ายกับตัวเลือกที่ 2 ซึ่งเราต้องวางไว้ที่ด้านบนสุดของ playbook ทุกเล่ม แต่ฉันคิดว่ามันเหนือกว่าในหลายวิธี:

  • สร้าง symlink ในกรณีเฉพาะที่python3มีอยู่เท่านั้นpythonไม่ใช่ - มันจะไม่แทนที่ Python 2 หากติดตั้งไว้แล้ว
  • ไม่ได้aptติดตั้งไว้
  • สามารถทำงานกับโฮสต์ทั้งหมดโดยไม่มีการจัดการข้อผิดพลาดพิเศษใด ๆ
  • เป็นซุปเปอร์เร็วเมื่อเทียบกับทุกสิ่งด้วย apt-get

เห็นได้ชัดว่าถ้าคุณต้องการติดตั้ง Python 2 ที่/usr/bin/pythonวิธีนี้จะไม่มีทางและตัวเลือก 2 จะดีกว่า

ข้อสรุป

  • ฉันขอแนะนำให้ใช้ตัวเลือก 1ในทุกกรณีถ้าทำได้
  • ฉันขอแนะนำให้ใช้ตัวเลือก 3หากพื้นที่โฆษณาของคุณมีขนาดใหญ่ / ซับซ้อนและคุณไม่มีวิธีจัดกลุ่มโฮสต์ได้อย่างง่ายดายpython3ทำให้ตัวเลือกที่ 1ยากขึ้นและเกิดข้อผิดพลาดได้ง่ายขึ้น
  • ฉันเพียง แต่แนะนำทางเลือกที่ 2มากกว่า3 ตัวเลือกหากคุณต้องการหลาม 2 /usr/bin/pythonติดตั้งที่

แหล่งที่มา


13

คุณต้องใช้ python 2.7 เพื่อเรียกใช้ Ansible บน Ubuntu 16.04 คุณสามารถติดตั้งผ่านคำสั่งนี้:

sudo apt-get install python-minimal

หลังจากนั้นฉันก็วิ่งได้

ansible-playbook -i inventories/staging playbook.yml

เรียกใช้การได้สำเร็จ

โปรดตรวจสอบเพิ่มเติมที่การใช้ ansible บน Ubuntu 16.04


12

สิ่งที่ฉันเคยทำงานกับ Ubuntu 15.10 กับหยดมหาสมุทรดิจิตอลสด:

# my-playbook.yml
- name: python2
  hosts: test
  gather_facts: no
  pre_tasks:
    - raw: sudo apt-get -y install python-simplejson

$ ansible-playbook path/to/my-playbook.yml

สำหรับ Ubuntu 16.04 บน OVH SSD ใหม่ฉันต้องอัพเกรด apt-get ก่อนที่จะมีแพ็คเกจ python2 ให้ใช้งาน


8

ฉันพบว่าจริง ๆ แล้วมันเป็นไปได้ที่จะมีการเล่นหลายรายการใน playbook เดียวดังนั้นตอนนี้การตั้งค่าของฉันจึงมีการเล่น "การจัดเตรียมการพึ่งพา" ซึ่งทำงานบนโฮสต์ทั้งหมดและการเล่นอื่น ๆ สำหรับโฮสต์ที่เฉพาะเจาะจง pre_tasksดังนั้นไม่มีอะไรมาก

ตัวอย่างเช่น:

- name: dependency provisioning
  hosts: all
  become: yes
  become_method: sudo
  gather_facts: false
  tasks:
    - name: install python2
      raw: sudo apt-get -y install python-simplejson

- name: production
  hosts: production_host
  roles:
    - nginx
  tasks:
    - name: update apt cache
      apt: update_cache=yes cache_valid_time=3600
  # ....

- name: staging
  hosts: staging_host
  roles:
    - nginx
  tasks:
    - name: update apt cache
      apt: update_cache=yes cache_valid_time=3600
  # ....

6

อย่างที่คนอื่นพูดนี่เป็นเพราะขาด python2 คำตอบอื่น ๆ ที่นี่ให้วิธีแก้ปัญหาด้วยpre_tasksและgather_facts: noอย่างไรก็ตามถ้าคุณอยู่ใน EC2 และคุณหมุนตัวอย่างด้วยการสำรวจคุณสามารถใช้user_dataตัวเลือก:

- ec2:
    key_name: mykey
    instance_type: t2.micro
    image: ami-123456
    wait: yes
    group: webserver
    count: 3
    vpc_subnet_id: subnet-29e63245
    assign_public_ip: yes
    user_data: |
      #!/bin/bash
      apt-get update
      apt-get install -y python-simplejson
    register: ec2

จากนั้นผู้คนมักรอให้ ssh ใช้งานได้เช่นนี้:

  - name: "Wait for the instances to boot and start ssh"
    wait_for:
      host: "{{item.public_ip}}"
      port: 22
      delay: 5
      timeout: 300
    with_items: "{{ ec2.tagged_instances }}"
    when: ec2|changed

อย่างไรก็ตามฉันได้พบว่านี่ไม่ได้นานพอที่จะรันCloudInitได้ค่อนข้างช้าในกระบวนการบู๊ตดังนั้น python2 อาจยังไม่ถูกติดตั้งทันทีหลังจาก ssh พร้อมใช้งาน ดังนั้นฉันจึงเพิ่มการหยุดชั่วคราวในกรณีที่เพิ่งสร้างอินสแตนซ์:

  - name: "Wait for cloud init on first boot"
    pause: minutes=2
    when: ec2|changed

สิ่งนี้จะทำงานได้อย่างสมบูรณ์แบบและเป็นข้อได้เปรียบที่คุณไม่ได้ตรวจสอบสำหรับ python2 ในทุกการวิ่งและคุณไม่จำเป็นต้องแก้ไขปัญหาใด ๆ เพื่อรวบรวมข้อเท็จจริงในภายหลัง

ฉันแน่ใจว่าผู้ให้บริการคลาวด์รายอื่นมีฟังก์ชั่น CloudInit ที่คล้ายกันดังนั้นปรับให้เข้ากับกรณีการใช้งานของคุณ


3

ผู้ใช้ Packer อาจพบว่าโซลูชันด้านล่างมีประโยชน์

สมมติว่าคุณใช้ตัวเตรียมการบันทึกข้อมูลของการกำหนดค่าของคุณอาจมีลักษณะดังนี้

คุณสามารถติดตั้ง python โดยใช้ shell provisioner ก่อนจากนั้นกำหนดค่าตัวเลือก ansible_python_intepreter ดังที่แสดงด้านล่าง

"provisioners": [
    {
      "type": "shell",
      "inline": [
        "apk update && apk add --no-cache python python-dev ansible bash"
      ]
    },
    {
      "type": "ansible-local",
      "playbook_file": "playbooks/your-play-book.yml",
      "playbook_dir": "playbooks",
      "extra_arguments": [
        "-e",
        "'ansible_python_interpreter=/usr/bin/python3'",
        "-vvv"
      ]
    },

2

ตามค่าเริ่มต้นAnsible ต้องการ Python 2อย่างไรก็ตามAnsible 2.2+ สามารถทำงานกับ Python 3 ได้เช่นกัน

ดังนั้นควรติดตั้ง Python 2 โดยใช้rawโมดูลเช่น

ansible localhost --sudo -m raw -a "yum install -y python2 python-simplejson"

หรือตั้งค่าansible_python_interpreterตัวแปรในไฟล์คลังเช่น:

[local]
localhost ansible_python_interpreter="env python3"

สำหรับนักเทียบท่าคุณสามารถเพิ่มบรรทัดต่อไปนี้:

RUN printf '[local]\r\nlocalhost ansible_python_interpreter="env python3"\r\n' > /etc/ansible/hosts

หรือเรียกใช้เป็น:

ansible-playbook /ansible/provision.yml -e 'ansible_python_interpreter=/usr/bin/python3' -c local


1

มีคำตอบมากมายขอบคุณสำหรับการโพสต์เมื่อฉันเริ่มต้นจากหน้านี้ด้วย!

ฉันไม่บิตของการขุดและมันก็มั่นคงกับอูบุนตู 14.04LTS, อูบุนตู 15.04LTS ดูเหมือนจะลดลงล่าสุดpython, และ Ubuntu 16.04LTS aptitudeดูเหมือนจะได้ลดลง

ฉันใส่การกระทำดังต่อไปนี้ใน bootstrap ของฉันก่อนที่จะทำการaptโทรใด ๆ:

- name: "FIX: Ubuntu 16.04 LTS doesn't come with certain modules, required by ansible"
  raw: apt-get install python-minimal aptitude -y
  become: true
  become_user: root
  become_method: sudo

หากคุณจัดการbecomeที่อื่นรู้สึกอิสระที่จะดึงมัน

แหล่งที่มา:


1

ฉันสามารถแก้ไขปัญหาเดียวกันได้โดยติดตั้ง Python บนเครื่องเป้าหมายเช่นเครื่องที่เราต้องการให้ SSH ฉันใช้คำสั่งต่อไปนี้:

sudo apt-get install python-minimal

1

@Miroslav ขอบคุณที่ชี้ให้ฉันไปในทิศทางที่ถูกต้อง ฉันใช้user_dataในec2_instanceโมดูลด้วยและทำงานเหมือนการรักษา

กล่าวคือ

- name: Creating single EC2 instance 
  ec2_instance:
    region: "{{ aws_region }}"
    key_name: "{{ aws_ec2_key_pair }}"
    name: "some-cool-name"
    instance_type: t1.micro
    image_id: ami-d38a4ab1
    security_group: sg-123456
    vpc_subnet_id: sn-678901234
    network:
        assign_public_ip: no
    volumes:
      - device_name: /dev/sda1
        ebs:
          volume_type: gp2
          volume_size: 15
    user_data: |
      #!/bin/bash
      #
      apt update
      apt install -y python-simplejson              
    termination_protection: yes
    wait: yes     

1

คุณสามารถแสดงให้ Ubuntu 18.04 ที่คุณต้องการใช้ python3 /usr/bin/pythonเป็นอันดับแรกสำหรับ

- hosts: all
  become: true
  pre_tasks:
    - raw: update-alternatives --install /usr/bin/python python /usr/bin/python3 1

0

ฉันมีปัญหาเดียวกันจนกระทั่งฉันรู้ว่าคุณต้องติดตั้ง python บนรีโมตโฮสต์รวมถึงเครื่องของคุณเองด้วย ตอนนี้มันใช้งานได้!


-2

เราเพิ่งพบเจอสิ่งนี้

เราปรับใช้ Ubuntu 16.04 ในคนจรจัดดังนั้นถ้าคุณไม่ได้ใช้คนจรจัดความคิดเห็นของฉันไม่มีประโยชน์

เราติดตั้งปลั๊กอิน vagrant ดังต่อไปนี้ (ทริกเกอร์, shell-commander) และเราได้รับ python 2.7.6 ติดตั้งบนเครื่อง (ซึ่งไม่ใช่ปลั๊กอิน thioose) และหลังจาก ansible สามารถปรับใช้

มันเป็นการทดสอบครั้งสุดท้ายของเรามิฉะนั้นเรากำลังจะรวมการติดตั้งนี้ในคำสั่งเชลล์ในไฟล์ Vagrant

หวังว่ามันจะช่วยใครซักคน


2
หากคุณใช้ Ansible โซลูชัน Ansible ด้านล่างคือการแก้ไขที่ถูกต้อง หวังว่า Vagrant จะติดตั้งให้คุณโดยบังเอิญเนื่องจากผลข้างเคียงของปลั๊กอินบางตัวดูเหมือนจะถามปัญหา
พอลเบตต์คอตต์

ขอโทษนะที่ฉันจะเรียกใช้ ansible pretask ได้อย่างไรถ้ามันไม่มี python ??? ฉันลองวิธีแก้ปัญหาและมันล้มเหลวในการตั้งค่างานดังนั้นเหตุการณ์ก่อนงานก่อน คำสั่งเชลล์คนจรจัดในไฟล์คนจรจัดเป็นวิธีที่ดีที่สุดที่จะทำ (สำหรับกรณีคนจรจัดแน่นอน) แต่ฉันเพิ่งสังเกตเห็นว่าปลั๊กอินคนจรจัดที่ฉันติดตั้งบน dev ของฉันทำงานได้ดี ฉันไม่ได้พึ่งปลั๊กอิน แต่ใช้ไฟล์คนจรจัดฉันแค่ชี้ให้เห็นว่ามันใช้งานได้กับปลั๊กอินด้วย แต่ไฟล์คนจรจัดเป็นตัวเลือกที่ดีกว่า (สำหรับระบบอัตโนมัติ) เพราะคุณไม่ต้องทำอะไรด้วยตนเอง ทำลาย / จัดเตรียม
59

1
ฉันคัดลอกรหัสบล็อกนั้นอย่างถูกต้องเหมือนเดิมและทำงานได้ตามที่อธิบายไว้ก่อนที่คุณจะโพสต์คำตอบของคุณ ฉันเชื่อว่าคุณอาจไม่ได้ใส่gather_facts: noบรรทัดลง - ที่ต้องใช้ไพ ธ อน ความเป็นไปได้อีกอย่างก็คือคุณต้องใช้ไพ ธ อนในเครื่องโฮสต์ แต่ฉันเดาว่าจะทำให้คุณเกิดข้อผิดพลาดก่อนหน้านี้ในกระบวนการ
Paul Becotte

ฉันคัดลอกแปะด้วย แต่มันเป็นวันศุกร์ที่ทำงาน ฉันจำไม่ได้ว่าฉันใช้ส่วนที่รวบรวมได้ ยังไงก็ตามในคอมพิวเตอร์เครื่องอื่นถ้ามีมันอีกครั้งในเช้าวันนี้และฉันเพิ่งสั่งให้ไปที่ vagrantfile มันก็เพียงพอแล้วสำหรับฉันจนกว่าเราจะไปผลิตบนเซิร์ฟเวอร์จริง ฉันจะทดสอบอีกครั้งด้วยใจที่สดใหม่ (ไม่ใช่วันศุกร์เย็น) คำตอบ;)
wadoo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.