📜  Ansible-高级执行

📅  最后修改于: 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