ansible 调试 debug 一介凡人

摘要:
如果未指定,则输出默认消息“Failedasrequestdfromtask”。可靠的花花公子。yml--start at task=“printoriginfailmsg”5.--step参数-step参数与--start at任务参数不同。--start at task参数从特定任务开始,而--step是在交互模式下逐步执行的。6、 调试器调试工具的启动方法:使用调试器关键字、配置文件或环境变量调试器。键值如下:始终:调试器仍将被调用。

一、debug模块

1、debug模块是Ansible Playbook中最常用的调试模块,可以在Playbook执行过程打印调试信息,特别是跟when条件语句一起使用时,可以调试特定条件下的执行过程。

比如:当变量 a 定义时,将 a 的值打印出来,当任务成功后,打印执行结果等。

msg:调试输出的消息

var:将某个任务执行的输出作为变量传递给debug模块,debug会直接将其打印输出 verbosity:debug的级别(默认是0级,全部显示)

参数默认值解释
msg(string)null输出自定义信息,如果不指定或不写msg的话,默认也会输出“null”
var(string) 指定要打印的变量名,与msg参数互斥,二者只能有一个。注意:var参数中的变量不需要使用{{}}表达式,而msg中需要。
verbosity(integer)默认:0debug的调试级别,默认0是全部显示,级别调整到3是忽略内容不显示,如果verbosity参数设置为3还想像是debug内容的话,需要在命令后面加入 -vvv参数

2、register注册变量,debug 用vat参数引用register 变量result。

---
- name: Print debug infomation eg1 
  hosts: web 
  gather_facts: F 
  vars: 
    user: jingyong 
  tasks: 
  - name: Command run line 
    shell: date 
    register: result 
  - name: Show debug info 
    debug: var=result verbosity=0

ansible 调试 debug 一介凡人第1张

3、mgs:输出自定义信息,如果不指定或不写msg的话,默认会输出“null”

---
- name: Print debug infomation eg1 
  hosts: web 
  gather_facts: F 
  vars: 
    user: jingyong 
  tasks: 
  - name: Command run line 
    shell: date 
    register: result 
  - name: Show debug info 
    debug: 
      msg: 这是一个msg自定义输出测试

ansible 调试 debug 一介凡人第2张

4、debug模块,msg表示打印自定义消息,获取变量{{}},x.stdout输出具体的值。

---
  - hosts: web
    tasks:
      - name: show hostname
        command: hostname
        register: name
      - name: print hostname
        debug: msg={{name.stdout}}

ansible 调试 debug 一介凡人第3张

5、debug与when连用

---
 - hosts: web
   tasks:
     - name: show debug msg
       debug:
         msg: System {{inventory_hostname}} has uuid {{ansible_product_uuid}}
     - name: print gateway when it is defined
       debug:
         msg: System {{inventory_hostname}} has gateway {{ansible_default_ipv4.gateway}}
       when: ansible_default_ipv4.gateway is defined  
     - name: show uptime
       shell: /usr/bin/uptime
       register: result
     - name: show uptime result
       debug:
         var: result
         verbosity: 2
     - name: display all vars of  a host
       debug:
         var: hostvars[inventory_hostname]
         verbosity: 3
     - name: print two lines of messages
       debug:
         msg:
            - "first line msg"
            - "second line msg"

结果:两个skipping,是因为debug的调试级别不是0

ansible 调试 debug 一介凡人第4张

如果遇到报错: 手敲一遍。

yaml文件格式要对其,同一级别的对象要放在同一列,几个空格不重要,不用有tab

ansible 调试 debug 一介凡人第5张

二、assert模块

assert模块是用来断言 playbook中 给定的表达式。当表达式成功或失败时输出一些信息,帮助进行调试。

assert模块可用作单元测试,每次修改playbook后,都通过 assert 断言判断有没有改变执行结果。

assert模块有四个参数,分别是:

fail_msg:当断言失败时输出的消息。

success_msg:当断言成功时输出的消息。

quite:当为yes时,如果成功就不输出任何消息,为no时,断言成功会输出消息。

that:需要判断的表达式列表。

例子:

---
- hosts: web
  vars:
    command_result: 'the result is success'
    number_of_the_count: 5
    param: 90
  tasks:
  - name: assert param scope  断言参数范围
    assert:
      that:
        - param <= 100
        - param >= 0
      fail_msg: "'param' must be between 0 and 100"
      success_msg: "'param' is between 0 and 100"
  - name: use quiet to avoid verbose output
    assert:
      that:
        - param <= 100
        - param >= 0
      quiet: yes
  - name: print origin fail msg
    assert:
      that:
        - "'success' in command_result"
        - number_of_the_count == 4 

ansible 调试 debug 一介凡人第6张

三、fail模块

fail模块是让当前所执行的任务失败,并输出信息。等与when一起使用时,可以在特定条件下让任务失败,以调试程序。

比如:当status与期望值不符时,任务失败并输出变量的值。

fail模块只有一个参数:

