TUNASYNC_WORKING_DIR and TUNASYNC_UPSTREAM_URL as env to shell provider

This commit is contained in:
bigeagle 2014-11-22 19:26:39 +08:00
parent bf86cdafbf
commit 680940dfe3
6 changed files with 31 additions and 22 deletions

View File

@ -1,5 +1,6 @@
#!/bin/bash #!/bin/bash
echo $TUNASYNC_LOCAL_DIR echo $TUNASYNC_WORKING_DIR
echo $TUNASYNC_LOG_FILE echo $TUNASYNC_LOG_FILE
echo $TUNASYNC_UPSTREAM_URL
sleep 5 sleep 5
exit 1 exit 1

View File

@ -15,7 +15,6 @@ ctrl_addr = "/tmp/tunasync.sock"
[btrfs] [btrfs]
service_dir = "{mirror_root}/_current/{mirror_name}" service_dir = "{mirror_root}/_current/{mirror_name}"
working_dir = "{mirror_root}/_working/{mirror_name}" working_dir = "{mirror_root}/_working/{mirror_name}"
gc_root = "{mirror_root}/_garbage/"
gc_dir = "{mirror_root}/_garbage/_gc_{mirror_name}_{{timestamp}}" gc_dir = "{mirror_root}/_garbage/_gc_{mirror_name}_{{timestamp}}"
# [[mirrors]] # [[mirrors]]
@ -43,6 +42,7 @@ local_dir = "/mnt/sdb1/mirror/archlinux/current/"
name = "arch4" name = "arch4"
provider = "shell" provider = "shell"
command = "./shell_provider.sh" command = "./shell_provider.sh"
upstream = "https://pypi.python.org/"
# log_file = "/tmp/arch4-{date}.log" # log_file = "/tmp/arch4-{date}.log"
use_btrfs = false use_btrfs = false

View File

@ -31,6 +31,8 @@ def run_job(sema, child_q, manager_q, provider, **settings):
status = "syncing" status = "syncing"
manager_q.put(("UPDATE", (provider.name, status))) manager_q.put(("UPDATE", (provider.name, status)))
ctx = {} # put context info in it ctx = {} # put context info in it
ctx['current_dir'] = provider.local_dir
try: try:
for hook in provider.hooks: for hook in provider.hooks:
hook.before_job(provider=provider, ctx=ctx) hook.before_job(provider=provider, ctx=ctx)

View File

@ -56,7 +56,7 @@ class LogLimitHook(JobHook):
sh.mv(log_file, log_file_save) sh.mv(log_file, log_file_save)
except: except:
pass pass
self.create_lin(log_link, log_file_save) self.create_link(log_link, log_file_save)
def ensure_log_dir(self, log_dir): def ensure_log_dir(self, log_dir):
if not os.path.exists(log_dir): if not os.path.exists(log_dir):

View File

@ -60,26 +60,27 @@ class MirrorConfig(object):
def to_provider(self, hooks=[]): def to_provider(self, hooks=[]):
if self.provider == "rsync": if self.provider == "rsync":
provider = RsyncProvider( provider = RsyncProvider(
self.name, name=self.name,
self.upstream, upstream_url=self.upstream,
self.local_dir, local_dir=self.local_dir,
self.log_dir, log_dir=self.log_dir,
self.use_ipv6, useIPv6=self.use_ipv6,
self.password, password=self.password,
self.exclude_file, exclude_file=self.exclude_file,
self.log_file, log_file=self.log_file,
self.interval, interval=self.interval,
hooks, hooks=hooks,
) )
elif self.options["provider"] == "shell": elif self.options["provider"] == "shell":
provider = ShellProvider( provider = ShellProvider(
self.name, name=self.name,
self.command, command=self.command,
self.local_dir, upstream_url=self.upstream,
self.log_dir, local_dir=self.local_dir,
self.log_file, log_dir=self.log_dir,
self.interval, log_file=self.log_file,
hooks interval=self.interval,
hooks=hooks
) )
return provider return provider

View File

@ -83,7 +83,9 @@ class RsyncProvider(MirrorProvider):
def run(self, ctx={}): def run(self, ctx={}):
_args = self.options _args = self.options
_args.append(self.upstream_url) _args.append(self.upstream_url)
_args.append(self.local_dir)
working_dir = ctx.get("current_dir", self.local_dir)
_args.append(working_dir)
log_file = self.get_log_file(ctx) log_file = self.get_log_file(ctx)
new_env = os.environ.copy() new_env = os.environ.copy()
@ -96,11 +98,12 @@ class RsyncProvider(MirrorProvider):
class ShellProvider(MirrorProvider): class ShellProvider(MirrorProvider):
def __init__(self, name, command, local_dir, log_dir, def __init__(self, name, command, upstream_url, local_dir, log_dir,
log_file="/dev/null", interval=120, hooks=[]): log_file="/dev/null", interval=120, hooks=[]):
super(ShellProvider, self).__init__(name, local_dir, log_dir, log_file, super(ShellProvider, self).__init__(name, local_dir, log_dir, log_file,
interval, hooks) interval, hooks)
self.upstream_url = str(upstream_url)
self.command = command.split() self.command = command.split()
def run(self, ctx={}): def run(self, ctx={}):
@ -110,6 +113,8 @@ class ShellProvider(MirrorProvider):
new_env = os.environ.copy() new_env = os.environ.copy()
new_env["TUNASYNC_MIRROR_NAME"] = self.name new_env["TUNASYNC_MIRROR_NAME"] = self.name
new_env["TUNASYNC_LOCAL_DIR"] = self.local_dir new_env["TUNASYNC_LOCAL_DIR"] = self.local_dir
new_env["TUNASYNC_WORKING_DIR"] = ctx.get("current_dir", self.local_dir)
new_env["TUNASYNC_UPSTREAM_URL"] = self.upstream_url
new_env["TUNASYNC_LOG_FILE"] = log_file new_env["TUNASYNC_LOG_FILE"] = log_file
_cmd = self.command[0] _cmd = self.command[0]