ansible的role目录结构及用法
创始人
2024-12-17 17:34:14

目录

  • 目录结构介绍
  • 案例

目录结构介绍

可以通可以通过使用 ansible-galaxy 命令再当前目录自动生成 role 的基本目录结构。
myrole为文件名(角色名)

ansible-galaxy init myrole 

如果没有安装Ansible Galaxy,你可以使用以下命令安装:

ansible-galaxy collection install community.general 

标准目录结构:
可以根据需求自定义目录结构

myrole/ ├── defaults/ │   └── main.yml ├── files/ ├── handlers/ │   └── main.yml ├── meta/ │   └── main.yml ├── tasks/ │   └── main.yml ├── templates/ ├── tests/ │   ├── inventory │   └── test.yml ├── vars/ │   └── main.yml └── README.md 
  • defaults/: 包含 role 的默认变量,存放在 main.yml 文件中。
  • files/: 可选,存放需要在目标主机上复制的文件。
  • handlers/: 包含处理器(handlers),这些处理器会在任务执行完毕后运行,通常在 main.yml 中定义。
  • meta/: 包含与 role 相关的元数据,如作者、依赖等,存放在 main.yml 中。
  • tasks/: 包含所有要执行的任务,通常在 main.yml 中定义。
  • templates/: 可选,存放用于在目标主机上生成文件的 Jinja2 模板。
  • tests/: 包含用于测试 role 的文件,如测试用的 inventory 和测试任务 test.yml
  • vars/: 包含其他变量文件,通常在 main.yml 中定义。
  • README.md: 包含 role 的说明文档,描述了 role 的用途、配置选项等信息。

脚本运行文件:

myansibleproject/ ├── myrole/ └── playbooks/     └── playbook.yml 

playbooks/playbook.yml:运行脚本的入口;该目录不会自动生成,位置取决于个人或团队

为了组织和管理起见,可以考虑以下几点建议:

  1. 项目根目录: 将 playbook.yml文件放在项目根目录中,这样可以使整个 Ansible 部署更为结构化和清晰。
  2. playbooks 目录: 如果你有多个 playbook 文件或者希望将它们统一放置,可以在项目根目录下创建一个 playbooks 或类似的目录,并将 playbook 文件放在其中。
  3. 版本控制: 如果你使用版本控制系统(如 Git),建议将 playbook 文件一起管理,这样可以轻松跟踪和回滚配置更改。

案例

案例简单,主要是帮助理解
需求:在host1服务器上安装httpd服务,修改配置文件时重启httpd服务
案例目录结构:

roles ├── httpd │   ├── files │   │   └── index.html  #用于修改httpd的欢迎页 │   ├── handlers │   │   └── main.yml │   ├── tasks │   │   └── main.yml │   ├── templates │   │   └── httpd.conf.j2  #用于修改httpd的配置文件 │   └── vars │       └── main.yml └── playbooks     └── httpd.yml  #脚本运行入口 
  1. 编写index.html,只做演示简单编写一下(可以理解为项目文件比如换成项目压缩包,进行远程解压)
  	 		 		流星雨 		 		 		  		 	 	 	 		 		 		 		 	  
  1. 获取httpd的配置文件
yum install -y httpd && cp /etc/httpd/conf/httpd.conf roles/httpd/templates/httpd.conf.j2 
  1. 编写任务vim roles/httpd/tasks/main.yml
---  # 表示衔接上文 # HTTPD角色的任务文件  # 安装最新版本的httpd - name: install httpd   yum: name=httpd state=latest  # 复制index.html文件到Web服务器的默认页面目录 - name: copy index.html   copy: src=index.html dest=/var/www/html/index.html  # 复制httpd.conf.j2模板文件到HTTPD配置文件目录,并在完成后通知重启httpd服务 - name: copy httpd.conf   template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf   notify: restart httpd  # 启动httpd服务并设置开机自启动 - name: runnung httpd   service: name=httpd state=started enabled=yes 
  1. 编写处理程序vim roles/httpd/handlers/main.yml
--- # 表示衔接上文 # httpd的处理程序文件  # 重新加载httpd服务 - name: restart httpd   service: name=httpd state=reloaded 
  1. 修改配置文件vim roles/httpd/templates/httpd.conf.j2,把端口号设置为变量
45 # 46 #Listen 12.34.56.78:80 47 Listen {{httpd_port}} 48 49 # 
  1. 编写变量
--- # 表示衔接上文 # httpd的变量文件  # httpd服务使用的端口号 httpd_port: 80 
  1. 编写入口文件
# 指定主机为host1 - hosts: host1  # 应用httpd角色来管理该主机   roles:     - httpd 
  1. 检查脚本(必须在roles目录内,否则报错)
# 进入roles目录 cd roles/  # 运行指令检查./playbooks/httpd.yml是否可用 ansible-playbook ./playbooks/httpd.yml --syntax-check  # 结果如下则没问题 playbook: ./playbooks/httpd.yml 
  1. 运行脚本(必须在roles目录内,否则报错)
# 进入roles目录 cd roles/  ansible-playbook ./playbooks/httpd.yml 
  1. 把端口号改一下看是否成功(可跳过)
vim roles/httpd/vars/main.yml 
--- # 表示衔接上文 # httpd的变量文件  # httpd服务使用的端口号 httpd_port: 8088 
# 进入roles目录 cd roles/  ansible-playbook ./playbooks/httpd.yml 

运行效果:

相关内容

热门资讯

虎牙申请动态封面生成方法专利,... 国家知识产权局信息显示,广州虎牙科技有限公司申请一项名为“动态封面生成方法、装置、电子设备及存储介质...
这家意大利公司想让机械臂飞上太... 3D 打印是什么?你的直觉告诉你,是一台不足鞋盒大小的设备,吐出细如发丝的塑料,耗费数小时,堆叠成一...
友邦吊顶获得实用新型专利授权:... 证券之星消息,根据天眼查APP数据显示友邦吊顶(002718)新获得一项实用新型专利授权,专利名为“...
中国电信词元套餐落地 迅策受益... 本报讯 (记者李春莲)5月17日,中国电信集团有限公司(以下简称“中国电信”)正式推出全国试商用词元...
国内首次!128通道全植入式脑... 今天,我国正式启动首个128通道全植入式脑机接口系统多中心临床试验,这项试验由首都医科大学附属北京天...