YAML是什么?

  • YAML是一个可读性高、用来表达数据序列的格式语言
  • YAML:YAML Ain't a Markup Language
  • YAML以数据为中心,重点描述数据的关系和结构

YAML的格式要求如下:

  • "#"代表注释,一般第一行为三个横杠(---)
  • 键值(key/value)对使用":"表示,数组使用"-"表示
  • key和value之间使用":"分隔
  • ":"后面必须有空格
  • 一般缩进由两个或以上空格组成
  • 相同层级的缩进必须对齐,缩进代表层级关系
  • 全文不可以使用tab键
  • 区分大小写
  • 扩展名为yml或者yaml
  • 跨行数据需要使用>或者|,其中|会保留换行符

YAM注意-和:后面必须有空格。

L示例展示:

1.

---

"诗仙": "李白"

或者

"诗仙":

"李白"

2.数组的例子

---

- "李白"

- "杜甫"

- "白居易"

- "唐僧"

#使用一行表示数组的例子

---

"诗人": ["李白","杜甫","白居易"]

#键值对和数组符合例子:

---

"诗人":

- "李白"

- "杜甫"

- "白居易"

Playbook语法格式要求如下:

  • playbook采用YAML格式编写
  • playbook文件中由一个或多个play组成
  • 每个play中可以包含:
  • hosts(主机)、tasks(任务)、vars(变量)等元素组成
  • 使用ansible-playbook命令运行playbook剧本

测试Playbook语法格式

1)编写第一个Playbook

hosts、tasks、name是关键词(不可修改),ping是模块,调用不同模块完成不同任务。

# vim ~/ansible/test.yml

---
- hosts: all                                    #host定义要远程的谁那个主机,或组
tasks:                                            #定义远程后要执行的任务
- name: ping                                  #name后面的具体内容可以任意
ping:

#ansible-playbook test.yml

############################################################

2)定义多个主机和任务

hosts由一个或多个组或主机组成,逗号分隔,tasks由一个或多个任务组成,多个任务按顺序执行,执行ansible-playbook命令可以使用-f选项自定义并发量。

#vim test1.yml

---
- hosts: test,webserver                    #hosts定义需要远程哪些被管理主机,hosts是关键

tasks:      
      - name: ping
        ping:
      - name: shell
        shell: touch ~/shell.txt
# ansible-playbook ~/ansible/test.yml -f 5

###############################################################

3)多个play的Playbook文件

# vim ~/ansible/test2.yml

#第一个play剧目

---

- hosts: test

tasks:

- name: This is first play

ping:

#第二个play剧目

- hosts: webserver

tasks:

- name: This is second play

ping:

##############################################################

用户管理,创建系统账户、账户属性、设置密码(ansible-doc user)。

#vim test_user.yml

---
- hosts: webserver
  tasks:
     - name: Add the user 'johnd'
       user:
       name: johnd
       uid: 1040
       group: daemon
       password: "{{ '123' | password_hash('sha512') }}"

# vim ~/ansible/user_johnd.yml

---

- hosts: webserver

tasks:

- name: Remove the user 'johnd'

user:

name: johnd

state: absent

#删除系统账户johnd,state的值设置为absent是删除用户

############################################################

3)使用playbook管理软件(ansible-doc yum)

RHEL或CentOS系统中的软件有组包的概念,使用yum grouplist或者dnf grouplist可以查看组包的名称。

# vim ~/ansible/package.yml

---

- hosts: webserver #需要远程的主机是谁

tasks: #定义剧本需要执行的任务

- name: Install a list of packages                            #第一个任务的描述信息

yum:                                                                      #调用yum模块安装软件

name:                                                     #安装软件的名字,它的值有多个,使用数组-

- httpd                                                #安装httpd软件

- mariadb                                           #安装mariadb软件

- mariadb-server                               #安装mariadb-server

- name: install the 'RPM Development Tools' package group #第二个任务的描述信息

yum:                                                         #调用yum模块安装软件组包

name: "@RPM Development Tools"     #安装哪个组包,@是关键词

- name: update software                            #第三个任务的描述信息

yum:                                                        #调用yum模块升级软件

name: '*'                                                #需要升级哪些软件

state: latest                                           #latest代表升级软件

#备注:state的值可以是(present|absent|latest)

#present代表安装软件(默认是present);absent代表卸载软件

#latest代表升级软件

##############################################

Ansible特殊模块

################################################

1.setup模块

ansible_facts用于采集被管理设备的系统信息,所有收集的信息都被保存在变量中,每次执行playbook默认第一个任务就是Gathering Facts,使用setup模块可以查看收集到的facts信息。

# ansible test -m setup

