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

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

相关推荐
野奔在山外的猫2 小时前
【教程】Ansible 环境部署
ansible
泡沫冰@2 小时前
实施Ansible Playbook
ansible
鲸屿1953 天前
Ansible之playbook
服务器·网络·ansible
Sweety丶╮7943 天前
【Ansible】的介绍
云原生·ansible
知白守黑2673 天前
Ansible角色
运维·服务器·ansible
Sweety丶╮7944 天前
【Ansible】实施 Ansible Playbook知识点
服务器·云原生·ansible
YC运维5 天前
Ansible题目全解析与答案
java·算法·ansible
--运维实习生--6 天前
自动化运维之ansible
运维·自动化·ansible
神秘人X7077 天前
Ansible 角色使用指南
ansible·角色
维尔切7 天前
自动化运维-ansible中对于大项目的管理
运维·自动化·ansible