Ansible剧本中的角色—playbook中的roles

roles为完全独立或相互依赖的变量,任务,文件,模板和模块集合提供框架。

在Ansible中,角色是将playbook分成多个文件的主要机制。这简化了编写复杂的playbook,并使其更易于重用。破坏playbook允许您在逻辑上将剧本分解为可重用的组件。

每个roles基本上仅限于特定功能或所需输出,并具有在该roles本身内或作为依赖项列出的其他角色中提供该结果的所有必要步骤。

roles不是playbook。roles是小功能,可以独立使用,但必须在playbook中使用。无法直接执行roles。roles没有明确设置roles将应用于哪个主机。

Ansible Galaxy

Ansible Galaxy 是一个网站,网站提供所有类型的由社区开发的 roles,可以在这个网站上下载其他人写好的roles,非常的方便

roles使用示例

roles是可以重用的, task中可以import_tasks yml文件 但入口总是main.yml 这个名字不能变

mkdir -p {nginx,uwsgi,mysql}/{tasks,templates,vars,files} #递归创建目录结构的命令

在自定义创建的data目录下实现示例

1.创建目录, 及yml文件, 实现roles的整体结构如下

data
├── nginx.yml				# 角色文件, ansible-playbook nginx.yml执行,和roles文件同级
├── roles
│   ├── mysql
│   ├── nginx
│   │   ├── files  			# 用来存放file操作的src源文件
│   │   │   └── c.txt
│   │   ├── handlers  		# 存放handlers操作的yml文件
│   │   │   └── main.yml
│   │   ├── tasks   		# task目录必须存在,用来存放任务的yml文件
│   │   │   ├── copyfile.yml
│   │   │   ├── install.yml
│   │   │   ├── main.yml
│   │   │   └── start.yml
│   │   ├── templates
│   │   │   └── nginx.conf
│   │   └── vars  			# 存放变量文件
│   │       └── main.yml
│   ├── redis
│   └── uwsgi
│       └── tasks
│           └── main.yml
└── uwsgi.yml

nginx,uwsgi这些名字就是自定义起的,因为就是要对各被控机的这些软件操作,所以这么起名比较直观.以下是各文件内容,

nginx.yml(和roles文件夹同级的)

- hosts: web
  roles:
  - nginx

uwsgi.yml

- hosts: web
  roles:
  - uwsgi

roles/tasks/files/c.txt 这个目录存放的都是file要操作的源文件

源文件,测试情况下随便写写,可以放要copy的文件

roles/tasks/handlers/main.yml

- name: restart
  service: name=nginx state=restarted

roles/tasks/tasks/main.yml

- import_tasks: install.yml
- import_tasks: copyfile.yml
- import_tasks: start.yml
- name: file
  copy: dest=/tmp/aaa.txt src=c.txt
- name: createuser
  user: name={{user}}
  notify: restart

roles/tasks/tasks/install.yml

- name: install
  yum: name=nginx

roles/tasks/tasks/copyfile.yml

- name: copyfile
  template: src=nginx.conf dest=/etc/nginx/nginx.conf

roles/tasks/tasks/start.yml

- name: start
  service: name=nginx state=started enabled=yes

roles/tasks/templates/nginx.conf

放的是nginx.conf的模版文件,结合setup中的参数来用

roles/tasks/vars/main.yml

{"user":Robertx}

2.执行:

ansible-playbook nginx.yml
posted @ 2019-05-09 20:21  robertx  阅读(1441)  评论(0编辑  收藏  举报