Điểm:0

How to make Ansible run batch of tasks on few nodes but one by one (nodes running in cluster)

lá cờ cn

I have an ansible playbook which looks roughly like this:

- hosts: node1
      tasks:
      - name: get cluster state 
        shell: "RESTAPI 1 command"
      - name: put cluster in upgrade mode
        shell: "RESTAPI 2 command"
- hosts: node 1
      tasks:
      - name: upgrade Apache
        shell: "upgrade Apache command"
      - name: start Apache
        shell: "start Apache command"
- hosts: node 1
      tasks:
      - name: healthy check for Apache is running
        shell: "RESTAPI command"
- hosts: node 2
      tasks:
      - name: upgrade Apache
        shell: "upgrade Apache command"
      - name: start Apache
        shell: "start Apache command"
- hosts: node 2
      tasks:
      - name: healthy check for Apache is running
        shell: "RESTAPI command"
- hosts: node 3
      tasks:
      - name: upgrade Apache
        shell: "upgrade Apache command"
      - name: start Apache
        shell: "start Apache command"
- hosts: node 3
      tasks:
      - name: healthy check for Apache is running
        shell: "RESTAPI command"

I want to improve the playbook that will run as a loop because for each node I have same commands that should be exec on each node one by one because all nodes running in cluster and I need only one node will be in upgrade process at the same time. also I have few environment (Test/Dev) that I want to use this playbook but I have different nodes number in cluster how can I make run the playbook no matter how many nodes I have into the cluster?

Điểm:1
lá cờ in

Bạn có thể đặt tất cả các nhiệm vụ lặp lại trong một khối. Kết hợp với nối tiếp: 1 bạn đảm bảo rằng chỉ có một khối được thực thi tại một thời điểm.

- máy chủ: các nút
  nối tiếp: 1
  nhiệm vụ:
    - tên: nhận trạng thái cụm 
      shell: "Lệnh RESTAPI 1"
      run_once: có
    - tên: đặt cụm ở chế độ nâng cấp
      vỏ: "Lệnh RESTAPI 2"
      run_once: có
    - chặn:
      - tên: nâng cấp Apache
        shell: "nâng cấp lệnh Apache"
      - tên: bắt đầu Apache
        shell: "khởi động lệnh Apache"
      - tên: kiểm tra lành mạnh cho Apache đang chạy
        shell: "Lệnh RESTAPI"
# thử lại: 20
# trì hoãn: 15

Tôi giả sử rằng lệnh đặt cụm ở chế độ nâng cấp có thể chạy trên bất kỳ nút nào, vì vậy bạn chỉ cần sử dụng chạy một lần. Nếu đây không phải là trường hợp và nó phải được chạy trên một nút cụ thể, bạn có thể sử dụng khi nào hạn chế cho một máy chủ cụ thể.

Đối với sức khỏe kiểm tra các thông số sự chậm trễthử lại có thể được quan tâm, nếu có khả năng kiểm tra không thành công lúc đầu và thành công khi apache chạy đầy đủ.

Để sử dụng playbook trên các nhóm máy chủ khác nhau, bạn có thể sử dụng máy chủ: tất cả và sau đó giới hạn các máy chủ trong một nhóm trong khi thực hiện.

ansible-playbook upgrade.yml --limit dev_nodes
lá cờ cn
Xin chào @GeraldSchneider cảm ơn bạn đã trả lời, tôi đã cố chỉnh sửa tệp yml của mình dựa trên đề xuất của bạn nhưng tôi gặp lỗi cú pháp LỖI! 'uri' không phải là thuộc tính hợp lệ cho Khối `- máy chủ: các nút nối tiếp: 1 nhiệm vụ: - tên: nhận trạng thái cụm bạn: run_once: có chặn: - tên: bản sao sao chép: - tên: tập tin tập tin - tên: kiểm tra systemd hệ thống: - tên: blockinfile blockinfile # thử lại: 20 # trì hoãn: 15 `
lá cờ in
Điều đó khó đọc trong nhận xét, nhưng có vẻ như bạn sử dụng dấu hai chấm trong tên tác vụ. Bạn cần trích dẫn nó khi bạn làm điều đó.

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