跳至主要內容

Playbooks

xw大约 2 分钟运维ansible

简介

Palybooks(剧本)是一种简单的配置管理系统与多机器部署系统的基础.与现有的其他系统有不同之处,且非常适合于复杂应用的部署。在 playbooks 中可以编排有序的执行过程,甚至于做到在多组机器间,来回有序的执行特别指定的步骤.并且可以同步或异步的发起任务。Playbooks 的格式是YAML。

快速入门

编写playbook-test.yaml文件,内容如下:

---
## 指定hosts
- hosts: webservers
  tasks:
    - name: Copy ansible inventory file to client
      copy:
        src: /etc/ansible/hosts 
        dest: /etc/ansible/hosts
        owner: root 
        group: root 
        mode: 0644

执行: ansible-playbook playbook-test -f 10,-f 指定并发数,输出如下:

Roles

Palybooks可以自由编排不同的子任务,完成复杂的功能,但是当Palybooks过多时维护也会变得困难,那怎样组织 playbook 才是最好的方式呢?答案就是:使用Roles,Roles 基于一个已知的文件结构,去自动的加载某些 vars_files,tasks 以及 handlers。基于 roles 对内容进行分组,使得我们可以容易地与其他用户分享roles,简单来说约定大于配置

目录结构组成:

roles/
    common/               # this hierarchy represents a "role"
        tasks/            #
            main.yml      #  <-- tasks file can include smaller files if warranted
        handlers/         #
            main.yml      #  <-- handlers file
        templates/        #  <-- files for use with the template resource
            ntp.conf.j2   #  <------- templates end in .j2
        files/            #
            bar.txt       #  <-- files for use with the copy resource
            foo.sh        #  <-- script files for use with the script resource
        vars/             #
            main.yml      #  <-- variables associated with this role
        defaults/         #
            main.yml      #  <-- default lower priority variables for this role
        meta/             #
            main.yml      #  <-- role dependencies
        library/          # roles can also include custom modules
        module_utils/     # roles can also include custom module_utils
        lookup_plugins/   # or other types of plugins, like lookup in this case

    webtier/              # same kind of structure as "common" was above, done for the webtier role
    monitoring/           # ""
    fooapp/               # ""
  • tasks/main.yml,角色执行的主要任务列表。
  • handlers/main.yml,处理程序,可以在此角色内部或外部使用。
  • library/my_module.py,自定义模块,用的比较少。
  • defaults/main.yml,默认变量 ,优先级更低。
  • vars/main.yml,变量设置。
  • files/,存放文件。
  • templates/main.yml,存放模板。
  • meta/main.yml,存放元数据。

此外还有site.yml,用来构建站点信息。

基于Roles结构的示例

结构如下图所示:

hosts文件:

[webservers]
124.223.63.123

## 也可以不分组
#124.223.63.123

site.yml文件:

---
  ## 指定哪些主机执行
- hosts: webservers
  ## 设置标签值
  tags: [ common-tag ]
  roles:
    ## 与下面的common文件夹对应
    - role: common

roles/tasks/main.yaml文件:

---

- name: cp-common-file
  copy:
    src: test.log
    dest: /data/test.log
  
  
- name: cp-common-file
  template:
    src: test1.log.j2
    dest: /data/test1.log

roles/common/templates/test1.log.j2文件:

fdsfdsggggggggggggggggggggggggggggggg
fdfd{{my_var1}}
{{my_var2}}

roles/common/templates/test1.log.j2文件内容:

my_var1: this is var1
my_var2: this is var2

执行命令:

## 按照site.yml从上到下依次执行
ansible-playbook -i hosts site.yml

## 按照标签指定执行
ansible-playbook -i hosts site.yml --tags=common-tag

输出:

至此,完成了一个基本的roles。roles是Ansible一个非常重要的部分,大部分都是基于roles去开发

注意:变量的格式为

参考链接

Ansible Roles官方文档open in new window