当 Inventory 以及角色比较庞大的时候,为了方便管理和维护,推荐使用官方建议的目录结构来组织很多 role 和 playbook 文件。

  • 如果用 role 封装了playbook,并且任务依赖文件或者依赖其它的任务时,建议使用目录结构管理。
  • 假如是一个简单的独立任务,只使用playbook文件即可,这样方便在其它地方进行引用。
# 下面是官网最佳实战中推荐的目录结构

project/
├── production            # 生产环境服务器的资产清单文件
├── devlop                # 开发环境的资产清单文件
├── test                  # 测试环境的资产清单文件
├── group_vars/
│   ├── group1                  # 组 group1 的变量文件
│   └── group2                  # 组 group2 的变量文件
├── host_vars/
│   ├── hostname1               # 主机 hostname1 定义的变量文件
│   └── hostname2               # 主机 hostname2 定义的变量文件
├── library/                    # 如果有自定义模块,放在此目录下
├── filter_plugins/             # 如果有自定义的过滤插件,放在此目录下
├── site.yml                    # 运行 playbook 的统一入口文件
├── webservices.yml             # 特殊任务的 playbook
├── dbservices.yml              # 特殊任务的 playbook
├── roles/                      # role存放目录	
│   ├── common/                 # common 角色目录
│   │   ├── tasks/         
│   │   │   └── main.yml   
│   │   ├── handles/       
│   │   │   └── main.yml   
│   │   ├── templates/     
│   │   │   └── xxx.conf.j2
│   │   ├── files/         
│   │   │   ├── xxx.sh     
│   │   │   └── xxx.py     
│   │   ├── vars/          
│   │   │   └── main.yml        # common 角色定义的变量文件
│   │   ├── defaults/            
│   │   │   └── main.yml        # common 角色定义的默认变量文件(优先级低)
│   │   └── meta/         
│   │       └── main.yml        
│   ├── webtier/                # 其它角色目录
│   ├── fooapp/                 # 其它角色目录
│   ├── logapp/                 # 其它角色目录