Ansible - 标签和角色之间的区别

时间:2017-09-27 18:52:38

标签: ansible

this类似的问题,但我知道任务是什么,并且在标签和角色之间找不到多少区别。

在我看来,标签可能是一个更简单的角色版本,只能通过--tags--skip-tags CLI参数访问它们。

另一方面,角色用于"自动加载"任务和变量之类的东西?

请解释使用角色的好处,因为在我看来,角色要求你为不同的部分(任务,变量等)提供不同的yaml文件,我可以使用{{1}使用更少的代码来完成}和include 指令。

2 个答案:

答案 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以仅在nginxapache角色中标记与配置相关的任务。所以稍后您可以执行ansible-playbook -t config site.yml来为所有类型的服务器而不是整个playbook运行仅配置任务。