3.1 playbook语法实践

ansible playbook



Playbook是使用yaml语言定制的,YAML是一个可读性高的用来表达资料序列的格式

 

Yml语法:

1
2
3
4
5
6
- host: websrvs                   #定义执行的主机
  remote_user: root            #定义执行的用户
  tasks:                                #定义任务
    - task1                             #定义第一个任务名称
    module_name: module_args   #定义使用的模块,和模块参数
   -  task 2                            #定义第二个任务名称

简单示例1:

定义一个yml: 对webserver组中的主机,调用group和user模块创建组和用户;对dbserver组中的主机调用copy模块复制文件

执行yml
 
执行第二遍,返回的所有结果为ok不是表示执行ok而是所有条件都满足

简单示例2:搭建一个apache环境

准备需要复制到被管理主机的httpd.conf配置文件,修改监听端口为8080

1
2
3
4
[[email protected] ~]# mkdir conf
[[email protected] ~]# cp /etc/httpd/conf /httpd.conf conf/
[[email protected] ~]# vim conf/httpd.conf
Listen 8080

应用之前先停止webserver组中的httpd服务,并卸载

1
2
[[email protected] ~]# ansible webserver -a ‘service httpd stop‘
[[email protected] ~]# ansible websrvs -m yum -a ‘name=httpd state=absent‘

执行:
  
验证:httpd软件包已经安装,服务开机自动启动,而且也监听8080端口

1
2
3
4
5
6
[[email protected] ~]# rpm -qa httpd
httpd-2.2.15-39.el6.centos.x86_64
[[email protected] ~]# chkconfig --list httpd
httpd          0:off1:off2:on3:on4:on5:on6:off
[[email protected] ~]# netstat -lntp | grep 8080
tcp        0      0 :::8080                     :::*                        LISTEN      40826/httpd

YAML中的变量:

1、自定义变量

2、facts收集被管理主机的信息时,会返回很多变量,这里就是调用了返回的ipv4地址变量

示例:将客户端返回的ip地址,创建webserver组中主机的/tmp/test.ans文件。
 
执行结果如下:
 
验证:使用的变量名一样,但是生成的内容却是被管理主机的ip地址

1
2
3
4
[[email protected] ~]# cat /tmp/test.ans
[u‘172.16.4.101‘]
[[email protected] ~]# cat /tmp/test.ans
[u‘172.16.4.102‘]

3、主机变量

示例:对webserver组中的主机,定义testvar变量,值为ip地址后两位

1
2
3
4
5
6
[[email protected] ~]# vim /etc/ansible/hosts
[webserver]
172.16.4.101 testvar="4.101"
172.16.4.102 testvar="4.102"
[dbserver]
172.16.4.103

设置yml文件,和使用其他变量一样的方法调用变量:
 
执行yml
 
验证:相同变量,不同主机得到了不同的值

1
2
3
4
[[email protected] ~]# cat /tmp/test.ans
[u‘172.16.4.101‘],4.101
[[email protected] ~]# cat /tmp/test.ans
[u‘172.16.4.102‘],4.102

4、配置文件中引用变量(模版)

示例:使用变量指定httpd.conf配置文件中一些参数的值

1
2
3
4
5
6
7
8
9
10
11
[[email protected] ~]# vim temolastes/httpd.conf.j2
<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       {{ maxClients }}
MaxRequestsPerChild  4000
</IfModule>
Listen {{ http_port }}
ServerName {{ ansible_fqdn }}

修改Ansible的hosts文件定义主机变量

1
2
3
4
5
6
[[email protected] ~]# vim /etc/ansible/hosts
[webserver]
172.16.4.101 http_port=80 maxClients=100
172.16.4.102 http_port=8080 maxClients=200
[dbserver]
172.16.4.103

定义yml:定义的过程中使用变量,根据不同主机定义的值不同,生成的配置文件参数也不同
 
执行过程
 
验证:相同的playbook由于对hosts指定的变量不同,所以生成不同的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
node2:
<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       100
MaxRequestsPerChild  4000
</IfModule>
Listen 80
ServerName node2
node3:
<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       200
MaxRequestsPerChild  4000
</IfModule>
Listen 8080
ServerName node3

