ansible基础-playbook剧本的使用
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.YAML概述
1>.YAML的诞生
YAML是一个可读性高,用来表达数据序列的格式。
YAML参考了其他多种语言,包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822。
Clark Evans在2001年5月在首次发表了这种语言,另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者。\
2>.YAML的命名
YAML是"YAML Ain't a Markup Language"(YAML不是一种置标语言)的递归缩写。
在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种置标语言)。但为了强调这种语言以数据作为中心,而不是以标记语言为重点,而反向缩略语重命名。
3>.YAML的功能
YAML的语法和其他高阶语言类似,并且可以简单表达清单、散列表,标量等资料形态、。
它使用空白符号缩排和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种设定档、倾印除错内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。
尽管它比较适合用来表达阶层式(hierarchical model)的数据结构,不过也有精致的语法可以表示关联性(relational model)的资料。
由于YAML使用空白字符和分行来分隔资料,使得它他特别适合用grep、Python、Perl、Ruby操作。
其让人最容易上手的特色是巧妙避开各种封闭符号,如:引号、各种括号等,这些符号在嵌套结构中会变得复杂而难以辨认。
4>.JSON格式和YAML格式表现数据结构(基本数据结构)案例对比
JSON格式:
{id:1,name:尹正杰,age:18,spouse:{id:2,name:jason,age:26},fav:[red,yellow,blue]}
YAML格式:
id:1
name:尹正杰
age:18
spouse:
id:2
name:jason
age:26
fav:
-red
-yellow
-blue
5>.YAML语法检查
其实ansible自带的就有YAML语法检查的脚本,当然你也可以参考网页连接的检查:https://www.bejson.com/validators/yaml/。
二.Playbook的核心元素
Hosts:
定义可以操作的主机,
Tasks:
定义我们需要执行的任务列表。
Variable:
支持变量,流程控制语句,如循环语句等等。(YAML支持编程语言的基本语法,如条件表达式,循环语句,流程控制等等,这也是为什么ansible选择它的一个原因吧!)
Templates:
包含了模板语法的文本文件。
Handlers:
处理器是由特定条件触发的任务。
Roles:
定义角色,其实我们可以理解角色是将服务器主机进行分组,然后基于组的方式进行批量管理。这个角色和MySQL8.0之后版本的角色功能很相似!
三.运行playbook的方式案例展示
1>.playbook的基础组件
playbook的基础组件: Hosts: 运行指定任务的目标主机。 remoute_user: 在远程主机上执行任务的用户。 tasks: 任务列表。 模块,模块参数 格式: action:module arguments module:arguments 温馨提示: shell和command模块后面直接跟命令,而非key=value类的参数列表。
某任务的状态在运行后为changed时,可通过“notify”通知给相应的handlers。
任务可以通过“tags”打标签,而后可在ansible-playbook命令上使用-t指定进行调用。
2>.运行playbook的步骤简介
运行playbook的方式: 1>.测试 ansible-playbook --check 只检测可能会发生的改变,但不是真正执行操作。 ansible-playbook --list-hosts 列出运行任务的主机。 ansible-playbook --list-tasks 列出运行的任务列表。 ansible-playbook --syntax-check 语法检查。 2>.运行
3>.编写剧本(注意,每个冒号后面都有一个空格,如果你没写的话,可能会报错!)
[root@node101.yinzhengjie.org.cn ~/ansible_workshop]# cat memcached.yaml - hosts: node102.yinzhengjie.org.cn remote_user: root tasks: - name: 'install memcached package' yum: 'name=memcached state=installed' - name: 'start memcached service' service: 'name=memcached enabled=true state=started' [root@node101.yinzhengjie.org.cn ~/ansible_workshop]# [root@node101.yinzhengjie.org.cn ~/ansible_workshop]#