Ansible角色

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 # 删除本地角色
相关推荐
心灵宝贝6 小时前
如何在 CentOS 7 上安装 bzip2-libs-1.0.6-13.el7.x86_64.rpm 文件
linux·运维·centos
云心雨禅6 小时前
WordPress提速指南:Memcached+Super Static Cache+CDN缓存网站内容
linux·服务器·数据库·缓存·memcached
鹿鸣天涯7 小时前
Kali Linux 2025.3 正式发布:更贴近前沿的安全平台
linux·运维·安全
奶茶树7 小时前
【Linux】基础指令
linux·服务器
CheungChunChiu8 小时前
在嵌入式 Linux 上配置 PulseAudio 默认输出设备的完整指南
linux·运维·ubuntu·audio·pulseaudio
胡耀超8 小时前
4、存储系统架构 - 从机械到闪存的速度革命
服务器·人工智能·架构·gpu·储存·闪存
std860218 小时前
容器化入门:一文掌握Docker安装与核心概念
运维·docker·容器
qiqiqi(^_×)9 小时前
解决linux‘打开readme.md文件pycharm闪退’问题
linux·运维·pycharm
Akshsjsjenjd10 小时前
Nginx反向代理与负载均衡全解析
运维·nginx·负载均衡
星海穿梭者11 小时前
SQL SERVER 查看锁表
java·服务器·前端