Ansible中角色和任务(和标签)之间的区别是什么?

use*_*003 3 ansible ansible-role

我发现自己总是在角色任务之间感到困惑.

我认为标签是标记单个项目的一种方式,但我很困惑我如何使用它们.

假设我必须做以下事情

Users
  Create a user named "deploy"
  Add ssh key for "deploy" user

Git
  Install git
  Clone some git repo
Run Code Online (Sandbox Code Playgroud)

"用户"和"Git"会成为我在顶级YML文件中的两个主要角色吗?每个子项目(例如"安装Git")都是一项任务吗?我会用标签标记每个子任务吗?或者我用标签标记角色?

只是寻找Ansible层次结构的概述.

tec*_*raf 6

tl; dr任务是一个单一的声明(操作); 角色是分组任务的众多方法之一.

  • Ansible中的任务是一个基本工作单元,与其他语言中的一行代码相对应.

    执行任务并产生结果(确定,更改,失败).

    在大多数情况下,任务调用一个动作模块来处理幂等性,使任务成为编程的声明单元.

    但是,有些任务执行其他命令的元操作,包含和包装.

  • Ansible中的一个角色是许多抽象层之一,用于将一组任务(以及默认数据,模板,处理程序,文件)分组为更复杂的定义.

    角色隐藏实现细节(类似于其他语言中的函数,过程,方法)并允许轻松重用代码.

"用户"和"Git"会成为我在顶级YML文件中的两个主要角色吗?

在Ansible中没有单一的方法来组织事物.您可以使用不同的结构实现相同的结果:角色,包括,条件等.

你如何使用Ansible取决于你(和你组织)的目标:你可以创建Ansible playbooks,使它们读起来就像描述配置的完整,包含的线性文档; 或者您可以创建具有依赖关系,抽象级别和模块化体系结构的复杂配置.