ansible是实现的基于ssh的自动化运维工具(管理节点需要与被管理节点SSH可通,无论是密码验证还是key验证等均可),相对于slat、putty之类传统的IT自动化工具来讲优势在于无需在每台要管理的机器上部署客户端,使用起来简易、灵活,不仅支持ad-hoc命令同时还支持play book。一些简单的批量作业通过andible来执行,非常方便。当然,负责的批零作业对于ansible来说也完全不是问题。
这里主要列一些基本配置、常用的模块和常见操作,更为高级的配置、用法以及playbook的使用可参见官方手册:
ansible --help
ansible -i hosts all -m ping -f 20 --output=result
其中 -i指定要读取的主机列表文件,最简单的主机列表文件可只包含主机名列表或者IP地址列表,复杂一点的可以对列表中的主机进行分组,更复杂的可在列表文件中指定其他各种参数。这里只就最简单的情况进行说明。若不指定-i参数则默认读取 /etc/ansible/hosts 。
all参数说明要读取列表中所有主机,若只读取部分主机可单独列出以逗号隔开,要读取某个分组下的主机,则这里可以指定分组名:
ansible -i hosts all -m ping
ansible -i hosts h1,h2 -m ping
ansible -i hosts group1 -m ping
-m 指明要使用的模块名,这里使用ping模块来测试ansible是否可达列表中额主机
-f 指明线程数,默认5个并发。
--output 指明输出文件,不指定的话输出到控制台。
ansible -i hosts all -a 'who'
命令没有使用-m参数指定模块,这里实际上使用了默认的command模块 -a指定了使用该模块是的参数等价于
ansible -i hosts all -m command -a 'who'
其他模块
在远程主机执行脚本
ansible -i hosts all -m script -a 'mha_stop.sh'
#在远程主机执行shell命令(与command模块的区别是支持管道和重定向)
ansible -i hosts all -m shell -a " cat /tmp/authorized_keys >> /root/.ssh/authorized_keys"
#往远程主机拷贝文件
ansible -i hosts all -m copy -a "src=/etc/hosts dest=/tmp/hosts mode=600 owner=mdehaan group=mdehaan"
#从远程主机拉取文件
ansible -i hosts all -m fetch -a "src=/etc/hosts dest=/tmp/hosts mode=600 owner=mdehaan group=mdehaan"
#更改远程文件属性
ansible -i hosts all -m file -a "dest=/srv/foo/a.txt mode=600"
ansible -i hosts all -m file -a "dest=/srv/foo/b.txt mode=600 owner=mdehaan group=mdehaan"
ansible -i hosts all -m file -a "dest=/path/to/c mode=755 owner=mdehaan group=mdehaan state=directory"
ansible -i hosts all -m file -a "dest=/path/to/c state=absent"
#在远程助主机安装/删除/更新包
ansible -i hosts all -m yum -a "name=java-1.8.0-openjdk.x86_64 state=present"
ansible -i hosts all -m yum -a "name=java-1.8.0-openjdk.x86_64 state=absent"
ansible -i hosts all -m yum -a "name=java-1.8.0-openjdk.x86_64 state=latest"
#在远程主机启/停服务
ansible -i hosts all -f 50 -m service -a "name=filebeat state=started"
ansible -i hosts all -f 50 -m service -a "name=filebeat state=restarted"
ansible -i hosts all -f 50 -m service -a "name=filebeat state=stopped"
#在远程主机部署/删除cron任务
ansible -i hosts all -m cron -a 'name="a job for reboot" special_time=reboot job="/some/job.sh"'
ansible -i hosts all -m cron -a 'backup="True" name="test" minute="0" hour="2" job="ls -alh > /dev/null"'
ansible -i hosts all -m cron -a 'name="test" state=absent'
更多模块及playbook使用方式请参见官方手册
http://docs.ansible.com/