ansible05-ansible roles
roles介绍
1、将变量、任务、模板等文件单独配置在yaml文件中,在main.yaml中用include字段来指定要执行的yaml文件
2、官方建议目录/etc/ansible/roles
3、调用roles的yml文件与roles目录平级
roles的目录结构
roles目录中创建角色名 比如叫做project,其子目录包含如下:
files/ # 存放copy或script模块等调用的文件
templates/ # 存放模板文件
tasks/ # 书写单个任务
handlers/ # 指定触发动作
vars/ # 定义变量
meta/
default/
例子:配置nginx
创建目录
mkdir -p /root/ansible-playbook/roles/nginx/{tasks,templates}
cd /root/ansible-playbook/roles/nginx/tasks
编写tasks任务
vim group.yml
---
- name: create group
group: name=nginx
vim user.yml
---
- name: create user
user: name=nginx group=nginx system=yes shell=/sbin/nologin
vim install.yml
---
- name: install nginx
yum: name=nginx
vim template.yml
---
- name: copy config file
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
vim start.yml
---
- name: start nginx
service: name=nginx state=start enabled=yes
指定执行顺序
vim main.yml
- include: group.yml
- include: user.yml
- include: install.yml
- include: template.yml
- include: start.yml
编写template模板文件
cd /root/ansible-playbook/roles/nginx/templates
cp /usr/local/nginx/conf/nginx.conf ./nginx.conf.j2
vim nginx.conf.j2
...
worker_processes {{ ansible_processor_vcpus*3 }}; # 修改进程数为cpu核心数的3倍
...
编写调用role的playbook文件
cd /root/ansible-playbook
vim nginx_role.yml
- hosts: host10
remote_user: root
roles:
- nginx
例子:配置httpd,创建用户,拷贝文件
创建相关目录
mkdir -p /root/ansible-playbook/roles/httpd/{tasks,files}
cd /root/ansible-playbook/roles/httpd/tasks
编写子任务,创建apache用户
vim user.yml
---
- name: create user
user: name=apache
编写子任务,拷贝配置文件
vim copyfile.yml
---
- name: copy config file
copy: src=httpd.conf dest=/etc/httpd/httpd.conf # src文件在files目录中指定
将子任务加入main任务
vim main.yml
- include: user.yml
- include: copyfile.yml
拷贝配置文件到files目录
cd /root/ansible-playbook/roles/httpd/files
cp /etc/httpd/httpd.conf ./
创建playbook
cd /root/ansible-playbook/
vim httpd_role.yml
---
- hosts: host10
remote_user: root
roles:
- httpd
- nginx # 如果有其他roles,可以追加
一个角色调用另一个角色的任务
这个例子中nginx执行了httpd中拷贝文件的子任务
vim /root/ansible-playbook/roles/nginx/tasks/main.yml
- include: group.yml
- include: user.yml
- include: install.yml
- include: template.yml
- include: start.yml
- include: roles/httpd/tasks/copyfile.yml # 注意拷贝文件的路径,要求src路径为绝对路径
给role打上标签
可以通过指定标签来执行部分任务
vim some_role.yml
---
- hosts: host10
remote_user: root
roles:
- { role: httpd, tags: ['web', 'httpd'],when: ansible_distribution_major_version == "7" } # 也可以指定when语句
- { role: nginx, tags: ['web', 'nginx'] }
执行
ansible-playbook -t web some_role.yml # -t 指定要执行的标签
分类:
Ansible
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)