Linux Ansible角色介绍

目录

角色的基础结构

角色来源与应用

Galaxy角色

系统角色

自定义角色


  1. 角色(roles)用于层次化、结构化地组织playbook
  2. roles通过标准化目录结构来装载变量文件、tasks(模块任务)、handlers(处理程序)、jinja2模板等其他资源,然后在play中调用该角色,就能够执行
  3. 定义roles可以实现更加轻松的重复利用ansible代码;只需通过复制相关的目录,就可以将角色从一个项目复制到另一个项目,然后在play中调用该角色就能够执行
  4. 在ansible中需要单独指定一个存放角色的路径,这个路径在ansible.cfg中的roles_path字段指定


角色的基础结构

README.md文件

声明了如何调用角色的模板,根据需要复制里面的内容粘贴到yml文件中进行调用

Defaults

此目录中的main.yml文件存放于角色会使用到的变量;并且这些变量所对应的值都是默认值(这些变量的优先级较低,使用角色时可以在play中对变量重新赋值,覆盖变量的默认值)

Files

存放角色任务引用的静态条件(例如copy模块要调用的文件)

Handlers

此目录中的main.yml文件包含ansible处理程序

当角色需要调用处理程序时,默认会在此目录的main.yml文件中调用处理程序

Meta

此目录中的main.yml文件用于描述角色的相关属性(例如作者、许可证等)

Tasks

此目录的main.yml描述了此角色需要执行的任务

在调用角色时,会执行此目录下的main.yml文件

Template

存放着角色所需要使用的jinja2模板文件

当没有指定绝对的模板路径时,会默认调用此目录中对应名称的模板文件

Linux Ansible-Jinjia2模板_静下心来敲木鱼的博客-CSDN博客icon-default.png?t=N3I4https://blog.csdn.net/m0_49864110/article/details/130394010?spm=1001.2014.3001.5501Tests

此目录包含清单和测试剧本文件,用于测试角色

Vars

此目录中的main.yml文件存放着用户所使用的变量;与defaults不同的是此文件中变量的优先级比较高,不会被轻易覆盖;确保了在调用角色时使用的变量为此目录文件中的变量值Linux Ansible管理变量、管理事实、管理机密_静下心来敲木鱼的博客-CSDN博客icon-default.png?t=N3I4https://blog.csdn.net/m0_49864110/article/details/130392902?spm=1001.2014.3001.5501


角色来源与应用

Galaxy角色

Ansible galaxy是一个ansible内容公共资源库,包含数千个ansible角色

ansible-galaxy命令行工具

ansible-galaxy search                   在galaxy上搜索角色
ansible-galaxy install                  从galaxu上下载角色
              -r   从文件中安装多个角色
              -p   指定安装路径
ansible-galaxy init                     创建自定义角色

从文件中下载galaxy角色,文件的书写格式

src      角色来源(必须写)
version  角色的版本
name     将角色下载后的名称(默认为存储库的名称)

创建文件存放角色的下载路径
vim galaxyroles.yml
---
- src: http://materials/ phpinfo.tar
  name: phpinfo

从文件中下载角色到指定路径
ansible-galaxy install -r galaxyroles.yml -p /home/greg/ansible/roles/

使用galaxy角色

vim roles.yml
---
- hosts: web
  roles:
    - phpinfo

系统角色

rhel-system-roles软件包中包含了一部分系统的角色(直接下载此软件包,就可以使用此软件包包含的角色了);下载下来的角色存放在/usr/share/ansible/roles目录下

下载系统角色

yum install rhel-system-roles

ansible-galaxy list 查看所有角色

系统角色的作用

rhel-system-roles-kdump          配置kdump崩溃恢复服务
rhel-system-roles-network        配置网络接口
rhel-system-roles-postfix        使用postifix服务将主机配置为邮件传输代理
rhel-system-roles-selinux        配置和管理selinux
rhel-system-roles-timesync       配置时间同步(NTP)

使用系统角色

将需要的系统角色复制到ansible.cfg中roles_path字段对应的目录下
cp -r /usr/share/ansible/roles/rhel-system-roles.selinux/ /home/greg/ansible/roles/

查看文件中的README.md文件,编写yml文件调用角色实现所需功能
vim /home/greg/ansible/selinux.roles
---
- name: selinux
  hosts: web
  vars:
    selinux_policy: targeted
    selinux_state: enforcing
  role:
    - rhel-system-roles-selinux

自定义角色

可以创建一个自定义角色(ansible-galaxy init 角色名)  

ansible-galaxy init apache

在templates目录下创建jinja2模板

vim apache/templates/index.j2
Welcome to {
    
    { ansible_facts['hostname'] }

配置tasks目录下的main.yml文件

vim apache/tasks/main.yml
---
# tasks file for apache
- name: install httpd
  yum:
    name: httpd
    state: present
  notify:
    - start apache
- name: index.html.j2
  template:
    src: index.html.j2
    dest: /var/www/html/index.html
    setype: httpd_sys_content_t

编写handlers下的maini.yml(触发器notify触发后执行此yml任务)

vim apache/handlers/main.yml
---
- name: start apache
  service:
    name: httpd
    state: started
    enabled: yes

然后创建yml文件调用角色

vim roles.yml
---
- host: web
  roles:
    - apache

运行yml

ansible-playbook roles.ym
只要此roles.yml不报错,就证明apache角色当中所有的yml语法都ok

验证httpd服务是否开启

ansible web -m shell -a "systemctl status httpd"

当让别人重复使用roles.yml文件时,可以将apache角色打压缩包传送给对端或上传到galaxy

猜你喜欢

转载自blog.csdn.net/m0_49864110/article/details/130435661