本文整理汇总了Python中synctool.lib.error函数的典型用法代码示例。如果您正苦于以下问题:Python error函数的具体用法?Python error怎么用?Python error使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了error函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: start_multiplex
def start_multiplex(address_list):
'''run ssh -M to each node in address_list'''
global PERSIST
# allow this only on the master node because of security considerations
if synctool.param.MASTER != synctool.param.HOSTNAME:
verbose('master %s != hostname %s' % (synctool.param.MASTER,
synctool.param.HOSTNAME))
error('not running on the master node')
sys.exit(-1)
if PERSIST is None:
# use default from synctool.conf
PERSIST = synctool.param.CONTROL_PERSIST
else:
# spellcheck the parameter
m = synctool.configparser.PERSIST_TIME.match(PERSIST)
if not m:
error("invalid persist value '%s'" % PERSIST)
return
# make list of nodenames
nodes = [NODESET.get_nodename_from_address(x) for x in address_list]
# make list of pairs: (addr, nodename)
pairs = zip(address_list, nodes)
synctool.multiplex.setup_master(pairs, PERSIST)
示例2: main
def main():
# type: () -> None
'''run the program'''
param.init()
sys.stdout = synctool.unbuffered.Unbuffered(sys.stdout) # type: ignore
sys.stderr = synctool.unbuffered.Unbuffered(sys.stderr) # type: ignore
try:
get_options()
except synctool.range.RangeSyntaxError as err:
error(str(err))
sys.exit(1)
if OPT_AGGREGATE:
if not synctool.aggr.run(MASTER_OPTS):
sys.exit(-1)
sys.exit(0)
config.init_mynodename()
address_list = NODESET.addresses()
if not address_list:
print 'no valid nodes specified'
sys.exit(1)
ping_nodes(address_list)
示例3: compare
def compare(self, _src_path, dest_stat):
# type: (str, SyncStat) -> bool
'''see if devs are the same'''
if not self.exists:
return False
# dest_stat is a SyncStat object and it's useless here
# I need a real, fresh statbuf that includes st_rdev field
try:
dest_stat = os.lstat(self.name)
except OSError as err:
error('error checking %s : %s' % (self.name, err.strerror))
return False
# Note: mypy triggers false errors here
# Also, no luck with Union[SyncStat, posix.stat_result]
# In any case, for VNodeChrDev and VNodeBlkDev,
# the self.src_stat is of type posix.stat_result
src_major = os.major(self.src_stat.st_rdev) # type: ignore
src_minor = os.minor(self.src_stat.st_rdev) # type: ignore
dest_major = os.major(dest_stat.st_rdev) # type: ignore
dest_minor = os.minor(dest_stat.st_rdev) # type: ignore
if src_major != dest_major or src_minor != dest_minor:
stdout('%s should have major,minor %d,%d but has %d,%d' %
(self.name, src_major, src_minor, dest_major, dest_minor))
unix_out('# updating major,minor %s' % self.name)
terse(synctool.lib.TERSE_SYNC, self.name)
return False
return True
示例4: main
def main():
'''run the program'''
synctool.param.init()
sys.stdout = synctool.unbuffered.Unbuffered(sys.stdout)
sys.stderr = synctool.unbuffered.Unbuffered(sys.stderr)
try:
cmd_args = get_options()
except synctool.range.RangeSyntaxError as err:
error(str(err))
sys.exit(1)
if OPT_AGGREGATE:
if not synctool.aggr.run(MASTER_OPTS):
sys.exit(-1)
sys.exit(0)
synctool.config.init_mynodename()
address_list = NODESET.addresses()
if not address_list:
error('no valid nodes specified')
sys.exit(1)
if OPT_MULTIPLEX:
start_multiplex(address_list)
elif CTL_CMD != None:
control_multiplex(address_list, CTL_CMD)
else:
run_dsh(address_list, cmd_args)
示例5: compare
def compare(self, src_path, dest_stat):
'''see if devs are the same'''
if not self.exists:
return False
# dest_stat is a SyncStat object and it's useless here
# I need a real, fresh statbuf that includes st_rdev field
try:
dest_stat = os.lstat(self.name)
except OSError as err:
error('error checking %s : %s' % (self.name, err.strerror))
return False
src_major = os.major(self.src_stat.st_rdev)
src_minor = os.minor(self.src_stat.st_rdev)
dest_major = os.major(dest_stat.st_rdev)
dest_minor = os.minor(dest_stat.st_rdev)
if src_major != dest_major or src_minor != dest_minor:
stdout('%s should have major,minor %d,%d but has %d,%d' %
(self.name, src_major, src_minor, dest_major, dest_minor))
unix_out('# updating major,minor %s' % self.name)
terse(synctool.lib.TERSE_SYNC, self.name)
return False
return True
示例6: main
def main():
'''run the program'''
param.init()
sys.stdout = synctool.unbuffered.Unbuffered(sys.stdout)
sys.stderr = synctool.unbuffered.Unbuffered(sys.stderr)
try:
files = get_options()
except synctool.range.RangeSyntaxError as err:
error(str(err))
sys.exit(1)
if OPT_AGGREGATE:
if not synctool.aggr.run(MASTER_OPTS):
sys.exit(-1)
sys.exit(0)
config.init_mynodename()
address_list = NODESET.addresses()
if not address_list:
error('no valid nodes specified')
sys.exit(1)
run_remote_copy(address_list, files)
示例7: option_combinations
def option_combinations(opt_diff, opt_single, opt_reference, opt_erase_saved,
opt_upload, opt_suffix, opt_fix):
# type: (bool, bool, bool, bool, bool, bool, bool) -> None
'''some combinations of command-line options don't make sense;
alert the user and abort
'''
if opt_erase_saved and (opt_diff or opt_reference or opt_upload):
error("option --erase-saved can not be combined with other actions")
sys.exit(1)
if opt_upload and (opt_diff or opt_single or opt_reference):
error("option --upload can not be combined with other actions")
sys.exit(1)
if opt_suffix and not opt_upload:
error("option --suffix can only be used together with --upload")
sys.exit(1)
if opt_diff and (opt_single or opt_reference or opt_fix):
error("option --diff can not be combined with other actions")
sys.exit(1)
if opt_reference and (opt_single or opt_fix):
error("option --reference can not be combined with other actions")
sys.exit(1)
示例8: do
def do(func, work):
"""run func in parallel"""
if synctool.param.SLEEP_TIME != 0:
synctool.param.NUM_PROC = 1
# 'part' becomes amount of work for each rank to do
len_work = len(work)
if len_work <= synctool.param.NUM_PROC:
num_proc = len_work
part = 1
else:
num_proc = synctool.param.NUM_PROC
part = len_work / num_proc
if len_work % num_proc != 0:
part += 1
# spawn pool of workers
for rank in xrange(num_proc):
try:
pid = os.fork()
except OSError as err:
error("failed to fork(): %s" % err.strerror)
return
if pid == 0:
# child process
worker(rank, func, work, part)
sys.exit(0)
# parent process
ALL_PIDS.add(pid)
# wait for all workers to exit
join()
示例9: stat
def stat(self, path):
'''get the stat() information for a pathname'''
if not path:
self.entry_exists = False
self.mode = self.uid = self.gid = self.size = None
return
try:
statbuf = os.lstat(path)
except OSError as err:
# could be something stupid like "Permission denied" ...
# although synctool should be run as root
if err.errno != errno.ENOENT:
# "No such file or directory" is a valid error
# when the destination is missing
error('stat(%s) failed: %s' % (path, err.strerror))
self.entry_exists = False
self.mode = self.uid = self.gid = self.size = None
else:
self.entry_exists = True
self.mode = statbuf.st_mode
self.uid = statbuf.st_uid
self.gid = statbuf.st_gid
self.size = statbuf.st_size
示例10: ping_node
def ping_node(addr):
# type: (str) -> None
'''ping a single node'''
node = NODESET.get_nodename_from_address(addr)
verbose('pinging %s' % node)
unix_out('%s %s' % (param.PING_CMD, addr))
packets_received = 0
# execute ping command and show output with the nodename
cmd = '%s %s' % (param.PING_CMD, addr)
cmd_arr = shlex.split(cmd)
try:
f = subprocess.Popen(cmd_arr, shell=False, bufsize=4096,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT).stdout
except OSError as err:
error('failed to run command %s: %s' % (cmd_arr[0], err.strerror))
return
with f:
for line in f:
line = line.strip()
# argh, we have to parse output here
#
# on BSD, ping says something like:
# "2 packets transmitted, 0 packets received, 100.0% packet loss"
#
# on Linux, ping says something like:
# "2 packets transmitted, 0 received, 100.0% packet loss, " \
# "time 1001ms"
arr = line.split()
if len(arr) > 3 and (arr[1] == 'packets' and
arr[2] == 'transmitted,'):
try:
packets_received = int(arr[3])
except ValueError:
pass
break
# some ping implementations say "hostname is alive"
# or "hostname is unreachable"
elif len(arr) == 3 and arr[1] == 'is':
if arr[2] == 'alive':
packets_received = 100
elif arr[2] == 'unreachable':
packets_received = -1
if packets_received > 0:
print '%s: up' % node
else:
print '%s: not responding' % node
示例11: _remote_stat
def _remote_stat(up):
'''Get stat info of the remote object
Returns array of RemoteStat data, or None on error
'''
# use ssh connection multiplexing (if possible)
cmd_arr = shlex.split(synctool.param.SSH_CMD)
use_multiplex = synctool.multiplex.use_mux(up.node)
if use_multiplex:
synctool.multiplex.ssh_args(cmd_arr, up.node)
list_cmd = os.path.join(synctool.param.ROOTDIR, 'sbin',
'synctool_list.py')
cmd_arr.extend(['--', up.address, list_cmd, up.filename])
verbose('running synctool_list %s:%s' % (up.node, up.filename))
unix_out(' '.join(cmd_arr))
try:
proc = subprocess.Popen(cmd_arr, shell=False, bufsize=4096,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
except OSError as err:
error('failed to run command %s: %s' % (cmd_arr[0], err.strerror))
return None
out, err = proc.communicate()
if proc.returncode == 255:
error('ssh connection to %s failed' % up.node)
return None
elif proc.returncode == 127:
error('remote list command failed')
return None
# parse synctool_list output into array of RemoteStat info
data = []
for line in out.split('\n'):
if not line:
continue
arr = line.split()
if arr[0] == 'error:':
# relay error message
error(' '.join(arr[1:]))
return None
try:
remote_stat = RemoteStat(arr)
except ValueError:
error('unexpected output from synctool_list %s:%s' %
(up.node, up.filename))
return None
verbose('remote: %r' % remote_stat)
data.append(remote_stat)
return data
示例12: make_tempdir
def make_tempdir():
'''create temporary directory (for storing rsync filter files)'''
if not os.path.isdir(synctool.param.TEMP_DIR):
try:
os.mkdir(synctool.param.TEMP_DIR, 0750)
except OSError as err:
error('failed to create tempdir %s: %s' %
(synctool.param.TEMP_DIR, err.strerror))
sys.exit(-1)
示例13: rsync_include_filter
def rsync_include_filter(nodename):
# type: (str) -> str
'''create temp file with rsync filter rules
Include only those dirs that apply for this node
Returns filename of the filter file
'''
try:
(fd, filename) = tempfile.mkstemp(prefix='synctool-',
dir=param.TEMP_DIR)
except OSError as err:
error('failed to create temp file: %s' % err.strerror)
sys.exit(-1)
try:
f = os.fdopen(fd, 'w')
except OSError as err:
error('failed to open temp file: %s' % err.strerror)
sys.exit(-1)
# include $SYNCTOOL/var/ but exclude
# the top overlay/ and delete/ dir
with f:
f.write('# synctool rsync filter')
# set mygroups for this nodename
param.NODENAME = nodename
param.MY_GROUPS = config.get_my_groups()
# slave nodes get a copy of the entire tree
# all other nodes use a specific rsync filter
if nodename not in param.SLAVES:
if not (_write_overlay_filter(f) and
_write_delete_filter(f) and
_write_purge_filter(f)):
# an error occurred;
# delete temp file and exit
f.close()
try:
os.unlink(filename)
except OSError:
# silently ignore unlink error
pass
sys.exit(-1)
# Note: sbin/*.pyc is excluded to keep major differences in
# Python versions (on master vs. client node) from clashing
f.write('- /sbin/*.pyc\n'
'- /lib/synctool/*.pyc\n'
'- /lib/synctool/pkg/*.pyc\n')
# Note: remind to delete the temp file later
return filename
示例14: copy_stat
def copy_stat(self):
'''set access and mod times'''
if not synctool.lib.DRY_RUN and synctool.param.SYNC_TIMES:
try:
verbose('copystat: %s => %s' % (self.src_path, self.name))
shutil.copystat(self.src_path, self.name)
except OSError as err:
error('failed to set utime on %s : %s' % (self.name,
err.strerror))
terse(synctool.lib.TERSE_FAIL, 'utime %s' % self.name)
示例15: set_times
def set_times(self, atime, mtime):
'''set access and mod times'''
# only used for purge --single
if not synctool.lib.DRY_RUN:
try:
os.utime(self.name, (atime, mtime))
except OSError as err:
error('failed to set utime on %s : %s' % (self.name,
err.strerror))
terse(synctool.lib.TERSE_FAIL, 'utime %s' % self.name)