ansible debug模块学习笔记,ansibledebug


平时我们在使用ansible编写playbook时,经常会遇到错误,很多时候有不知道问题在哪里 。这个时候可以使用-vvv参数打印出来详细信息,不过很多时候-vvv参数里很多东西并不是我们想要的,这时候就可以使用官方提供的debug模块来查找问题出现在哪里。

playbook示例

# verbosity(added in 2.1),如果使用的的该本低于该版本,使用时会报错
- name: debug test one host
hosts: 200.200.6.53
tasks:
- debug:
msg: "System {{ inventory_hostname }} has uuid {{ ansible_product_uuid }}"
- debug:
msg: "System {{ inventory_hostname }} has gateway {{ ansible_default_ipv4.gateway }}"
when: ansible_default_ipv4.gateway is defined
- shell: /usr/bin/uptime
register: result
- debug:
var: result
verbosity: 4
- name: Display all variables/facts known for a host
debug:
var: hostvars[inventory_hostname]
verbosity: 2

上面我们写了一个playbook,基本就是按照官方的示例做了一点修改。通过该示例,我们可以输出setup模块里引用的几个fact项的值,也可以输出定义的一个变量result---其内容为uptime命令执行的结果 。

执行结果

点击图片可以看大图 。

从上面的执行结果来看,发现在获取变量的时候出错了,这是因为我使用的ansible版本比较老导致的,verbosity参数是从ansible 2.1版本之后加入的一个参数,该变量对应的值当大于等于3时,将显示详细信息 。升级了版本后,uptime部分执行结果如下:

TASK [debug] *******************************************************************
ok: [200.200.6.53] => {
"result": {
"changed": true,
"cmd": "/usr/bin/uptime",
"delta": "0:00:00.020206",
"end": "2016-07-09 17:27:58.793521",
"rc": 0,
"start": "2016-07-09 17:27:58.773315",
"stderr": "",
"stdout": " 17:27:58 up 69 days, 1:54, 1 user, load average: 0.03, 0.02, 0.05",
"stdout_lines": [
" 17:27:58 up 69 days, 1:54, 1 user, load average: 0.03, 0.02, 0.05"
],
"warnings": []
}
}

 

ansible playbook可以将多个命令组合来执行,但是很多时候我们需要接收服务器的反馈,所以debug模块就非常重要了。

出处:https://docs.ansible.com/ansible/latest/modules/debug_module.html

 

模块说明

调试模块,用于在调试中输出信息
常用参数:
msg:调试输出的消息
var:将某个任务执行的输出作为变量传递给debug模块,debug会直接将其打印输出
verbosity:debug的级别(默认是0级,全部显示)

例程:


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

程序是将命令date返回信息使用debug模块打印出来。

返回结果如下:


PLAY [Print debug infomation eg] *********************************************** 

TASK [Show debug info] ********************************************************* 
ok: [192.168.0.1] ={ 
"result": { 
"changed": true, 
"cmd": "date", 
"delta": "0:00:00.002400", 
"end": "2016-08-27 13:42:16.502629", 
"rc": 0, 
"start": "2016-08-27 13:42:16.500229", 
"stderr": "", 
"stdout": "2016年 08月 27日 星期六 13:42:16 CST", 
"stdout_lines": [ 
"2016年 08月 27日 星期六 13:42:16 CST" 
], 
"warnings": [] 
} 
} 
ok: [192.168.0.2] ={ 
"result": { 
"changed": true, 
"cmd": "date", 
"delta": "0:00:00.003847", 
"end": "2002-01-12 03:08:37.493383", 
"rc": 0, 
"start": "2002-01-12 03:08:37.489536", 
"stderr": "", 
"stdout": "2002年 01月 12日 星期六 03:08:37 CST", 
"stdout_lines": [ 
"2002年 01月 12日 星期六 03:08:37 CST" 
], 
"warnings": [] 
} 
} 

PLAY RECAP ********************************************************************* 
192.168.0.1 : ok=2changed=1unreachable=0failed=0   
192.168.0.1 : ok=2changed=1unreachable=0failed=0   

