ansible

context

前几天准备生产环境,真是累惨了。在几台机器上面进行相同的操作,是很费手指的。
比如安装环境,不停的ssh登陆,有的时候还会忘记是否安装过某个包。SCP上传文件,是真的蛋疼,一台一台的船,还要一台一台的去运行。
但是用了ansible之后,这些事情都简单了很多。
在使用ansible之前,最好配置一下ssh绵密登陆,因为ansible的很多操作,实际上就是用ssh来通信的

host配置文件

编辑/etc/ansible/hosts这个文件

[slaves]
172.18.0.3
172.18.0.4
[slb]
172.18.0.2
[eip]
172.18.0.[5:10]
[ecs]
172.18.0.[15:20]

通过这个例子可以理解host的作用,就相当于把ip转换为了代号、名字、组。在进行操作的时候不需要在些ip地址,而直接写他们的代号就好了。
这样可以实现task脚本可传播可复用的效果

运行指令

基本语法

ansible 用户 -m 模块 -a 参数

安装环境

ansible 用户 -m yum -a "name=要安装的包名"

文件同步

ansible 用户 -m synchronize -a "src=本地源 dest=远程目标 delete=yes compress=yes"

运行指令

ansible 用户 -m command -a "和shell一样的指令"

docker练习时的坑

买不起ecs,所以就用docker来模拟
因为docker运行机制的限制,所以默认启动的container,是没有办法systemctl的,所以就没有办法启动ssh,他会报错

Failed to get D-Bus connection: Operation not permitted

所以需要特权启动这个镜像

docker run -d --privileged=true centos:7 /usr/sbin/init

这样启动的docker是可以启动ssh,达到ansible测试的条件