Page MenuHomeClusterLabs Projects

crm_utils.py.in
No OneTemporary

crm_utils.py.in

#!/bin/env python
#
#
# pingd OCF Resource Agent
# Records (in the CIB) the current number of ping nodes a
# cluster node can connect to.
#
# Copyright (c) 2006 Andrew Beekhof
# All Rights Reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of version 2 of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# Further, this software is distributed without any warranty that it is
# free of the rightful claim of any third person regarding infringement
# or the like. Any license provided herein, whether implied or
# otherwise, applies only to this software file. Patent licenses, if
# any, provided herein do not apply to combinations of this program with
# other software, or any other product whatsoever.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
#
#######################################################################
import os
import sys
import getopt
import readline
import traceback
from popen2 import Popen3
crm_topic = "crm"
topic_stack = [ crm_topic ]
hist_file = os.environ.get('HOME')+"/.crm_history"
global_opts = {}
def exit_(code=0):
if global_opts["interactive"]:
log_info("Exiting... ")
try:
readline.write_history_file(hist_file)
log_debug("Wrote history to: "+hist_file)
except:
log_debug("Couldnt write history to: "+hist_file)
sys.exit(code)
def log_debug(log):
if global_opts.has_key("debug") and global_opts["debug"]:
print log
def log_dev(log):
if global_opts.has_key("devlog") and global_opts["devlog"]:
print log
def log_info(log):
print log
def log_err(log):
print "ERROR: "+log
def set_topic(name):
global crm_topic
if crm_topic != name:
log_dev("topic: %s->%s" % (crm_topic, name))
crm_topic = name
def os_system(cmd, print_raw=False):
log_debug("Performing command: "+cmd)
p = Popen3(cmd, None)
p.tochild.close()
result = p.fromchild.readlines()
p.fromchild.close()
p.wait()
if print_raw:
for line in result:
print line.rstrip()
return result
#
# Creates an argv-style array (that preserves quoting) for use in shell-mode
#
def create_argv(text):
args = []
word = []
index = 0
total = len(text)
in_word = False
in_verbatum = False
while index < total:
finish_word = False
append_word = False
#log_debug("processing: "+text[index])
if text[index] == '\\':
index = index +1
append_word = True
elif text[index].isspace():
if in_verbatum or in_word:
append_word = True
else:
finish_word = True
elif text[index] == '"':
if in_verbatum:
append_word = True
else:
finish_word = True
if in_word:
in_word = False
else:
in_word = True
elif text[index] == '\'':
finish_word = True
if in_verbatum:
in_verbatum = False
else:
in_verbatum = True
else:
append_word = True
if finish_word:
if word:
args.append(''.join(word))
word = []
elif append_word:
word.append(text[index])
#log_debug("Added %s to word: %s" % (text[index], str(word)))
index = index +1
if in_verbatum or in_word:
text=""
if word:
text=" after: '%s'"%''.join(word)
raise QuotingError("Un-matched quoting%s"%text, args)
elif word:
args.append(''.join(word))
return args
def init_readline(func):
readline.set_completer(func)
readline.parse_and_bind("tab: complete")
readline.set_history_length(100)
try:
readline.read_history_file(hist_file)
except:
pass
def fancyopts(args, options, state):
long = []
short = ''
map = {}
dt = {}
for s, l, d, c in options:
pl = l.replace('-', '_')
map['-'+s] = map['--'+l] = pl
state[pl] = d
dt[pl] = type(d)
if not d is None and not callable(d):
if s: s += ':'
if l: l += '='
if s: short = short + s
if l: long.append(l)
opts, args = getopt.getopt(args, short, long)
for opt, arg in opts:
if dt[map[opt]] is type(fancyopts): state[map[opt]](state,map[opt],arg)
elif dt[map[opt]] is type(1): state[map[opt]] = int(arg)
elif dt[map[opt]] is type(''): state[map[opt]] = arg
elif dt[map[opt]] is type([]): state[map[opt]].append(arg)
elif dt[map[opt]] is type(None): state[map[opt]] = 1
return args

File Metadata

Mime Type
text/x-script.python
Expires
Thu, Oct 16, 12:10 AM (1 d, 6 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2438311
Default Alt Text
crm_utils.py.in (4 KB)

Event Timeline