Ansible - 高级执行
在本章中,我们将了解什么是 Ansible 的高级执行。
如何限制任务的执行
这是一个非常重要的执行策略,一个人只需要执行一次执行而不是整个playbook。 例如,假设您只想停止一个服务器(以防出现生产问题),然后发布应用一个您只想启动该服务器的补丁。
在原始playbook中,停止和开始是同一playbook中不同角色的一部分,但这可以通过使用标签来处理。 我们可以为不同的角色(它们又会有任务)提供不同的标签,因此基于执行者提供的标签,只有指定的角色/任务才会被执行。 因此,对于上面提供的示例,我们可以添加如下标签 −
- {role: start-tomcat, tags: ['install']}}
以下命令有助于使用标签 −
ansible-playbook -i hosts <your yaml> --tags "install" -vvv
使用上述命令,只会调用 start-tomcat 角色。 提供的标签区分大小写。 确保将完全匹配传递给命令。
如何限制主机执行
有两种方法可以实现在特定主机上执行特定步骤。 对于特定角色,定义主机 - 即该特定角色应该运行哪些特定主机。
示例
- hosts: <A>
environment: "{{your env}}"
pre_tasks:
- debug: msg = "Started deployment.
Current time is {{ansible_date_time.date}} {{ansible_date_time.time}} "
roles:
- {role: <your role>, tags: ['<respective tag>']}
post_tasks:
- debug: msg = "Completed deployment.
Current time is {{ansible_date_time.date}} {{ansible_date_time.time}}"
- hosts: <B>
pre_tasks:
- debug: msg = "started....
Current time is {{ansible_date_time.date}} {{ansible_date_time.time}} "
roles:
- {role: <your role>, tags: ['<respective tag>']}
post_tasks:
- debug: msg = "Completed the task..
Current time is {{ansible_date_time.date}} {{ansible_date_time.time}}"
根据上面的示例,根据提供的主机,只会调用相应的角色。 现在我的主机 A 和 B 在主机(库存文件)中定义。
替代解决方案
另一种解决方案可能是使用变量定义 playbook 的主机,然后通过 --extra-vars 传入特定的主机地址 −
# file: user.yml (playbook)
---
- hosts: '{{ target }}'
user: ...
playbook contd….
运行playbook
ansible-playbook user.yml --extra-vars "target = "<your host variable>"
如果 {{ target }} 没有定义,playbook 什么也不做。 如果需要,也可以通过 hosts 文件中的组。 如果未提供额外的变量,这不会造成任何损害。
针对单个主机的playbook
$ ansible-playbook user.yml --extra-vars "target = <your hosts variable>" --listhosts