Ansible Roles

Ansible Roles基本概念

  • 自定义Ansible Role
  • 编写playbook调用role
  • 使用ansible-galaxy管理Roles

为了实现不同的功能,我们会编写大量的playbook文件

而且,每个playbook还可能会调用其他文件(如变量文件),对于海量的、无规律的文件,管理起来非常痛苦!

Ansible从1.2版本开始支持Role(角色),Role(角色)是管理ansible文件的一种规范(目录结构),Role(角色)会按照标准的规范,自动到特定的目录和文件中读取数据。

如果我们创建了一个名称为user.example的Role(角色),则其标准的目录结构如下图

Ansible Roles_第1张图片

  • defualts/main.yml:定义变量的缺省值,优先级较低
  • files目录:存储静态文件的目录,如tar包、音乐、视频等
  • handlers/main.yml:定义handlers
  • meta/main.yml:写作者、版本等描述信息
  • README.md:整个角色(role)的描述信息
  • tasks/main.yml:定义任务的地方
  • templates目录:存放动态数据文件的地方(文件中包含了变量的模板文件)
  • vars/main.yml:定义变量,优先级高

创建Roles

编写一个包含变量的模板文件,编写任务调用template模块,将模板文件拷贝给被管理端主机

ansible-galaxy命令可以创建、管理自己的roles

  • [root@control ansible]# mkdir ~/ansible/roles
  • [root@control ansible]# ansible-galaxy init ~/ansible/roles/issue
  • #创建一个Role,该Role的目的是拷贝自己新建的一个模板文件到远程主机的/etc/issue
  • [root@control ansible]# tree ~/ansible/roles/issue/
  • #查看目录结构,如果没有tree命令则需要使用yum安装该软件

修改Role文件

定义名称为myfile.txt的模板文件(该文件包含变量,因此必须放置templates目录

[root@control ansible]# vim ~/ansible/roles/issue/templates/myfile.txt       #新建文件储存变量

  1. This is the system {{ansible_hostname}}
  2. Today's date is:{{ansible_date_time.date}}
  3. Contact to {{ admin }}

自定义变量文件(前面调用了admin这个变量,这里需要定义admin变量并赋值)

  1. [root@control ansible]# vim ~/ansible/roles/issue/vars/main.yml
  2. ---
  3. # vars file for /root/ansible/roles/issue
  4. admin: [email protected]
  5. #变量名为admin,变量的值为[email protected]

文件准备好了,计算机不会自动将文件拷贝给被管理端主机!需要编写任务调用模块实现拷贝的功能。

修改任务文件,任务文件中不需要tasks关键词,Role的各个文件之间相互调用不需要写文件的路径。

  1. [root@control ansible]# vim ~/ansible/roles/issue/tasks/main.yml
  2. ---
  3. # tasks file for /root/ansible/roles/issue
  4. -  name: delever issue file
  5.    template:
  6.        src: myfile.txt
  7.        dest: /etc/issue
  8. #调用template模块将myfile.txt文件拷贝给被管理端主机.

在Playbook中调用Role

Role创建好了,role不会自己运行,需要编写一个剧本调用上面的role。编写playbook剧本文件,通过roles关键词调用role。

  1. [root@control ansible]# vim ~/ansible/issue.yml
  2. ---
  3. - hosts: test
  4.      roles:
  5.        - issue              #默认到当前路径下的 roles下寻找
  6. # - role2     #支持加载多个role

[root@control ansible]# ansible-playbook ~/ansible/issue.yml

[root@node3 ~]# cat /etc/issue
This is the system node3
Today's date is:2021-05-28
Contact to [email protected]

修改ansible.cfg配置文件,定义roles目录

  1. [root@control ansible]# vim ~/ansible/ansible.cfg
  2. [defaults]
  3. inventory = ./inventory
  4. roles_path = ./roles                       #指定到哪个目录下找role

ansible-galaxy命令

公共Roles仓库(https://galaxy.ansible.com)管理

  1. [root@control ansible]# ansible-galaxy search 'httpd'         #联网搜索roles
  2. [root@control ansible]# ansible-galaxy info acandid.httpd        #查看roles基本信息
  3. [root@control ansible]# ansible-galaxy install acandid.httpd -p ~/ansible/roles/
  4.                                   #下载roles到特定的目录,-p可以指定下载到哪个目录

使用ansible-galaxy install可以直接下载Role,也可以编写requirements.yml文件下载Role

  1. [root@control ansible]# vim ~/ansible/roles/requirements.yml
  2. #格式一:可以直接从Ansible Galaxy官网下载
  3.             - src: acandid.httpd
  4. #格式二:可以从某个git服务器下载
  5.           - src: http://gitlab.com/xxx/xxx.git
  6.           scm: git
  7.           version: 56e00a54
  8.           name: nginx-acme
  9. #格式三:可以指定位置下载tar包,支持http、https、file
  10.           - src: http://example.com/myrole.tar
  11.           name: myrole
  12.  
  13. [root@control ansible]# ansible-galaxy install -r ~/ansible/roles/requirements.yml -p roles
  14. # -r后面跟文件名,该文件中包含了需要下载哪些role以及他们的链接位置
  15. # -p 指定将下载的role保存到哪个目录

 

Ansible Roles_第2张图片

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(linux,Ansible,linux)