Score:2

Ansible ค้นหาชื่อไดเร็กทอรีพาเรนต์ของไฟล์

ธง id

ฉันกำลังพยายามรับชื่อไดเร็กทอรีหลักของไฟล์ที่ระบุโดยรูปแบบ

ฐาน/tool1/sub/test.log
ฐาน/tool2/abc/values.log
ฐาน/tool3/sub/test.log

ฉันต้องการรับทุกเส้นทางที่แน่นอนของไดเร็กทอรีซึ่งจะต้องค้นหา test.log ดังนั้น ฐาน/เครื่องมือ1/ย่อย/ และ ฐาน/tool3/ย่อย/ จะเป็นการแข่งขันที่ฉันต้องการได้รับผล

- ชื่อ: "Loop-Playbook"
  โฮสต์: ทั้งหมด
  งาน:

  - ชื่อ: "กรองไฟล์ที่ตรงกัน"
    หา:
      เส้นทาง: "/ ฐาน"
      file_type: "ไฟล์"
      เรียกซ้ำ: "ใช่"
      รูปแบบ: "*test.log"
    ลงทะเบียน: files_matched

  - ชื่อ: "Debug files_matched เต็ม"
    แก้ปัญหา:
var: files_matched.files

  - ชื่อ: "Debug files_matched items"
    แก้ปัญหา:
      var: item.path | ชื่อ 
    วนซ้ำ: "{{ files_matched.files| แบน (ระดับ = 1) }}"
    loop_control:
      ป้ายกำกับ: "{{ item.path }}"

ฉันเดาว่าฉันต้องใช้บางอย่างเช่น {{ item.path | ชื่อเล่น }} แต่พูดตามตรงฉันไม่มีเงื่อนงำที่ฉันต้องกำหนดสิ่งนี้

ใครสามารถช่วยฉันออก?

Zeitounator avatar
fr flag
`debug: {var: varname}` คือการดีบักเนื้อหาตัวแปรที่ระบุโดย `varname` ในกรณีนี้ คุณต้องการใช้ `debug: {msg: "{{ item.path | dirname }}"}` เนื่องจากคุณกำลังคำนวณเนื้อหา jinja2 ซึ่งจำเป็นต้องขยาย โดยปกติแล้ว คุณจะต้องระบุเอาต์พุตของสคริปต์และอธิบายว่าสคริปต์นั้นแตกต่างจากสิ่งที่คุณคาดหวังอย่างไร เพื่อช่วยให้ผู้คนเข้าใจปัญหาของคุณและระบุข้อผิดพลาด
Alien Life Form avatar
ru flag
หากคุณต้องการเส้นทาง *สัมบูรณ์* คุณอาจต้องทำสิ่งนี้: https://stackoverflow.com/questions/53489453/get-absolute-path-of-file-on-local-host
Score:1
ธง cn

แผนที่() ใน Jinja สามารถแยกแอตทริบิวต์หรือใช้ตัวกรองกับลำดับ ใช้ทั้งสองอย่างเพื่อแปลงผลลัพธ์การค้นหาในห่วงโซ่ตัวกรองเดียว

---
- ชื่อ: "ชื่อพื้นฐานของผลการค้นหา"
  โฮสต์: localhost
  Gather_facts: เท็จ

  วาร์:
    ไฟล์ทดสอบ:
    - ฐาน/tool1/sub/test.log
    - ฐาน/tool2/abc/values.log
    - ฐาน/tool3/sub/test.log

  งาน:
  - ชื่อ: "ตั้งค่ากรณีทดสอบ"
    บล็อก:

    - เทมไฟล์:
        สถานะ: ไดเร็กทอรี
      ลงทะเบียน: mktemp

    - ไฟล์:
        เส้นทาง: "{{ ( mktemp.path ~ '/' ~ item ) | dirname }}"
        สถานะ: ไดเร็กทอรี
      วนซ้ำ: "{{ ไฟล์ทดสอบ }}"

    - ไฟล์:
        เส้นทาง: "{{ mktemp.path ~ '/' ~ รายการ }}"
        สถานะ: สัมผัส
      วนซ้ำ: "{{ ไฟล์ทดสอบ }}"


  - ชื่อ: "กรองไฟล์ที่ตรงกัน"
    หา:
      เส้นทาง: "{{ mktemp.path }}"
      file_type: "ไฟล์"
      เรียกซ้ำ: "ใช่"
      # รูปแบบจับคู่กับชื่อฐานแล้ว
      # อย่าใช้ไวด์การ์ดนำหน้า ให้จับคู่ "test.log" เท่านั้น
      รูปแบบ: "test.log"
    ลงทะเบียน: files_matched

  - ชื่อ: "Debug files_matched เต็ม"
    แก้ปัญหา:
       var: files_matched.files
       ความฟุ่มเฟือย: 1

  - ชื่อ: "พบไดเร็กทอรี"
    แก้ปัญหา:
      ข้อความ: "{{ testdirnames }}"
    วาร์:
      # แผนที่เพื่อแยกแอตทริบิวต์
      แผนที่ # เพื่อใช้ตัวกรอง
      #(จะทำอย่างใดอย่างหนึ่งก็ได้)
      # รายการตัวกรองเพื่อใช้วัตถุตัวสร้างใด ๆ ที่ส่งคืนโดย Jinja
      testdirnames: "{{ files_matched.files | map(attribute='path') | map('dirname') | list }}"

เอาท์พุต:

$ ansible-playbook sf1073762.yml

เล่น [ชื่อพื้นฐานของผลการค้นหา] ******************************************** *******************************************

งาน [tempfile] *********************************************** ************************************************** ******
เปลี่ยนแล้ว: [localhost]

งาน [ไฟล์] *********************************************** ************************************************** **********
เปลี่ยน: [localhost] => (item=base/tool1/sub/test.log)
เปลี่ยนแล้ว: [localhost] => (item=base/tool2/abc/values.log)
เปลี่ยน: [localhost] => (item=base/tool3/sub/test.log)

งาน [ไฟล์] *********************************************** ************************************************** **********
เปลี่ยน: [localhost] => (item=base/tool1/sub/test.log)
เปลี่ยนแล้ว: [localhost] => (item=base/tool2/abc/values.log)
เปลี่ยน: [localhost] => (item=base/tool3/sub/test.log)

งาน [กรองไฟล์ที่ตรงกัน] ******************************************** ***********************************************
ตกลง: [localhost]

งาน [Debug files_matched เต็ม] ******************************************** ******************************************
การข้าม: [localhost]

TASK [พบไดเร็กทอรี] ********************************************* ************************************************** ******
ตกลง: [localhost] => {
    "ข้อความ": [
        "/tmp/ansible.Nc0b6i/base/tool1/sub",
        "/tmp/ansible.Nc0b6i/base/tool3/sub"
    ]
}

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา