/mandos/trunk

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/trunk

« back to all changes in this revision

Viewing changes to mandos-ctl

  • Committer: Teddy Hogeborn
  • Date: 2016-06-27 20:21:50 UTC
  • Revision ID: teddy@recompile.se-20160627202150-ml201ilxwjf1g29w
mandos-ctl: Implement --dump-json option

* mandos-ctl (main): Implement --dump-json option
* mandos-ctl.xml (NAME, DESCRIPTION): Change description to the more
                                      accurate "control or query".
  (SYNOPSIS): Add required group around action options and add new
              "--dump-json" option.
  (OPTIONS): Document new "--dump-json" option.

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
4
4
# Mandos Monitor - Control and monitor the Mandos server
5
5
6
 
# Copyright © 2008-2015 Teddy Hogeborn
7
 
# Copyright © 2008-2015 Björn Påhlsson
 
6
# Copyright © 2008-2016 Teddy Hogeborn
 
7
# Copyright © 2008-2016 Björn Påhlsson
8
8
9
9
# This program is free software: you can redistribute it and/or modify
10
10
# it under the terms of the GNU General Public License as published by
39
39
import os
40
40
import collections
41
41
import doctest
 
42
import json
42
43
 
43
44
import dbus
44
45
 
72
73
server_path = "/"
73
74
server_interface = domain + ".Mandos"
74
75
client_interface = domain + ".Mandos.Client"
75
 
version = "1.7.1"
 
76
version = "1.7.10"
76
77
 
77
78
 
78
79
try:
280
281
                        help="Select all clients")
281
282
    parser.add_argument("-v", "--verbose", action="store_true",
282
283
                        help="Print all fields")
 
284
    parser.add_argument("-j", "--dump-json", action="store_true",
 
285
                        help="Dump client data in JSON format")
283
286
    parser.add_argument("-e", "--enable", action="store_true",
284
287
                        help="Enable client")
285
288
    parser.add_argument("-d", "--disable", action="store_true",
328
331
    if has_actions(options) and not (options.client or options.all):
329
332
        parser.error("Options require clients names or --all.")
330
333
    if options.verbose and has_actions(options):
331
 
        parser.error("--verbose can only be used alone or with"
332
 
                     " --all.")
 
334
        parser.error("--verbose can only be used alone.")
 
335
    if options.dump_json and (options.verbose or has_actions(options)):
 
336
        parser.error("--dump-json can only be used alone.")
333
337
    if options.all and not has_actions(options):
334
338
        parser.error("--all requires an action.")
335
 
 
 
339
    
336
340
    if options.check:
337
341
        fail_count, test_count = doctest.testmod()
338
342
        sys.exit(os.EX_OK if fail_count == 0 else 1)
389
393
                sys.exit(1)
390
394
    
391
395
    if not has_actions(options) and clients:
392
 
        if options.verbose:
 
396
        if options.verbose or options.dump_json:
393
397
            keywords = ("Name", "Enabled", "Timeout", "LastCheckedOK",
394
398
                        "Created", "Interval", "Host", "Fingerprint",
395
399
                        "CheckerRunning", "LastEnabled",
400
404
        else:
401
405
            keywords = defaultkeywords
402
406
        
403
 
        print_clients(clients.values(), keywords)
 
407
        if options.dump_json:
 
408
            json.dump({client["Name"]: {key: client[key]
 
409
                                        for key in keywords }
 
410
                       for client in clients.values() },
 
411
                      fp = sys.stdout, indent = 4,
 
412
                      separators = (',', ': '))
 
413
            print()
 
414
        else:
 
415
            print_clients(clients.values(), keywords)
404
416
    else:
405
417
        # Process each client in the list by all selected options
406
418
        for client in clients: