Ansible - 高级执行

在本章中,我们将了解Ansible的高级执行情况.

如何限制任务执行

这是非常重要的执行策略,其中只需执行一次执行而不是整个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}},则剧本不会执行任何操作.如果需要,也可以通过hosts文件传递.如果没有提供额外的变量,这不会有害.

定位单个主机的Playbook

$ ansible-playbook user.yml --extra-vars "target = <your hosts variable>" --listhosts