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. 2020-04-18:synchronized和reentrantLock的异同

    福哥答案2020-04-19:采纳群员答案: 1 synchronized是关键字,reentrantlock是类,API层面的2 前者是通过monitor来实现锁机制,后者是基于AQS实现的,通过内 ...

  2. 【Apollo】(2)--- Apollo架构设计

    Apollo架构设计 上一篇博客有讲到:[Apollo](1)--- Apollo入门介绍篇 这篇来写Apollo的核心架构设计 一.整体架构 Apollo整体架构图,已由作者宋顺已经给出: 这幅图所 ...

  3. MIT 6.828 | JOS | 关于虚拟空间和物理空间的总结

    Question: 做lab过程中越来越迷糊,为什么一会儿虚拟地址是4G 物理地址也是4G ,那这有什么作用呢? 解决途径: 停下来,根据当前lab的进展,再回头看上学期操作系统的ppt & ...

  4. Unix I/O

    Unix I/O 打开文件 一个应用程序通过要求内核打开相应的文件,来宣告它想要访问一个I/O设备.内核返回一个小的非负整数,叫做描述符,它在后续对此文件的所有操作中标识这个文件.内核记录有关这个打开 ...

  5. java容器源码分析及常见面试题笔记

      概览 容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表. List Arraylist: Object数组 ...

  6. 使用folderLeft函数统计字母出现的次数

    实例:统计字符串中字母出现的次数 import scala.collection.mutable object Demo_018{ def main(args: Array[String]): Uni ...

  7. Jmeter 常用函数(29)- 详解 __eval

    如果你想查看更多 Jmeter 常用函数可以在这篇文章找找哦 https://www.cnblogs.com/poloyy/p/13291704.html 作用 和 __V 的作用基本一致,执行变量名 ...

  8. kubeadm安装kubernetes(v18.8.8)

    1. 前言 kubernetes版本更新迭代非常快,上一篇写kubernetes搭建时,版本还是v1.15.0,现在已经更新到v1.18.看kubernetes在github的官方仓库,8月14日小版 ...

  9. 个人项目WC.exe Node.js+electron实现

    前言 实现语言:Javascript 编译工具:webstorm GitHub:https://github.com/NPjuan/WC.git 项目要求 wc.exe 是一个常见的工具,它能统计文本 ...

  10. Combining STDP and Reward-Modulated STDP in Deep Convolutional Spiking Neural Networks for Digit Recognition

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Abstract 灵长类视觉系统激发了深度人工神经网络的发展,使计算机视觉领域发生了革命性的变化.然而,这些网络的能量效率比它们的生物学对 ...