Я хотел бы быстро отслеживать некоторые хосты, используя команды ps, dstat и т.д., используя загрузочную книгу. Сама команда ansible
делает то, что я хочу, например, я бы использовал:
ansible -m shell -a "ps -eo pcpu,user,args | sort -r -k1 | head -n5"
и он красиво печатает весь вывод std для каждого хоста следующим образом:
localhost | success | rc=0 >>
0.0 root /sbin/init
0.0 root [kthreadd]
0.0 root [ksoftirqd/0]
0.0 root [migration/0]
otherhost | success | rc=0 >>
0.0 root /sbin/init
0.0 root [kthreadd]
0.0 root [ksoftirqd/0]
0.0 root [migration/0]
Однако это требует от меня держать кучу оболочечных скриптов для каждой задачи, которая не очень "правдоподобна", поэтому я помещаю ее в учебник:
---
-
hosts: all
gather_facts: no
tasks:
- shell: ps -eo pcpu,user,args | sort -r -k1 | head -n5
и запустите его с помощью -vv
, но на выходе выводится содержимое словаря, а строки новой строки не печатаются таким образом, что приводит к нечитаемому беспорядку, подобному этому:
changed: [localhost] => {"changed": true, "cmd": "ps -eo pcpu,user,args | sort -r -k1
head -n5 ", "delta": "0:00:00.015337", "end": "2013-12-13 10:57:25.680708", "rc": 0,
"start": "2013-12-13 10:57:25.665371", "stderr": "", "stdout": "47.3 xxx Xvnc4 :24
-desktop xxx:24 (xxx) -auth /home/xxx/.Xauthority -geometry 1920x1200\n
....
Я также попытался добавить register: var
и задачу 'debug', чтобы показать {{ var.stdout }}
, но результат, конечно, тот же.
Есть ли способ получить красиво отформатированный вывод из команды stdout/stderr при запуске через playbook? Я могу придумать несколько возможных способов (выход формата с помощью sed? Redirect output в файл на хосте, затем вернуть этот файл и отобразить его на экране?), Но с моими ограниченными знаниями о оболочке/возможно, мне понадобится в день, чтобы просто попробовать.