ตัวแปรที่มีเส้นทางไปยัง ansible-playbook ปัจจุบันที่กำลังดำเนินการอยู่?


113

มีตัวแปร ansible ที่มีเส้นทางสัมบูรณ์ไปยัง ansible-playbook ปัจจุบันที่กำลังดำเนินการอยู่หรือไม่?

บริบทบางอย่าง: ฉันกำลังรัน / สร้างสคริปต์ ansible localhostเพื่อกำหนดค่า mysql docker และต้องการเมานต์ปริมาณข้อมูลที่สัมพันธ์กับสคริปต์ ansible

ตัวอย่างเช่นสมมติว่าผมได้เช็คเอาท์ที่เก็บไป~/branch1/แล้วผมทำงานผมก็คิดว่ามันควรบันทึกเสียงเพื่อansible-playbook dev.yml ~/branch1/.docker_volume/ถ้าฉันเรียกใช้จาก~/branch2นั้นควรกำหนดค่าระดับเสียงเป็น~/branch2/.docker_volume/.


2
คำถามที่น่าสนใจซึ่งฉันไม่เคยคิดมาก่อน อย่างไรก็ตามการที่คุณถามมันเป็นตัวบ่งชี้ว่าคุณอาจกำลังทำอะไรผิดพลาดอย่างมาก
Antonis Christofides

ฉันเห็นด้วยฉันจะอธิบายอย่างละเอียด @AntonisChristofides
Josh Unger

คำตอบ:


197

คุณสามารถใช้playbook_dirตัวแปร


2
ฉันประสบปัญหาที่คล้ายกันและคำตอบของคุณสามารถแก้ไขได้ ขอบคุณ. อย่างไรก็ตามฉันไม่พบสถานที่ใด ๆ ที่playbook_dirมีการบันทึกตัวแปร คุณช่วยชี้ให้ฉันดูเอกสารได้ไหม หรือคุณสามารถอธิบายได้ว่าคุณรู้เกี่ยวกับตัวแปรนี้ได้อย่างไร
slayedbylucifer

3
ฉันพบในรหัส ansible: github.com/ansible/ansible/blob/…
Seva Poliakov

2
นอกจากนี้ยังมี repo github.com/lorin/ansible-quickref ที่น่าสนใจพร้อมตัวแปรทั้งหมด
Seva Poliakov

46

ดูเหมือนจะไม่มีตัวแปรที่รองรับสิ่งที่คุณต้องการ

อย่างไรก็ตามการอ้างถึงเอกสาร :

นอกจากนี้ยังมีinventory_dirชื่อพา ธ ของไดเร็กทอรีที่มีไฟล์โฮสต์สินค้าคงคลังของ Ansible inventory_fileเป็นชื่อพา ธ และชื่อไฟล์ที่ชี้ไปยังไฟล์โฮสต์สินค้าคงคลังของ Ansible

playbook_dir มีไดเร็กทอรีฐานของ playbook

และสุดท้ายrole_pathจะส่งคืนชื่อพา ธ ของบทบาทปัจจุบัน (ตั้งแต่ 1.8) สิ่งนี้จะใช้ได้เฉพาะในบทบาทเท่านั้น

ขึ้นอยู่กับการตั้งค่าของคุณวิธีการเหล่านั้นหรือ$ pwdตามหลักการอาจเพียงพอ


2

น่าเสียดายที่ไม่มี ในความเป็นจริงเส้นทางสัมบูรณ์ไม่มีความหมาย (และอาจทำให้สับสน) ในบริบทของวิธีการทำงานของ Ansible โดยสรุปเมื่อคุณเรียกใช้ playbook สำหรับแต่ละงาน Ansible จะคัดลอกโมดูลที่เกี่ยวข้องกับงานไปยังไดเร็กทอรีชั่วคราวบนเครื่องเป้าหมายจากนั้นเรียกใช้โมดูลด้วยพารามิเตอร์ที่จำเป็น ดังนั้นเส้นทางที่แน่นอนบนเครื่องเป้าหมายจึงเป็นเพียงไดเร็กทอรีชั่วคราวที่มีไฟล์ชั่วคราวเพียงไม่กี่ไฟล์เท่านั้นและยังไม่รวมถึง playbook ฉบับเต็มด้วยซ้ำ นอกจากนี้การรู้เส้นทางแบบเต็มของไฟล์บนเซิร์ฟเวอร์ Ansible นั้นค่อนข้างไร้ประโยชน์ในเครื่องเป้าหมายเว้นแต่คุณจะจำลองแผนผังไดเร็กทอรี Ansible ทั้งหมดบนเป้าหมาย