可以看到debug不光输出了date命令结果,还返回了很多相关调试信息,只需要date返回值,可以使用变量属性过滤 如:result.stdout 就是命令的返回值。

程序改成:


- name: Print debug infomation eg 
  hosts: test2 
  gather_facts: F 
  tasks: 
  - name: Command run line 
    shell: date 
    register: result 
  - name: Show debug info 
    debug: var=result.stdout verbosity=0

运行结果:


PLAY [Print debug infomation eg] *********************************************** 

TASK [Command run line] ******************************************************** 
changed: [192.168.0.1] 
changed: [192.168.0.2] 

TASK [Show debug info] ********************************************************* 
ok: [192.168.0.1] ={ 
"result.stdout": "2002年 01月 12日 星期六 03:16:26 CST" 
} 
ok: [192.168.0.2] ={ 
"result.stdout": "2016年 08月 27日 星期六 13:50:05 CST" 
} 

PLAY RECAP ********************************************************************* 
192.168.0.1  : ok=3changed=1unreachable=0failed=0   
192.168.0.2  : ok=3changed=1unreachable=0failed=0



作者:行者靖
链接:https://www.jianshu.com/p/a8db739df161
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

ansible playbook可以将多个命令组合来执行,但是很多时候我们需要接收服务器的反馈,所以debug模块就非常重要了。

模块说明

调试模块,用于在调试中输出信息
常用参数:
msg:调试输出的消息
var:将某个任务执行的输出作为变量传递给debug模块,debug会直接将其打印输出
verbosity:debug的级别(默认是0级,全部显示)

例程:


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

程序是将命令date返回信息使用debug模块打印出来。

返回结果如下:


PLAY [Print debug infomation eg] *********************************************** 

TASK [Show debug info] ********************************************************* 
ok: [192.168.0.1] ={ 
"result": { 
"changed": true, 
"cmd": "date", 
"delta": "0:00:00.002400", 
"end": "2016-08-27 13:42:16.502629", 
"rc": 0, 
"start": "2016-08-27 13:42:16.500229", 
"stderr": "", 
"stdout": "2016年 08月 27日 星期六 13:42:16 CST", 
"stdout_lines": [ 
"2016年 08月 27日 星期六 13:42:16 CST" 
], 
"warnings": [] 
} 
} 
ok: [192.168.0.2] ={ 
"result": { 
"changed": true, 
"cmd": "date", 
"delta": "0:00:00.003847", 
"end": "2002-01-12 03:08:37.493383", 
"rc": 0, 
"start": "2002-01-12 03:08:37.489536", 
"stderr": "", 
"stdout": "2002年 01月 12日 星期六 03:08:37 CST", 
"stdout_lines": [ 
"2002年 01月 12日 星期六 03:08:37 CST" 
], 
"warnings": [] 
} 
} 

PLAY RECAP ********************************************************************* 
192.168.0.1 : ok=2changed=1unreachable=0failed=0   
192.168.0.1 : ok=2changed=1unreachable=0failed=0   

可以看到debug不光输出了date命令结果,还返回了很多相关调试信息,只需要date返回值,可以使用变量属性过滤 如:result.stdout 就是命令的返回值。

程序改成:


- name: Print debug infomation eg 
  hosts: test2 
  gather_facts: F 
  tasks: 
  - name: Command run line 
    shell: date 
    register: result 
  - name: Show debug info 
    debug: var=result.stdout verbosity=0

运行结果:


PLAY [Print debug infomation eg] *********************************************** 

TASK [Command run line] ******************************************************** 
changed: [192.168.0.1] 
changed: [192.168.0.2] 

TASK [Show debug info] ********************************************************* 
ok: [192.168.0.1] ={ 
"result.stdout": "2002年 01月 12日 星期六 03:16:26 CST" 
} 
ok: [192.168.0.2] ={ 
"result.stdout": "2016年 08月 27日 星期六 13:50:05 CST" 
} 

PLAY RECAP ********************************************************************* 
192.168.0.1  : ok=3changed=1unreachable=0failed=0   
192.168.0.2  : ok=3changed=1unreachable=0failed=0



出处:https://www.jianshu.com/p/a8db739df161

相关内容

    暂无相关文章