条件测试When语句

示例:添加用户,但是只对主机名为node2的主机添加。
 
执行结果如下:
 

迭代

当有需要重复性执行的任务时,可以使用迭代机制。其使用格式为将需要迭代的内容定义为item变量引用,并通过with_items语句来指明迭代的元素列表即可。

例如:
 
上面语句的功能等同于下面的语句:

1
2
3
4
- name: create user
user: name=testuser1
- name: create user
user: name=testuser2

事实上,with_items中可以使用元素还可为hashes,例如:
 
ansible的循环机制还有更多的高级功能,具体请参见官方文档(http://docs.ansible.com/playbooks_loops.html

来自为知笔记(Wiz)

时间: 2024-10-06 00:29:23

3.1 playbook语法实践的相关文章

Ansible PlayBook语法(4)

title: Ansible PlayBook语法(4) date: 2018-12-02 10:53:24 tags: Ansible categories: Ansible copyright: true --- Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能,ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署

json yaml playbook语法

Top NSD ARCHITECTURE DAY02 练习1:playbook练习 案例2:变量练习 案例3:handlers练习 案例4:编写playbook 1 练习1:playbook练习 1.1 问题 本案例要求: 安装Apache并修改监听端口为8080 修改ServerName配置,执行apachectl -t命令不报错 设置默认主页hello world 启动服务并设开机自启 1.2 步骤 实现此案例需要按照如下步骤进行. 步骤一:playbook的ping脚本检测 [[email

python编码最佳实践之总结

一.数据结构的选择: 1. 在列表中查找: 对于已经排序的列表考虑用bisect模块来实现查找元素,该模块将使用二分查找实现 def find(seq, el) : pos = bisect(seq, el) if pos == 0 or ( pos == len(seq) and seq[-1] != el ) : return -1 return pos - 1 而快速插入一个元素可以用: bisect.insort(list, element) 这样就插入元素并且不需要再次调用 sort(

Ansible系列(五):playbook应用和roles自动化批量安装示例

html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary { display: block } audio,canvas,progress,video { display: inline-block; vertical-align: baseline } audio:not([co

playbook之ansible

ansible playbook最佳实践 http://blog.csdn.net/kellyseeme/article/details/50574340

playbook常用操作

playbook常用操作 1.检查playbook语法错误 ansible-playbook -i hosts deploy_coredns.yaml --syntax-check 2.查看playbook主机组 ansible-playbook -i hosts deploy_coredns.yaml --list-hosts 原文地址:https://www.cnblogs.com/effortsing/p/10356865.html

playbook 基本使用

相对Ad-Hoc模式下的命令方式,Playbook功能更灵活强大.使用playbook可以非常简单的配置管理多个主机系统,通过编写YAML格式文件来定制配置内容,配置内容可存储和长久使用.本节将通过案例逐步了解playbook使用方法. 本节内容都是在远程服务器sandboxMP(172.16.3.100)中完成,请使用CRT工具连接到sandboxMP(172.16.3.100).同时需要开启server1和server2虚拟机. 1 YAML基本使用 Ansible playbook配置文件

设备树实践

[DTS]设备树实践 原创: 杨永达 嵌入式软件开发交流 3月31日 前言 这是设备树相关的最后一节,主要是对设备树的实践,根据驱动需要进行修改和编辑.内容只是点到为止,不会一行一行讲解.希望对大家有所帮助. 以下内容以RK3288作为讲解 kernel\arch\arm\boot\dts\rk3288.dts (1) 头文件 #include <dt-bindings/gpio/gpio.h>#include <dt-bindings/interrupt-controller/irq.

Ansibile之playbook初识

一.playbook简介 ansiblie的任务配置文件被称为playbook,俗称“剧本”,每一个剧本(playbook)中都包含了一系列的任务,这每个任务在ansible中又被称为“戏剧”(play),一个剧本中包含多出戏剧.. 前文我们了解了ansible有两种执行方式ad-hoc和ansible-playbook,ad-hoc主要用于临时命令的执行,而playbook我们可以理解为ad-hoc的集合,有点类似shell脚本,ad-hoc就相当于shell脚本里的某条任务语句,playbo