linux --- Ansible-playbook篇

Ansible-playbook

1. 什么是playbook?

简单点说,playbook就是ansible用于配置,部署和管控节点机器的剧本,将一系列命令的集合归一使用,类似于shell脚本,不过更加强大.

2. playbook与shell脚本比对

它们功能形似,playbook和shell脚本一样,都是批量处理任务.都是把很多命令组合到一起,加入对应条件判断等,要说区别就是命令结构和被执行场景有所不同;

shell脚本由一条条命令构成,一般只在当前的服务器运行;

playbook中是有一个个task任务构成,每个task都可以当做shell中的一条命令,playbook不止在一个服务器上执行,因此它需要在其中指定运行该playbook的服务器名.而且playbook有着自己的语法格式

3. playbook语法格式

playbook由YMAL语言编写,YMAL格式类似于JSON格式,便于写读和理解,它的格式如下:

#格式
1.文件的第一行应该以 "---"这三个连续字符开始,代表了YAML文件的开始

2.在一行中, # 后面的内容代表注释,python,ruby,shell都是如此

3.YAML中的列表元素以"-"开头然后紧接着一个空格,后面为元素内容

4.在同一个列表中的元素应该保持相同的缩进,否则会当作错误处理

5.play中hosts ,variables,roles,tasks等对象的表示方法都是键值对,中间以 ":"分割,且":"后面还要增加一个空格.

6.文件名称后缀为 xxx.yml/yaml #示例 --- #复制file - hosts: task01 remote_user: root tasks: - name: copyfile copy: src=/etc/passwd dest=/tmp/data

4. playbook参数

① 基本参数

# p1.yml
--- #文件开头 - hosts: dbservers #指定该playbook在哪个服务器上执行 remote_user: root #指定远程的用户名, vars: ##表示定义变量 http_port: 80 #变量形式key: value user: coco tasks: #构成playbook的tasks,每个task都有 - name: 开始,name 指定该任务的名称 - name: copyfile copy: src=/etc/fstab dest=/tmp/fs - name: install redis yum: name=redis

② ansible-playbook -h命令分析

#常用命令
-C   --check   #检查但是不会真的执行
-f FORKS, --forks=FORKS  #并发,默认5个
--list-hosts     #列出匹配的主机
--sytax-check   #检查语法
-t #只执行某个task任务

 ③ 执行一个playbook命令 --->ansible-playbook p1.yml (单任务)

p1.yml

注解:如上图所示

- PLAY表示执行hosts 中web组远程机器

- 第一个TASK表示正在收集两台远程机器的数据信息,采集成功为显示绿色,代表执行成功

- 第二个TASK表示我们要执行任务的名称,执行成功后状态发生变化为黄色,状态没变化为绿色,执行失败为红色.

④ 再来个例子ansible-playbook p2.yml(多任务)看看效果,会更加清楚

p2.yml
执行p2.yml

注意:执行后发现第一个task任务执行完后,第二个task任务才执行的,多个task是顺序执行的,所以先创建,再删除...

5. playbook幂等性

什么意思呢?就是不管执行多少次,得到的结果永远是相同的,试着一直执行p2.yml,最终的结构都一样.

6. playbook (5种传参方式)

为什么要这么做呢?

主要防止需求不断变化嘛,总不能反复修改文件吧..

方式一

---
#方式一
- hosts: web
  remote_user: root
  tasks:
  - name: create{{user}}
    user: name={{user}}

ansible-playbook -e user=superman p1.yml

#有没有发现什么?没错就是jinja2模板语法,

方式二

[web]
192.168.220.[134:135]  user=laifu
192.168.220.136  user=wangcai

#vi /etc/ansible/hosts
#针对hosts文件进行传参,执行结果web组为全部创建laifu
#实际上134,135会创建出laifu用户,136会创建出wangcai用户.

ansible-playbook p1.yml

 方式三

[web:vars]
user=taidi

#还是在hosts文件传参,给web组vars进行传参
ansible-playbook p1.yml    会创建出一个taidi用户

方式四 

- hosts: web
  vars:
  - user: jinmao
  tasks:
  - name: create{{user}}
    user: name={{user}}


#利用vars变量参数进行传参,执行后会创建出一个jinmao用户

方式五 

- hosts: web
  tasks:
  - name: yumbc
    yum: name=bc
  - name: sum
    shell: echo 8+9|bc  #linux 计算通过bc  
    register: user     #得到结果注册为user,但是拿到一个字典
  - name: echo
    shell: echo {{user.stdout}} >/tmp/sum.txt #将user字典中的stdout值取出来
  - name: createuser{{user.stdout}} user: name=keke{{user.stdout}} #执行创建出keke9 #上面先计算,注册user得到一个大字典,再取出user.stdout写到文件中,最后创建对应的参数的用户keke9

注:这五种传参优先级: -e >playbook的vars >hosts

7. setup模块

在playbook中负责收集信息,因此放在这里进行补充模块信息

① 执行命令 ansible 192.168.220.134 -m setup |more 收集信息

setup模块常用的参数
快速获取想要的setup收集的部分信息

② 正则在linux中简单实用

[root@localhost playbook]# echo 123 |grep "[0-9]\{2\}"  #发现"{}"是需要转义的
123   #取到12

[root@localhost playbook]# echo 123 |grep "[0-9]\?" #?也需要转义
123   #取到123

[root@localhost playbook]# echo 123 |grep "^[0-9]"
123 #取到1
[root@localhost playbook]# echo 123 |grep "\<[0-9]" #^在linux中也可以写成\>放在起始位
123   #取到 1

[root@localhost playbook]# echo 123 |grep "[0-9]$"
123  #取到3
[root@localhost playbook]# echo 123 |grep "[0-9]\>" #^在linux中也可以写成\>放在末位
123  #取到3 

③ tags

猜你喜欢

转载自www.cnblogs.com/CrazySheldon1/p/10692573.html