Linux基础——Ansible批量自动化管理工具(二)

Ansiblescript模块批量运行脚本:批量安装Nginx

思路

  1. 分发nginx的源码包
  2. 执行一个部署脚本

环境

使用centos7系统,创建三台虚拟机,名称分别为AnsibleWeb01Web02

主机名

IP

备注

Ansible

192.168.200.136

管理服务器

Web01

192.168.200.137

被管理主机

Web02

192.168.200.138

被管理主机

关闭防火墙,selinux的进程和开机启动

1.

[root@Ansible ~]# mkdir -p /service/scripts

//创建一个目录,用于存放批量分发的软件包

[root@Ansible scripts]# ls

nginx-1.10.2.tar.gz

//查看目录中的安装包,如果没有,那么使用lrzsz命令上传一个

2.

[root@Ansible scripts]# vim fenfa.sh

//编写分发nginx源码包的脚本

[root@Ansible scripts]# vim auto_nginx.sh

//编写安装nginx源码包的脚本

[root@Ansible scripts]# ls

auto_nginx.sh  fenfa.sh  nginx-1.10.2.tar.gz

//查看/service/scripts中的内容,确认是否有误

3.

[root@Ansible scripts]# vim /etc/ansible/hosts

//进入ansible的虚拟主机配置文件,编写主机范围模块

4.

[root@Ansible scripts]# sh fenfa.sh Nginx

//执行脚本到Nginx模块,黄色表示对方系统做出了改变

Web01

Web02

批量部署Nginx完成

Ansible-playbook

文件格式以.yaml结尾,使用ansible-playbook xxx.yaml进行调用执行

绿色为执行成功,但是不会修改目标文件;黄色为修改成功

1

[root@Ansible scripts]# vim test_shell.yaml

//编辑playbook配置文件

[root@Ansible scripts]# ansible-playbook test_shell.yaml

//执行

查看是否执行成功:

2

[root@Ansible scripts]# vim jiaoben.yaml

//编写playbook配置文件

all表示分发给所有主机模块

拷贝前,要注意是否有这个文件

[root@Ansible scripts]# ansible-playbook jiaoben.yaml

//执行

检查:

WEB01

WEB02

3

playbook执行后,只能看到结果,但不到过程,如果想要看到过程,需要添加一个参数:register功能,它可以将上面的执行结果保存到一个变量中,然后再调用debug模块,将上面变量值保存到var变量中,然后输出到屏幕上。

[root@Ansible scripts]# vim test_register.yaml

//创建playbook配置文件

[root@Ansible scripts]# ansible-playbook test_register.yaml

//执行

4

Nginx配置下发并检测:

上面的实验中,我们传了并安装了Nginx,但是并没有启动,因为我们没有修改配置文件。但是实际生活中,我们是并不会去修改配置文件的,而是批量将一个修改好的配置文件,直接发送过去。将原文件覆盖,并测试。

[root@Ansible tmp]# vim nginx.conf

//tmp目录中创建个nginx.conf配置文件

[root@Ansible scripts]# vim test_nginx.yaml

//编写playbook配置文件

playbook的自定义变量和内置变量

自定义变量

[root@Ansible scripts]# vim zdybl.yaml

//编写

[root@Ansible scripts]# ansible-playbook zdybl.yaml

//执行

内置

变量

Python知识

列表:其实就是一个变量名可以存多个值,列表是有索引的,从左到右,最左

边的是索引0,然后依次类推。

如:list=[1,3,5,7,9]

list[0]=1list[1]=3list[2]=5

字典:字典是键、值、对的方式。一个变量里存的不是值了,而是一个个的组

合对。字典是无序的,所以不能索引取值。,字典是已知键的名字,返回对应的值,所以叫键值对儿。

如:dict={“user”:666,”user2”:111,”user3”:333}

dict[“user”]=666dict[“user3”]=333

二者混合使用,字典的返回值成了列表,返回的是列表中的所有值,而并不是

指定的值,这时就要通过特殊的格式进行操作。

如:dict={“user1”:[1,2,3],”user2”:[2,4,6]}

那么要想去user1中的2这个值,就需要这样取值:

dict[“user1”][1]

含义为:从user1字典取值,该值为列表,其中有多个值,继续按照列表取值法,取第二个值(列表对应的值从0开始排列)。

ansible中也是如此,不过略有不同

如:取出下列IP地址,该如何书写?

正常情况下,应该是:ansible_facts[“ansible_all_ipv4_addresses”][0]

但是可以简写成:ansible_all_ipv4_addresses[0]

如:取出7这个值

ansible_python[“version”][“minor”]

当成两个字典来进行处理,最后的7当成列表,只有一个值的话,默认列表取0,无需填写。

例:取IP、内核数和minor的值

[root@Ansible scripts]# vim ip.yaml

[root@Ansible scripts]# ansible-playbook ip.yaml

Playbook下发可变的配置文件

下发可变的配置文件

[root@Ansible tmp]# vim test

///tmp目录里,编写一个文件

第一个是自定义变量

第二个是系统变量

[root@Ansible tmp]# cd /service/scripts/

//进入到目录中

[root@Ansible scripts]# vim /test_filevars.yaml

//编写可变配置文件

[root@Ansible scripts]# ansible-playbook test_filevars.yaml

判断

语法

[root@Ansible scripts]# vim /tmp/if.j2

//tmp目录下编写一个文件

JS语法:一般有j2语法的文件,我们以.j2结尾,代表该文件支持jinjia2格式

如果port存在,那么返回0.0.0.0:PORT值。如果不存在,就返回0.0.0.080

[root@Ansible scripts]# vim test_ifvars.yaml

//编写判断语法调用文件

如果没有PORT值,那么就会被认为假,分发0.0.0.080这个内容到test;如果有PORT值,那么该值就会赋到变量中,然后将0.0.0.0PORTtest文件中

[root@Ansible scripts]# ansible-playbook test_ifvars.yaml

检测:

下发可变的Nginx配置文件

[root@Ansible scripts]# vim /tmp/nginx.j2

//编辑要分发的nginx配置文件

[root@Web01 conf]# rm -f nginx.conf

[root@Web02 conf]# rm -f nginx.conf

//删除两台Web服务器的主配置文件

[root@Ansible scripts]# vim text_nginxvars.yaml

template模块执行成功,是黄色提示,如果是绿色,那么表示并没有对其进行修改操作。

检测:

WEB01

WEB02

roles标准化playbook

作用

最大化的重复利用剧本中重复相同的地方。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值