如今作运维的估计都对ansible不陌生了,若是尚未使用过的,我建议尽快尝试下这个技术,入门很是简单,一旦你运用熟练,将大大减轻运维工做的压力,ansible只须要在主控端安装,客户端无需作任何操做便可对被控端进行批量操做,这也是相对于saltstack的一个优势,saltstack除了在主控端安装外,客户机要安装客户端,其它很少说了,若是有兴趣的能够百度,这种文章已经满大街都是了,回到正题,今天这篇咱们仍是主要来介绍介绍ansible若是在运维中的应用,原本我刚开始打算用一篇来完成对ansible的介绍,在实际写的过程当中才发现,若是只用一篇来写,那篇幅就会非很是的长,为了让你们阅读起来不那么痛苦,我最后决定分三篇来写完,三篇分别介绍ansible的经常使用模块,而后讲解playbook配置,最后介绍ansible的api,这篇是开头篇,因此暂不涉及python的编码工做,学习起来也比较轻松,废话很少说了,咱们接下来开始咱们的正题:python
首先,咱们安装ansibleweb
#yum install ansibleshell
而后输入个Y,就完成了,就是这么简单。json
安装完,咱们说下基本的配置,运行命令:centos
#cd /etc/ansible/api
#llapp
总用量 20运维
-rw-r--r-- 1 root root 8625 10月 11 02:41 ansible.cfgssh
-rw-r--r-- 1 root root 979 3月 1 23:13 hostside
drwxr-xr-x 2 root root 4096 10月 11 02:41 roles
咱们看到有2个文件和1个目录,,其它先不用管,咱们先只看hosts文件,用vi打开,除[webservers],[dbservers]这两行外,其它所有注释掉,这二行的做用的定义主机组,主机组名下能够写成员主机的IP(或域名),咱们能够把的客户机的IP放到[webservers]主机组下,这样,定义主机和组的规则就算完成了,接下来进入咱们模块学习部分。
不得不说ansible的模块真是丰富,基本上咱们平常运维用到功能所有都有了,运行命令
#ansible-doc -l
能够看到所有的模块名称,对模块的使用仍是要看业务场景,好比你若是没有在aws上机器,那么像ec2你也不会用到,因此今天咱们就只会对平常运维最经常使用的模块作说明,剩余的模块能够根据本身的业务用到了,再去学习了解,咱们在讲模块前,会先给出每一个模块的应用场景,方便你们快速上手使用:
场景1:须要在客户机上执行命令,能够用command模块,命令以下:
#ansible webservers -m command -a 'uptime'
其中webservers是主机组名称,在该主机组名称下的全部主机都会运行uptime命令,-m后是模块名称,-a 后是模块参数,后续命令都基本一个模子,再也不赘述。
场景2:须要执行客户机上的脚本,能够用shell模块,命令以下:
#ansible webservers -m shell -a '/root/run.sh'
场景三:脚步在主控端,但须要在客户机上执行,能够用script模块,命令以下:
#ansible webservers -m shell -a '/root/local.sh'
请注意,你主控端/root/下必须有local.sh脚本。
场景四:文件发布,这种需求不少,好比平常的配置文件更新,程序版本发布等,基本都会用到,能够用copy模块:
#ansible webservers -m copy -a 'dest=/root/ src=/root/xl2pdf'
注意我这里xl2pdf是个目录。
场景5:想在客户机上安装软件,能够用yum模块,这个用的仍是挺多的,好比用ansible去连接低版本的centos时,就乎出现”ansible requires a json module, none found! “的错误,须要远程机安装samplejson包。
ansible webservers -m raw -a 'yum -y install python-simplejson'
raw是什么鸟?莫急,咱们看看帮助文档怎么说:#ansible-doc raw
> RAW
Executes a low-down and dirty SSH command, not going through the
module subsystem............
第一句就说明了问题,raw模块是靠底层ssh的通信,不依靠python的模块,因此若是碰到低版本的系统,若是command和shell模块没法使用,能够先用这条命令安装完须要的包。
场景6:重启客户机服务,能够用service模块:
#ansible webserves -m service -a "name=vsftpd state=restarted"
对服务操做有started,stopped,restarted,reloaded四个参数。
以上主要的模块就说完了,还有ping模块,setup模块(获取远程主机信息),cron模块等你们能够按以上模块使用的思路去参考运行,不知道怎么使用的,就看看帮助文档,这篇就到这里了,下篇咱们开始聊聊如何将这些模块组合起来知足更复杂的业务操做,这就要用到咱们的playbook了,先很少说,咱们下篇见。