หากต้องการดูตัวแปรทั้งหมดที่ Ansible กำหนดคุณสามารถรันคำสั่งต่อไปนี้ :

$ ansible -m setup hostname

อะไรคือเหตุผลที่คุณคิดว่าคุณจำเป็นต้องรู้เส้นทางที่สมบูรณ์ไปยัง Playbook?


ขอบคุณบรูซฉันแก้ไขคำถามเพื่ออธิบายรายละเอียดเกี่ยวกับสิ่งที่ฉันพยายามทำ
Josh Unger

6
วิถีท้องถิ่นที่แน่นอนไม่มีความหมายเลย ตัวอย่างเช่นสามารถใช้เพื่อเรียกใช้คำสั่งภายในเครื่องและ / หรือค้นหาไฟล์หรือบริการในเครื่องอื่น ๆ ซึ่งไม่สามารถรวมอยู่ในการกำหนดค่า ansible โดยตรง ข้อเท็จจริงที่ว่า ansible มีlocal_actionโมดูลหมายความว่ามีกรณีการใช้งานที่ถูกต้องสำหรับสิ่งนี้
Cray

1

ฉันใช้ Playbook แบบนี้เพื่อทดสอบบทบาทของฉันในเครื่อง:

---
- hosts: localhost
  roles:
     - role: .

แต่สิ่งนี้หยุดทำงานกับ Ansible v2.2

ฉันแก้ปัญหาดังกล่าวข้างต้นของ

---
- hosts: all
  tasks:
    - name: Find out playbooks path
      shell: pwd
      register: playbook_path_output
    - debug: var=playbook_path_output.stdout

และสร้างโฮมไดเร็กทอรีของฉันไม่ใช่ "ไดเร็กทอรีการทำงานปัจจุบัน"

ฉันตัดสินด้วย

---
- hosts: all
  roles:
    - role: '{{playbook_dir}}'

ตามวิธีแก้ปัญหาข้างต้น


1

ไม่มีตัวแปร build-in สำหรับจุดประสงค์นี้ แต่คุณสามารถค้นหาพา ธ สัมบูรณ์ของ playbook ได้ตลอดเวลาด้วยคำสั่ง "pwd" และลงทะเบียนเอาต์พุตเป็นตัวแปร

- name: Find out playbook's path
  shell: pwd
  register: playbook_path_output
- debug: var=playbook_path_output.stdout

ขณะนี้เส้นทางพร้อมใช้งานในตัวแปร playbook_path_output.stdout


7
ในกรณีนี้pwdจะไม่ส่งคืนเส้นทางของสคริปต์ playbook ส่งคืนไดเร็กทอรีปัจจุบันของกระบวนการ (โดยปกติansible-playbook) ทั้งสองไม่จำเป็นต้องเหมือนกันและขึ้นอยู่กับวิธีที่แน่นอนในการเรียกใช้ ansible
Cray

5
@ เครย์ถูกต้อง ไม่ต้องสนใจฉันแค่อยากจะพูดถึงว่า Ansible ได้เตรียมตัวแปรนี้ให้คุณแล้ว: debug: var=ansible_env.PWD(สิ่งนี้ทำให้ฉันมีไดเร็กทอรีที่ฉันใช้งานansible-playbookบนเครื่องท้องถิ่นและโฮมไดเร็กทอรีบนเซิร์ฟเวอร์ระยะไกล)
Nico du Toit

4
หรือสามารถดูไดเร็กทอรีปัจจุบันได้ที่:{{ lookup('env','PWD') }}
isedwards
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.