安全 |将当前批次中的已完成主机替换为下一批次中的主机

Ansible | Replacing finished hosts in the current batch with hosts from next batch

我实现了一个剧本来迭代 10 台主机。在这 10 台主机中,host_2host_8 很慢。我用于此设置的批处理大小为 2。我的预期结果是剧本将以 host_1host_2 开始,一旦以 host_1 结束(更快),它将从下一批中获取一台主机,而不是等待两台主机都完成才能开始下一批。不幸的是,使用带有 host_pinned 策略的剧本应该按我的预期工作,结果与免费策略相同,只有当两个主机都从当前批次完成时,下一批次才会开始。结果如下:

 PLAY [all] **************************************************************************************************************************************************************************************************************************************************************************

    TASK [stop : stop for specific hosts] ***********************************************************************************************************************************************************************************************************************************************

    TASK [stop : stop for specific hosts] ***********************************************************************************************************************************************************************************************************************************************
    skipping: [host_1]

    TASK [stop : debug] *****************************************************************************************************************************************************************************************************************************************************************
    skipping: [host_1]

    TASK [stop : stop for other hosts] **************************************************************************************************************************************************************************************************************************************************
    changed: [host_1 -> localhost]

    TASK [stop : debug] *****************************************************************************************************************************************************************************************************************************************************************
    ok: [host_1] => {
        "msg": "stop host_1 10:57:16.373188889"
    }

    TASK [update : update] **************************************************************************************************************************************************************************************************************************************************************
    changed: [host_1 -> localhost]

    TASK [update : debug] ***************************************************************************************************************************************************************************************************************************************************************
    ok: [host_1] => {
        "msg": "updating host_1 10:57:21.788484077\nupdated host_1 10:57:23.790958603"
    }

    TASK [start : start] ****************************************************************************************************************************************************************************************************************************************************************
    changed: [host_1 -> localhost]

    TASK [start : debug] ****************************************************************************************************************************************************************************************************************************************************************
    ok: [host_1] => {
        "msg": "start host_1 10:57:24.185053675"
    }

    TASK [start : debug] ****************************************************************************************************************************************************************************************************************************************************************
    changed: [host_2 -> localhost]

    TASK [stop : debug] *****************************************************************************************************************************************************************************************************************************************************************
    ok: [host_2] => {
        "msg": "stop host_2 10:57:16.415522282"
    }

    TASK [stop : stop for other hosts] **************************************************************************************************************************************************************************************************************************************************
    skipping: [host_2]

    TASK [stop : debug] *****************************************************************************************************************************************************************************************************************************************************************
    skipping: [host_2]

    TASK [update : update] **************************************************************************************************************************************************************************************************************************************************************
    changed: [host_2 -> localhost]

    TASK [update : debug] ***************************************************************************************************************************************************************************************************************************************************************
    ok: [host_2] => {
        "msg": "updating host_2 10:58:17.368744495\nupdated host_2 10:58:19.372907064"
    }

    TASK [start : start] ****************************************************************************************************************************************************************************************************************************************************************
    changed: [host_2 -> localhost]

    TASK [start : debug] ****************************************************************************************************************************************************************************************************************************************************************
    ok: [host_2] => {
        "msg": "start host_2 10:58:19.903162652"
    }

    PLAY [all] **************************************************************************************************************************************************************************************************************************************************************************

    TASK [stop : stop for specific hosts] ***********************************************************************************************************************************************************************************************************************************************

    TASK [stop : stop for specific hosts] ***********************************************************************************************************************************************************************************************************************************************
    skipping: [host_3]

    TASK [stop : debug] *****************************************************************************************************************************************************************************************************************************************************************

    TASK [stop : debug] *****************************************************************************************************************************************************************************************************************************************************************
    skipping: [host_4]

    TASK [stop : debug] *****************************************************************************************************************************************************************************************************************************************************************
    skipping: [host_3]

    TASK [stop : stop for other hosts] **************************************************************************************************************************************************************************************************************************************************

    TASK [stop : stop for other hosts] **************************************************************************************************************************************************************************************************************************************************
    skipping: [host_4]

    TASK [stop : stop for other hosts] **************************************************************************************************************************************************************************************************************************************************
    changed: [host_3 -> localhost]

    TASK [stop : debug] *****************************************************************************************************************************************************************************************************************************************************************
    ok: [host_3] => {
        "msg": "stop host_3 10:58:21.214160633"
    }

    TASK [update : update] **************************************************************************************************************************************************************************************************************************************************************

    TASK [update : update] **************************************************************************************************************************************************************************************************************************************************************
    changed: [host_4 -> localhost]

    TASK [stop : debug] *****************************************************************************************************************************************************************************************************************************************************************
    ok: [host_4] => {
        "msg": "stop host_4 10:58:21.329958767"
    }

    TASK [update : update] **************************************************************************************************************************************************************************************************************************************************************
    changed: [host_3 -> localhost]

    TASK [update : debug] ***************************************************************************************************************************************************************************************************************************************************************
    ok: [host_3] => {
        "msg": "updating host_3 10:58:26.831347906\nupdated host_3 10:58:28.833336983"
    }

    TASK [start : start] ****************************************************************************************************************************************************************************************************************************************************************

    TASK [start : start] ****************************************************************************************************************************************************************************************************************************************************************
    changed: [host_4 -> localhost]

    TASK [update : debug] ***************************************************************************************************************************************************************************************************************************************************************
    ok: [host_4] => {
        "msg": "updating host_4 10:58:26.953679789\nupdated host_4 10:58:28.970638599"
    }

    TASK [start : start] ****************************************************************************************************************************************************************************************************************************************************************
    changed: [host_3 -> localhost]

    TASK [start : debug] ****************************************************************************************************************************************************************************************************************************************************************
    ok: [host_3] => {
        "msg": "start host_3 10:58:29.662201166"
    }

    TASK [start : debug] ****************************************************************************************************************************************************************************************************************************************************************
    changed: [host_4 -> localhost]

    TASK [start : debug] ****************************************************************************************************************************************************************************************************************************************************************
    ok: [host_4] => {
        "msg": "start host_4 10:58:29.801761229"
    }

我是不是误解了host_pinned策略?您能否就如何使用 Ansible 实施我的方法提供一些指导?

您遇到的问题是由于您使用了批处理而不是您的策略插件。 ansible 文档明确指出,在整个批次完成之前,它不会继续进行(见下文)。不过,还有其他方法可以加快速度。您可以考虑使用 ssh pipelining(需要在 /etc/suoders 中禁用 requiretty)或什至有丝分裂剂。这是一篇关于该主题的文章:https://www.toptechskills.com/ansible-tutorials-courses/speed-up-ansible-playbooks-pipelining-mitogen/

https://docs.ansible.com/ansible/latest/user_guide/playbooks_delegation.html#rolling-update-batch-size

In the above example, if we had 4 hosts in the group ‘webservers’, 2 would complete the play completely before moving on to the next 2 hosts: