如果没有指定,ansible-playbook会强制限制任务的执行(可以使用-l / –limit选项)并终止执行

简而言之

    • ansible-playbook で –limit または -l を強制させたい

ansible-playbookでlimitオプションを強制する(無指定の場合失敗させる)のように ungrouped を使うのは、ダイナミックインベントリ使用時や管理外の(でも対象になってしまう)インスタンスがある場合に不便
余計な制限を playbook 以外にかけたくない(playbookだけで完結したい)

- name: limit
  hosts: all
  gather_facts: no

  pre_tasks:
  - name: force use limit
    fail:
      msg: "use -l or --limit option when run."
    when: ansible_limit is not defined
    run_once: True

  tasks:
  - name: ansible_limit
    debug:
      msg: "{{ ansible_limit }}"

没关系,小事情不要紧。

$ ansible-playbook playbooks/limit.yml

PLAY [limit] ************************************************************************************************************

TASK [force use limit] ************************************************************************************************************
fatal: [xxxxxxxxxx]: FAILED! => {"changed": false, "msg": "use -l or --limit option when run."}

NO MORE HOSTS LEFT ************************************************************************************************************

PLAY RECAP ************************************************************************************************************
xxxxxxxxxx           : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0


$ ansible-playbook playbooks/limit.yml -l localhost

PLAY [limit] *********************************************************************************************************

TASK [force use limit] *********************************************************************************************************
skipping: [localhost]

TASK [ansible_limit] *********************************************************************************************************
ok: [localhost] => {
    "msg": "localhost"
}

PLAY RECAP *********************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0

冗长不必要的细节

    • pre_tasks にすることで早い段階で処理(もちろんどこにでも書けるのでいくつか処理してから止めるのもできる)

 

    • -l に何も値を与えないと ansible がエラーにしてくれる

 

    • -l に値を与えてターゲットホストがなくなっても ansible がエラーにしてくれる

 

    ansible_limit は 2.5 くらいからの機能 see Special Variables
广告
将在 10 秒后关闭
bannerAds