Ansible – 高级执行
Ansible – 高级执行
在本章中,我们将学习什么是 Ansible 的高级执行。
如何按任务限制执行
这是一种非常重要的执行策略,只需要执行一次而不是整个剧本。例如,假设您只想停止服务器(以防出现生产问题),然后发布应用补丁,您只想启动服务器。
在原始剧本中,停止和开始是同一剧本中不同角色的一部分,但这可以通过使用标签来处理。我们可以为不同的角色(反过来会有任务)提供不同的标签,因此基于执行者提供的标签,只有指定的角色/任务被执行。因此,对于上面提供的示例,我们可以添加如下标签 –
- {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 在主机(清单文件)中定义。
替代解决方案
不同的解决方案可能是使用变量定义剧本的主机,然后通过–extra-vars传入特定的主机地址–
# file: user.yml (playbook) --- - hosts: '{{ target }}' user: ... playbook contd….
运行剧本
ansible-playbook user.yml --extra-vars "target = "<your host variable>"
如果 {{ target }} 未定义,则剧本不执行任何操作。如果需要,也可以传递来自主机文件的组。如果不提供额外的变量,这不会造成伤害。
针对单个主机的 Playbook
$ ansible-playbook user.yml --extra-vars "target = <your hosts variable>" --listhosts