使用roles模块来使ansible标准化

发布于 2018-08-17  20 次阅读


最近投了几家的面试岗,大多都是运维开发岗位。想着自动化运维工具肯定得有会的呀,不然过去人家一问岂不是小白一个,于是各种搜集资料开始学习ansible,最后看到模块化roles来使ansible-playbook更加标准化,觉得生产环境中标准化是必然的,于是就有了这个博文。

GitHub stars

roles模块的几个部分

  • tasks: 用来存放ansible模块任务的ping 、shell
  • vars: 用来存放变量的
  • files: copy模板和script模块的参数src默认会从这个文件夹查找
  • templates: 用来存放j2的
  • handlers: 用来存放notify的

实战

首先我们可以创建个myroles的目录作为模块化的根目录mkdir -pv /myroles
我们可以在myroles目录下建立我们的主配置文件main.yml

---
- hosts: all
  gather_facts: True
  name: main
  roles:
  - nginx

可以看到配置中写道roles:nginx 那么会去寻找roles底下的nginx目录来执行这个配置文件
所以我们接下来需要创建 roles/nginx mkdir -pv roles/nginx/
之前说过tasks目录是用来存在ansible模块任务的,那么在myroles中的main.yml会默认去寻找roles/nginx/tasks/main.yml这个配置文件,所以我们只需要在roles/nginx/tasks/main.yml这个配置文件下编写我们的任务即可。
假设为一个检测是否存活,并且列出根目录:

---
- name: check alived
  ping:

- name: ls /
  shell: ls /
  register: check_alived
- debug: var=check_alived

那么这就是一个最基础的模块化的编写。接下来我们来尝试别的用法。

vars模块

例如我们需要模块化来定义变量,我们就需要在roles/nginx/vars/main.yml中定义我们的变量

---
my_name: heroyf
phone: 110

我们这时候修改我们tasks下的main.yml配置文件

---
- name: check alived
  shell: echo "my_name {{my_name}} my_phone {{phone}}"
  register: echo
- debug: var=echo

我们是时候跑ansible-playbook /myroles/main.yml可以看到变量是正常显示出来的。
ansible1

templates模块

templates下面基本就是存放j2格式的文件例如我现在有这个文件/myroles/roles/nginx/templates/test.j2里面的内容为

my_name is {{my_name}}
my_phone is {{phone}}                    

我们将tasks下的main.yml做一下修改

---
- name: templates
  template: src=test.j2 dest=/root/testfile

ansible2
我们能看见输出root/testfile,就可以看我们在templates中的配置文件的内容

files模块

我这里把sshd_config的文件复制一份到files目录下cp /etc/ssh/sshd_config /myroles/roles/nginx/files/sshd_config
同时我们也可以在这个目录下放置shell脚本,这里我随便写一个炒鸡简单的脚本

#!/bin/bash
echo "aaa" >> /tmp/ccc

把tasks下的main.yml做一个更改

---
- name: copy_files
  copy: src=sshd_config dest=/tmp/sshd_config
- name: shell_script
  script: shell.sh

查看结果:
ansible3
ansible4
这里为什么有两个aaa呢,因为我的ansible配置文件中有两台主机都指向了自己,所以出现了两次aaa

写在最后

ansible确实方便,对批量管理服务器有很多的便捷之处。估计这两天会再写个ansible+jenkins实现ansible可视化操作,想看的小小期待一下吧。

版权声明:本文为原创文章,版权归 heroyf 所有
本文链接: https://heroyf.club/2018/08/ansible_roles/


“苹果是给那些为了爱选择死亡的人的奖励”