当前位置: 代码迷 >> 综合 >> Ansible playbook中role的综合使用
  详细解决方案

Ansible playbook中role的综合使用

热度:26   发布时间:2023-12-16 01:31:45.0

首先在roles下面创建一个我们要实现的项目的目录,这里我们就将目录名命名为test_app,再在test_app下面创建多个执行任务所需要的各种类别的专用目录:

 在tasks目录下创建各个任务的playbook:

[root@localhost tasks]# cat group.yml
- name: create groupgroup: name=app system=yes
[root@localhost tasks]# cat user.yml
- name: create useruser: name=app group=app system=yes shell=/sbin/nologin
[root@localhost tasks]# cat yum.yml
- name: install packageyum: 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 conftemplate: src=/etc/ansible/roles/test_app/templates/http.conf.j2 dest=/etc/httpd/conf/httpd.confnotify: restart service

在handlers下面创建notify对应的任务:

[root@localhost handlers]# cat main.yml
- name: restart serviceservice: name=httpd state=restarted
[root@localhost tasks]# cat start.yml
- name: start serviceservice: name=httpd state=started enabled=yes

对于files目录,假设我们需要拷贝一个文件到被控机器上,先在files目录下自己创建一个文件:

[root@localhost files]# touch test_app.txt
[root@localhost tasks]# cat copy.yml
- name: copy filecopy: 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-testremote_user: rootroles:- test_app

执行:

[root@localhost ansible]# ansible-playbook roles_test_app.yml

验证执行结果:

端口及服务已启动:

  相关解决方案