Điểm:0

Sử dụng vòng lặp ansible cho đến khi với stdout_lines

lá cờ de

Tôi đang cố gắng sử dụng vòng lặp ansible cho đến khi đáp ứng điều kiện. tôi có thể sử dụng cho đến khi nếu đầu ra chỉ là một dòng, tuy nhiên nếu đầu ra là nhiều dòng, tôi sẽ cần sử dụng thiết bị xuất chuẩn_lines nhưng không làm như vậy.

Nếu đầu ra là một dòng:

- tên: kiểm tra trạng thái đồng bộ hóa
  vỏ: một số lệnh
  đăng ký: sync_status
  cho đến khi: sync_status.stdout == 'SSUS'

Nếu đầu ra là nhiều dòng, thì tôi thử sử dụng thiết bị xuất chuẩn_lines

- tên: kiểm tra trạng thái đồng bộ hóa
  vỏ: một số lệnh 
  đăng ký: sync_status
  cho đến khi: item.stdout_lines == 'SSUS'
  with_items: "{{ sync_status }}"

nhưng tôi có biến không xác định:

gây tử vong: [xxxxxxx]: THẤT BẠI! => {
    "msg": "'sync_status' không được xác định"
}

Tôi không muốn thực hiện nó trên một tác vụ riêng biệt vì khi đó sync_status đã được đăng ký trên tác vụ trước đó và tôi sẽ so sánh trạng thái cũ thay vì trạng thái hiện tại.

Vui lòng giúp đỡ.

lá cờ br
Bạn không thể sử dụng cả *loop* và *register* cùng một biến.
lá cờ br
Trường hợp sử dụng không rõ ràng. Bạn muốn làm gì khi điều kiện không được đáp ứng?
sloweriang avatar
lá cờ de
về cơ bản, nhiệm vụ này chỉ để kiểm tra trạng thái, khi điều kiện được đáp ứng, tôi sẽ tiến hành nhiệm vụ tiếp theo.
Điểm:0
lá cờ br

Ví dụ: được cung cấp tệp và playbook

vỏ> mèo test.txt 
XX

shell> cat playbook.yml
- máy chủ: localhost
  nhiệm vụ:
    - ansible.buildin.command:
        cmd: mèo test.txt
      đăng ký: sync_status
      cho đến khi: sync_status.stdout == 'SSUS'

nhiệm vụ sẽ thất bại

NHIỆM VỤ [ansible.buildin.command] ****************************************** **
KHÔNG THÀNH CÔNG - THỬ LẠI: ansible.buildin.command (còn 3 lần thử lại).
KHÔNG THÀNH CÔNG - THỬ LẠI: ansible.builtin.command (còn 2 lần thử lại).
KHÔNG THÀNH CÔNG - THỬ LẠI: ansible.buildin.command (còn 1 lần thử lại).
gây tử vong: [localhost]: KHÔNG THÀNH CÔNG! => đã thay đổi=đúng 
  cố gắng: 3
  cmd:
  - con mèo
  - test.txt
  đồng bằng: '0:00:00.003479'
  kết thúc: '2021-06-16 07:27:19.927499'
  rc: 0
  bắt đầu: '2021-06-16 07:27:19.924020'
  tiêu chuẩn: ''
  stderr_lines: <bỏ qua>
  tiêu chuẩn: XX
  stdout_lines: <bỏ qua>

Tuy nhiên, nếu bạn chèn chuỗi "SSUS" vào tệp trước hoặc trong khi kiểm tra, tác vụ sẽ thành công, ví dụ:.

NHIỆM VỤ [ansible.buildin.command] ****************************************** **
KHÔNG THÀNH CÔNG - THỬ LẠI: ansible.buildin.command (còn 3 lần thử lại).
KHÔNG THÀNH CÔNG - THỬ LẠI: ansible.builtin.command (còn 2 lần thử lại).
đã thay đổi: [máy chủ cục bộ]

Phù hợp với thông số nhu cầu của bạn.


Hỏi: "Nếu đầu ra là nhiều dòng, tôi sẽ cần sử dụng stdout_lines."

A: Kiểm tra sự hiện diện của chuỗi trong danh sách, ví dụ:

    - ansible.buildin.command:
        cmd: mèo test.txt
      đăng ký: sync_status
      cho đến khi: "'SSUS' trong sync_status.stdout_lines"
sloweriang avatar
lá cờ de
Xin chào, ví dụ: có nhiều dòng, một số có SSUS, một số có PAIR. Điều kiện của tôi là đảm bảo tất cả các dòng đều được đáp ứng chứ không chỉ một số dòng chứa từ khóa

Đă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.