-
什么是
Ansible角色?
就像在现实世界中给不同的人分配角色一样,让他们成为医生工程师, 宇航员, 警察,或者厨师。在Ansible的世界里, 你可以给服务器分配角色,让它们成为数据库服务器、Web服务器、Redis消息服务器或备份服务器。

在现实世界中分配一个角色意味着做一切需要做的事情。例如,使某人成为医生或工程师, 送人到医学院获得医学学位,完成住院医师计划, 并最终获得执业许可证。或者, 如果是工程师,那就去工程学院获得学士学位,获得研究生学位。
在自动化领域, 分配角色意味着做所有需要做的事情。例如服务器成为数据库服务器, 安装MySQL所需的先决条件安装MySQL软件包本身配置MySQL服务, 最后与我们的用户一起配置数据库。对于Web服务器,它将再次安装Nginx的先决条件, 安装Nginx包,配置Nginx服务和配置自定义网页。

到目前为止, 我们已经知道如何使用Ansible Playbook完成这些任务。这里有一个简单的Playbook可以做到这一点。但是, 如果能在剧本中做到这一点,为什么你需要角色呢?

在MySQL数据库上安装和执行基本配置的这组任务将仍然是最常见的。一旦一个人开发了这个Ansible Playbook,它就可以与数十万其他试图做同样事情的人分享,可以将这段代码打包到一个角色中,并在以后重用它, 而不是所有人都需要重头开始写这段代码。
Roles的作用其实就是便于分享你的Playbook,便于其他人使用。
下一次, 只需分配创建的角色, 在这样的Playbook中,无论是单台服务器还是数百台服务器, 您所需要得就是这些角色.因此, 角色的主要目的是使您的工作可重用,无论它是用于组织内的其他任务或项目, 还是用于全球其他人。例如下图的例子,可以把安装mysql的步骤定义成role,然后Playbook里面直接使用就行。

-
角色帮忙组织代码,
Ansible Galaxy社区
角色还可以帮助您在Ansible中组织代码。vars目录中这些任务使用的所有变量。任何默认值都将保存在defaults目录中。所有处理程序都将进入handlers目录。Playbook使用的任何模板都将进入templates目录。

角色还有助于与Ansible社区中的其他人共享您的代码。Ansible Galaxy就是这样一个社区,在那里你可以找到数千个角色, 几乎可以完成你能想到的任何任务。比如安装和配置不同的Web服务器、不同的数据库服务器、 自动化工具、监控工具、 打包工具、 安全软件等。因此, 在开始编写这些Playbook之前,可以先到这个社区搜索一下。可能有人已经为它创建了一个角色。

-
如何使用自己创建好的角色
那么, 如何开始使用角色呢?这很简单, 正如我们上面讨论的那样,我们创建角色所需的目录结构, 但您不必手动执行此操作。Ansible Galaxy有一个整洁的工具,可以为你创建一个骨架。
使用ansible-galaxy init命令初始化并创建目录结构,然后写好角色的相关代码。

那么, 您如何使用创建好的角色呢?假设我在一个名为“my-playbook”的目录中有playbook.yml,这个文件包含一个简单的剧本,用于在我的服务器上安装和配置MySQL。可以使用roles指令使用创建的mysql角色,
但是如果这样做,playbook.yml怎么知道mysql这个角色在哪里?可以在系统的任何位置创建该角色。playbook.yml如何找到那个角色?
有不同的方法来做到这一点。可以在我的剧本文件夹中创建一个名为roles的目录,并将创建的角色移到该目录下。当playbook.yml运行时,Ansible会在roles目录下查找名为MySQL的角色,这是一种方法。或者, 您可以将角色移动到系统上/etc/ansible/roles位置为角色指定的公用目录中。这是Ansible在剧本目录中找不到角色时搜索角色的默认位置。当然, 可以在Ansible配置文件中修改默认的roles路径。

创建角色并将其放置在角色目录中并在playbook中使用后,您可以通过GitHub存储库将其上传到Ansible Galaxy, 从而与社区共享。 -
如何使用Ansible Galaxy中的角色
相反, 您希望找到一个现有的角色, 并将其用于您的playbook中。要查找角色, 您可以从Ansible Galaxy UI进行搜索, 或使用ansible-galaxy search xx命令从命令行界面进行搜索。

要使用角色, 请使用角色名称运行ansible-galaxy install命令。该角色将被提取到/etc/ansible/roles位置的默认角色目录中。
现在可以在剧本中使用角色,方法是将相同的名称指定为字符串数组,即角色名称。另一种指定角色的方法是使用字典数组,这将允许您向角色传递其他参数。例如通过become指令提升权限来执行角色,指定或传递其他参数(如mysql_user_name选项),如下所示。

总之, 角色让开发、 重用和共享Ansible剧本变得非常容易。
若要将单一服务器设定为同时具有数据库和Web应用程序,可以使用下面左边的playbook需要将这两个角色指派给该服务器。要在不同的服务器上分别配置它, 可以在playbook创建两个Play(右边),每台服务器一个Play, 并为它们分配各自的角色.

-
查看当前安装的
ansible角色相关信息
要查看当前安装的角色列表,可以使用ansible-galaxy list命令。
要查看Ansible配置,请使用ansible-config dump命令。
在安装角色时,您可以使用-p选项将其安装在当前目录下的roles目录下。

更多关于Ansible的文章,请参考我的Ansible专栏:https://blog.csdn.net/u011069294/category_12331290.html



















