- Ansible 教程
- Ansible - 首页
- Ansible - 简介
- Ansible - 环境设置
- Ansible - YAML 基础
- Ansible - Ad hoc 命令
- Ansible - 剧本 (Playbooks)
- Ansible - 角色 (Roles)
- Ansible - 变量
- Ansible - 高级执行
- Ansible - 故障排除
- Ansible 有用资源
- Ansible - 快速指南
- Ansible - 有用资源
- 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 }},则剧本不会执行任何操作。如果需要,也可以通过主机文件中的组传递。如果没有提供额外的变量,这不会造成任何损害。
目标为单个主机的剧本
$ ansible-playbook user.yml --extra-vars "target = <your hosts variable>" --listhosts
广告