Score:1

วิธีใช้เอาต์พุตของคำสั่งภายในค่า ini_file ansible

ธง ve

ฉันต้องการตั้งค่าภายในไฟล์ ini_file แต่ค่านี้เป็นแฮช MD5 ของเวลาปัจจุบัน (ฉันไม่กลัวที่จะแทนที่ค่าโดยไม่ตั้งใจ หรือเรียกใช้สองครั้งอย่างน่าอัศจรรย์และมีค่าเดียวกันในสองเซิร์ฟเวอร์ที่แตกต่างกัน)

นี่คือสิ่งที่ฉันลอง แต่ได้รับคำสั่งเป็นค่าในไฟล์เท่านั้น (ไม่แน่ใจว่าทำไมฉันถึงคิดว่ามันใช้งานได้ ... ):

- ชื่อ: แทนที่ HardwareID ด้วย MD5 ใหม่
      ini_file:
        เส้นทาง: /etc/app/config.ini
        ส่วน: ค่าเริ่มต้น
        ตัวเลือก: hardware_token
        ค่า: $(วันที่ | md5sum | ตัด -d" " -f1)

มีวิธีง่ายๆในการทำให้มันใช้งานได้หรือไม่?

Michael Hampton avatar
cz flag
นั่นเป็นเพียง md5sum ของสตริงสุ่ม มันสำคัญไหมว่าสตริงอยู่ในรูปแบบใด?
Score:1
ธง cz

Ansible สามารถสร้างสตริงวันที่และเวลาของตัวเอง และทำผลรวม MD5 ของตัวเองโดยไม่ต้องเรียกใช้โปรแกรมภายนอก พิจารณา:

---
- โฮสต์: localhost
  การเชื่อมต่อ: ท้องถิ่น
  งาน:
    - แก้ปัญหา:
        msg: "{{ ansible_date_time.iso8601 | hash('md5') }}"

โปรดทราบว่า ansible_date_time มีครั้งสุดท้ายที่คุณรวบรวมข้อเท็จจริงจากเซิร์ฟเวอร์ระยะไกล ไม่จำเป็นต้องเป็นเวลาปัจจุบัน หากคุณรวบรวมข้อมูลเกี่ยวกับการเรียกใช้ playbook ทุกครั้ง สิ่งนี้ไม่ควรเป็นปัญหา

Guilherme Richter avatar
ve flag
ฉันไม่รู้ว่า Ansible มี "ฟังก์ชัน" ดั้งเดิมเหล่านั้น ดีใจที่ฉันถามคำถามนี้
Score:0
ธง br

ถาม: "จะใช้เอาต์พุตของคำสั่งภายในค่า Ansible ini_file ได้อย่างไร"

A: รีจิสเตอร์ผลลัพธ์ของคำสั่งและใช้เป็นค่า เช่น

- โฮสต์: test_24
  Gather_facts: เท็จ
  งาน:
    - เชลล์: 'วันที่ | md5sum | ตัด -d" " -f1'
      ลงทะเบียน: ผลลัพธ์
      check_mode: เท็จ
    - แก้ปัญหา:
        var: ผลลัพธ์
    - ชื่อ: แทนที่ HardwareID ด้วย MD5 ใหม่
      ini_file:
        เส้นทาง: etc/app/config.ini
        ส่วน: ค่าเริ่มต้น
        ตัวเลือก: hardware_token
        ค่า: "{{ result.stdout }}"

ให้ (ทำงานกับ --check --diff)

งาน [แทนที่ HardwareID ด้วย MD5 ใหม่] ***********************************
--- ก่อน: etc/app/config.ini (เนื้อหา)
+++ หลัง: etc/app/config.ini (เนื้อหา)
@@ -0,0 +1,3 @@
+
+[ค่าเริ่มต้น]
+hardware_token = ba3f11c4f1ecfe9d1e805dc8c8c8b149

เปลี่ยน: [test_24]

การใช้ข้อเท็จจริง Ansible ง่ายกว่าหากคุณต้องการใช้ข้อมูลและเวลาเป็นอินพุต ตัวอย่างเช่นพจนานุกรม ansible_date_time เก็บวันที่และเวลาไว้หากคุณรวบรวมข้อเท็จจริง ใน playbook เราตั้งค่า Gather_facts: เท็จ. âด้วยเหตุนี้พจนานุกรมจึงไม่ได้กำหนดไว้

    - แก้ปัญหา:
        var: ansible_date_time.iso8601

ให้

ตกลง: [test_24] => 
  ansible_date_time.iso8601: ตัวแปรไม่ได้ถูกกำหนด!

คุณจะต้องรวบรวมข้อเท็จจริง Gather_facts: จริง เมื่อคุณเริ่มเล่นหรือวิ่ง ติดตั้ง, เช่น.

    - ติดตั้ง:
        Gather_subset: นาที
    - แก้ปัญหา:
        var: ansible_date_time.iso8601

ให้

ตกลง: [test_24] => 
  ansible_date_time.iso8601: '2021-07-29T21:32:26Z'

สิ่งนี้ใช้ไม่ได้จริงเพราะคุณต้องเรียกใช้เพื่อให้ได้เวลาปัจจุบัน ติดตั้ง. แทนตัวกรอง สตริฟไทม์ ให้เวลาปัจจุบันแก่คุณเสมอ เช่น

    - แก้ปัญหา:
        msg: "{{ '%Y-%m-%d %H:%M:%S' | strftime }}"

    - ชื่อ: แทนที่ HardwareID ด้วย MD5 ใหม่
      ini_file:
        เส้นทาง: etc/app/config.ini
        ส่วน: ค่าเริ่มต้น
        ตัวเลือก: hardware_token
        ค่า: "{{'%Y-%m-%d' | strftime | hash('md5') }}"

ให้

งาน [แก้ไขข้อบกพร่อง] *********************************************** *****************
ตกลง: [test_24] => 
  msg: '2021-07-29'

งาน [แทนที่ HardwareID ด้วย MD5 ใหม่] *************************************
--- ก่อน: etc/app/config.ini (เนื้อหา)
+++ หลัง: etc/app/config.ini (เนื้อหา)
@@ -0,0 +1,3 @@
+
+[ค่าเริ่มต้น]
+hardware_token = 5847924805aa614957022ed73d517e7e

หมายเหตุด้านข้าง: การใช้แฮชนี้อาจเป็นการค้นหาที่รวดเร็วมาก หากวันที่-เวลา (เป็นหน่วยวินาที) เป็นดัชนี

Guilherme Richter avatar
ve flag
ว้าว ฉันไม่คิดเลยว่าจะทำสิ่งเหล่านี้ได้ด้วย ansible นอกจากนี้ โซลูชันที่คุณเสนอยังดีกว่า "เพียงแค่คว้าเอาต์พุตของเชลล์และใช้ค่า"

โพสต์คำตอบ

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