Điểm:1

Cách sử dụng đầu ra của lệnh bên trong giá trị ini_file ansible

lá cờ ve

Tôi muốn đặt một giá trị bên trong tệp ini_file, nhưng giá trị này là hàm băm MD5 của thời điểm hiện tại. (Tôi không sợ vô tình thay thế giá trị hoặc chạy nó hai lần một cách kỳ diệu và có cùng giá trị ở hai máy chủ khác nhau.)

Đây là những gì tôi đã thử, nhưng chỉ nhận được lệnh làm giá trị trong tệp (không chắc tại sao tôi nghĩ nó sẽ hoạt động ...):

- tên: Thay thế HardwareID bằng MD5 mới
      ini_file:
        đường dẫn: /etc/app/config.ini
        phần: MẶC ĐỊNH
        tùy chọn: phần cứng_token
        giá trị: $(date | md5sum | cut -d" " -f1)

Có một cách đơn giản để làm cho nó hoạt động?

Michael Hampton avatar
lá cờ cz
Đó chỉ là md5sum của một số chuỗi ngẫu nhiên. Điều quan trọng là chuỗi ở định dạng nào?
Điểm:1
lá cờ cz

Ansible có thể tạo các chuỗi ngày và giờ của riêng mình và tính tổng MD5 của riêng mình mà không cần gọi các chương trình bên ngoài. Xem xét:

---
- máy chủ: localhost
  kết nối: cục bộ
  nhiệm vụ:
    - gỡ lỗi:
        msg: "{{ ansible_date_time.iso8601 | hash('md5') }}"

Lưu ý rằng ansible_date_time chứa lần cuối cùng bạn thu thập thông tin từ máy chủ từ xa, không nhất thiết là thời điểm hiện tại. Nếu bạn luôn thu thập dữ kiện trên mỗi lần chạy playbook, thì đây không phải là vấn đề.

Guilherme Richter avatar
lá cờ ve
Tôi không biết Ansible có những "chức năng" riêng đó. Rất vui vì tôi đã hỏi câu hỏi này.
Điểm:0
lá cờ br

Hỏi: "Làm cách nào để sử dụng đầu ra của lệnh bên trong giá trị ini_file của Ansible?"

A: Đăng ký kết quả của lệnh và sử dụng nó làm giá trị, ví dụ:

- máy chủ: test_24
  thu thập_facts: sai
  nhiệm vụ:
    - vỏ: 'ngày | md5sum | cắt -d" " -f1'
      đăng ký: kết quả
      check_mode: sai
    - gỡ lỗi:
        var: kết quả
    - tên: Thay thế HardwareID bằng MD5 mới
      ini_file:
        đường dẫn: etc/app/config.ini
        phần: MẶC ĐỊNH
        tùy chọn: phần cứng_token
        giá trị: "{{ result.stdout }}"

đưa ra (chạy với --check --diff)

NHIỆM VỤ [Thay thế HardwareID bằng MD5 mới] ************************************
--- trước: etc/app/config.ini (nội dung)
+++ sau: etc/app/config.ini (nội dung)
@@ -0,0 +1,3 @@
+
+[MẶC ĐỊNH]
+hardware_token = ba3f11c4f1ecfe9d1e805dc8c8c8b149

đã thay đổi: [test_24]

Việc sử dụng các sự kiện Ansible sẽ dễ dàng hơn nếu bạn muốn sử dụng dữ liệu và thời gian làm đầu vào. Ví dụ, từ điển ansible_date_time giữ ngày và thời gian nếu bạn thu thập dữ kiện. Trong playbook, chúng tôi thiết lập thu thập_facts: sai. âDo đó từ điển không định nghĩa

    - gỡ lỗi:
        biến: ansible_date_time.iso8601

cho

được rồi: [test_24] => 
  ansible_date_time.iso8601: BIẾN KHÔNG ĐƯỢC XÁC ĐỊNH!

Bạn sẽ phải thu thập sự thật thu thập_sự thật: đúng khi bạn bắt đầu chơi hoặc chạy cài đặt, ví dụ.

    - cài đặt:
        tập hợp_subset: tối thiểu
    - gỡ lỗi:
        biến: ansible_date_time.iso8601

cho

được rồi: [test_24] => 
  ansible_date_time.iso8601: '2021-07-29T21:32:26Z'

Điều này không thực tế lắm vì để có được thời gian hiện tại, bạn phải chạy cài đặt. Thay vào đó, bộ lọc strftime luôn cung cấp cho bạn thời gian hiện tại, ví dụ:

    - gỡ lỗi:
        msg: "{{ '%Y-%m-%d %H:%M:%S' | strftime }}"

    - tên: Thay thế HardwareID bằng MD5 mới
      ini_file:
        đường dẫn: etc/app/config.ini
        phần: MẶC ĐỊNH
        tùy chọn: phần cứng_token
        giá trị: "{{'%Y-%m-%d' | strftime | hash('md5') }}"

cho

NHIỆM VỤ [gỡ lỗi] ************************************************ ******************
được rồi: [test_24] => 
  msg: '2021-07-29'

NHIỆM VỤ [Thay thế HardwareID bằng MD5 mới] ***************************************
--- trước: etc/app/config.ini (nội dung)
+++ sau: etc/app/config.ini (nội dung)
@@ -0,0 +1,3 @@
+
+[MẶC ĐỊNH]
+phần cứng_token = 5847924805aa614957022ed73d517e7e

Là một lưu ý phụ: Sử dụng hàm băm này có thể tìm kiếm rất nhanh nếu ngày giờ (tính bằng giây) là chỉ mục.

Guilherme Richter avatar
lá cờ ve
Chà, tôi không biết mình có thể làm một số việc đó trong ansible. Ngoài ra, giải pháp đề xuất của bạn tốt hơn nhiều so với "chỉ lấy đầu ra của trình bao và sử dụng giá trị".

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.