192.168.4.10 | SUCCESS => {

"ansible_facts": {

"ansible_all_ipv4_addresses": [

  • ansible_all_ipv4_addresses #IP地址
  • ansible_bios_version #主板BIOS版本
  • ansible_memtotal_mb #总内存
  • ansible_hostname #主机名
  • ansible_fqdn #主机的域名
  • ansible_devices.sda.partitions.sda1.size #某个磁盘分区的大小

2.debug模块

debug模块可以显示变量的值,可以辅助排错,通过msg可以显示变量的值,变量需要使用{{}}扩起来。

# vim ~/ansible/debug.yml

---
- hosts: test
  tasks:
      - debug:
           var: ansible_all_ipv4_addresses
      - debug:
           msg: "主机名是:{{ ansible_hostname }}"
      - debug:
           var: ansible_devices.vda.partitions.sda1.size
      - debug:
           msg: "总内存大小:{{ ansible_memtotal_mb }}"

#备注调用debug模块显示某些具体的变量值

#debug模块可以显示变量的值,可以辅助排错

#debug模块有两个参数,var和msg(引用变量需要{{}})

#var后面调用变量不需要使用{{}}

#msg后面调用变量需要使用{{}}

Playbook使用,编写YAML的更多相关文章

  1. 如何不编写 YAML 管理 Kubernetes 应用?

    Kubernetes 将自身边界内的事物都抽象为资源.其中的主要部分,是以 Deployment.StatefulSet 为代表的 workload 工作负载控制器,其他各类资源都围绕这些主要的资源工 ...

  2. ansible playbook实践(三)-yaml文件写法

    playbook基于YAML语法来编写,基本语法规则如下: 1.大小写敏感 2.使用缩进表示层级关系 3.缩进时不允许使用Tab键,只允许使用空格 4.缩进的空格数目不重要,只要相同层级的元素左侧对齐 ...

  3. Ansible的Playbook的编写

    在Ansible中,将各个模块组合起来成为一个YAML格式的配置文件,这个配置文件叫做Playbook, Playbook和模块的关系类似于shell脚本和Linux命令之间的关系. Playbook ...

  4. playbook详解—YAML格式的文本

    在playbook中有一些核心的指令 hosts:指明命令运行在哪个node之上 remote_user:在远端的node之上以什么用户的身份运行命令 var:给模板传递变量值 tasks:指明需要执 ...

  5. Ansible_编写Playbook文件

    一.Playbook的实施 1.Ansible playbook与临时命令概述: 临时命令可以作为一次性命令对一组目标主机运行一项简单的任务 play是针对清单中选定的主机运行的一组有序任务.play ...

  6. ansible playbook实践(二)-基础相关命令

    ansible相关的命令: ansible  用来执行ansible管理命令 ansible-doc 用来获取模块的帮助文档 ansible-playbook 当有众多任务时,可编写成playbook ...

  7. devops工具-Ansible进阶playbook&roles

    一.playbook介绍     playbook 是 Ansible 管理配置.部署应用的核心所在,一个playbook由有多“play组成”,而一个play实际就是一个task,每个task是由多 ...

  8. ansible笔记(10):初识ansible playbook

    ansible笔记():初识ansible playbook 假设,我们想要在test70主机上安装nginx并启动,我们可以在ansible主机中执行如下3条命令 ansible test70 -m ...

  9. Ansible之playbook的使用总结 - 运维笔记

    之前详细介绍了Ansible的安装, 配置, 以及Ansible常用模块的使用. 下面对Ansible的playbook用法做一小结. 为什么引入playbook?一般运维人员完成一个任务, 比如安装 ...

随机推荐

  1. JavaScript 手写 setTimeout 及 同步调用和异步调用

    demo let timeout = (sec, num) => { const now = new Date().getTime() // 获取进入方法时的时间 let flag = true ...

  2. web安全之python延时注入

    通过python代码编写的一个延时的sql注入脚本 首先我们导入了request请求库和string类型的库,通过库我们可以通过访问请求的方式访问url链接. url链接为注入链接地址这里我随便写的一 ...

  3. 剑指Offer——II平衡二叉树

    class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None # 这道题使用中序遍历加上 ...

  4. Windows下 Navicat Premium 15安装教程(图文,含注册)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://www.cnblogs.com/zhangzhicheng1996/ ...

  5. SpringBoot---关于 WebMvcConfigurerAdapter 过时问题及解决方法

    SpringBoot---关于 WebMvcConfigurerAdapter 过时问题及解决方法 环境: IDEA :2020.1 Maven:3.5.6 SpringBoot: 2.3.2 在Sp ...

  6. unity探索者之socket传输protobuf字节流(四)

    版权声明:本文为原创文章,转载请声明http://www.cnblogs.com/unityExplorer/p/7027659.html 上篇已经把socket的传输说的差不多了,这篇主要是说说断线 ...

  7. linux驱动之内核多线程(二)

    本文摘自http://www.cnblogs.com/zhuyp1015/archive/2012/06/11/2545702.html 内核多线程是在项目中使用到,自己也不熟悉,遇到一个很囧的问题, ...

  8. 团队作业1——团队展示&选题 (追忆少年)

    目录 一,团队展示 1.1队名 1.2队员学号 1.3项目描述 1.4队员风采 1.5团队分工 1.6团队合照 1.7团队特色 (一)目标导向 (二)协作基础 (三)共同的规范和方法 (四)技术或技能 ...

  9. Spring Cloud Feign 自定义配置(重试、拦截与错误码处理) 实践

    Spring Cloud Feign 自定义配置(重试.拦截与错误码处理) 实践 目录 Spring Cloud Feign 自定义配置(重试.拦截与错误码处理) 实践 引子 FeignClient的 ...

  10. 网站更换服务器或IP对排名有影响吗

    http://www.wocaoseo.com/thread-287-1-1.html 网站更换服务器或IP对排名有影响吗 复制代码 百度官方观点:原则上是不会的.除非-新换的服务器太糟糕,三天两头访 ...