2 # vim: tabstop=4 shiftwidth=4 softtabstop=4
3 # -*- coding: utf-8 -*-
5 # ti2.py : List informations of the TAP devices for running VMs
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
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()")
33 def collect_linkpairs(opts, util, formatter):
35 col = Collector(opts, util, formatter)
36 if opts.remote_sshkey is not None:
37 col.set_remote_sshkey(opts.remote_sshkey)
39 if opts.remote_password is not None:
40 col.set_remote_password(opts.remote_password)
43 return col.get_linkpairs()
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]",
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")
77 '--disable_ovs_agent', dest='disable_ovs_agent', action="store_true", default=False,
78 help="disable Open vSwitch collector agent")
80 '--disable_linux_agent', dest='disable_linux_agent', action="store_true", default=False,
81 help="disable linux OS collector agent")
83 '--disable_linuxnet_agent', dest='disable_linuxnet_agent', action="store_true", default=False,
84 help="disable linux Network collector agent")
86 '--disable_linuxbridge_agent', dest='disable_linuxbridge_agent', action="store_true", default=False,
87 help="disable linux bridge collector agent")
89 '--disable_linuxvlan_agent', dest='disable_linuxvlan_agent', action="store_true", default=False,
90 help="disable linux vlan collector agent")
92 '--disable_libvirt_agent', dest='disable_libvirt_agent', action="store_true", default=False,
93 help="disable libvirt collector agent")
95 '--disable_namespace_agent', dest='disable_namespace_agent', action="store_true", default=False,
96 help="disable network namespace collector agent")
98 '--disable_sspvxlan_agent', dest='disable_sspvxlan_agent', action="store_true", default=False,
99 help="disable SSP VXLAN collector agent")
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)
105 '-v', '--verbose', dest='verbose', action="store_true", default=False,
106 help="verbose output.")
107 (opts, args) = p.parse_args()
110 util.debug_out("init program options")
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)
121 formatter = GraphvizTBFormatter()
122 util.debug_out("formatter: " + str(formatter))
124 if opts.import_file is not None:
125 importer = JsonImporter(util, opts.import_file, formatter)
127 linkpairs = importer.get_linkpairs()
129 collect_func = collect_linkpairs(opts, util, formatter)
130 linkpairs = collect_func()
132 if opts.export_stdout:
133 exporter = JsonExporter(util, linkpairs)
134 util.message_out(exporter.run())
136 elif opts.api_server:
137 collect_task = CollectTask(collect_func, 30)
139 api_server.util = util
140 api_server.collect_func = collect_func
141 api_server.start_app()
143 print_linkpair_records(linkpairs)