Ansible的roles标准化

Posted mendermi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible的roles标准化相关的知识,希望对你有一定的参考价值。

一、使用roles标准化Playbook

roles功能可以用来规范playbook的编写

 

1 创建所需要的roles原型目录结构

(1)、创建一个用于存放标准化文件的目录,名字自定义,例:mkdir myroles

(2)、在标准化目录myroles下创建一个标准化playbook接口文件,用于自动找标准化目录下的内容.

 
例:touch nginx.yaml
#里面写剧本
---
- hosts: webB
gather_facts: True
roles:
- nginx

 

(3)、在标准化目录myroles下创建一个playbook的原型配置目录,用于存放相关模组配置目录,例:mkdir roles

(4)、在playbook的原型配置目录roles里创建一个相关模组配置目录,用于存放模块任务的目录,例:mkdir nginx

(5)、在模块任务的目录nginx下创建一个ansible模块任务的剧本,用来执行。

 
例:touch main.yaml
#里面写具体任务
---
- name: check alived
ping:
- name:
shell: ls /
register: ls_result
- debug: var=ls_result

 

以上详见下图

技术分享图片

技术分享图片

技术分享图片

技术分享图片
技术分享图片

注; 
ansible-playbook执行入口配置文件nginx.yaml后,它会自动在roles目录下查找nginx目录并进入后查找tasks任务目录并执行main.yaml的任务配置文件。 
1、相关模组配置目录,可以根据不同需求来创建,可以是多个。 
2、模组配置目录下的目录也可根据执行不同任务来创建,可以是多个 
例:原型的目录结构如下

 
[[email protected] myroles]# tree /myroles/
/myroles/
├── nginx.yaml #入口触发配置文件
└── roles #playbook的原型配置目录
└── nginx #nginx相关模组配置目录
├── files #copy模块和script模块的参数src默认会从这个文件夹查找
├── handlers #用来存放notify的
├── tasks #用来存放ansible模块任务的
├── templates #用来存放j2的
└── vars #用来存放变量的
7 directories, 1 file

 

 

2、roles中vars自定义变量模组的使用

(1)在模块任务的目录nginx下创建一个vars目录用于存放变量文件。 例:mkdir vars

(2)vars目录下创建一个变量文件

 
例:touch main.yaml
#文件里面写变量
---
my_name: mendermi
phone: 13800000

 

(3)在roles/nginx/tasks/main.yaml下添加新的环境变量的任务 
技术分享图片

 
  1. [[email protected] myroles]# ansible-playbook nginx.yaml #执行入口配置文件

下图为输出的结果 
技术分享图片

 

3、使用copy,script模块的标准化

roles模型里使用copy,script模块,默认从roles/nginx/files里面找

(1)先在在模块任务的目录nginx下创建一个files目录 mkdir files

(2)在files目录里创建脚本和要copy的文件。

 
例:
echo "my name is mendermi" > test #创建copy的文件
vim test.sh #创建脚本文件
#!/bin/bash
echo "aaa" > /tmp/test #脚本内容
chmod +x test.sh #给脚本加上可执行权限

 

(3)在roles/nginx/tasks/main.yaml下添加添加copy,script任务 
技术分享图片

执行结果

技术分享图片

技术分享图片

 

4、roles中template模块的使用

roles模型里使用template模块,默认从roles/nginx/templates里面找

(1)在模块任务的目录nginx下创建一个templates目录用于存放可变的环境变量文件。例:mkdir template

(2)template目录下创建可变的环境变量文件,文件要以j2结尾。

 
例:touch test.j2
vim test.j2
myname is {{ my_name }},my phone is {{ phone }} #引用自定义变量
my ipaddress is {{ ansible_all_ipv4_addresses[0] }} #引用内置变量

 

(3)在roles/nginx/tasks/main.yaml下添加添加template任务

技术分享图片

技术分享图片

技术分享图片

 

5、roles中notify模块的使用

roles使用notify模块,默认从roles/nginx/handles里面找

(1)在模块任务的目录nginx下创建一个handlers目录用来存放notify动作 
例:mkdir handlers

(2)handlers目录下创建剧本,用于控制

 
vim main.yaly
---
- name: start_nginx
shell: /usr/local/nginx/sbin/nginx
- name: stop_nginx
shell: /usr/local/nginx/sbin/nginx -s stop
- name: reload_nginx
shell: /usr/local/nginx/sbin/nginx -s reload

 

(3) 在roles/nginx/tasks/main.yaml下添加添加notify任务

技术分享图片

技术分享图片

技术分享图片

技术分享图片

特别提示: 
notify下发通知只有当之前的任务造成了变化那么才会被执行,如果没有发生任何改变,则notify不会被执行。

例:

技术分享图片

技术分享图片

技术分享图片

技术分享图片











以上是关于Ansible的roles标准化的主要内容,如果未能解决你的问题,请参考以下文章

ansible roles详解+搭建LAMP架构

使用Ansible搭建LNMP

ansible深入理解和操作——03(roles详解+搭建LAMP架构)

Ansible中Roles的实战使用

mage Ansible学习3 ansible role实例

[原创]实战之Ansible生成Apache多主机配置