下面以一个现成的playbook为例,将其内容分解并编排成一个role。
整个步骤的终端录屏
现有playbook
|
|
上面playbook的作用是设置yum repository。
除了hosts以外,大致分成三个部分:
- vars——指定了playbook须要用到的变量
- tasks——具体playbook运行的module,具体执行了
- 先清理package repository并提醒handler执行metadata清理
- 通过template module设置的base/updates/extras repository
- 用yum_repository module设置epel
- handlers——定义了作为handler被调用的module
这里在tasks里有个template module,对应的template如下:
|
|
创建role
创建目录结构
role的固定目录结构如下
|
|
设置默认变量
创建defaults目录里的main.yml用于设置默认变量。
在这个例子里,直接把playbook里用到的几个变量复制进去。
设置tasks
创建tasks目录里的main.yml用于执行roles所调用的任务。
在这个例子里,直接把playbook里用到的几个任务复制了进去。 也可以讲不同功能的任务单独写成yml文件,然后通过在main.yml里使用include来调用(并可以使用when条件判断使用哪个任务,还可以使用tags方便在执行时调用对应功能的任务)
设置handlers
创建handlers目录里的main.yml用于执行tasks所调用的handler。
在这个例子里,直接把playbook里用到的handler复制了进去。
复制template文件
由于原有playbook使用到template module,所以须要把roles使用的template文件yumserver.yml复制到template目录。
测试role
通过上面改写,自建的role已经完成,写一个简单的playbook用来测试
|
|
执行playbook查看结果
|
|
可以修改测试playbook,加上参数以覆盖roles的默认参数
|
|
再次执行就会按照上述不同的参数修改repository了。
总结
大致总结下,role的目的是为了可以在各种环境下重用,把 vars, tasks, handlers等等playbook的组成元素放到固定的目录结构里。
更加详细的使用方法当然还是要参考了官方文档。
纸上得来终觉浅,绝知此事要躬行。