文章目录
ansible是一个自动化运维工具、基于python开发,集合了众多运维工具的优点(puppet,fabric, slatstack),实现批量系统配置,程序的部署,批量运行命令等。
ansible基于python开发,依赖于:paramiko,PyYaml和jinja三个关键组件
基于ssh协议,只要管理员通过ssh登录到一台远程主机上能做的操作,ansible都可以做到
ansible组成:
1、host inventory --#定义客户机, 可以对客户机进行分类:db类,web类。。。等等
2、playbook --#剧本 让主机按照我给定的剧本去完成一些事情
3、module --#模块 实现一个个功能的程序
4、pluging --#插件 实现一些额外的小功能
ansible的使用
由于ansible基于ssh协议,在使用ansible前,必须配置好服务器的免密通道
配置免密通道可以参加我的另一篇文章 :ssh服务配置免密通道
1、安装ansible
[root@a .ssh]# yum install epel-release
[root@b ansible]# yum install ansible
2、配置
配置目录:
/etc/ansible/ansible.cfg
ansible的主配置文件,此文件主要定义了roles_path的路径,主机清单路径,连接清单中的主机方式等等
/etc/ansible/hosts
默认的主机清单配置文件, 可以通过ansible.cfg 重新定义
# 备份/etc/ansible/hosts
[root@b ansible]# cp hosts{,.bak}
#编辑 /etc/ansible/hosts文件
#将需要管理的主机添加到webser组
#如果通过ssh登陆的端口不是22号端口,就需要在配置文件中指明端口号
[root@b ansible]# cat hosts
[webserve]
192.168.10.128
192.168.10.129
192.168.10.130
[proj]
192.168.10.133
192.168.10.135
除了两个重要的配置文件,还有三个重要的可执行文件分别是:
ansible 主执行程序,一般用于命令行下执行
ansible-playbook 执行playbook中的任务
ansible-doc -s 模块 获取各模块的帮助信息
示例:
指定[proj]组的主机,执行shell模块的命令mkdir /tmp/sc
[root@ansible ansible]# ansible proj -m shell -a"mkdir /tmp/sc"
[WARNING]: Consider using the file module with state=directory rather than running 'mkdir'. If you need to use command because file is insufficient you can
add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message.
192.168.10.133 | CHANGED | rc=0 >>
192.168.10.135 | CHANGED | rc=0 >>
rc ==》 return code --为0表示执行成功
常见参数:
HOST-PATTERN #匹配主机模式,如all表示所有主机
-m MOD_NAME #模块名 如:ping,shell,copy
-a MOD_ARGS #模块执行的参数
-f FORKS #生成几个子进行程执行
-C #(不执行,模拟跑)
-u Username #某主机的用户名
-c CONNection #连接方式(default smart)
ansible常用模块
1、copy模块
从本地copy文件分发到目录主机路径
参数说明:
src= 源文件路径、 dest= 目标路径
注意src目录后面带/和不带/的区别:带/ 表示拷贝目录下的子文件或者子文件夹,不带/ 表示拷贝整个目录
content= 自行填充的文件内容
owner 属主
group 属组
mode 权限
示例:ansible proj -m copy -a "src=/etc/passwd dest=/tmp mode=666"
指定[proj]组的主机,执行copy模块,将指定文件复制到目的地,指定mode权限为666
2、fetch模块
从远程主机拉取文件到本地
fetch会自动的在dest指定目录后加上远程主机命名的目录结构后面接src目录结构
fetch存储到本地的目录结构: dest + 远程主机名 + src
[root@ansible ansible]# ansible proj -m fetch -a "src=/etc/hostname dest=/tmp mode=664"
192.168.10.133 | CHANGED => {
"changed": true,
"checksum": "1a24960962e6ca79b6ce526d0cb838dc95cafe70",
"dest": "/tmp/192.168.10.133/etc/hostname",
"md5sum": "2726de71291b1da437058231d945f8b2",
"remote_checksum": "1a24960962e6ca79b6ce526d0cb838dc95cafe70",
"remote_md5sum": null
}
192.168.10.135 | CHANGED => {
"changed": true,
"checksum": "0ae4684051e