《自动化运维工具 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.t上面的案例是通过vars的方式定义了package和service两个变量,并在下面的yum和service两个Task中进行引用,第三个Task则是直接引用setup生成的Fact变量和来自Inventory文件中定义的主机变量hostname,来实现将
14、内容信息传递至远端主机的文件中,输出结果如下:cattmtest.tttest:RedHat7.2条件判断我们可以在PIayBook中通过when:变量=值的方式声明一个条件判断,可以看出when的值是一个条件表达式,如果条件判断成立,Task就执行,如果判断不成立,则task不执行。例如当我们需要根据变量、Facts(setup)或此前任务的执行结果来作为某TaSk执行与否的前提时,则要用到条件判断,这时可以在Playbook中使用when子句:在Task后添加when子句.另外,when子句支持jinjia2表达式或语法.-hosts:X.X.108.2tasks:-name:Installhttpdpackageyun:naae-htcpdstate-presentMberK-ansibldistribution1.inux-ansiblStribcJtiorueajor-VQrson-7-name:installngi11xPackagey:nafe*nixstate-present4n:ans1be,dist