summaryrefslogtreecommitdiffstats
path: root/func/overlord/cmd_modules/show.py
blob: 22bac95b5cd38354ab7cd54d1bdaba55e170a970 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#!/usr/bin/python

"""
show introspection commandline

Copyright 2007, Red Hat, Inc
see AUTHORS

This software may be freely redistributed under the terms of the GNU
general public license.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
"""


import optparse
import pprint
import xmlrpclib

from func.overlord import command
from func.overlord import client

DEFAULT_PORT = 51234


class ShowHardware(client.command.Command):
    name = "hardware"
    useage = "show hardware details"

    # FIXME: we might as well make verbose be in the subclass
    #      and probably an inc variable while we are at it
    def addOptions(self):
        self.parser.add_option("-v", "--verbose", dest="verbose",
                               action="store_true")
        self.parser.add_option("-p", "--port", dest="port")
        self.parser.add_option("", "--platform", dest="platform",
                               action="store_true")
        self.parser.add_option("", "--memory", dest="memory",
                               action="store_true")
        self.parser.add_option("","--os", dest="os",
                               action="store_true")


    def handleOptions(self, options):
        self.port = DEFAULT_PORT
        if self.options.port:
            self.port = self.options.port

    def parse(self, argv):
        self.argv = argv
        return command.Command.parse(self,argv)

    def do(self,args):

        self.server_spec = self.parentCommand.parentCommand.server_spec
        
        client_obj = client.Client(self.server_spec,
                                   port=self.port,
                                   interactive=False,
                                   verbose=self.options.verbose,
                                   config=self.config)
        
        results = client_obj.run("hardware", "info", [])

        # if the user 
        top_options = ["port","verbose"]
        
        # figure out of the user set any options we care about
        options_set = False

        #ugh, cant find a better way to do this. Look for args
        # that specify a "mode", if we set them, then don't
        # do the big dump

        # also, optparse is annoying -akl
        opt_list = ["--platform", "--memory", "--os"]
        for opt in opt_list:
            if self.parser.has_option(opt):
                options_set = True
        

        for minion in results:
            print "%s:" % minion
            minion_data = results[minion]
            if not options_set:
                pprint.pprint(minion_data)
                continue
            
            if self.options.platform:
                print minion_data['platform']

            if self.options.memory:
                print minion_data["systemMemory"]

            if self.options.os:
                print minion_data["os"]

class Show(client.command.Command):
    name = "show"
    useage = "various simple report stuff"
    subCommandClasses = [ShowHardware]
    def addOptions(self):
        self.parser.add_option("-v", "--verbose", dest="verbose",
                               action="store_true")
        self.parser.add_option("-p", "--port", dest="port",
                               default=DEFAULT_PORT)

    def handleOptions(self, options):
        self.options = options

        self.verbose = options.verbose
        self.port = options.port


    def parse(self, argv):
        self.argv = argv

        return command.Command.parse(self, argv)
        

    def do(self, args):
        pass