Python自动化运维之playbook角色和包含声明

一 点睛

当我们写一个非常大的playbook时,想要复用些功能显得有些吃力,还好Ansible支持将playbook拆分成多个文件,通过包含 (include)的形式进行引用,我们可以根据多种维度进行“封装”,比如定义变量、任务、处理程序等。

角色建立在包含文件之上,抽象后更加清晰、可复用。运维人员可以更专注于整体,只有在需要时才关注具体细节。Ansible官方在 GitHub上提供了大量的示例供大家参考借鉴,访问地址 https://github.com/ansible/ansible-examples即可获相应的学习资料。

二 包含声明

当多个playbook涉及复用的任务列表时,可以将复用的内容剥离出,写到独立的文件当中,最后在需要的地方include进来即可,示例如下:

---
# possibly saved as tasks/foo.yml
- name: placeholder foo
  command: /bin/foo
- name: placeholder bar  
  command: /bin/bar

然后就可以在使用的playbook中include进来,如:

tasks:
  - include: tasks/foo.yml

当然,也可以将变量传递到包含文件当中,这称为“参数包含”。 

如在部署多个WordPress的情况下,可以根据不同用户单独部署WordPress的任务,且引用单个wordpress.yml文件,可以这样写:

tasks:
  - include: wordpress.yml user=timmy  
  - include: wordpress.yml user=alice
  - include: wordpress.yml user=bob

1.4或更高版本可支持以Python的字典、列表的传递参数形式,如:

tasks:
- { include:wordpress.yml,user: timmy,ssh_keys: ['keys/one.txt','keys/two.txt']}

使用这两种方法都进行变量传递,然后在包含文件中通过使用 {{user}}进行变量引用。

将处理程序(handlers)放到包含文件中是一个好的做法,比如重启Apache的任务。

handlers/handlers.yml

---
# this might be in a file like handlers/handlers.yml
- name: restart apache
  service: name=apache state=restarted

需要时可以进行引用,像这样:

handlers:  
  - include: handlers/handlers.yml

三 角色介绍

1 点睛

角色是Ansible定制好的一种标准规范,以不同级别目录层次及文件对角色、变量、任务、处理程序等进行拆分,为后续功能扩展、可维护性打下基础。

一个典型角色目录结构如下:

[root@localhost roles]# tree
.
├── common
│   ├── handlers
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   │   └── ntp.conf.j2
│   └── vars
│       └── main.yml
└── web
    ├── handlers
    │   └── main.yml
    ├── tasks
    │   └── main.yml
    └── templates
        └── nginx2.conf

在playbook是这样引用的:

---
- name: apply common configuration to all nodes
  hosts: all
  roles:
    - common

- name: configure and deploy the webservers and application code
  hosts: webservers
  roles:
    - web

2 角色定制以下规范,其中x为角色名。

  • 如roles/x/tasks/main.yml文件存在,其中列出的任务将被添加到执行队列; 
  • 如roles/x/handlers/main.yml文件存在,其中所列的处理程序将被添加到执行队列; 
  • 如roles/x/vars/main.yml文件存在,其中列出的变量将被添加到执行队列; 
  • 如roles/x/meta/main.yml文件存在,所列任何作用的依赖关系将被添加到角色的列表(1.3及更高版本); 任何副本任务可以引用roles/x/files/无需写路径,默认相对或绝对引用; 
  • 任何脚本任务可以引用roles/x/files/无需写路径,默认相对或绝对 引用; 
  • 任何模板任务可以引用文件中的roles/x/templates/无需写路径,默 认相对或绝对引用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值