ansible利用角色简化playbook

利用角色简化 playbook

ansible 角色具有下列优点:
1.角色可以把内容分组,容易复用
2.可以用角色定义系统基本信息:web 服务器、数据库服务器等
3.角色可以使大型项目易管理
4.角色可以由不同人并行开发

角色目录下应包括以下子目录:

ansible 角色会把不同功能的 playbook 分开,一个标准的角色含有下列子目录:
defaults 其中的 main.yml 包含角色变量的默认值 #在所有变量中优先级最低
files 包含角色任务引用的静态文件
handlers 主要定义处理程序
meta 角色相关信息,如作者、许可证等
tasks 定义任务
templates 任务引用的 jinja2 模板
tests 可以包含清单和 test.yml 的 playbook,用于测试
vars 定义角色的变量

##在 playbook 中使用 ansible 角色
如:

- hosts: www.example.com
  roles:
    - role1
    - role2
      var1:var1
      var2:var2        为 role2 定义了两个变量,任何 defaults 和 vars 中的变量都会被覆盖

利用系统角色重用内容

##安装系统角色

 yum install -y rhel-system-roles

#安装好的角色位于:

 ls -l /usr/share/ansible/roles

在这里插入图片描述
#其中的内容(查看网络角色)

 ls -l /usr/share/ansible/roles/rhel-system-roles.network

在这里插入图片描述
##时间同步角色示例
#查看系统中有哪些角色可以使用

ansible-galaxy list

在这里插入图片描述
#创建目录保存变量

 mkdir -pv group_vars/all

#查看帮助

 cat /usr/share/doc/rhel-system-roles/timesync/README.md

#时区设置的 example

 ansible-doc timezone | grep -A 4 "EXAMPLES"

在这里插入图片描述
#清单和配置文件
在这里插入图片描述
#修改主 playbook

vim configure_time.yml
---
- name: Time Sync
  hosts: groups
  roles:
    - rhel-system-roles.timesync
  post_tasks:
    - name: Set Timezone
      timezone:
        name: "{{ host_timezone }}"
      notify: restart crond
  handlers:
    - name: restart crond
      service:
        name: crond
        state: restarted

#创建针对主机组的变量目录

 mkdir -pv group_vars/{group1,group2}

#新建时间 yml 文件并写入
在这里插入图片描述
#检测和运行

ansible-playbook --syntax-check configure_time.yml
 ansible-playbook configure_time.yml

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建角色

可以再 galaxy.ansible.com 搜索下载相关的角色。

##角色创建流程:分三个步骤
1.创建角色目录结构
2.定义角色内容
3.在 playbook 中使用角色

##创建角色框架

[root@workstation mnt] cd project/
[root@workstation project] mkdir roles
[root@workstation project] cd roles/
[root@workstation roles] ansible-galaxy init my_role     创建目录,自动生成配置文件

在这里插入图片描述

 tree my_role

在这里插入图片描述
my_role        #具体的角色项目名称,比如 nginx、tomcat、php(自由设置)
├── defaults     #用于为当前角色设定默认变量,此目录应当包含一个 main.yml 文件
│ └── main.yml    #main.yml,类似代码中的主函数,进行统一管理
├── files       #用来存放由 copy 模块或 script 模块等模块调用的文件
├── handlers     #用于定义此角色中触发条件时执行的动作,此目录应当包含一个main.yml文件
│ └── main.yml
├── meta      #用于定义此角色的特殊设定及其依赖关系,此目录应当包含一个main.yml 文件
│ └── main.yml
├── README.md   #说明文件
├── tasks       #用于定义当前角色的任务列表,此目录应当包含一个 main.yml 文件
│ └── main.yml
├── templates     #用来存放 jinjia2 模板,template 模块会自动在此目录中寻找jinjia2 模板文件
├── tests      #用于存放测试 role 本身功能的 playbook 和主机定义文件,在开发测试阶段比较
│ ├── inventory   常用,此目录应当包含一个 main.yml 文件和自身资源设定 invetory
│ └── test.yml
└── vars        #用于定义此角色用到的变量,此目录应当包含一个 main.yml 文件
└── main.yml

#创建并初始化

[root@workstation ~] mkdir role-create
[root@workstation ~] cd role-create/
[root@workstation role-create] mkdir -v roles;cd roles
mkdir: created directory 'roles'
[root@workstation roles] ansible-galaxy init myvhost
- myvhost was created successfully

在这里插入图片描述
配置 tasks 的 play
vim tasks/main.yml
‘安装、启动和配置虚拟主机’

---
# tasks file for myvhost
- name: Install httpd
  yum:
    name: httpd
    state: latest
- name: Start and Enabled httpd
  service:
    name: httpd
    state: started
    enabled: true
- name: Install vhost file
  template:
    src: vhost.conf.j2
    dest: /etc/httpd/conf.d/vhost.conf
    owner: root
    group: root
    mode: 0644
  notify:
    - restart httpd

#编写处理程序
[root@workstation handlers]# vim main.yml

--
# handlers file for myvhost
- name: restart httpd
  service:
    name: httpd
    state: restarted

#编写 html 文件

mkdir -p role-create/files/html      
vim files/html/index.html      创建index文件。 

新建files目录,在当中建立html目录,注意这里不是myvhost中的files目录,放哪里都行,这里只是为了方便。
在这里插入图片描述

#配置模板

 vim templates/vhost.conf.j2
<VirtualHost *:80>
        DocumentRoot /www
        ServerName www.westos.org
</VirtualHost>

<VirtualHost *:80>
        DocumentRoot /bbs
        ServerName bbs.westos.org
</VirtualHost>

#编写使用 roles 的 playbook
[root@workstation role-create]# vim use_vhost_role.yml

- name: use myvhost
  hosts: webservers
  pre_tasks:
    - name: pre_tasks message
      debug:
        msg: 'Ensure web server configuration'
  roles:
    - myvhost
  post_tasks:
    - name: Configure html
      copy:
        src: files/html/
        dest: "/var/www/vhosts/{{ ansible_hostname }}"
    - name: post_tasks message
      debug:
        msg: "Web server is configured."

‘这里使用的主机清单是系统默认的:/etc/ansible/hosts’
执行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
##控制执行顺序
有时需要在角色之前或之后执行一些任务:
关键字:
之前:pre_tasks
之后:post_tasks

发布了50 篇原创文章 · 获赞 18 · 访问量 3780

猜你喜欢

转载自blog.csdn.net/thermal_life/article/details/105447700