天天看点

ansible ——roles 角色实战

角色介绍

角色(roles)是ansible自1.2版本开始引入的新特性,用于层次性,结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单的说,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制。角色一般用于基于主机构建服务的场景中、但也可以是用于构建守护进程等场景中。

示例

在受管主机上安装Apache并设置虚拟主机及发布页面

①:创建myvhost角色目录 :

ansible-galaxy init myvhost

ansible ——roles 角色实战
ansible ——roles 角色实战

file/:用于存放copy或script等模块调用的函数

tasks/:用于定义各种task,此目录一定要有main.yml;其他文件需要main.yml包含调用

handlers:用于定义各种handlers,此目录一定要有main.yml;其他文件需要main.yml包含调用

vars:用于定义variables,此目录一定要有main.yml;其他文件需要main.yml包含调用

templates/:存储由template模块调用的模板文本;

meta/:定义当前角色的特殊设定及其依赖关系,此目录中至少应该有一个名为main.yml的文件;其它的文件需要由main.yml进行“包含”调用;

default/:此目录中至少应该有一个名为main.yml的文件,用于设定默认变量;

②:编写主playbook

ansible ——roles 角色实战
- name: install httpd
  yum :
          name: httpd
          state: latest
- name: start and enabled htttpd
  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
           

③:编写触发器

ansible ——roles 角色实战
- name: restart httpd
  service:
          name: httpd
          state: restarted
           

④:编写Apache的index.html默认发布页

ansible ——roles 角色实战

⑤:编写vhost.conf.j2文件 (Apache虚拟主机的配置文件)

ansible ——roles 角色实战
<VirtualHost *:80>
        DocumentRoot /www
        serverName  www.zengxin.com
</VirtualHost>


<VirtualHost *:80>
        DocumentRoot /bbs
        serverName  bbs.zengxin.com
</VirtualHost>
           

⑥:编写调用角色的playbook

ansible ——roles 角色实战
---
- name: use myvhost
  hosts: rhel8_no1.test.com
  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/vhost/{{ansible_hostname }}"
          - name: post_task message
            debug:
                    msg: "web server is configured"
           

⑦:

ansible-playbook use_vhost_role.yml

执行playbook

ansible ——roles 角色实战

继续阅读