《自动化运维工具 Ansible 日常维护和使用.docx》由会员分享,可在线阅读,更多相关《自动化运维工具 Ansible 日常维护和使用.docx(12页珍藏版)》请在三一办公上搜索。
1、Inventory文件在日常维护中,AnSibIe通过Inventory(可管理的主机集合),对远端服务器或者主机进行统一操作和管理.在Ansible中,描述主机的默认方法是将他们列在一个文本文件中,这个文件称为InVentory文件,默认的路径和文件为:etcansiblehosts,可以通过ANSIB1.E.HOSTS环境变量来指定,也可以在ansible.cfg文件中通过inventory参数指定,或者在运行ansible和ansible-playbook的时候使用-i参数来临时指定。下面举例说明,如何在inventory组件的etcansiblehosts文件中定义主机和主机组:1 X
2、.X.X.100ansible_ssh_PaSS=123456,2 groupame13 X.X.X.101:94 X.X.X.201:95 groupame1:vars6 ansible_ssh_pass=*123456,7 groupname2:children8 groupame1第一行定义了一个主机XXX100,并使用inventory内置变量ansible_ssh_pass定义了该主机的登录密码,如果建立了互信,则不需要这个参数;参数用途HnSibIe_ssh_host定义hostSSh地址ansible_ssh_port定义hostsssh端口ansible_ssh_user定义h
3、ostsSSh认证用户ansib1JSSh_pass定义hostsSSh认证密码ansible_sudo定义hostsSUdO用户asible_sudo_pass定义hoslsSUdO密码ansible_sudoexe定义hostssudo路径ansible_connection定义hosts连接方式ansible_ssh_private_key_fiIe定义hosts私物ansible_shell_type定义hostsshell类型ansible_PythOnjnterPreter定义hosts任务执行python路径ansibIe_*_inlerpreter定义hosts其他语言解析器路
4、径我们也可以在ansible.cfg文件中的defaults部分更改一些Inventory内置参数的默认值,可以支持更改的有:Inventory内置参数ansible.cfg参数HnSibleSShPOrtremoteportHnSible_sshuserremote_usera11siblesshprivatekeyfileprivate_key_fiIeansible-shell_typoexecutable动态Inventory在实际的应用中,会存在大量的主机列表信息,如果手动维护Ansible中的Inventory文件将会非常的繁琐所以支持动态Inventory将会让问题变得统一、清淅
5、、简单许多.动态InVentory也就是AnSible所有的InVentory文件里面的主机列表和变量信息都支持从外部拉取,例如我们常用的CMDB,我们可以通过定义的脚本,将外部CMDB等其他运维系统中的主机信息同步至Ansible中.在ansibleip-mcommand-adate-o值得注意的是,Ansible默认的模块是Command,所以上面的命令可以简化为:ansibleip-adate-o第二种方式是利用Shell模块切换到某个Shell执行远程主机上的Shell/Python脚本,或者执行命令,Shell支持管道命令,功能较Command更强大灵活,例如:ansibleip-m
6、shell-abashroottest.sh,-oansibleip-mshell-aecho123456,passwd-stdinroot第三种方式是利用RaW模块Raw支持管道命令.Raw有很多地方和SheIl类似,但是如果是使用老版本Python(低于2.4),无法通过Ansible的其他模块执行命令,则需要先用到Raw模块远程安装PythOn-Sim-PlejSon后才能受管;又或者是受管端是路由设备,因为没有安装Python环境,那就更需要使用RaW模块去管控了.例如:ansibleip-mraw-a,cd/tmp;pwd-第四种方式是利用SCriPt模块,传输Ansible中控端上
7、的Shell/Python脚本到远端主机上执行,即使远端主机没有安装Python也可以执行,有点类似RaW模块.但Script只能执行脚本,不能调用其他指令,且不支持管道命令,例如:ansibleip-mscript-aroottest.sh-o在AnsibleAd-Hoc中,可以通过User模块帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作.该模块的几个常用参数如下:参数说明name用J指定要操作的用户名称group用Ffii定用户所在的主组ho11H用于指定用户home目录shell用于指定用户的默认shelluid用指定用户的Uid号state用指
8、定用户是否存在于远程主机中欣认为PreSen1.表示用户需存在;absent.表示IH除用户re三oveSUtle为absent时,用于指定是否副除用户的在目录assword用于指定用户的密码增加用户、组和密码:ansibleip-mgroup-a,name=testgansibleip-muser-aname=testgroup=testgpassword=123456home=hometest*删除用户和用户主目录:ansibleip-muser-a*name=testState=absentremove=yes*3、AnsiblePlaybook使用在AnsibleAd-Hoc中,可以通
9、过Yum模块实现在远程主机上通过YUm源管理软件包,包括安装、升级、降级、删除和列出软件包等。该模块的几个常用参数如下:Tasks1.ist和ActionPlay的主体部分是Task列表,Task列表中的各任务按次序逐个在Hosts中指定的主机上执行,即在所有主机上完成第一个任务后再开始第二个任务.在运行Playbook时(从上到下执行),如果一个Host执行Task失败,整个Task都会回滚,我们需要修正Playbook中的错误,然后至新执行即可.Task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量,模块执行时日等等,这意味着多次执行是安全的,因为其结果一致.另外,按照规范写法
10、,每一个Task必须有一个名称Name,虽然这不是必须的,但这样在运行Playbook时,从其输出的任务执行信息中可以很好的辨别出是属于哪一个Task.如果没有定义Name,Action的值将会用作输出信息中标记特定的Task,结果不好分辨。定义一个Task,常见的格式为module:options.例如:yum:name=httpd.值得注意的是,Ansible的自带模块中,Command模块和Shell模块无需使用key=value格式,直接编写要执行的命令即可.HandlersHandlers也是一些Task的列表,和一般的Task并没有什么区别。它是由通知者进行的Notify,如果没有
11、被Notify,则Handlers不会执行,如果被Notify了,则Handlers被执行.不管有多少个通知者进行了Notify,等到Play中的所有TaSk都执行完成之后,HandlerS也只会被执行一次.例如:hosts:X.X.10B.2CA5ks:- nae:1tsta1lhxtdpackagey:rumehttpdstate-present- none:copyhttpd.co11fo1ap0:src-tppd.conf.J2re:restarthttpdservicesrvico:rnc-ttpdstatostarred变量引用我们可以在PIayBook中通过var$:变量名的方式
12、声明变量,并通过变量名的方式使用已声明的变量.另外,我们还可以直接引用Ansible的变量,包括采集到的主机Fact中的变量,例如:通过ansible.alljpv4.address来获取IPV4地址,或者通过ansible-distributionxansible_distribution_version来获取操作类型和版本信息.除此之外,还能引用已编辑好的InVentory文件中定义的主机变量,这样当安装完一些软件,需要根据主机中定义的变量来做一些自动化配置时,将会非常好用.例如:Vietcansiblehosts#定义Inventory文件中的变量与值X.X.108.2hostname=
13、testM5”:X.X.1C4.2*M5:- p*ck9*:rnX- *rvc:wyql- ruM:1mllllMtpdPcUqy:fMBe(p*ckao)s(At-frsmrurestartse-copyCome11tofilecpy:m1bU-cMtrlbrtlcn)(wwlbU_ditribvtlcn_*1on)*dettptett.te=httpdstate=presenttags:-httpd-name:installnginxpackageyum:name=nginstate=presenttags:-nginxansiblc-pIaybooktest,ymltags=*,nRin
14、x4、AnsibleFacts使用Facts组件是Ansible用于采集被管主机设备信息的一个功能,当Ansible采集Fact的时候,它会收集披管主机的各种详细信息:CPU架构、操作系统、IP地址、内存信息、磁盘信息等,这些信息保存在被称作FaCt的变印中.AnSibIe使用一个名为Setup的特殊模块来实现Fact的收集,在Playbook中默认会调用这个模块进行Fact收集,在命令行中可以通过ansibleip-mSetUP”来进行手动收集,整个FaCtS信息被包装JSoN格式的数据结构中,AnsibleFaCtS是最上层的值.例如:ansibleX.X.X.2-msetupX.X.X.
15、2ISUCCESS=an3ible_fact3:wansible_all_ipv4_addresses:wx.x7x.2】,wan3ible_all_ipv6_addre33e3:(wfe80:816:3eff:Cele:67C3t,wansible_appannor:993ZtM3:disabledRansible_architecture:,x86-64rFnS3Q)但一date:01012011-r,ansble-b3-verson,:0.5.Iwr,nsibleendllne:rBOOT-IMAGEr:,三lnuz-3.10.0-327el7.x-64rbiosdevnaroe:0r-
16、console:wtcySOrHS200n8-fcrashkernel:wautorwnet.Ifnaznes:0,rd.lvm.lv:rhelrootrwro:true,root:/dev/mapper/rhel-rootFacts还支持通过filter参数来查看指定信息,例如下面只宜看远端主机的操作系统和版本:antleX.X.X2*upnicer-aitle-ye2X.X.X.2ISGCCtSS-(anvblea.fcos(*ntMea,0ytt4f:e1.irmMecbg*4sfl*A4ibl*X.X.X.2-cup-*filcr(-an*blsfccw:(*nBibladlstrbu
17、on:HdMat.cap:fl*iblX.X.X.?-scup7*fHtr*A(anxbl-fct:(aanBibX-dtrfc4ioa-vrona:.21,efcand:fal查看远端主机的CPU和内存大小:anibl6.2-etu-aMfilt(anibl-facta:ansiblo-procoor-count:4),changod*:false)ansibleX.X.X.2-asetup-filter-ansiblo-neatotalmb-0X.2ISUCCtSS(anibl-fact:(nsiblefacts,t:RanSibIJmoUncg:(device:/dev/mapper/r
18、he1-rootffatype:xfsrmoxnt:wroptions:rwrrelatimerattr2rinode64rnoquotarSizeavailable:94723239936rwsze-total:106819743744,-UUid:517bc764-fd26-4027-a301-6c5e29557f7cwdevice:devvdalwrf3type:xfsrmount:,bootroptions:rwzrelatiraerattr2,inode64rnoquotarslze-available:354861056,size-total:520794112ruuid:2c98
19、f0c5-9dbb-4cac-871c-8el5e802al73changed:false在Playbook中,Facts组件默认会收集很多的主机的基础信息,可以通过前面的FaCt缓存机制,将这些信息缓存到本地目录或者内存数据库中,在做配百管理的时候进行引用,也可以用来将获取的主机基础信息自动同步到CMDB中去,实现基础信息的自动采集功能.下面通过通过演示,说明如何通过ansible-cmdb插件,实现远端主机CPU自动同步至外部CMDB系统中.首先,我们需要安装ansible-cmdb插件,下载链接如下:https:/files.pythonhosted.org/packages/37/lb
20、/lfcff0a38a4e07d9d3f75113494ec0b25fd271b650bda52907aela80cbfbansible-cmdb-1.27.tar.gz其次,开始安装ansible-cmdb插件:gzip-deansible-cmdb-1.27.tar.gztar-vf-cdansible-cmdb-1.27pythonsetup.pyinstall生成所有主机的Fact信息并用filter过渔出主机CPU值:ansibleall-msetup-ttmpfactoutansibleall-msetup-a*filter=ansible_processor_count-ttmp
21、cpu通过ansible-cmdb插件以csv或sql格式输出IP地址和CPU颗数值:PATH=/usr/local/bin:$PATHansible-cmdb-tcsv-cname,cpustmpcputmpcpu.csvansible-cmdb-tSqltmpcputmpcpu.sql以CSV格式或者Sql格式导入信息至外部CMDB系统中(根据支持方式灵活选用).这里以Postgres数据库为例,通过转CSV格式为Sql格式导入至外部CMDB系统:CPUinfO=$(Cattmpcpu.csv)forCPUJnfOinScpuinfodoip=S(eco-$cpu_infoIawk-F,printSl,sed,s7g,)cpu=S(echo$cpu_infoIawk-FVprint$2Ised,s7g)echoupdateVirtualMachinesetVCPU=,ScpuwhereiP=Scpuip,andStats=A7tmpcpu,info.sqdonesu-postgres-cexportPGPASSWORD=postgresoptPostgrSQ1.9.3binpsql-dcmdbuild-ftmpcpu.info.sql当然,以上仅仅是简单的示例,事实上,我们可以利用好AnsibleFact的功能,实现更加豆杂的CMDB自动化采集功能.