目录
role
Ad-Hoc适用于临时命令的执行,Playbook合适中小项目,Roles适合大项目
构建role
Roles主要依赖于目录的命名和摆放,默认tasks/main.yaml是所有任务的入口,所以使用Roles的过程可以理解为目录规范化命名的过程
role_name/
meta/
tasks/
每个目录下均由main.yaml定义该功能的任务集
tasks/main.yaml默认执行所有指定的任务
roles的调用文件playbook_role.yaml内容如下
---
- hosts: all
roles:
- role_name
这样,目录名为 role_name
下的tasks/main.yaml下的所有任务都会被执行
ansible-playbook playbook_role.yaml
role 目录可以在/etc/ansible/ansible.cfg中通过role_path定义,也可以在playbook_role.yaml所在同级目录下
fab2ansible ├── group_vars│ │ └── all ├── roles│ ├── git│ │ ├── files│ │ │ └── main.yaml│ │ ├── tasks│ │ │ ├── create_dir.yaml│ │ │ ├── git_checkout.yaml│ │ │ ├── main.yaml│ │ │ └── static_git_pull.yaml│ │ └── vars│ │ └── main.yaml│ └── user│ ├── tasks│ │ ├── main.yaml│ │ └── user-config.yaml│ └── vars│ └── main.yaml └── playbook_role.yaml
编辑roles目录
变量文件
group_vars/all 文件
---
# 以下列出的变量对所有主机和组有效,即全局有效
---
repository_static: "https://github.com/ansible/ansible.git"
package_dir: "/opt/"
project: "ansible"
git_commit: "devel"
flag: "2.17.3"
username: "test"
service_name: "memcached"
group_vars目录下的文件定义Roles中调用的变量,Roles对应调用该目录同名文件中定义的变量,文件名为all的文件定义的变量针对所有Roles生效
调用role
playbook_role.yaml
---
- hosts: ubuntu
roles:
- role: git
reoles
是关键字
role: git
表示调用git角色
如果也想调用多个其他角色只需要添加列表元素
---
...
roles:
- role: git
- role: user
- role: config
tasks main 文件
roles/git/tasks/main.yaml
---
#设置调用git模块实现的功能
- import_tasks: create_dir.yaml
- import_tasks: static_git_pull.yaml
- import_tasks: git_checkout.yaml
import_tasks: 用于静态引用任务
include_tasks: 用于动态引用任务
import_playbook: 可以在主playbook文件中静态引入子剧本
如果要在任务中引入playbook,可以通过command模块指定ansible-playbook 执行,不推荐这样做playbook文件只建议在主playbook中引入,如果有其他引入方式,说明规划没做好,是编写者的问题
tasks create_dir.yaml,git_checkout.yaml,static_git_pull.yaml 文件
roles/git/tasks/create_dir.yaml
---
# 这些任务负责检出git变量
#
- name: create dir
file:
path: "{{ package_dir }}{{ project }}-release-{{ git_commit}}/{{ flag}}-{{ project }}"
owner: "{{ username }}"
group: "{{ username }}"
mode: 0755
recurse: yes
state: directory
roles/git/tasks/git_checkout.yaml
---
# 这些任务负责检出git变量
- name: Git init before git pull
command: /usr/bin/git fetch
args:
chdir: "{{ package_dir }}{{ project }}-release-{{ git_commit }}/{{ flag }}-{{ project }}"
- name: Git reset
command: /usr/bin/git reset --hard
args:
chdir: "{{ package_dir }}{{ project }}-release-{{ git_commit }}/{{ flag }}-{{ project }}"
- name: Git checkout
command: /usr/bin/git checkout {{ git_commit }}
args:
chdir: "{{ package_dir }}{{ project }}-release-{{ git_commit }}/{{ flag }}-{{ project }}"
roles/git/tasks/static_git_pull.yaml
---
- name: Git pull
git:
repo: "{{ repository_static }}"
dest: "{{ package_dir }}{{ project }}-release-{{ git_commit }}/{{ flag }}-{{ project }}"
version: "{{ git_commit }}"
force: yes # git模块,结合Ansible后用于自动化版本管理
ansible-playbook playbook_role.yml
PLAY [ubuntu] *****
TASK [Gathering Facts] *****
ok: [107.151.199.209]
TASK [git : create dir] *****
changed: [107.151.199.209]
TASK [git : Git pull] *****
changed: [107.151.199.209]
TASK [git : Git pull] *****
ok: [107.151.199.209]
TASK [git : Git init before git pull] *****
changed: [107.151.199.209]
TASK [git : Git reset] *****
changed: [107.151.199.209]
TASK [git : Git checkout] *****
changed: [107.151.199.209]
PLAY RECAP *****
107.151.199.209 : ok=7 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
标签:git,roles,示例,tasks,yaml,ansible,role,playbook,dir
From: https://www.cnblogs.com/anyux/p/18371207