Bertrand Chenal 7 лет назад
Родитель
Сommit
55a2040e71
1 измененных файлов с 41 добавлено и 0 удалено
  1. 41 0
      baker.py

+ 41 - 0
baker.py

@@ -2,6 +2,7 @@ from getpass import getpass
 from hashlib import md5
 from hashlib import md5
 from itertools import chain
 from itertools import chain
 from collections import ChainMap, OrderedDict, defaultdict
 from collections import ChainMap, OrderedDict, defaultdict
+from string import Formatter
 import argparse
 import argparse
 import io
 import io
 import logging
 import logging
@@ -763,6 +764,8 @@ def load_cli(args=None):
                         default=0, help='Decrease verbosity')
                         default=0, help='Decrease verbosity')
     parser.add_argument('-n', '--no-color', action='store_true',
     parser.add_argument('-n', '--no-color', action='store_true',
                         help='Disable colored logs')
                         help='Disable colored logs')
+    parser.add_argument('-i', '--info', action='store_true',
+                        help='Print info')
     cli = parser.parse_args(args=args)
     cli = parser.parse_args(args=args)
     cli = ObjectDict(vars(cli))
     cli = ObjectDict(vars(cli))
 
 
@@ -813,6 +816,40 @@ def get_hosts_and_tasks(cli, cfg):
     return dict(hosts=hosts, tasks=tasks)
     return dict(hosts=hosts, tasks=tasks)
 
 
 
 
+def info(cli):
+    formatter = Formatter()
+    for name, attr in cli.cfg.tasks.items():
+        kind = 'remote'
+        if attr.python:
+            kind = 'python'
+        elif attr.local:
+            kind = 'local'
+        elif attr.multi:
+            kind = 'multi'
+        elif attr.send:
+            kind = 'send file'
+
+        print(f'{name} [{kind}]:\n\tDescription: {attr.desc}')
+
+        values = []
+        for v in attr.values():
+            if isinstance(v, list):
+                values.extend(v)
+            elif isinstance(v, dict):
+                values.extend(v.values())
+            else:
+                values.append(v)
+        values = filter(lambda x: isinstance(x, str), values)
+        fmt_fields = [i[1] for v in values for i in formatter.parse(v) if i[1]]
+        if fmt_fields:
+            variables = ', '.join(sorted(set(fmt_fields)))
+        else:
+            variables = None
+
+        if variables:
+            print(f'\tVariables: {variables}')
+
+
 def main():
 def main():
     cli = None
     cli = None
     try:
     try:
@@ -824,6 +861,10 @@ def main():
         log_handler.setLevel(level)
         log_handler.setLevel(level)
         logger.setLevel(level)
         logger.setLevel(level)
 
 
+        if cli.info:
+            info(cli)
+            return
+
         base_env = Env(
         base_env = Env(
             cli.env, # Highest-priority
             cli.env, # Highest-priority
             cli.cfg.get('env'),
             cli.cfg.get('env'),