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

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

相关推荐
楠奕10 小时前
国产ARM主机安装Ansible
arm开发·ansible
pyliumy14 小时前
在基于Arm架构的华为鲲鹏服务器上,针对openEuler 20.03 LTS操作系统, 安装Ansible 和MySQL
服务器·架构·ansible
AZQN9 天前
ansible故障排查思路
运维·ansible
DC_BLOG12 天前
Linux-Ansible模块完结
linux·运维·服务器·ansible
xiao智13 天前
Ansible 数百台批量操作前期准备工作
linux·python·ansible
likeyou~coucou16 天前
自动化之ansible(二)
运维·自动化·ansible
明阳mark16 天前
Ansible 学习笔记
笔记·学习·ansible
DC_BLOG16 天前
Linux-Ansible模块进阶
linux·运维·服务器·ansible
DC_BLOG17 天前
Linux-Ansible命令
linux·运维·服务器·ansible
李匠202420 天前
云计算架构学习之Ansible-playbook实战、Ansible-流程控制、Ansible-字典循环-roles角色
学习·云计算·ansible