-
什么是
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