Ansible 高级执行

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在hosts(清单文件)中定义。

备选方案

根据变量定义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不会执行任何操作。如果需要,还可以通过主机文件传递一个组。如果没有提供额外的变量,这不会造成任何损害。

针对单个主机的Playbook

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程