Linux自动化运维(Shell与Ansible)(微课版) 课件 9-4-任务失败和异常处理_第1页
Linux自动化运维(Shell与Ansible)(微课版) 课件 9-4-任务失败和异常处理_第2页
Linux自动化运维(Shell与Ansible)(微课版) 课件 9-4-任务失败和异常处理_第3页
Linux自动化运维(Shell与Ansible)(微课版) 课件 9-4-任务失败和异常处理_第4页
Linux自动化运维(Shell与Ansible)(微课版) 课件 9-4-任务失败和异常处理_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

自动化任务控制任务4:任务失败和异常处理目录/Contents010203忽略错误任务失败强制执行处理程序

指定任务失败条件04

强制任务失败05

指定任务报告changed状态01忽略错误忽略错误错误和异常处理是编程语言中的重要机制,主要用于捕捉和处理代码执行时可能出现的错误和异常,并确保程序在出现错误或异常情况时能够正确、稳定地处理问题,从而保证程序的可靠性和健壮性。当执行自动化任务时,Ansible将捕获任务状态,通过评估每个任务的状态,确定任务是成功的还是失败的。常见的任务状态如表所示:序号任务状态描述1ok任务成功完成2changed任务成功完成,但进行了一些更改,例如更新配置文件或安装软件包3skipped任务被跳过,因为条件不满足或者已经执行过相同的任务4failed任务执行失败,可能是脚本错误、连接问题或其他原因导致的5unreachable无法连接到远程主机,可能是由于网络问题或主机已下线6ignored任务被忽略,通常是因为其他任务的状态导致该任务不必执行7rescued当使用block和rescue时,若rescue块中的任务失败,Ansible会跳过该块并将其标记为rescued忽略错误通常情况下,当任务失败时,Ansible会立即终止执行当前play的其余部分,并跳过所有后续任务。但在某些情况下,用户希望即使任务失败也继续执行play,或者有条件地运行其他任务来恢复。为了完成这些操作,Ansible提供了多种处理错误和异常的方法。常见的错误和异常处理关键字如表所示:序号方法描述1fail引发一个失败,中断当前任务或play,并提供自定义的错误消息。允许在满足特定条件时明确终止执行,通常与when条件一起使用2ignore_errors忽略执行任务时出现的错误并继续执行后续任务。如果在执行任务时出现错误,可以将ignore_errors设置为true以忽略错误并继续执行后续任务3failed_when根据特定条件将任务标记为失败,当满足该条件时认为命令或模块执行失败,根据任务执行状态继续执行后续任务或执行其他操作4changed_when控制任务在何时报告它已进行了更改,Ansible执行任务时,会对远程系统产生影响,如修改配置文件、安装软件包等。任务执行的结果可能导致系统状态的变化。通过changed_when关键字,可以定义一个条件,只有当这个条件满足时,Ansible才会将任务执行状态标记为已变更忽略错误常见的错误和异常处理关键字如表所示:序号方法描述5block和rescue将一组任务包装在一个block块中,并在遇到错误时执行rescue块中的恢复操作。块中的任何任务都可能导致错误,但是只要有一个任务失败,就会跳过块中的其余任务并执行rescue块中的恢复操作6always指定任务总是运行,即使之前的任务失败或跳过也会执行当前任务7register将任务的输出保存到变量中,以便在后续任务中使用,以帮助检查任务的执行结果,包括检查任务是否成功、是否发生错误等。比如任务失败,可以使用register中的错误信息进行记录和报告8force_handlers用于指定在play中强制运行错误处理程序,即使play因为后续任务失败而终止也会调用被通知的处理程序9assert检查任务执行结果是否符合预期,不符合预期时引发错误,终止任务的执行10max_fail_percentage允许在指定百分比范围内容忍失败的主机数量。如果失败的主机数超出了指定百分比,则Playbook将被标记为失败,且后续的任务将不再执行11any_errors_fatal如果设置为true,表示任何一个任务失败都会导致Ansible立即终止play12ignore_unreachable忽略无法连接的主机的错误,并继续执行其他主机的任务。如果设置为true,表示在连接失败时不会终止play,而是将任务标记为unreachable13callback_plugins指定错误处理回调插件,当出现错误时执行自定义的操作,比如发送电子邮件通知定义和引用变量在自动化任务执行过程中可能会遇到各种问题,如连接失败、命令执行错误、模块调用异常等。任务执行失败时,默认情况下Ansible会停止在当前主机上执行后续任务。在Ansible中,ignore_errors参数用于忽略任务执行过程中的错误并继续执行Playbook任务。ignore_errors基本语法如下:-name:Sometasksome_module:some_parameter:some_valueignore_errors:true在上述示例中,ignore_errors被设置为true,表示在执行当前任务时如果出现错误,Ansible会忽略该错误并继续执行后续任务。02任务失败强制执行处理程序任务失败强制执行处理程序当Ansible执行Playbook任务时,如果其中某个任务执行失败,那么当前主机上的后续处理程序将不会被运行,如果在play中设置force_handlers:true,即使play因为后续任务失败而终止也会调用被通知的处理程序。处理程序会在任务报告changed时获得通知,而在任务报告ok或failed时不会获得通知。force_handlers示例如下:-name:Exampleplaywithforce_handlershosts:allforce_handlers:truetasks:-name:Task1command:/bin/truenotify:restartservice-name:Task2command:/bin/falsehandlers:-name:restartserviceservice:name:myservicestate:restarted在示例中,force_handlers被设置为true,表示无论哪个任务执行失败,Ansible都会在所有主机上运行restartservice处理程序,并重启myservice服务。03指定任务失败条件指定任务失败条件在任务中使用failed_when关键字来指定表示任务已失败的条件,从而决定是否将任务标记为失败。failed_when关键字使用的必须是一个可解析的表达式,可以使用Jinja2的模板语法和过滤器来定义,当任务输出的结果匹配failed_when关键字指定的条件时,该任务将被标记为失败,否则,该任务将视为成功。failed_when基本语法如下:在上述示例中,当example-command命令的标准错误输出中出现了FAILED字符串时,任务将被标记为失败。-name:Exampletaskwithfailed_whencommand:/usr/bin/example-commandregister:command_resultfailed_when:"'FAILED'incommand_result.stderr"04强制任务失败强制任务失败fail关键字可用于主动触发任务失败,当某些条件不满足时,需要终止Playbook任务运行,并向用户提供必要的错误信息。fail基本语法如下:在上面的示例中,使用stat模块检查文件是否存在,并将结果存储在注册变量file_stat中。在接下来的任务中,使用fail关键字来检查文件是否存在,当文件不存在时,fail模块将终止Playbook的运行,并输出错误信息Filedoesnotexist。-name:Checkiffileexistsstat:path:/path/to/fileregister:file_stat-name:Stopplaybookiffiledoesnotexistfail:msg:"Filedoesnotexist"when:notfile_stat.stat.exists05指定任务报告changed状态指定任务报告changed状态changed_when条件语句可以定义任务是否对远程节点进行了变更,用户可以根据返回代码或输出来确定是否应该在Ansible统计信息中报告变更,以及是否应该触发处理程序。changed_when关键字用于定义任务的状态变化条件,如果任务的执行结果满足changed_when定义的条件,则任务将被标记为状态变化。changed_when基本语法如下:tasks:-name:Report'changed'whenthereturncodeisnotequalto2shell:/usr/bin/billybass--mode="takemetotheriver"register:bass_resultchanged_when:"bass_result.rc!=2"-name:Thiswillneverreport'changed'statusshell:wall'beep'changed_when:False在上述示例中,第一个任务使用shell模块来运行命令,并将命令执行的结果保存在bass_result注册变量中。changed_when

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论