msg:当任务失败时,输出特定的消息。如果没有指定,输出默认消息“Failed as requested from task”。

例子:

---
 - hosts: web
   vars:
     number_of_the_count: 5
   tasks:
     - name: use fail module with when
       ignore_errors: yes
       fail:
         msg: "test  test test"
       when: number_of_the_count == 5 
     - name: use fail module
       fail:

ansible 调试 debug 一介凡人第7张

注意:不带参数,输出默认消息

四、--start-at-task参数

其中有个任务经常失败,需要不停的重试。如果在这个任务之前还有很多其他成功的任务,如果每次都从头执行,那么每次都需要执行那些已经成功的任务,效率就很低,这时可以通过--start-at-

task参数指定这个特定的任务。

ansible-playbook  assert.yml    --start-at-task="print origin fail msg"

五、--step参数

-step参数与--start-at-task参数不同,--start-at-task参数是从某个特定的任务开始,而--step是以交互的模式一步一步的执行。

六、debugger调试工具

开启方法:使用debugger关键字、使用配置文件或环境变量(二者默认都是task级别的)

debugger关键的值有下面几个

always:无论如何都会调用debugger。
never:无论如何都不会调用debugger。
on_failed:只有当任务失败的时候再调用debugger。
on_unreachable:只有当主机不可达时再调用debugger。
on_skipped:只有当任务skipped再调用debugger。

Debugger中可用的命令

在使用debugger进行调试时,是进入到一个交互模式窗口下,使用debugger提供的命令进行调试,有下面几种命令:

1、打印这些模块的值。

p task:打印出任务的名称
p task_vars:打印任务的变量
p task_args:打印任务的参数
p host:打印当前主机
p result:打印任务执行结果

2、修改模块参数的值。

task.args[key]=value

3、修改模块变量的值

task.vars[key]=value

4、根据更新后的变量或参数值从新创建该task

u(update_task)

5、重新执行该task

r(redo)

6、继续执行后续的tasks

c(continue)

7、从debugger会话中退出。

q(quit)

实例

---
- hosts: web
  debugger: on_failed
  gather_facts: no
  vars:
    info: debug this playbook
  tasks:
    - name: print the wrong variable
      ping:  data={{wrong_info}}

ansible 调试 debug 一介凡人第8张

通过p task.args命令查看当前的参数列表,通过task.args['data'] = '{{info}}'设置参数名,然后通过  命令重新执行该任务,再次执行时执行成功

在ansible.cfg文件中:

[defaults]
enable_task_debugger = True

免责声明:文章转载自《ansible 调试 debug 一介凡人》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux下EC20 4G模块驱动移植Robolectric测试框架使用笔记下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

GDB调试器

/*this project used for gdb debug c programs*//*At first,using compile command turn out the executable file. exp: gcc -g sourcefile.c -o test.exe */        //!!!/*windows: start g...

使用gitblit搭建自己的代码存储仓库

一、基本准备: 服务器:阿里云的windows server 2008 r2 64位 相关软件: 1、java的jdk包; 2、gitblit程序包(这个不用安装,是绿色的)。 二、安装步骤 1、下载jdk程序包 jdk程序包下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-...

ROS知识(5)----消息与服务的示例

ROS中已经定义了较多的标准类型的消息,你可以用在这些标准类型的消息上再自定义自己的消息类型。这个在复杂数据传输很有用,例如节点和服务器进行交互时,就可能用到传输多个参数到服务器,并返回相应的结果。为了保证例子的完整,将详述每一步。 基本思路和创建talker和listener的例子类似,步骤如下: 建立工作空间workspace(类似于vs下的解决方案,...

web中打开word为什么老是提示无法打开宏储存?

是因为用户没有在服务器端运行Word的权限,应在服务器端做如下操作:1.开始--运行--dcomcnfg--Microsoft Word 文档--属性--身份标识--交互式用户否则会出现“消息筛选器显示应用程序正在使用中”的错误2.开始--运行--dcomcnfg--Microsoft Word 文档--属性--安全性--使用自定义访问权限--添加Ever...

百度竞价门再跟踪:违规医疗广告数量仍大幅增加

网易科技讯 2月18日消息,网易科技日前收到一份署名为反流氓软件联盟的《百度医疗医药广告统计报告》(以下简称报告),据该调研报告中显示,在百度医疗医药竞价排名广告违规被媒体曝光后,这类广告数量随后有所减少,不过在风波平息后,此类广告数量又大幅增加,并且现在仍有大量违规医疗广告。 医疗类广告数量高达遭曝光时两倍 百度在2008年11月因受到媒体曝光影响...

ROS之服务

服务(service)是另一种在节点之间传递数据的方法,服务其实就是同步的跨进程函数调用,它能够让一个节点调用运行在另一个节点中的函数。 我们就像之前消息类型一样定义这个函数的输入/输出。服务端(提供服务的节点)定义了一个回调函数来处理服务的请求,并声明这个服务。 客服端(进行服务请求的节点)通过一个本地的代理调用这个服务。 服务一般只是做哪些偶尔会做的事...