How can I show progress for a long-running Ansible task?

后端 未结 4 1714
渐次进展
渐次进展 2021-01-30 16:41

I have a some Ansible tasks that perform unfortunately long operations - things like running an synchronization operation with an S3 folder. It\'s not always clear if they\'re

4条回答
  •  长发绾君心
    2021-01-30 17:07

    I came across this problem today on OSX, where I was running a docker shell command which took a long time to build and there was no output whilst it built. It was very frustrating to not understand whether the command had hung or was just progressing slowly.

    I decided to pipe the output (and error) of the shell command to a port, which could then be listened to via netcat in a separate terminal.

    myplaybook.yml
    
    - name: run some long-running task and pipe to a port
      shell: myLongRunningApp > /dev/tcp/localhost/4000 2>&1
    

    And in a separate terminal window:

    $ nc -lk 4000
    Output from my
    long
    running
    app will appear here
    

    Note that I pipe the error output to the same port; I could as easily pipe to a different port.

    Also, I ended up setting a variable called nc_port which will allow for changing the port in case that port is in use. The ansible task then looks like:

      shell: myLongRunningApp > /dev/tcp/localhost/{{nc_port}} 2>&1
    

    Note that the command myLongRunningApp is being executed on localhost (i.e. that's the host set in the inventory) which is why I listen to localhost with nc.

提交回复
热议问题