首先在roles下面创建一个我们要实现的项目的目录,这里我们就将目录名命名为test_app,再在test_app下面创建多个执行任务所需要的各种类别的专用目录:
在tasks目录下创建各个任务的playbook:
[root@localhost tasks]# cat group.yml
- name: create group
group: name=app system=yes
[root@localhost tasks]# cat user.yml
- name: create user
user: name=app group=app system=yes shell=/sbin/nologin
[root@localhost tasks]# cat yum.yml
- name: install package
yum: name=httpd
将本地的一份原始的httpd.conf拷贝过来当作模板文件:
[root@localhost tasks]# cp /etc/httpd/conf/httpd.conf ../templates/http.conf.j2
这里我们假定将监听端口/用户/用户组作为变量来实现模板化,原始的配置::
将其改为引用cpu个数作为参数:
将用户/用户组设置为vars中自定义的变量:
在vars目录下创建yml指定变量:
[root@localhost vars]# cat main.yml
username: app
groupname: app
[root@localhost tasks]# cat templ.yml
- name: copy conf
template: src=/etc/ansible/roles/test_app/templates/http.conf.j2 dest=/etc/httpd/conf/httpd.conf
notify: restart service
在handlers下面创建notify对应的任务:
[root@localhost handlers]# cat main.yml
- name: restart service
service: name=httpd state=restarted
[root@localhost tasks]# cat start.yml
- name: start service
service: name=httpd state=started enabled=yes
对于files目录,假设我们需要拷贝一个文件到被控机器上,先在files目录下自己创建一个文件:
[root@localhost files]# touch test_app.txt
[root@localhost tasks]# cat copy.yml
- name: copy file
copy: src=/etc/ansible/roles/test_app/files/test_app.txt dest=/usr/local/wyh/
最后编写main.yml:
[root@localhost tasks]# cat main.yml
- include: group.yml
- include: user.yml
- include: yum.yml
- include: templ.yml
- include: copy.yml
- include: start.yml
[root@localhost ansible]# cat roles_test_app.yml
- hosts: wyh-test
remote_user: root
roles:
- test_app
执行:
[root@localhost ansible]# ansible-playbook roles_test_app.yml
验证执行结果:
端口及服务已启动: