Ansible 中的角色和任务(以及标签)有什么区别?

What's the difference between roles and tasks (and tags) in Ansible?

我发现自己一直在 角色任务 之间感到困惑。

我知道标签是标记单个项目的一种方式,但我不知道如何使用它们。

假设我必须执行以下操作

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

Git
  Install git
  Clone some git repo

"Users" 和 "Git" 会是我在顶级 YML 文件中的两个主要角色吗?每个子项目(例如 "Install Git")都是一项任务吗?我会用标签标记每个子任务吗?还是我用标签来标记角色?

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

tl;dr一个任务就是一个声明(操作);角色是对任务进行分组的多种方式之一。

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

    一个任务被执行并有一个结果(ok,changed,failed)。

    在大多数情况下,任务调用负责幂等性的操作模块,使任务成为编程的声明单元。

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

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

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

Would "Users" and "Git" be my two main roles in the top level YML file?

在 Ansible 中没有单一的组织方式。您可以使用不同的结构获得相同的结果:角色、包含、条件等。

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