24.15 ansible介绍
24.16 ansible安装
24.17 ansible远程执行命令
24.18 ansible拷贝文件或目录
24.19 ansible远程执行脚本
24.20 ansible管理任务计划
24.15 ansible介绍
不需要安装客户端,通过sshd去通信
基于模块工作,模块可以由任何语言开发
不仅支持命令行使用模块,也支持编写yaml格式的playbook,易于编写和阅读
安装十分简单,centos上可直接yum安装
有提供UI(浏览器图形化),收费的 www.ansible.com/tower
官方文档 http://docs.ansible.com/ansible/latest/index.html
ansible已经被redhat公司收购,它在github上是一个非常受欢迎的开源软件,github地址 https://github.com/ansible/ansible
一本不错的入门电子书 https://ansible-book.gitbooks.io/ansible-first-book/
24.16 ansible安装
192.168.80.101 kun01 既做服务端 也做客户端
192.168.80.102 kun02 做客户端
步骤
1.在服务端上使用yum安装ansible
1 | [root@kun01 ~]# yum list |grep ansible |
2.生成公钥放在客户机上
在kun01上1
[root@kun01 ~]# ssh-keygen
在kun02和kun01上1
2
3
4
5
6
7[root@kun02 ~]#mkdir .ssh
[root@kun02 ~]#touch .ssh/authorized_keys
[root@kun02 ~]# vim .ssh/authorized_keys
[root@kun01 ~]#mkdir .ssh
[root@kun01 ~]#touch .ssh/authorized_keys
[root@kun01 ~]# vim .ssh/authorized_keys
3.设置hosts
1 | [root@kun01 ~]# vim /etc/hosts |
4.配置主机组名
1 | [root@kun01 ~]# vim /etc/ansible/hosts |
testhost
为主机组名字,自定义的,下面两个ip为组内的机器ip,可以写主机名也可以写IP地址 把kun01和kun02机器归纳到testhost组里面来
24.17 ansible远程执行命令
远程执行命令
格式:ansible 主机名/主机组名 -m command -a "命令"
1
2
3
4
5
6[root@kun01 ~]# ansible testhost -m command -a 'hostname'
192.168.80.102 | SUCCESS | rc=0 >>
kun02
127.0.0.1 | SUCCESS | rc=0 >>
kun01
hostname
为主机组名,-m
后边是模块名字,-a
后面是命令。
当然我们也可以直接写一个ip/主机名,针对某一台机器来执行命令1
2
3[root@kun01 ~]# ansible 127.0.0.1 -m command -a 'hostname'
127.0.0.1 | SUCCESS | rc=0 >>
kun01
还有shell模块同样也可以实现,shell模块用于批量处理脚本
1
2
3
4
5
6[root@kun01 ~]# ansible testhost -m shell -a 'hostname'
192.168.80.102 | SUCCESS | rc=0 >>
kun02
127.0.0.1 | SUCCESS | rc=0 >>
kun01
问题1 缺少libselinux-python包
“msg”: “Aborting, target uses selinux but python bindings (libselinux-python) aren’t installed!”
解决1
yum install -y libselinux-python
24.18 ansible拷贝文件或目录
拷贝目录
格式:ansible 主机名/主机组名 -m copy -a "src=源目录 dest=目标目录"
1
2
3
4
5
6[root@kun01 ~]# ansible 192.168.80.102 -m copy -a 'src=/etc/ansible dest=/tmp/ansibletest owner=root group=root mode=755'
192.168.80.102 | SUCCESS => {
"changed": true,
"dest": "/tmp/ansibletest/",
"src": "/etc/ansible"
}
owner=root group=root mode=755
指定目标目录的属组属主
在kun02上1
2[root@kun02 ~]# ls /tmp/ansibletest/ ##ansible拷贝到了ansibletest/里面
ansible
源目录会放到目标目录下面去,如果目标指定的目录不存在,它会自动创建。
拷贝文件
格式:ansible 主机名/主机组名 -m copy -a 'src=源文件 dest=目标文件'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15[root@kun01 ~]# ansible 192.168.80.102 -m copy -a 'src=/etc/passwd dest=/tmp/ansibletest/1.txt owner=root group=root mode=755'
192.168.80.102 | SUCCESS => {
"changed": true,
"checksum": "032f003a74f0b5678a686bd2a63229f8a2009c90",
"dest": "/tmp/ansibletest/1.txt",
"gid": 0,
"group": "root",
"md5sum": "df93f15aa6bfb172c4f614c9c3114f39",
"mode": "0755",
"owner": "root",
"size": 1205,
"src": "/root/.ansible/tmp/ansible-tmp-1536668788.43-189026107675984/source",
"state": "file",
"uid": 0
}
在kun02上1
2[root@kun02 ~]# ls /tmp/ansibletest/1.txt
/tmp/ansibletest/1.txt
如果拷贝的是文件,dest
指定的名字和源如果不同,并且它不是已经存在的目录,相当于拷贝过去后又重命名。但相反,如果desc是目标机器上已经存在的目录,则会直接把文件拷贝到该目录下面。
24.19 ansible远程执行脚本
saltstack会直接拷贝脚本到远程并执行,ansible要分两步
格式:ansible 主机名/主机组名 -m shell -a "目标机器脚本路径"
1.拷贝脚本到客户机上
1 | [root@kun01 ~]# vim 1.sh ##把当前时间写到time.txt文件中 |
1 | [root@kun01 ~]# ansible 192.168.80.102 -m copy -a "src=/root/1.sh dest=/tmp mode=755" |
2.执行远程机器上的脚本
1 | [root@kun01 ~]# ansible 192.168.80.102 -m shell -a "/tmp/1.sh" |
shell模块
比command模块强 它支持远程执行命令并且带管道
1
2
3[root@kun01 ~]# ansible 192.168.80.102 -m shell -a 'cat /etc/passwd | wc -l'
192.168.80.102 | SUCCESS | rc=0 >>
24
24.20 ansible管理任务计划
添加任务计划
格式:ansible 主机名/主机组名 -m cron -a "name='名字' job='内容'
1 | [root@kun01 ~]# ansible 192.168.80.102 -m cron -a "name='test cron' job='/bin/bash touch /tmp/aaa.txt' weekday=6 |
分钟 minute
小时 hour
日期 day
月份 month
周 weekday
在kun02上1
2
3[root@kun02 ~]# crontab -l ##添加了任务计划
#Ansible: test cron
* * * * 6 /bin/bash touch /tmp/aaa.txt
删除任务计划
格式:ansible 主机名/主机组名 -m cron -a "name=名字' state=absent"
1
[root@kun01 ~]# ansible 192.168.80.102 -m cron -a "name='test cron' state=absent"
在kun02上1
[root@kun02 ~]# crontab -l