You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
2.9 KiB

#!/usr/bin/env python
# Copyright (C) 2013 Splunk Inc. All Rights Reserved.
""" btool.py
This is a wrapper for the btool executable which knows how to arrange to run
btool against a diag, and *should* be maintained so that we can just run the
script without having to know all the special tricks.
Eg, if you have a diag in the dir 'diag', and splunk in '/opt/splunk' you should
be able to do.
# . /opt/splunk/bin/setSplunkEnv
# diag/script/btool.py indexes list
or
# diag/script/btool.py -s /opt/splunk indexes list
"""
import os
import sys
import shutil
debug = False
def usage():
text = "usage: %s -s <path/to/splunk_home> [btool opts ...] <btool args...>\n" % sys.argv[0]
text += " or if run via spulnk cmd python, just: %s [btool opts ...] <btool args...>" % sys.argv[0]
sys.exit(text)
if debug:
sys.stderr.write("fired with args: %s\n" % sys.argv)
# If we didn't get given a SPLUNK_HOME, try to go find one
if "SPLUNK_HOME" not in os.environ:
if "-s" not in sys.argv:
err = "No SPLUNK_HOME path provided.\n"
sys.stderr.write(err)
usage()
else:
splhome_flag_i = sys.argv.index("-s")
if (splhome_flag_i+1) == len(sys.argv):
usage()
splunk_home = sys.argv[splhome_flag_i + 1]
if not os.path.isdir(splunk_home):
err = "Provided path %s doesn't seem to be a directory.\n"
sys.stderr.write(err % splunk_home)
usage()
# rerun ourselves with splunk python
script_absolute_path = os.path.abspath(sys.argv[0])
command = os.path.join(splunk_home, "bin", "splunk")
args = [command, "cmd", "python", script_absolute_path] + sys.argv[1:]
if debug:
sys.stderr.write("execing ourselves.\n")
os.execv(command, args)
# by this point, we're running with a splunk python
splunk_home = os.environ["SPLUNK_HOME"]
btool_path = os.path.join(splunk_home, "bin", "btool")
script_path = sys.argv[0]
# diag/script/btool.py -> diag/
diag_dir = os.path.dirname(os.path.dirname(script_path))
# may not exist, it's a search pool if it does
pool_dir = os.path.join(diag_dir, "search_pool")
btool_opts = sys.argv[1:]
# take our flag out of the args (if present)
if "-s" in btool_opts:
splhome_flag_i = btool_opts.index("-s")
if (splhome_flag_i+1) == len(btool_opts):
usage()
del btool_opts[splhome_flag_i]
del btool_opts[splhome_flag_i]
# default to looking at diag/etc, unless user picked somewhere else?
manual_control = False
for arg in btool_opts:
if arg.startswith('--dir') or arg.startswith('--searchpool'):
manual_control = True
break
if not manual_control:
diag_etc = ""
if os.path.isdir(pool_dir):
btool_opts.insert(0, '--searchpool=' + pool_dir)
diag_etc = os.path.join(diag_dir, 'etc')
btool_opts.insert(0, '--dir=' + diag_etc)
if debug:
sys.stderr.write("going to execv: %s, %s\n" % (btool_path, btool_opts))
# run btool!
os.execv(btool_path, [btool_path] + btool_opts)

Powered by BW's shoe-string budget.