ansible目录结构参考

ansible基础概念

  • inventory 主机源
  • playbooks 一组运行任务的命令集合
  • roles 角色
  • tasks 运行任务列表
  • handlers 运行任务后的触发动作
  • variables 定义的变量

ansible目录结构

使用Role组织任务,可以将复杂的Playbook剧本进行拆分,达到缩小文件,任务重用的作用。如下图目录结构可供参考。

Inventory

ansible可管理的主机源。

inventory目录包含:

  • hosts 主机及主机组列表
  • host_vars 主机变量,目录里包含以组名命名的yaml文件
  • group_vars 主机组变量,目录里包含以组名命名的yaml文件
  • inventory.py 动态主机列表脚本

如下图: host_vars

# cat /etc/ansible/inventory/hosts_vars/127.0.0.1
---
myname: wangpeng
address: beijing

若多个环境有不同的inventory源,可创建多个目录来区分,目录结构一致。比如将测试环境、生产环境区分开来。

Playbooks

执行playbook的统一入口。

在入口文件里指定目标主机、对应角色

# cat /etc/ansible/playbooks/epel.yaml
---
- hosts: host1      # 定义主机组
  gather_facts: false

  roles:            # 使用角色
    - epel

Roles

定义的角色。角色目录中通常存放着tasks,handler,vars,templates,meta子目录,这些子目录并不是必须的,如果没用到某个目录(比如没有用到模板templates),可以为空目录,或者不创建。基于这样的目录结构,role会自动加载到目录内的tasks,vars及handlers。

在Role里编写具体的tasks、handlers、变量

Tasks

play中运行的任务命令,也就是执行的哪些ansible模块,如command,shell,service,yum等。

# cat /etc/ansible/roles/epel/tasks/main.yaml
---

- name: install epel-release repo
  remote_user: root
  yum: name=epel-release state=installed
  notify: make yum cache

目录下要有一个main.yaml文件,其他文件用Include引用到main中

Handlers

任务执行改变后触发的动作。handler也是task,但只task notify通知后才会触发,且多个task同时调用handler,只会触发一次。

# cat /etc/ansible/roles/epel/handlers/main.yaml
---

- name:  make yum cache
  shell: yum clean all && yum makecache

目录下要有一个main.yaml文件,其他文件用Include引用到main中

Vars

定义的主机变量和主机组变量。若group_vars,host_vars,role/vars目录中定义了相同变量名,优先级group_vars < host_vars < vars。

# cat /etc/ansible/roles/epel/vars/main.yaml
---
myname: wangpeng
address: beijing

目录下要有一个main.yaml文件,其他文件用Include引用到main中

Templates

使用template模板渲染功能时,所需的模块文件存放在这个目录。

你可能感兴趣的:(运维)