OSDN Git Service

refactoring...
[ti2/ti2.git] / ti2.py
1 #!/usr/bin/env python
2 # vim: tabstop=4 shiftwidth=4 softtabstop=4
3 # -*- coding: utf-8 -*-
4 #
5 #   ti2.py : List informations of the TAP devices for running VMs
6 #
7 #
8
9 __version__ = '1.2'
10
11 import sys
12 from optparse import OptionParser, OptionGroup
13 from linkpair.collect.collector import Collector
14 from linkpair.formatter.grapheasy import GraphEasyFormatter
15 from linkpair.formatter.springy import SpringyFormatter
16 from linkpair.formatter.springy_raphael import SpringyRaphaelFormatter
17 from linkpair.formatter.graphviz_tb import GraphvizTBFormatter
18 from linkpair.utils.common import CommonUtils
19 from linkpair.exporter.JSON import JsonExporter
20 from linkpair.importer.JSON import JsonImporter
21 from linkpair.timer.collect_task import CollectTask
22 import api_server
23
24
25 def print_linkpair_records(linkpairs):
26     util.debug_out("start print_linkpair_records()")
27     formatter.set_linkpairs(linkpairs)
28     for linkpair in formatter.format_linkpairs():
29         util.message_out(linkpair)
30     util.debug_out("end print_linkpair_records()")
31
32
33 def collect_linkpairs(opts, util, formatter):
34     def collect_func():
35         col = Collector(opts, util, formatter)
36         if opts.remote_sshkey is not None:
37             col.set_remote_sshkey(opts.remote_sshkey)
38             col.connect_ssh()
39         if opts.remote_password is not None:
40             col.set_remote_password(opts.remote_password)
41             col.connect_ssh()
42         col.run()
43         return col.get_linkpairs()
44     return collect_func
45
46 if __name__ == "__main__":
47     # init program options
48     p = OptionParser(version="ver:%s" % __version__)
49     g1 = OptionGroup(p, "Remote connection",
50                      "connect to a remote system via SSH")
51     g1.add_option('-r', '--remote', dest='remote_desc',
52                   help="specify user's name and hostname, port number (ex. -r user@hostname:22)", metavar="REMOTE_DESC")
53     g1.add_option('-p', '--password', dest='remote_password',
54                   help="specify user's SSH password", metavar="PASSWORD")
55     g1.add_option('-k', '--sshkey', dest='remote_sshkey',
56                   help="specify user's SSH private-key file", metavar="FILE")
57     p.add_option_group(g1)
58     p.add_option('-f', '--format', dest='format',
59                  choices=['g', 'graph-easy', 's', 'springy',
60                           'r', 'springy-raphael', 't', 'graphviz-tb'],
61                  default="graphviz-tb",
62                  help="specify output format [FORMAT: g/graph-easy, s/springy, r/springy-raphael, t/graphviz-tb]",
63                  metavar="FORMAT")
64     p.add_option('-d', '--debug', dest='debug', action="store_true", default=False,
65                  help="enable debug output")
66     p.add_option('-e', '--export_file', dest='export_file',
67                  help="export linkpairs to json file", metavar="FILE")
68     p.add_option('-x', '--export_stdout', dest='export_stdout', action="store_true", default=False,
69                  help="export linkpairs to stdout")
70     p.add_option('-i', '--import_file', dest='import_file',
71                  help="import json file as linkpairs", metavar="FILE")
72     p.add_option('-a', '--api_server', dest='api_server', action="store_true", default=False,
73                  help="enable Web API server")
74     g2 = OptionGroup(p, "Collector Agent flags",
75                      "disable Collector Agents")
76     g2.add_option(
77         '--disable_ovs_agent', dest='disable_ovs_agent', action="store_true", default=False,
78         help="disable Open vSwitch collector agent")
79     g2.add_option(
80         '--disable_linux_agent', dest='disable_linux_agent', action="store_true", default=False,
81         help="disable linux OS collector agent")
82     g2.add_option(
83         '--disable_linuxnet_agent', dest='disable_linuxnet_agent', action="store_true", default=False,
84         help="disable linux Network collector agent")
85     g2.add_option(
86         '--disable_linuxbridge_agent', dest='disable_linuxbridge_agent', action="store_true", default=False,
87         help="disable linux bridge collector agent")
88     g2.add_option(
89         '--disable_linuxvlan_agent', dest='disable_linuxvlan_agent', action="store_true", default=False,
90         help="disable linux vlan collector agent")
91     g2.add_option(
92         '--disable_libvirt_agent', dest='disable_libvirt_agent', action="store_true", default=False,
93         help="disable libvirt collector agent")
94     g2.add_option(
95         '--disable_namespace_agent', dest='disable_namespace_agent', action="store_true", default=False,
96         help="disable network namespace collector agent")
97     g2.add_option(
98         '--disable_sspvxlan_agent', dest='disable_sspvxlan_agent', action="store_true", default=False,
99         help="disable SSP VXLAN collector agent")
100     g2.add_option(
101         '--disable_veth_agent', dest='disable_veth_agent', action="store_true", default=False,
102         help="disable veth collector agent")
103     p.add_option_group(g2)
104     p.add_option(
105         '-v', '--verbose', dest='verbose', action="store_true", default=False,
106         help="verbose output.")
107     (opts, args) = p.parse_args()
108     util = CommonUtils()
109     util.set_opts(opts)
110     util.debug_out("init program options")
111
112     if opts.format == "g" or opts.format == "graph-easy":
113         formatter = GraphEasyFormatter(util)
114     elif opts.format == "s" or opts.format == "springy":
115         formatter = SpringyFormatter(util)
116     elif opts.format == "r" or opts.format == "springy-raphael":
117         formatter = SpringyRaphaelFormatter(util)
118     elif opts.format == "t" or opts.format == "graphviz-tb":
119         formatter = GraphvizTBFormatter(util)
120     else:
121         formatter = GraphvizTBFormatter()
122     util.debug_out("formatter: " + str(formatter))
123
124     if opts.import_file is not None:
125         importer = JsonImporter(util, opts.import_file, formatter)
126         importer.run()
127         linkpairs = importer.get_linkpairs()
128     else:
129         collect_func = collect_linkpairs(opts, util, formatter)
130         linkpairs = collect_func()
131
132     if opts.export_stdout:
133         exporter = JsonExporter(util, linkpairs)
134         util.message_out(exporter.run())
135         sys.exit(0)
136     elif opts.api_server:
137         collect_task = CollectTask(collect_func, 30)
138         collect_task.start()
139         api_server.util = util
140         api_server.collect_func = collect_func
141         api_server.start_app()
142     else:
143         print_linkpair_records(linkpairs)