ansible roles笔记

单role环境

使用 ansible-galaxy 命令来初始化

ansible-galaxy init test_role

查看效果

test_role/
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

生产环境中

role/                         # 项目目录
├── all_roles.yaml          # 项目playbook文件
└── roles                   # 专用角色目录,内部都是独立的角色
    └── test_role           # 子角色 1
        ├── defaults
        │   └── main.yml
        ├── files
        ├── handlers
        │   └── main.yml
        ├── meta
        │   └── main.yml
        ├── README.md
        ├── tasks           # 任务目录
        │   └── main.yml    # 整合文件
        ├── templates       # 模板目录
        ├── tests
        │   ├── inventory
        │   └── test.yml
        └── vars            # 变量目录
            └── main.yml

galaxy 初始化的目录在生产环境中是个子目录,也就是子角色

项目结构图及其解析

项目结构图

在这里插入图片描述

项目结构解析

roles 项目结构解析

/path/to/projects   项目名称
    ptoject.yaml    项目整体的playbook文件
    roles           项目角色专用目录

roles 名称固定,不可随意更改

角色目录结构及其作用

role/                         # 项目目录
├── all_roles.yaml          # 项目playbook文件
└── roles                   # 专用角色目录,内部都是独立的角色
    └── test_role           # 子角色1 目录
        ├── defaults        # 默认目录 - 一些基础的配置文件,比如默认按量、默认配置等内容,结构同上    
        │   └── main.yml
        ├── files           # 文件目录 - 存放由 copy 或script等模块依赖的文件,结构如下
        │   │── main.yml    # 整合文件 - 通过include语句将本目录下所有剧本进行整合
        │   └── xxx.yml     # 任务剧本 - 实现拆分后子任务的playbook文件
        ├── handlers        # 关联目录 - 存放各种触发器任务文件,结构同上
        │   └── main.yml
        ├── meta            # 数据目录 - 设定角色的特殊核定及其依赖关系,结构同上 
        │   └── main.yml
        ├── README.md
        ├── tasks           # 任务目录 - role 的核心元素,由所有任务playbook文件组成,结构同上
        │   └── main.yml    # 整合文件
        ├── templates       # 模板目录 - template 模块依赖的模块文件,结构同上
        ├── tests           # 测试目录 - 结构同上
        │   ├── inventory
        │   └── test.yml
        └── vars            # 变量目录 - 变量目录 - 存放各种变量文件,结构同上
            └── main.yml

列表方法

--- 
- host: web server
  remote_user: root
  roles:
    - role: mysql   # 标准写法
    - redis         # 精简写法
    - nginx

变量写法

列表方法的升级版,在列表中直接写入变量

---
- host: web server
  remote_user: root
  roles:
    - { role: mysql, port: 3307 }
    - { role: redis, mem: 1024 }
    - { role: nginx, port: 82 }

条件方法

---
- hosts:
  remote_user: root
  roles:
    - { role: role_nginx, nginx_port: 10086, when: ansible_hostname == anbl5  }

标签方法

---
- hosts:
  remote_user: root
  roles:
    - { role: role_nginx, nginx_port=200, tags: ['nginx', 'web'] }
    - { role: role_xnigx, nginx_port=300, tags: ['xnigx', 'web'] }
# 指定 标签 执行 playbook
ansible-playbook -t xnign nginx_role.yaml -C
ansible-playbook -t xnign nginx_role.yaml

案例目录结构

pro_role/
├── pro_role.yaml
└── roles
    └── nginx_role
        ├── tasks
        │   ├── config.yaml
        │   ├── main.yaml
        │   ├── service.yaml
        │   ├── softs.yaml
        │   └── users.yaml
        └── template
            └── nginx.conf

users.yaml

---
- name: create new user
  user: name=nginx-test system=yes uid=82 shell=/sbin/nologin

config.yaml

---
- name: create web root
  file: name=/data/webserver/html state=directory
- name: create web root
  shell: echo '<h1>welcom to ansible<h1>' > /data/webserver/html/index.html
- name: copy config
  copy: src=../template/nginx.conf dest=/etc/nginx/nginx.conf

soft.yaml

---
- name: nginx service
  service: name=nginx state=started  enabled=yes

main.yaml

---
- include: user.yaml
- include: softs.yaml
- include: config.yaml
- include: service.yaml

pro_role.yaml

---
- hosts: web
  remote_user: root
  roles:
    - role: nginx_role

执行

ansible-playbook pro_role.yaml

优点

  • 模块设计
  • 内容重用
  • 规范标准

缺点

  • 场景限制
  • 维护成本
  • 学习成本
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值