📅  最后修改于: 2020-11-02 03:15:05             🧑  作者: Mango
在本章中,我们将学习什么是Ansible的高级执行。
这是一项非常重要的执行策略,其中一个人只需要执行一个执行,而不是整个剧本。例如,假设您只想停止服务器(以防生产问题出现),然后发布应用补丁程序,而您只想启动服务器。
在原始剧本中,停止和开始是同一剧本中不同角色的一部分,但这可以通过使用标签来解决。我们可以为不同的角色提供不同的标签(这些角色又将有任务),因此,基于执行者提供的标签,仅执行指定的角色/任务。因此,对于上面提供的示例,我们可以添加如下标签:
- {role: start-tomcat, tags: ['install']}}
以下命令有助于使用标签-
ansible-playbook -i hosts --tags "install" -vvv
使用以上命令,仅将调用start-tomcat角色。提供的标签区分大小写。确保将完全匹配传递给命令。
有两种方法可以在特定主机上执行特定步骤。对于特定角色,可以定义主机-有关应运行该特定角色的主机。
根据上面的示例,根据提供的主机,将仅调用各个角色。现在,在主机(清单文件)中定义了主机A和主机B。
一个不同的解决方案可能是使用变量定义剧本的主机,然后通过–extra-vars传入特定的主机地址-
# file: user.yml (playbook)
---
- hosts: '{{ target }}'
user: ...
playbook contd….
ansible-playbook user.yml --extra-vars "target = ""
如果未定义{{target}},则剧本不执行任何操作。如果需要,还可以通过hosts文件中的组。如果没有提供额外的变量,这不会造成伤害。
$ ansible-playbook user.yml --extra-vars "target = " --listhosts