目录
1、系统说明:
2、安装
3、配置
4、小试牛刀
时间:【戊戌年 辛酉月 丙寅日】
近期开发用到ansible,但之前只是听说,从未跟ansible发生过实质关系~~,今天准备把第一次给ansible~
我是在vmvare上建的虚拟机。
ubuntu14
分别创建三台
192.168.160.130(主)
192.168.160.131(从)
192.168.160.132(从)
分别以root身份登上这三台服务器。
执行安装指令:
apt-get install ansible
安装成功后执行ansible版本检查命令:
ansible --version
如果安装成功,会显示:
因为我们需要通过主服务器192.168.160.130来管理其他两台服务器。所以需要在192.168.160.130上生成一个公钥,然后上传到其他两台服务器上。
生成公钥:
ssh-keygen -t rsa -f ./.ssh/id_rsa -P ""
通过linux指令将密钥上传到其他两台服务器:
ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
配置192.168.160.130服务器上的ansible主机清单:
配置文件所在路径为:/etc/ansible/hosts
在文件末尾添加几行代码:
[myhost]
192.168.160.131
192.168.160.132
如图:
保存并退出后,执行命令:
ansible all -m command -a "who"
如图:
如果到这一步一切顺利,那恭喜你,ansible已经安装成功!
OK,下一步开始操作远程机器。
把主服务器上的一个文件复制到两台从服务器上。
ansible all -m copy -a 'src=/home/guoqingjie.log dest=/etc/'
看一下操作结果:
192.168.160.132 | SUCCESS => {
"changed": true,
"checksum": "1d2035daf57077c66b97f77b2966c4f42b5d0e9a",
"dest": "/etc/guoqingjie.log",
"gid": 0,
"group": "root",
"md5sum": "80660130295ad049e1b6a905cc21d7ff",
"mode": "0644",
"owner": "root",
"size": 13,
"src": "/root/.ansible/tmp/ansible-tmp-1538382353.35-224829379924755/source",
"state": "file",
"uid": 0
}
192.168.160.131 | SUCCESS => {
"changed": true,
"checksum": "1d2035daf57077c66b97f77b2966c4f42b5d0e9a",
"dest": "/etc/guoqingjie.log",
"gid": 0,
"group": "root",
"md5sum": "80660130295ad049e1b6a905cc21d7ff",
"mode": "0644",
"owner": "root",
"size": 13,
"src": "/root/.ansible/tmp/ansible-tmp-1538382353.33-162936810311638/source",
"state": "file",
"uid": 0
}
可以看到IP后的状态值“SUCCESS ”。表示操作成功。
登录192.168.160.131,到/etc/目录下查看是否有guoqingjie.log文件:
经验证,guoqingjie.log已经成功从192.168.160.130复制到服务器192.168.160.131上了。
重要补充:
#命令格式: ansible #例如: ansible all -m copy -a 'src=/etc/my.cnf dest=/etc/' #几个重要参数的含义: -i #指定inventory文件(主机定义文件) all #表示在host文件中定义的所有的主机,可以替换成响应的组名或IP地址 #针对于主机可以使用匹配规则(所有的匹配都基于配置文件中的主机) IP地址: ansible 192.168.239.132 IP匹配: ansible 192.168.239.* IP匹配: ansible * 组匹配: ansible 组名:&hostname <表示这个组跟其他组的一个主机> 组匹配: ansible 组名:!hostname <表示这个组但是出除去这个组的这个主机> #类似的匹配还很多,几乎能想到的匹配都能支持,具体参照http://docs.ansible.com/intro_patterns.html -m #指定使用哪个模块,默认采用command模块 -a #指定模块的参数,每个模块都有相应的模块参数 -u #指定远端机器的用户 |
部分参考自:
http://www.ansible.com.cn/
https://www.cnblogs.com/newlooker/p/8080784.html