可以通可以通过使用 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 main.yml 文件中。main.yml 中定义。main.yml 中。main.yml 中定义。test.yml。main.yml 中定义。脚本运行文件:
myansibleproject/ ├── myrole/ └── playbooks/ └── playbook.yml playbooks/playbook.yml:运行脚本的入口;该目录不会自动生成,位置取决于个人或团队
为了组织和管理起见,可以考虑以下几点建议:
- 项目根目录: 将
playbook.yml文件放在项目根目录中,这样可以使整个 Ansible 部署更为结构化和清晰。- playbooks 目录: 如果你有多个 playbook 文件或者希望将它们统一放置,可以在项目根目录下创建一个
playbooks或类似的目录,并将 playbook 文件放在其中。- 版本控制: 如果你使用版本控制系统(如 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 #脚本运行入口 index.html,只做演示简单编写一下(可以理解为项目文件比如换成项目压缩包,进行远程解压) 流星雨 yum install -y httpd && cp /etc/httpd/conf/httpd.conf roles/httpd/templates/httpd.conf.j2 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 vim roles/httpd/handlers/main.yml--- # 表示衔接上文 # httpd的处理程序文件 # 重新加载httpd服务 - name: restart httpd service: name=httpd state=reloaded vim roles/httpd/templates/httpd.conf.j2,把端口号设置为变量45 # 46 #Listen 12.34.56.78:80 47 Listen {{httpd_port}} 48 49 # --- # 表示衔接上文 # httpd的变量文件 # httpd服务使用的端口号 httpd_port: 80 # 指定主机为host1 - hosts: host1 # 应用httpd角色来管理该主机 roles: - httpd # 进入roles目录 cd roles/ # 运行指令检查./playbooks/httpd.yml是否可用 ansible-playbook ./playbooks/httpd.yml --syntax-check # 结果如下则没问题 playbook: ./playbooks/httpd.yml # 进入roles目录 cd roles/ ansible-playbook ./playbooks/httpd.yml vim roles/httpd/vars/main.yml --- # 表示衔接上文 # httpd的变量文件 # httpd服务使用的端口号 httpd_port: 8088 # 进入roles目录 cd roles/ ansible-playbook ./playbooks/httpd.yml 运行效果: