ansible之roles简单使用

一、roles简介

将多种不同的tasks的文件集中存储在某个目录下,则该目录就是角色,角色一般存放在/etc/ansible/roles/目录下,可通过ansible的配置文件来调整默认的角色目录,/etc/ansible/roles/目录下有很多子目录,其中每一个子目录对应一个角色,每个角色也有自己的目录结构,如图:

20200322142808

每个角色的定义,以特定的层级目录结构进行组织。比如:

  • files:存放有copy或script等模块调用的文件;
  • templates:存放template模块查找所需要的模板文件的目录;
  • tasks:任务存放的目录;
  • handlers:存放相关触发执行器的目录;
  • vars:变量存放的目录;
  • meta:用于存放此角色元数据;
  • default:默认变量存放的目录,文件中定义了此角色使用的默认变量;

上述目录中,tasks、handlers、vars、meta、default至少应该包含一个main.yaml文件,该目录下也可由其他.yaml文件,但是需要在main.yml文件中用include指令将其他.yml文件包含起来。

二、简单的roles示例

$ mkdir roles
#创建一个目录,名称为roles。官方推荐在/etc/ansible/roles/这个目录,不过在哪里都是可以的
$ mkdir roles/nginx
$ cd roles/nginx/
$ mkdir tasks templates
$ cd tasks/
$ cat user.yaml
- name: create user
user: name=nginx uid=80 group=nginx system=yes shell=/sbin/nologin
$ cat group.yaml
- name: create group
group: name=nginx gid=80
$ cat yum.yaml
- name: install package
yum: name=nginx
$ cat templ.yaml
- name: copy conf
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
$ cat stservice.yaml
- name: start service
service: name=nginx state=started enabled=yes
$ cat main.yaml
- include: group.yaml
- include: user.yaml
- include: yum.yaml
- include: templ.yaml
- include: stservice.yaml
#如果需要调用别的角色的yaml文件,也可以这样写,比如:- include:roles/httpd/tasks/copyfile.yaml
注意:copyfiile.yaml文件中的源路径必须是绝对路径
$ ls
nginx.conf.j2
#该文件就是nginx的配置文件改名了而已
$ cd ../../../
$ cat nginx.yaml
- hosts: webservers
remote_user: root
roles:
- role: nginx
#定义了多个角色,也可在接着写,每行调用一个角色
#也可以定义tags标签,比如:- { roles: httpd ,tags:['web','httpd']}或- { roles: httpd ,tags:'web' 如果需要加when语句,在此处添加 }都可以
$ ls
nginx.yaml roles
#确保调用nginx的yaml文件是和roles是在同一目录下的
$ tree
.
├── nginx.yaml
└── roles
└── nginx
├── tasks
│   ├── group.yaml
│   ├── main.yaml
│   ├── reservice.yaml
│   ├── stservice.yaml
│   ├── templ.yaml
│   ├── user.yaml
│   └── yum.yaml
└── templates
└── nginx.conf.j2
#确保目录的层次效果是这样的
$ ansible-playbook nginx.yaml
#如果定义了标签,就可对标签进行操作(比如:web或httpd)
$ ansible webservers -m shell -a 'ss -lntp | grep nginx'
#确认被控端的主机nginx已经启动

一个简单的nginx的roles已经编写完成了!

三、roles示例二

$ mkdir app
$ cd app/
$ mkdir tasks templates vars handlers files
$ cd tasks/
$ cat group.yaml
- name: create group
group: name=apache system=yes
$ cat user.yaml
- name: create user
user: name=apache group=apache system=yes shell=/sbin/nologin
$ cat yum.yaml
- name: install package
yum: name=httpd
$ cat templ.yaml
- name: copy file
template: src=httpd.conf.j2 dest=/etc/httpd/httpd.conf
notify: restart service
$ cat copyfile.yaml
- name: copy config
copy: src=vhosts.conf dest=/etc/httpd/conf.d/ owner=apache
$ cat start.yaml
- name: start service
service: name=httpd state=started
$ cat main.yaml
- include: group.yaml
- include: user.yaml
- include: yum.yaml
- include: templ.yaml
- include: copyfile.yaml
- include: start.yaml
$ ls files/vhosts.conf
files/vhosts.conf
#空文件用于测试
$ cat handlers/main.yaml
- name: restart service
service: name=httpd state=restarted
$ cat templates/httpd.conf.j2
#httpd的配置文件
$ cat vars/main.yaml
username: apache
groupname: apache
$ tree
.
├── files
│   └── vhosts.conf
├── handlers
│   └── main.yaml
├── tasks
│   ├── copyfile.yaml
│   ├── group.yaml
│   ├── main.yaml
│   ├── start.yaml
│   ├── templ.yaml
│   ├── user.yaml
│   └── yum.yaml
├── templates
│   └── httpd.conf.j2
└── vars
└── main.yaml
#目录结构
$ cat httpd.yaml
---
- hosts: webservers
remote_user: root
roles:
- httpd
$ ls
httpd.yaml nginx.yaml roles
#确保与roles目录在同一目录下
$ ansible-playbook httpd.yaml
$ ansible all -m shell -a 'ps -ef | grep apache'
//根据配置文件中修改的内容自行进行修改
posted @   吕振江  阅读(1334)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
浏览器标题切换
浏览器标题切换end
点击右上角即可分享
微信分享提示

目录导航