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 指定要执行的标签
posted @   立勋  阅读(13)  评论(0编辑  收藏  举报
编辑推荐:
· 从 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)
点击右上角即可分享
微信分享提示