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' }

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

相关推荐
风清再凯1 天前
自动化工具ansible,以及playbook剧本
运维·自动化·ansible
IT乌鸦坐飞机1 天前
ansible部署数据库服务随机启动并创建用户和设置用户有完全权限
数据库·ansible·centos7
遇见火星14 天前
如何使用Ansible一键部署MinIO集群?
ansible
粥周粥14 天前
ANSIBLE
ansible
码农101号14 天前
Linux中ansible模块补充和playbook讲解
linux·运维·ansible
码农101号14 天前
Linux的Ansible软件基础使用讲解和ssh远程连接
ansible
烟雨书信15 天前
ANSIBLE运维自动化管理端部署
运维·自动化·ansible
碎碎-li15 天前
ANSIBLE(运维自动化)
运维·自动化·ansible
@donshu@18 天前
Linux运维-ansible-python开发-获取inventroy信息
linux·运维·ansible
Kendra91921 天前
Ansible
ansible