Ansible角色 roles:
[root@centos7 ~]# tree demo2/
demo2/
├── fooservers.yml
├── hosts
├── roles
│ ├── common
│ │ ├── defaults
│ │ ├── files
│ │ ├── handlers
│ │ ├── meta
│ │ ├── tasks
│ │ ├── templates
│ │ └── vars
│ └── webservers
│ ├── files
│ ├── handlers
│ ├── tasks
│ ├── templates
│ └── vars
├── site.yml
└── webservers.yml
15 directories, 4 files
[root@centos7 ~]#
tasks - 包含角色要执行的主要任务列表
handlers - 包含角色使用的处理程序
defaults - 角色默认的变量
vars - 角色其他的变量
files - 角色部署时用到的文件
templates - 角色部署时用到的模板
meta - 角色定义的一些元数据
[root@centos7 ~]# cd demo/
[root@centos7 demo]#
[root@centos7 demo]#
[root@centos7 demo]#
[root@centos7 demo]# ll
total 8
-rw-r--r--. 1 root root 161 Nov 9 21:13 hosts
drwxr-xr-x. 5 root root 44 Nov 9 21:08 roles
-rw-r--r--. 1 root root 87 Nov 9 21:14 site.yml
[root@centos7 demo]#
[root@centos7 demo]#
[root@centos7 demo]#
[root@centos7 demo]# tree .
.
├── hosts
├── roles
│ ├── common
│ │ ├── files
│ │ ├── handlers
│ │ ├── tasks
│ │ │ └── main.yml
│ │ └── templates
│ ├── nginx
│ │ ├── files
│ │ ├── handlers
│ │ ├── tasks
│ │ │ └── main.yml
│ │ └── templates
│ └── php
│ ├── files
│ ├── handlers
│ ├── tasks
│ │ └── main.yml
│ └── templates
└── site.yml
16 directories, 5 files
[root@centos7 demo]#
[root@centos7 demo]#
[root@centos7 demo]# ll
total 8
-rw-r--r--. 1 root root 161 Nov 9 21:13 hosts
drwxr-xr-x. 5 root root 44 Nov 9 21:08 roles
-rw-r--r--. 1 root root 87 Nov 9 21:14 site.yml
[root@centos7 demo]#
[root@centos7 demo]# cat roles/common/tasks/main.yml
- name: common task test
debug: msg="common task test"
[root@centos7 demo]#
[root@centos7 demo]#
[root@centos7 demo]# cat roles/nginx/tasks/main.yml
- name: nginx task test
debug: msg="nginx task test"
[root@centos7 demo]#
[root@centos7 demo]#
[root@centos7 demo]#
[root@centos7 demo]# cat roles/php/tasks/main.yml
- name: php task test
debug: msg="php task test"
[root@centos7 demo]#
[root@centos7 demo]# ansible-playbook site.yml --syntax-check
playbook: site.yml
[root@centos7 demo]#
[root@centos7 demo]# ansible-playbook site.yml -i hosts
PLAY [webservers] ********************************************************************************************************************************************************************************
TASK [common task test] **************************************************************************************************************************************************************************
ok: [192.168.0.12] => {
"msg": "common task test"
}
ok: [192.168.0.13] => {
"msg": "common task test"
}
TASK [nginx task test] ***************************************************************************************************************************************************************************
ok: [192.168.0.12] => {
"msg": "nginx task test"
}
ok: [192.168.0.13] => {
"msg": "nginx task test"
}
TASK [php task test] *****************************************************************************************************************************************************************************
ok: [192.168.0.12] => {
"msg": "php task test"
}
ok: [192.168.0.13] => {
"msg": "php task test"
}
PLAY RECAP ***************************************************************************************************************************************************************************************
192.168.0.12 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.0.13 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@centos7 demo]#
Roles基本使用:
角色的变量的使用:
方法一:
[root@centos7 ~]# tree demo
demo
├── hosts
├── roles
│ ├── common
│ │ ├── files
│ │ ├── handlers
│ │ ├── tasks
│ │ │ └── main.yml
│ │ └── templates
│ ├── nginx
│ │ ├── files
│ │ ├── handlers
│ │ ├── tasks
│ │ │ └── main.yml
│ │ └── templates
│ └── php
│ ├── files
│ ├── handlers
│ ├── tasks
│ │ └── main.yml
│ └── templates
└── site.yml
16 directories, 5 files
[root@centos7 ~]#
[root@centos7 ~]# cat demo/roles/nginx/tasks/main.yml
- name: nginx task test
debug: msg="nginx task test --> {{dir}} -->{{app_port}}"
[root@centos7 ~]#
[root@centos7 ~]# cat demo/roles/php/tasks/main.yml
- name: php task test
debug: msg="php task test --> {{dir}} -->{{app_port}}"
[root@centos7 ~]#
[root@centos7 ~]# cat demo/site.yml
---
- hosts: webservers
gather_facts: no
roles:
- role: common
- role: nginx
vars:
dir: /opt/a
app_port: 80
- role: php
vars:
dir: /opt/b
app_port: 81
[root@centos7 ~]#
[root@centos7 ~]# ansible-playbook demo/site.yml --syntax-check
playbook: demo/site.yml
[root@centos7 ~]#
[root@centos7 ~]# ansible-playbook demo/site.yml
PLAY [webservers] ********************************************************************************************************************************************************************************
TASK [common task test] **************************************************************************************************************************************************************************
ok: [192.168.0.12] => {
"msg": "common task test"
}
ok: [192.168.0.13] => {
"msg": "common task test"
}
TASK [nginx task test] ***************************************************************************************************************************************************************************
ok: [192.168.0.12] => {
"msg": "nginx task test --> /opt/a -->80"
}
ok: [192.168.0.13] => {
"msg": "nginx task test --> /opt/a -->80"
}
TASK [php task test] *****************************************************************************************************************************************************************************
ok: [192.168.0.12] => {
"msg": "php task test --> /opt/b -->81"
}
ok: [192.168.0.13] => {
"msg": "php task test --> /opt/b -->81"
}
PLAY RECAP ***************************************************************************************************************************************************************************************
192.168.0.12 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.0.13 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@centos7 ~]#
方法二:
在demo/下创建group_vars目录,在该目录下创建文件,如果该文件名为webservers
则该文件中的变量是给hosts文件中webservers主机组的主机使用的,如果该文件名为all,则所有的主机都可以使用。
[root@centos7 demo]# ll
total 8
drwxr-xr-x. 2 root root 17 Nov 9 21:56 group_vars
-rw-r--r--. 1 root root 161 Nov 9 21:13 hosts
drwxr-xr-x. 5 root root 44 Nov 9 21:08 roles
-rw-r--r--. 1 root root 211 Nov 9 21:48 site.yml
[root@centos7 demo]#
[root@centos7 demo]#
[root@centos7 demo]#
[root@centos7 demo]# tree group_vars/
group_vars/
└── all
0 directories, 1 file
[root@centos7 demo]#