当前位置 主页 > 服务器问题 > win服务器问题汇总 >
我使用过puppet与salt,但这2个软件都需要安装客户端,并且更新很快,每次更新都是令人蛋疼的事,尤其是salt,喜欢他的命令功能,但bug太多,不敢在公司线上使用,puppet虽然稳定,但弄命令执行的时候,需要mco配置,非常麻烦,我公司由于跟多家公司合作,很多业务没办法安装客户端,所以没办法使用puppet与salt(虽然salt有ssh,但不太好使),最后找到了ansible,他既有命令执行也有配置管理,关键开发它的语言是python,paramiko进行ssh连接,跟我之前开发的自动管理软件都是使用paramiko进行操作,不需要安装客户端,满足我的需求,下面给大家介绍一下我是如何使用的。
一、安装
1、安装第三方epel源
centos 5的epel
rpm -ivh http://mirrors.sohu.com/fedora-epel/5/x86_64/epel-release-5-4.noarch.rpm
centos 6的epel
rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
查看系统版本
17:01:30 # cat /etc/issue CentOS release 6.5 (Final) Kernel \r on an \m
由于是6版本所以安装6的epel
2、安装ansible
yum install ansible
如果需要自定义module或者想阅读源码、使用最新版本,可以去github里下载源码
git clone https://github.com/ansible/ansible.git
3、添加主机
17:22:08 # cd /etc/ansible/ root@ip-10-10-10-10:/etc/ansible 17:23:27 # ll total 12 -rw-r--r-- 1 root root 5113 Dec 29 03:00 ansible.cfg -rw-r--r-- 1 root root 965 Dec 29 03:00 hosts 其中ansible.cfg是配置文件,hosts是管理主机信息 17:24:44 # cat hosts 172.17.0.2:49154 172.17.0.4:49155 [zabbix] 172.17.0.2:49154 172.17.0.4:49155 [vpn] 172.17.0.10
4、使用密码登陆
ansible支持正则测试
16:20:57 # ansible 127* -m ping SSH password: 127.0.0.1 | success >> { "changed": false, "ping": "pong" } root@ip-10-10-10-10:/etc/ansible 16:21:05 # ansible 172* -m ping SSH password: 172.17.0.5 | success >> { "changed": false, "ping": "pong" } 172.17.0.4 | success >> { "changed": false, "ping": "pong" } 172.17.0.2 | success >> { "changed": false, "ping": "pong" }
如果你有多台服务器的话,想并发运行,可以使用-f参数,默认是并发5
5、使用密钥登陆测试
11:30:35 # ansible vpn -m shell -a "echo $TERM" -u test --private-key=denglei -K SSH password: sudo password [defaults to SSH password]: 172.17.0.10 | success | rc=0 >> xterm
二、模块应用
6、文件传输
11:30:44 # ansible vpn -m copy -a "src=/tmp/server dest=/tmp/server" -u test --private-key=denglei -K SSH password: sudo password [defaults to SSH password]: 172.17.0.10 | success >> { "changed": true, "dest": "/tmp/server", "gid": 505, "group": "test", "md5sum": "e8b32bc4d7b564ac6075a1418ad8841e", "mode": "0664", "owner": "test", "size": 7, "src": "/home/test/.ansible/tmp/ansible-1402630447.45-253524136818424/source", "state": "file", "uid": 503 }
去客户端查看文件是否传输过来