ansible その三 roles

写在前面,要返校了,定在7月6号。说实话现在没什么要紧的事情,但是还是感觉自己很焦急。不知道自己为什么这么焦急。。。

roles就是个大的playbook。

角色各个子目录的作用:

files/:             存放copy或script模块等调用的文件

templates/:   template模块查找所需要模板文件的目录

tasks/:      定义task role 的基本元素,至少应该包含一个名为main.yml的文件,其它的文件需要在此文件中通过include进行包含

handlers/:   至少应该包含一个名为main.yml的文件,其他的文件需要在此文件中通过include进行包含

vars:           定义变量,至少应该包含一个名为main.yml的文件,其他的文件需要在此文件中的include进行包含

meta:       定义当前角色的特殊设定及其依赖关系,至少应该包含一个名为main.yml的文件,其他文件需在此文件中通过incude进行包含

default:    设定默认变量时使用此目录中的main.yml文件

下面是个角色的例子:

在这个sb文件夹操作。大改是这个文件结构

[root@iz2zeczv3xrnm2jx6aayhxz sb]# tree 
.
├── roles
│   └── test
│       ├── files
│       │   └── log.conf
│       └── tasks
│           ├── copy.yml
│           ├── create.yml
│           └── main.yml
└── start.yml
 

start.yml和roles同级,它是这个角色的启动文件,它的内容如下:

- hosts: all
  remote_user: root

  roles:
      - test    # test是个角色名
      #- 可以指定多个角色

然后就是role文件夹,它里面写角色。

test是个角色。

它里面的files放入要拷贝的文件,任务里直接写文件名就行了,但是实测不用非得把要拷贝的文件放入这个文件夹中,只要在任务里写对绝对路径就行了。

下面是task的内容:

copy.yml

- name: copy file
  copy: src=log.conf dest=copy.yml

create.yml

- name: create file
  file: name=rolestest state=touch

下面是最重要的main.yml,  它规定了任务里yml文件的启动顺序。

main.yml

- include: create.yml
- include: copy.yml

 

再如

├── roles
│   ├── nginx
│   │   ├── tasks
│   │   │   └── main.yml
│   │   └── templates
│   │       └── nginx.conf.j2
│   └── test
│       ├── files
│       │   └── log.conf
│       └── tasks
│           ├── copy.yml
│           ├── create.yml
│           └── main.yml
└── start.yml

跨角色调用,要在nginx角色调用test角色的任务。

这时候只要在角色nginx的main.yml里的include里写上test任务的相对路径就可以了,如下:

- include: xxx
- include: xxx
- include: roles/tests/tasks/copy.yml  # 调用其他角色的任务。

 

也可以给角色加标签:

- hosts: all
  remote_user: root
  roles: 
    - { role:httpd,tags=['xx','xxx'] }
    - { role:xx,tags=xxx }

执行时候:

ansible-playbook -t xx xx.yml                 # 可以指定执行某些角色

 

下面是比较杂的内容

/vars的写法

里面写个main.yml就好了。

username: xx
groupname: xx

/tasks的写法

模板直接用/vars/main.yml里的变量。

- name: copy conf
  template: src=httpd.conf.j2 dest=/etc/httpd/xx/http.conf   # src里的模板文件在/templates里
  notify: restart service          # notif检测配置变化,handler另外写在别的文件里

/handlers/main.yml  注意是写在main.yml文件里

- name: restart service
  service: name=httpd state=restarted

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值