Ansible-Playbook详解

一、Playbook 简介

playbook是由一个或多个"play"组成的列表
play的主要功能在于将预定义的一组主机,装扮成事先通过ansible中的task定义好的角色。
Task实际是调用ansible的一个module,将多个play组织在一个playbook中,
即可以让它们联合起来,按事先编排的机制执行预定义的动作
Playbook采用YAML语言编写

二、Playbook 图解

在这里插入图片描述

用户通过ansible命令直接调用yml语言写好的playbook,playbook由多条play组成
每条play都有一个任务(task)相对应的操作,然后调用模块modules,应用在主机清单上,通过ssh远程连接
从而控制远程主机或者网络设备

三、YAML 介绍

YAML是一个可读性高的用来表达资料序列的格式。它具备以下特性

  1. YAML的可读性好
  2. YAML和脚本语言的交互性好
  3. YAML使用实现语言的数据类型
  4. YAML有一个一致的信息模型
  5. YAML易于实现
  6. YAML可以基于流来处理
  7. YAML表达能力强,扩展性好

四、Playbook 核心元素

Hosts          执行的远程主机列表(应用在哪些主机上)

Tasks          任务集

Variables      内置变量或自定义变量在playbook中调用

Templates模板  可替换模板文件中的变量并实现一些简单逻辑的文件

Handlers和notify结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行

tags标签       指定某条任务执行,用于选择运行playbook中的部分代码。
                ansible具有幂等性,因此会自动跳过没有变化的部分,
                即便如此,有些代码为测试其确实没有发生变化的时间依然会非常地长。
                此时,如果确信其没有变化,就可以通过tags跳过此些代码片断
                ansible-playbook -t tagsname useradd.yml

五、Playbook 书写

5.1 使用变量方法

  • 通过ansible命令传递
ansible-playboook test.yaml -e "key=value"
  • yaml直接定义变量
vars:
  key1=value1
  key2=value2
  • 在hosts里文件定义

5.2 条件测试

如果需要根据变量、facts (setup)或此前任务的执行结果来作为某task执行与否的前提时要用到条件测试,在Playbook中条件测试使用when子句。在task后添加when子句即可使用条件测试: when子句支持jinjia2表达式或语法。

- hosts: mysql
  remote_user: root
  tasks:
    - name: "shut down Centos 7 systems"
      command: /sbin/shutdown -r now
      when:
        - ansible_distribution == "Centos”
        - ansible_distribution_major_version =="7"

5.3 迭代

当有需要重复性执行的任务时,可以使用迭代机制。其使用格式为将需要迭代的内容定义为item变量引用,并通过with items语句指明迭代的元素

- hosts: webserver
  remote_user: root
  tasks:
    - name: "Add users"
      user: name={{ item.name }}  state=present groups={{ item.groups }}
      with_items:
        - { name:'test1', groups:'wheel'}
          { name:'test2', groups:'root'}

5.4 Templates 模块

vi templates/httpd.conf	//放在管理端
Listen {{http_port}}
ServerName {{server_name}}
MaxClients {{access_num}}

vi /etc/ansible/hosts
[webserver]
192.168.175.130 http_port=10.0.0.101:80 access num=100 server_name="www.cloud.com:80"


- hosts: webserver
  remote_user: root
  vars:
    - package: httpd
    - service: httpd
  tasks:
    - name: install httpd package
      yum: name={{package}} state=latest
    - name: install configure file
      template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
      notify:
        - restart httpd
    - name: start httpd server
      service: name={{service}} enabled=true state=started
  handlers:
    - name: restart httpd
      service: name={{service}} state=restarted

5.5 tags 模块

在一个playbook中,我们一般会定义很多个task,如果我们只想执行其中的某一个task或多个task时就可以使用tags标签功能了

- hosts: webserver
  remote_user: root
  tasks:
    - name: copy hosts file
      copy: src=/etc/hosts dest=/opt/hosts
      tags:
      - only
    - name: touch file
      file: path=/opt/hosts01 state=touch

执行命令:ansible-plavbook hosts.vml --tags="only"

事实上,不光可以为单个或多个task指定同一个tags。playbook还提供了一个特殊的tags为always。作用就是当使用always当tags的task时,永远执行该要求

六、roles

6.1 简介

roles能够根瓶层次型结构自动装载变量文件、task以及handlers等。简单来讲,roles就是通过分别将变量、文件、任务、模块及处知器故置于单独的目录中,并可以便速地include它们,roles一直用于基于主机构建

6.2 roles 目录

  • files:用来存放由copy模块或script模块调用的文件。
  • templates:用来存放jinjia2模板,template模块会自动在此目录中寻找jinjia2模板文件。
  • tasks:此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用include包含其它的位于此目录的task文件。
  • handlers:此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作。
  • vars:此目录应当包含一个main.yml文件,用于定义此角色用到的变量。
  • defaults:此目录应当包含一个main.yml文件,用于为当前角色设定默认变量。
  • meta:此目录应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值