簡體   English   中英

基於事實的 Ansible 循環重啟 Kafka 連接器失敗的任務

[英]Ansible loop based on fact to Restart Kafka Connector Failed Tasks

在這里,如果 Kafka Connect 任務處於失敗狀態,我想使用 ansible-playbook 重新啟動它們,我已經使用“set_fact”獲取了連接器任務狀態我想在收集的事實上創建一個循環,以使用連接器名稱和任務 ID 重新啟動 Kafka 連接器任務。

  tasks:
    - name: Gethering Connector Names
      uri:
        url: "{{scheme }}://{{ server }}:{{ port_no }}/connectors"
        user: "{{ username }}"
        password: "{{ password }}"
        method: GET
        force_basic_auth: yes
        status_code: 200
      register: conn_stat
    - name: Checking for Connector status
      uri:
        url: "{{scheme }}://{{ server }}:{{ port_no }}/connectors/{{ abc_conn_name }}/status"
        user: "{{ username }}"
        password: "{{ password }}"
        method: GET
        force_basic_auth: yes
      loop: "{{ conn_name }}"
      loop_control:
        loop_var: abc_conn_name
      vars:
        conn_name: "{{ conn_stat.json }}"
      register: conn_stat_1
    - name: Gethering Failed task id
      set_fact:
        failed_connector_name_task_id: "{{ conn_stat_1 | json_query('results[].json[].{name: name ,id: [tasks[?state == `RUNNING`].id [] | [0] ]}')  }}"
    - name: Failed connector name with tasks id
      ansible.builtin.debug:
        var:  failed_connector_name_task_id

從事實中獲取低於值,我需要將其推入循環

        "failed_connector_name_task_id": [
            {
                "id": [
                    0
                    1
                ],
                "name": "test-connector-sample"
            },
            {
                "id": [
                    0
                    1
                ],
                "name": "confluent-connect"
            },
            {
                "id": [
                    0
                    1
                    2
                ],
                "name": "confluent-test-1"
            }
        ]
    },
    "changed": false
}

需要發布價值

    - name: Restart Connector Failed tasks 
      uri:
        url: "{{scheme }}://{{ server }}:{{ port_no }}/connectors/**{{name of connector}}**/tasks/**{{task ID}}**/restart"
        user: "{{ username }}"
        password: "{{ password }}"
        method: POST
        force_basic_auth: yes
        status_code: 200
      register: conn_stat

連接器的名稱,要在循環中使用的任務 ID

在上面我需要為任務設置循環。 正如我們在上面看到的連接器“confluent-test-1”有三個處於失敗狀態的任務,所以它需要用任務“confluent-test-1”迭代三次。

這是您想要通過上述過濾器查找使用子元素的典型情況。 這是使用過濾器的示例

    - name: Restart Connector Failed tasks 
      uri:
        url: "{{scheme }}://{{ server }}:{{ port_no }}/connectors/{{ item.0.name }}/tasks/{{ item.1 }}/restart"
        user: "{{ username }}"
        password: "{{ password }}"
        method: POST
        force_basic_auth: yes
        status_code: 200
      loop: "{{ failed_connector_name_task_id | subelements('id', skip_missing=True) }}"

值得一讀的參考資料:


您實際上可以使用以下構造刪除最后一個不必要的set_fact任務:

    - name: Restart Connector Failed tasks
      vars:
        failed_connector_name_task_id: "{{ conn_stat_1 | json_query('results[].json[].{name: name ,id: [tasks[?state == `RUNNING`].id [] | [0] ]}') }}"
      uri:
        url: "{{scheme }}://{{ server }}:{{ port_no }}/connectors/{{ item.0.name }}/tasks/{{ item.1 }}/restart"
        user: "{{ username }}"
        password: "{{ password }}"
        method: POST
        force_basic_auth: yes
        status_code: 200
      loop: "{{ failed_connector_name_task_id | subelements('id', skip_missing=True) }}"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM