与this类似的问题,但我知道任务是什么,并且在标签和角色之间找不到多少区别。
在我看来,标签可能是一个更简单的角色版本,只能通过--tags
和--skip-tags
CLI参数访问它们。
另一方面,角色用于"自动加载"任务和变量之类的东西?
请解释使用角色的好处,因为在我看来,角色要求你为不同的部分(任务,变量等)提供不同的yaml文件,我可以使用{{1}使用更少的代码来完成}和include
指令。
答案 0 :(得分:3)
标签和角色是不同的东西。
角色用于汇总执行某些操作的某些任务组,例如一个角色可以包含安装某些服务的任务,第二个角色任务可以配置此服务。
每个角色都有自己的目录结构:
site.yml
webservers.yml
fooservers.yml
roles/
common/
tasks/
handlers/
files/
templates/
vars/
defaults/
meta/
webservers/
tasks/
defaults/
meta/
因此,对于您可以定义的每个角色,例如变量,模板,任务等。它使Ansible脚本清晰透明。另一个优点是您可以在不同的剧本中重复使用角色。
所以不要在单个剧本中定义所有任务,如果剧本包含许多任务,这可能会变得有点混乱:
- name: Install nginx and mysql
hosts: all
become: yes
tasks:
- name: Install nginx
...
- name: Configure nginx
...
- name: Install mysql
...
- name: Configure mysql
...
您可以创建角色并包含它们:
- name: Install nginx and mysql
hosts: all
become: yes
roles:
- nginx
- mysql
我建议您查看examples where roles are used。
运行ansible-playbook
命令时使用标记来指示应执行哪些任务。
如果你有一个大型的剧本,那么在不运行整个剧本的情况下运行配置的特定部分可能会很有用。
因此可以标记一些角色/任务,并在执行playbook时仅运行/跳过它们。
答案 1 :(得分:2)
在我看来,标签可能是一个更简单的角色版本。
抱歉,这是完全错误的。
角色是独立的可重用单元(具有自己的变量,任务,处理程序甚至插件和模块!)。您可以在多个剧本中使用它们和/或在项目中播放它们。您可以在多个项目之间共享它们。您可以使用角色依赖项。您可以通过外部资源(例如Ansible Galaxy)重新分发它们。例如,角色nginx
用于安装和配置nginx服务器,角色apache
用于apache服务器。
标签用于仅执行项目中的特定任务。您可以使用标记标记播放/角色/任务。例如,标记config
以仅在nginx
和apache
角色中标记与配置相关的任务。所以稍后您可以执行ansible-playbook -t config site.yml
来为所有类型的服务器而不是整个playbook运行仅配置任务。