ansible自动化运维(6)

一. 利用角色简化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中的变量都会被覆盖
控制执行顺序
有时需要在角色之前或之后执行一些任务:
关键字:
之前:pre_tasks
之后:post_tasks
二.利用系统角色重用内容

安装系统角色
[root@workstation~]#yum install -y rhel-system-roles

yum install -y rhel-system-roles

安装好的角色位于:
[root@workstation~]#ls -l /usr/share/ansible/roles
其中的内容(查看网络角色)
[root@workstation~]#ls -l /usr/share/ansible/roles/rhel-system-roles.network
时间同步角色示例
查看系统中有哪些角色可以使用
[root@workstationroles]#ansible-galaxy list
创建目录保存变量
[root@workstationroles]#mkdir -p group_vars/all
查看帮助
[root@workstationroles]#cat /usr/share/doc/rhel-system-roles/timesync/README.md
时区设置的example

[root@workstationall]#ansible-doc timezone | grep -A 4 "EXAMPLES"
EXAMPLES:
-name:SettimezonetoAsia/Tokyo
timezone:
name:Asia/Tokyo

清单和配置文件
[root@workstationroles]#cat ansible.cfg
[defaults]
inventory=./inventory
[root@workstationroles]#cat inventory
[group1]
servera.lab.example.com
[group2]
serverb.lab.example.com
[groups:children]
group1
group2
修改主playbook
[root@workstationroles]#cat 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

创建针对主机组的变量目录
[root@workstationroles]#mkdir -p group_vars/{group1,group2}
新建时间yml文件并写入
[root@workstationroles]#cat group_vars/group1/timezone.yml
host_timezone: Asia/Shanghai
[root@workstationroles]#cat group_vars/group2/timezone.yml
host_timezone: Europe/London
检测和运行
[root@workstationroles]#ansible-playbook --syntax-check configure_time.yml
[root@workstationroles]#ansible-playbook configure_time.yml
三.创建角色
角色创建流程:分三个步骤

1.创建角色目录结构
2.定义角色内容
3.在playbook中使用角色

创建角色框架
[root@workstationmnt]#cd project/
[root@workstationproject]#mkdir roles
[root@workstationproject]#cd roles/
[root@workstationroles]#ansible-galaxy init my_role       #创建

[ans@node1my_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和主机定义文件,在开发测试阶段比较常用,此目录应当包含一个main.yml文件和自身资源设定
invetory
│├──inventory
│└──test.yml
└──vars                    #用于定义此角色用到的变量,此目录应当包含一个main.yml文件
└──main.yml

创建并初始化
[root@workstation~]#mkdir role-create
[root@workstation~]#cd role-create/
[root@workstationrole-create]#mkdir -v roles;cd roles
mkdir:created directory'roles'
[root@workstationroles]#ansible-galaxy init myvhost
-myvhostwascreatedsuccessfully
配置tasks的play
[root@workstationtasks]#vim 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@workstationhandlers]#vim main.yml

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

编写html文件
[root@workstationrole-create]#mkdir -p files/html
[root@workstationrole-create]#vim files/html/index.html
www.westos.org
配置模板
[root@workstationtemplates]#vim vhost.conf.j2

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

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

编写使用roles的playbook
[root@workstationrole-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."

'这里使用的主机清单是系统默认的'
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值