本文来自网易云社区
作者:司徒诚颢
ansible是一个自动化的运维工具,可以批量ssh到远程机器进行操作。
而且还不需要在远程机器上安装任何的agent,因为它使用纯python实现了ssh协议。
最常用的就是同时在多个机器上执行某个命令了,只要带上合适的参数使用playbook调用这个脚本就可以批量在远程机器上运行命令了。
---
- hosts: '{{ hosts }}'
serial: '{{ batch_serial|default(50)|int }}'
tasks:
- name: shell
shell: '{{ cmd }}'
register: out
- debug: msg="{{ out.stdout.split('\n') }}"
各个配置的含义如下
hosts:通过参数传入,可以预先在ansible的hosts文件里配置各个集群
serial:指定每批次在几个机器上执行,默认为50,可通过参数传入
shell:这个可以是任意的shell命令
redister:存储指定命令的输出结果到out变量
debug:显示远程命令的输出也会在当前终端中显示。
比如当我们申请了一批新机器的时候,要确认一下云硬盘是否都挂载了,就可以使用
ansible-playbook tasks/batch_shell.yml -e "hosts=test cmd='df -h | grep nbs'"
会得到如下输出,就能看很方便的看出是否有机器尚未挂载硬盘了。
ok: [hzayq-photo21] => {
"msg": [
"/dev/vdc1 79G 184M 75G 1% /srv/nbs/0"
]
}
ok: [hzayq-photo23] => {
"msg": [
"/dev/vdc1 79G 184M 75G 1% /srv/nbs/0"
]
}
脚本更常用的使用场景就是搜索应用日志了,无非是替换一下cmd的参数而已。
再结合fetch模块,可以很方便抓取一个集群中所有机器的特定日志了。
ansible还支持在脚本里sudo,只要在刚才的脚本里加上以下两行,就可以在磁盘空间不够的时候批量清理了:
become: true
become_user: '{{ user }}'
become_user:通过参数传入需要sudo的用户即可
在使用sudo的基础上,按批次发布应用也可以使用ansible的脚本实现
---
- hosts: '{{ hosts }}'
become: true
become_user: '{{ user }}'
serial: '{{ serial|default(1)|int }}'
tasks:
- name: restart-tomcat
environment:
LANG: 'zh_CN.GBK'
LC_ALL: 'zh_CN.GBK'
command: '{{ tomcat_path }}/tomcat6 restart'
async: 300
poll: 0
register: tomcat_sleeper
- name: pause
pause: seconds='{{ restart_pause|default(60)|int }}'
- name: check tomcat
async_status: jid={{ tomcat_sleeper.ansible_job_id }}
register: job_result
- debug: msg="{{job_result.stdout.split('\n')}}"
总之ansible是个上手简单、功能强大的自动化运维工具,合理使用可以大大提供日常工作的效率。
之前博客、相册和lofter几百台应用服务器的迁移都是通过ansible来完成初始化和配置的,大大减少了迁移的时间。
网易云免费体验馆,0成本体验20+款云产品!
更多网易研发、产品、运营经验分享请访问网易云社区。