ansible之playbook功能简述

playbooks剧本简介

playbooks是ansible更为强大的配置管理组件,实现基于文本文件编排执行的多个任务,且多次重复执行。其是使用YAML(Yet Another Markup Language),类似于半结构化语言,声明式配置,可读性较高。易于与脚本语言交互

核心组件

Tasks :任务

Variables : 变量

ansible_ssh_port : 指定ssh端口

ansible_ssh_user : 指定ssh用户

ansible_ssh_pass : 指定ssh用户登录认证密码,明文密码

ansible_sudo_pass : 指明sudo时候的密码

[webserver] 172.16.36.70 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=zhenping.me

inventory参数:(用于hosts定义的主机后面,多个使用空格分隔)

template : 模板

Handles : 处理器

Roles : 角色,用于调度不同的playbooks

YAML语法格格式

任何数据结构都用缩进进来标识,可以嵌套

每一行是一个键值数据key:value,使用冒号分隔,若想在一行标识需要使用{}和,将多个kv分隔开

列表使用-标识

示例:

- hosts: webserver remote_user: root tasks: - name: install nginx yum: name=nginx state=present - name: start nginx service: name=nginx state=started enabled=true - name: install php-fpm yum: name=php-fpm state=present - name: start php-fpm service: name=php-fpm state=started enabled=true vars handlers - hosts: dbserver remote_user: root tasks: - name: install mysql yum: name=mysql state=present

playbook的变量

变量命名方式

字母、数字和下划线组成,仅能以字母开头

变量的各类

facts

由远程主机发回的主机特有的属性信息,这些信息被保存在ansible变量中,无须声明,可直接调用

自定义变量

~]# ansible-playbook test.yml -extra-vars “hosts=www user=zhenping”

通过命令行传递

通过roles传递

主机变量

定义在inventory中的主机之后的变量,直接传递给单个主机的变量

[webserver] 172.16.36.70 username=zhenping pass=zhenping 172.16.36.71

主机组变量

定义在inventory中的组上的变量

[webserver] 172.16.36.70 172.16.36.60 [webserver:vars] var1=value var2=value

playbook调用变量的示例

- hosts: webserver remote_user: root vars: user: user2 pass: 123321 tasks: - name: add user user: name={{ user }} state=present - name: set password shell: /bin/echo {{ pass }} | passwd --stdin {{ user }}

手动运行playbook脚本时,传递变量(手动传递时,优先级要高于脚本中的变量)

ansible-playbook script.yml --extra-vars "username=ubunt"

ansible-playbook script.yml -e VARS

playbook的条件测试

在某task后面添加when子句,即可实现条件测试功能,when语句支持jinja2语法

####当主机的操作系统为redhat系列操作系统时,才执行yum安装

- hosts : webserver

remote_user : root

tasks :

- name: yum install keepalived

yum: name=keepalived state=present

when: ansible_os_family == "ReaHat"

- name: say hello

shell: /bin/echo "hello world"

playbook的迭代

在task中调用内置的Item变量,在某task后面使用with_items语句来定义元素列表

- hosts: webserver remote_user: root tasks: - name: user add user: name={{ item }} state=present with_items: - testuser1 - testuser2 - testuser3 - testuser4

- hosts: webserver

remote_user: root

tasks:

- name: user add

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

with_items:

- { name: 'tom2', groups: 'tom' }

- { name: 'tom2', groups: 'tom2' }

playbook—handlers: 处理器、触发器

只有在其关注的条件满足时,才会被触发执行的任务

示例:只有原配置文件被修改了,才会重新加载服务

- hosts: webserver remote_user: root tasks: - name: yum install nginx yum: name=nginx state=present - name: start nginx service: name=nginx state=started enabled=true - name: copy configuration file copy: src=/etc/nginx/nginx.conf dest=/etc/nginx/nginx.conf notify: restart nginx handlers: - name: restart nginx service: name=nginx state=reloaded

原文作者:魏镇坪

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2016-09-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏salesforce零基础学习

salesforce lightning零基础学习(三) 表达式的!(绑定表达式)与 #(非绑定表达式)

1774
来自专栏编程

Golang中defer 的五个坑-第三部分

译注:全文总共有四篇,本文为同系列文章的第三篇 本文将侧重于讲解使用 defer 的一些技巧 如果你对 defer 的基本操作还没有清晰的认识,请先阅读这篇文章...

2115
来自专栏深度学习之tensorflow实战篇

pycharm 或者其他Python IDE不支持中文编码的解决方案

Python的自带编辑器IDLE或者Python Shell在默认情况下都不支持中文编码,若在脚本程序中出现中文,则会出现一定的错误。 原因: 因为Python...

3014
来自专栏编程微刊

如何把传统写法改成框架形式 es6http://www.expressjs.com.cn/

1922
来自专栏JavaEdge

类加载器与双亲委派模型1 类加载器 2 双亲委派模型

类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因。 在类加载的第一阶段“加载”过程中,需要通过一个类的全限定名来获取...

1262
来自专栏散尽浮华

linux运维中的命令梳理(三)

----------文本操作命令---------- sed命令:文本编辑工具 sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可...

2408
来自专栏TechBox

【iOS】运行时消息传递与转发机制前言(一)对象的消息传递机制 objc_msgSend()(二)消息转发流程参考文章

1224
来自专栏pythonlove

Bash脚本编程(原创)

Bash,Unix shell的一種,在1987年由布萊恩·福克斯為了GNU計劃而编写。1989年釋出第一個正式版本,原先是計劃用在GNU作業系統上,但能运行于...

1073
来自专栏L宝宝聊IT

Linux基础——正则表达式

1593
来自专栏Astropeak

Python:怎样用线程将任务并行化?

1787

扫码关注云+社区