目录
ansible 自1.2版本引入的新特性,用于层次性、结构化地组织playbook。roles能够根据层次结构自动装在边梁文杰、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单来讲,roles就是通过分别将变量、文件、任务、模块以及处理器放置于单独的目录中,并可以边界的include他们的一种机制。角色一般基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。
一个roles的案例如下所示:
而在playbook中,可以这样使用roles:
-hosts: wevserversroles:- common- wevservers
也可以向roles传递参数,例如:
- hosts: webserversroles:- common- { role: foo_app_instance, dir: '/opt/a', port: 5000 }- { role: foo_app_instance, dir: '/opt/b', port: 5001 }
甚至也可以条件式地使用roles,例如:
- hostss: webserversroles:- { role: some_role, when: "ansible_os_family == 'RedHat'" }
目录名 | 说明 |
---|---|
tasks目录 | 至少应该包含一个名为l的文件,其定义了此角色的任务列表;文件可以使用include包含其它的位于此目录中的task文件; |
file目录 | 存放由copy或script等模块调用的文件; |
templates目录 | template模块会自动在此目录中寻找Jinja2模板文件; |
handlers目录 | 此目录中应当包含一个l文件,用于定义此角色用到的各handler;在handler中使用include包含的其它handler文件也应该位于此目录中; |
vars目录 | 应当包含一个l文件,用于定义此角色用到的变量; |
meta目录 | 因当包含一个l文件,用于定义此角色的特殊设定及其依赖关系;ansible 1.3 及其以后的版本才支持; |
default目录 | 为当前角色设定默认变量时使用此目录,因当包含一个l文件; |
创建roles所需的目录
[root@node-1 ansible]# mkdir -pv ansible_playbook/roles/{webservs,dbservs}/{tasks,files,templates,meta,handlers,vars}
[root@node-1 ansible]# tree ansible_playbook/
ansible_playbook/
└── roles├── dbservs│ ├── files│ ├── handlers│ ├── meta│ ├── tasks│ ├── templates│ └── vars└── webservs├── files├── handlers├── meta├── tasks├── templates└── vars
以webservs来举例
首先进入到webservs角色对应的目录
[root@node-1 ansible_playbook]# cd roles/webservs/
[root@node-1 webservs]# ls
files handlers meta tasks templates vars
[root@node-1 webservs]# pwd
/etc/ansible/ansible_playbook/roles/webservs
然后拷贝httpd配置文件
[root@node-1 webservs]# cp /etc/httpd/f files/
定义tasks
[root@node-1 webservs]# cat l
- name: install httpd packageyum: name=httpd state=present
- name: install configuration filecopy: srcf dest=/etc/httpd/ftags:- confnotify:- restart httpd
- name: start httpdservice: name=httpd state=started
定义handlers
[root@node-1 webservs]# cat l
- name: restart httpdservice: name=httpd state=restarted
然后到roles目录下
[root@node-1 webservs]# cd ../../
[root@node-1 ansible_playbook]# pwd
/etc/ansible/ansible_playbook
[root@node-1 ansible_playbook]# ls
roles
定义l
这里l是固定用法
[root@node-1 ansible_playbook]# l
- hosts: webservsremote_user: rootroles:- webservs
[root@node-1 ansible_playbook]# pwd
/etc/ansible/ansible_playbook
[root@node-1 ansible_playbook]# ls
roles l
最后执行l
[root@node-1 ansible_playbook]# lPLAY [webservs] **********************************************************************************************************************************************TASK [Gathering Facts] ***************************************************************************************************************************************
ok: [10.25.196.25]TASK [webservs : install httpd package] **********************************************************************************************************************
changed: [10.25.196.25]TASK [webservs : install configuration file] *****************************************************************************************************************
ok: [10.25.196.25]TASK [webservs : start httpd] ********************************************************************************************************************************
changed: [10.25.196.25]PLAY RECAP ***************************************************************************************************************************************************
10.25.196.25 : ok=4 changed=2 unreachable=0 failed=0
可以看到执行成功了,下面来查看一下
[root@node-1 ansible_playbook]# ansible webservs -m shell -a 'rpm -qa httpd'[WARNING]: Consider using the yum, dnf or zypper module rather than running rpm. If you need to use command because yum, dnf or zypper is insufficient you
can add warn=False to this command task or set command_warnings=False in ansible.cfg to get rid of this message.10.25.196.25 | SUCCESS | rc=0 >>
httpd-2.2.s.x86_64[root@node-1 ansible_playbook]# ansible webservs -m shell -a 'ps aux | grep httpd'
10.25.196.25 | SUCCESS | rc=0 >>
root 19148 0.0 0.0 175536 3764 ? Ss 21:08 0:00 /usr/sbin/httpd
apache 19150 0.0 0.0 175536 2476 ? S 21:08 0:00 /usr/sbin/httpd
apache 19151 0.0 0.0 175536 2448 ? S 21:08 0:00 /usr/sbin/httpd
apache 19152 0.0 0.0 175536 2448 ? S 21:08 0:00 /usr/sbin/httpd
apache 19153 0.0 0.0 175536 2448 ? S 21:08 0:00 /usr/sbin/httpd
apache 19154 0.0 0.0 175536 2448 ? S 21:08 0:00 /usr/sbin/httpd
apache 19155 0.0 0.0 175536 2448 ? S 21:08 0:00 /usr/sbin/httpd
apache 19156 0.0 0.0 175536 2448 ? S 21:08 0:00 /usr/sbin/httpd
apache 19157 0.0 0.0 175536 2448 ? S 21:08 0:00 /usr/sbin/httpd
root 19335 0.0 0.0 106104 1128 pts/1 S+ 21:16 0:00 /bin/sh -c ps aux | grep httpd
root 19337 0.0 0.0 103260 832 pts/1 S+ 21:16 0:00 grep httpd
可以看到服务都是启动正常的。
总结:
最后的l中,可以定义多个hosts,分别执行不同的任务.这样所有的代码都可以被反复使用。
转载于:.html
本文发布于:2024-01-31 07:23:18,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170665699926626.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |