Ansible角色

发布于:2025-09-10 ⋅ 阅读:(18) ⋅ 点赞:(0)

Ansible角色

一、利用角色构造ansible playbook

随着开发更多的playbook,会发现有很多机会重复利用以前编写的playbook中的代码。或许,一个用于为某一应用配置MySQL数据库的play可以改变用途。通过利用不同的主机名、密码和用户来为另一个应用配置MySQL数据库。

但在现实中,这个play可能比较冗长且复杂,有许多包含或导入的文件,以及用于管理各种情况的任务和处理程序。将所有这些代码复制到另一playbook种可能并不简单。

ansible提供了一种方法,能以通用的方式更加轻松地重复利用ansible代码。可以在标准化目录结构中打包所有的任务、变量、文件、模板,以及调整基础架构或部署应用所需的其他资源。只需通过复制相关的目录,将角色从一个项目复制到另外一个项目。然后,只需从一个play调用该角色就能执行。

借助编写好的角色,可以从playbook中向角色传递调整其行为的变量,设置所有站点相关的主机名、IP地址、用户名,或其他在本地需要的具体详细信息。例如,部署数据库服务器的角色可能已编写为支持多个变量,这些变量用于设置主机名、数据库管理员用户和密码,以及需要为安装进行自定义的其他参数。角色的作者也可以确保在选择不在play中设置变量值时,为这些变量设定合理的默认值

ansible角色具有下列优点:

  1. 角色可以分组内容,从而与他人轻松共享代码

  2. 可以编写角色来定义系统类型的基本要素:Web服务器、数据库服务器、Git存储库,或满足其他用途

  3. 角色使得较大型项目更容易管理

  4. 角色可以由不同的管理员并行开发

除了自行编写、使用、重用和共享角色以外,还可以从其他来源获取角色。一些角色以及包含在rhel-system-rolses软件包中,作为红帽企业Linux的一部分。可以从ansible Galaxy网站获取由社区提供支持的许多角色。

Ansible角色结构:

 Defaults # 此目录中的main.yml文件包含角色变量的默认值,使用角色时可以覆盖这些默认值。这些变量的优先级较低,应该在play中更改和自定义。
 Files # 此目录包含由角色任务引用的静态文件
 Handlers # 此目录中的main.yml文件包含角色的处理程序定义,也就是触发器的内容。
 Meta # 此目录中的main.yml文件包含与角色相关的信息,如作者、许可证、平台和可选的角色的依赖项。
 Tasks # 此目录中的mian.yml文件包含角色的任务定义。
 Template # 此目录包含由角色任务引用的jinja2模板(j2模板)
 Tests # 此目录可以包含清单和test.yml剧本,可用于测试角色
 Vars # 此目录的main.yml文件定义角色的变量值,这些变量通常用于角色内部用途,这些变量的优先级较高,在playbook中使用时不应更改。

在playbook中使用ansible角色

 ---
 - name: test
   hosts: node1
   roles: 
     - role1
     - role2

对于每个指定的角色,角色任务、角色处理程序、角色变量和角色依赖项将按照顺序导入到playbook中。角色中的任何copy、script、template或include_tasks/import_tasks任务都可引用角色中相关的文件、模板或任务文件,且无需相对或绝对路径名称。ansible将分别在角色的files、templates或tasks子目录中寻找他们。

如果使用roles部分将角色导入到play中,这些角色会为该play定义的任何任务之前运行。

 # 创建角色,在定义的角色目录中运行
 ansible-playbook init 角色名
 # 移除角色
 ansible-playbook remove 角色名

控制执行程序

 # 优先级从高到低
 pre_tasks # 在角色任务之前执行
 roles
 post_tasks # 在角色任务之后执行
 tasks

系统角色

安装系统角色

 sudo yum -y install rhel-system-roles

rhel系统角色

 # 系统角色/usr/share/ansible/roles/中
 rhel-system-roles.kdump  # 配置kdump崩溃恢复服务
 rhel-system-roles.network  # 配置网络接口
 rhel-system-roles.selinux  # 配置和管理selinux(selinux模式  文件和端口上下文、布尔值 )
 rhel-system-roles.timesync # 配置时钟同步
 rhel-system-roles.postfix # 使用postfix服务将每个主机配置为邮件传输代理
 rhel-system-roles.firewall #  配置主机的防火墙
 rhel-system-roles.tuned # 配置tuned服务,以调优系统性能
 # 使用系统角色cp -r 复制到角色目录中即可,无需修改内容

从ansible-galaxy安装角色

ansible-galaxy install子命令从Ansible Galaxy下载角色,并将它站桩到控制节点本地。

默认情况下,角色安装到用户的roles_path下的第一个可写目录中。根据ansible设置的默认roles_path,角色通常安装到用户的~/.ansible/roles目录。默认的roles_path可能会被当前的ansible配置文件或环境变量ANSIBLE_ROLES_PATH覆盖,这将影响ansible-galaxy的行为。

可以使用-p DIRECTORY选项,指定具体的目录来安装角色。

安装角色

 # 在roles目录下创建down.yml
 # 输入一下内容
 ---
 - name: 角色名
 src: 下载路径 # 指定角色的来源,可以是本地的(file://),也可以是远程的(http:// )
 # 使用ansible-galaxy命令安装角色
 ansible-galaxy install -r /home/student/ansible/roles/down.yml -p /home/student/ansible/roles/

管理下载的角色

 ansible-galaxy list # 列出本地找到的角色
 ansible-galaxy remove # 删除本地角色

网站公告

今日签到

点亮在社区的每一天
去签到