Ansible playbook详解

playbook是ansible用于配置,部署,和被管理被控节点的剧本

playbook常用的YMAL格式:(文件名称以 .yml结尾)

1、文件的第一行应该以 "---" (三个连字符)开始,表明YMAL文件的开始。

2、在同一行中,#之后的内容表示注释,类似于shell,python和ruby。

3、YMAL中的列表元素以"-"开头然后紧跟着一个空格,后面为元素内容。

4、同一个列表中的元素应该保持相同的缩进。否则会被当做错误处理。

5、play中hosts,variables,roles,tasks等对象的表示方法都是键值中间以":"分隔表示,":"后面还要增加一个空格。

playbook由三个部分组成:

host部分:使用host指示使用哪个主机或主机组来运行下面的tasks

remote_user:指定远程主机中的哪个用户来登录远端系统,在远端系统执行tasks的用户

tasks:指定远端主机将要执行的一系列动作,tasks的核心为ansible的模块

playbook的核心元素:

hosts:主机组;

tasks:任务列表

variables:变量,设置方式有四种

Templates:包含了模板语法的文本文件

Handlers:由特点条件触发的任务

[root@server ansible]# vim nginx.yml
---
- hosts: web
  remote_user: root
  tasks:
    - name: install nginx
      yum: name=nginx state=present
    - name: copy nginx.conf
      copy: src=/tmp/nginx.conf dest=/etc/nginx/nginx.conf backup=yes
      notify: reload    #当nginx.conf发生改变时,通知给相应的handlers
      tags: reloadnginx   #打标签
    - name: start nginx service
      service: name=nginx state=started
      tags: startnginx   #打标签

  handlers:  #注意,前面没有-,是两个空格
    - name: reload
      service: name=nginx state=restarted  #为了在进程中能看出来

运行前的三部曲

检查错误:ansible-playbook nginx.yml --syntax-check

列出所有任务:ansible-playbook nginx.yml --list-task

列出在那些机器执行:ansible-playbook nginx.yml --list-hosts

运行:ansible-playbook nginx.yml

variables部分(vars为调用定义变量)

1.facts:可直接调用

setup模块就是通过facts组件来实现的,用setup模块获取,直接放入剧本中调用即可

2.用户自定义变量

vars :

  • var1: cc1

  • var2: cc2

1.如果未在剧本中定义变量可以使用 ansible-playbook nginx.yml -e rpmname=keepalived
2.修改剧本定义

模板 templates

模板支持:

字符串:使用单引号或双引号;

数字:整数,浮点数;

列表:[item1, item2, ...]

元组:(item1, item2, ...)

字典:{key1:value1, key2:value2, ...}

布尔型:true/false

算术运算:

+, -, *, /, //, %, **

比较操作:

==, !=, >, >=, <, <=

逻辑运算:

and, or, not

修改剧本: 修改剧本来定义变量

此处的rpmname代表的调用的文件名称为rpmname,下面的nginxport为此文件中的变量模块。copy模块也需要修改为template模块。

字典

  • name: install some packages

yum: name={{ item }} state=present
with_items:

  • nginx

  • memcached

  • php-fpm

传入多个参数

  • name: add some groups

group: name={{ item }} state=present
with_items:

  • group11

  • group12

  • group13

  • name: add some users

user: name={{ item.name }} group={{ item.group }} state=present
with_items:

  • { name: 'user11', group: 'group11' }

  • { name: 'user12', group: 'group12' }

  • { name: 'user13', group: 'group13' }

相当于一个一个传参给定义的相应接收的位置

相关推荐
一切皆文件linux16 小时前
网站集群批量管理-密钥认证与Ansible模块
ansible
让美好继续发生2 天前
ansible学习
学习·ansible
有谁看见我的剑了?2 天前
ansible学习之 Facts
ansible
peanutfish2 天前
Chapter 4 RH294 RHEL Automation with Ansible
linux·ansible·yaml
henan程序媛3 天前
jenkins项目发布基础
运维·gitlab·ansible·jenkins
pyliumy4 天前
ansible 配置
大数据·ansible
运维小白。。4 天前
自动化运维工具 Ansible
运维·自动化·ansible
weixin_438197385 天前
ansible之playbook\shell\script模块远程自动安装nginx
linux·服务器·ansible
peanutfish5 天前
Chapter 5 RH294 RHEL Automation with Ansible
linux·ansible·yaml
人类群星闪耀时5 天前
自动化运维的利器:Ansible、Puppet和Chef详解
运维·自动化·ansible