> 文章列表 > ansible-playbook task 指定位置执行

ansible-playbook task 指定位置执行

ansible-playbook task 指定位置执行

文章目录

    • 执行顺序
    • 指定执行
      • --tags
      • –start-at
      • --skip-tags
      • --step

执行顺序

ansible-playbook task 指定位置执行
1.检查play中是否存在pre_tasks定义,存在的话则顺序执行pre_tasks中定义的所有tasks
2.如果存在pre_tasks定义,则检查是否存在触发handler,如存在则顺序执行相关触发handlers
3.检查是否存在roles定义,如存在则顺序执行roles下的所有tasks
4.检查是否存在task, 如存在则顺序执行所有定义的task
5.检查roles和task中是否存在触发handler,如存在顺序执行
6.检查是否存在post_tasks定义,存在则顺序执行post_tasks中定义的所有tasks
7.如果存在post_tasks,则检查post_tasks下面的tasks是否存在触发handlers,如存在则顺序执行

一个包含pre_tasks, roles和post_tasks的实例

---
- hosts: tag_ansible_group_windows_webserversserial: 1gather_facts: Falseconnection: winrmvars:ansible_ssh_port : 5986# These are the tasks to run before applying updates:pre_tasks:- name: Remove host from load balancing poollocal_action:module: ec2_elbregion: us-east-1instance_id: "{{ ec2_id }}"ec2_elbs: "ansible-windows-demo-lb"wait_timeout: 330state: 'absent'roles:- web# These tasks run after the roles:post_tasks:- name: Wait for webserver to come uplocal_action: wait_for host={{ inventory_hostname }} port=80 state=started timeout=80- name: Add host to load balancing poollocal_action:module: ec2_elbregion: us-east-1instance_id: "{{ ec2_id }}"ec2_elbs: "ansible-windows-demo-lb"wait_timeout: 330state: 'present'

指定执行

官方大致提供如下几个特性:对于测试或调试新的playbook很有帮助.

  • 1:tag
  • 2:start-at
  • 3:skip-tags
  • 4:step

Demo playbook:

---
- name: shutdown etcdservice: name=etcd state=stopped enabled=noignore_errors: yestags:- shutdown- name: del etcd dirshell: 'rm -rf {{ item }}'with_items:- { ETCD_DIR }tags:- deldir- name: create etcd dirfile:path: '{{ item }}'state: directorymode: 755with_items:- { ETCD_DIR }tags:- mkdir

–tags

如果你只想运行 playbook 中的”shutdown”和”mkdir”,你可以这样做

ansible-playbook example.yml – tags “shutdown,mkdir”

tag 特性是一个不错的功能,但如果真的是要维护一个大型的 playbook,还是建议将 playbook 按功能或应用拆分成多个 playbook,然后再在主 playbook include 其他子 playbook,这样即既利于维护也方便管理.

–start-at

从指定任务开始运行palybook以及分步运行playbook,如果你想从指定的任务开始执行playbook,可以使用–start-at选项:
以下命令就会在名为”deldir”的任务开始执行你的playbook.

ansible-playbook playbook.yml --start-at="deldir"

–skip-tags

如果你只想执行 playbook 中某个特定任务之外的所有任务,你可以这样做:

ansible-playbook example.yml – skip-tags “deldir”

–step

ansible-playbook playbook.yml --step比如你有个名为``deldir``的任务,playbook执行到这里会停止并询问:Perform task: deldir (y/n/c):“y”回答会执行该任务,
”n”回答会跳过该任务,
而”c”回答则会继续执行剩余的所有任务而不再询问你.

参考:

  • ansible-playbook运行步骤调度