基于事实的Ansible循环以重新启动Kafka连接器失败任务

发布于 2025-02-05 11:23:13 字数 2387 浏览 2 评论 0原文

在这里,我想重新启动KAFKA连接任务,如果使用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”进行三次迭代。

Here I want to restart Kafka Connect tasks if they are in failed state using ansible-playbook, I have fetched connector tasks state using 'set_fact'
I want to create a loop over collected facts to restart Kafka Connector Tasks using connector name and task id.

  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

Getting below values from fact, which I need to push into loop

        "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
}

value need to be posted

    - 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

name of connector,
task ID want to use in loop.

In above I need to setup loop for tasks.
As we can see above connector 'confluent-test-1' have three tasks in failed state, so it need to be iterate three times with task 'confluent-test-1'.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

素罗衫 2025-02-12 11:23:13

这是您要通过上述 filter 。 过滤器引用的示例

    - 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) }}"

This is a typical case where you want to use subelements, either through the aforementioned filter or lookup. Here is an example using the filter

    - 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) }}"

References worth to read:


You can actually remove your last unnecessary set_fact task with e.g. the following construct:

    - 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) }}"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文