How do I get logs/details of ansible-playbook module executions?

后端 未结 6 1915
攒了一身酷
攒了一身酷 2020-12-22 18:45

Say I execute the following.

$ cat test.sh
#!/bin/bash
echo Hello World
exit 0

$ cat Hello.yml
---

- hosts: MyTestHost
  tasks:
  - name: Hello yourself
           


        
相关标签:
6条回答
  • 2020-12-22 18:51

    If you pass the -v flag to ansible-playbook on the command line, you'll see the stdout and stderr for each task executed:

    $ ansible-playbook -v playbook.yaml
    

    Ansible also has built-in support for logging. Add the following lines to your ansible configuration file:

    [defaults] 
    log_path=/path/to/logfile
    

    Ansible will look in several places for the config file:

    • ansible.cfg in the current directory where you ran ansible-playbook
    • ~/.ansible.cfg
    • /etc/ansible/ansible.cfg
    0 讨论(0)
  • 2020-12-22 18:51

    Using callback plugins, you can have the stdout of your commands output in readable form with the play: gist: human_log.py

    Edit for example output:

     _____________________________________
    < TASK: common | install apt packages >
     -------------------------------------
            \   ^__^
             \  (oo)\_______
                (__)\       )\/\
                    ||----w |
                    ||     ||
    
    
    changed: [10.76.71.167] => (item=htop,vim-tiny,curl,git,unzip,update-motd,ssh-askpass,gcc,python-dev,libxml2,libxml2-dev,libxslt-dev,python-lxml,python-pip)
    
    stdout:
    Reading package lists...
    Building dependency tree...
    Reading state information...
    libxslt1-dev is already the newest version.
    0 upgraded, 0 newly installed, 0 to remove and 24 not upgraded.
    
    
    stderr:
    
    start:
    2015-03-27 17:12:22.132237
    
    end:
    2015-03-27 17:12:22.136859
    
    0 讨论(0)
  • 2020-12-22 19:07

    There is also other way to generate log file.

    Before running ansible-playbook run the following commands to enable logging:

    • Specify the location for the log file.

      export ANSIBLE_LOG_PATH=~/ansible.log

    • Enable Debug

      export ANSIBLE_DEBUG=True

    • To check that generated log file.

      less $ANSIBLE_LOG_PATH

    0 讨论(0)
  • 2020-12-22 19:11

    Ansible command-line help, such as ansible-playbook --help shows how to increase output verbosity by setting the verbose mode (-v) to more verbosity (-vvv) or to connection debugging verbosity (-vvvv). This should give you some of the details you're after in stdout, which you can then be logged.

    0 讨论(0)
  • 2020-12-22 19:15

    The playbook script task will generate stdout just like the non-playbook command, it just needs to be saved to a variable using register. Once we've got that, the debug module can print to the playbook output stream.

    tasks:
    - name: Hello yourself
      script: test.sh
      register: hello
    
    - name: Debug hello
      debug: var=hello
    
    - name: Debug hello.stdout as part of a string
      debug: "msg=The script's stdout was `{{ hello.stdout }}`."
    

    Output should look something like this:

    TASK: [Hello yourself] ******************************************************** 
    changed: [MyTestHost]
    
    TASK: [Debug hello] *********************************************************** 
    ok: [MyTestHost] => {
        "hello": {
            "changed": true, 
            "invocation": {
                "module_args": "test.sh", 
                "module_name": "script"
            }, 
            "rc": 0, 
            "stderr": "", 
            "stdout": "Hello World\r\n", 
            "stdout_lines": [
                "Hello World"
            ]
        }
    }
    
    TASK: [Debug hello.stdout as part of a string] ******************************** 
    ok: [MyTestHost] => {
        "msg": "The script's stdout was `Hello World\r\n`."
    }
    
    0 讨论(0)
  • 2020-12-22 19:15

    Offical plugins

    You can use the output callback plugins. For example, starting in Ansible 2.4, you can use the debug output callback plugin:

    # In ansible.cfg:
    [defaults]
    stdout_callback = debug
    

    (Altervatively, run export ANSIBLE_STDOUT_CALLBACK=debug before running your playbook)

    Important: you must run ansible-playbook with the -v (--verbose) option to see the effect. With stdout_callback = debug set, the output should now look something like this:

    TASK [Say Hello] ********************************
    changed: [192.168.1.2] => {
        "changed": true,
        "rc": 0
    }
    
    STDOUT:
    
    
    Hello!
    
    
    
    STDERR:
    
    Shared connection to 192.168.1.2 closed.
    

    There are other modules besides the debug module if you want the output to be formatted differently. There's json, yaml, unixy, dense, minimal, etc. (full list).

    For example, with stdout_callback = yaml, the output will look something like this:

    TASK [Say Hello] **********************************
    changed: [192.168.1.2] => changed=true 
      rc: 0
      stderr: |-
        Shared connection to 192.168.1.2 closed.
      stderr_lines:
      - Shared connection to 192.168.1.2 closed.
      stdout: |2-
    
        Hello!
      stdout_lines: <omitted>
    

    Third-party plugins

    If none of the official plugins are satisfactory, you can try the human_log plugin. There are a few versions:

    • https://github.com/n0ts/ansible-human_log

    • https://gist.github.com/cliffano/9868180

    0 讨论(0)
提交回复
热议问题