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
echo $TUNASYNC_LOCAL_DIR
echo $TUNASYNC_WORKING_DIR
echo $TUNASYNC_LOG_FILE
echo $TUNASYNC_UPSTREAM_URL
sleep 5
exit 1

View File

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

View File

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

View File

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

View File

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

View File

@ -83,7 +83,9 @@ class RsyncProvider(MirrorProvider):
def run(self, ctx={}):
_args = self.options
_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)
new_env = os.environ.copy()
@ -96,11 +98,12 @@ class RsyncProvider(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=[]):
super(ShellProvider, self).__init__(name, local_dir, log_dir, log_file,
interval, hooks)
self.upstream_url = str(upstream_url)
self.command = command.split()
def run(self, ctx={}):
@ -110,6 +113,8 @@ class ShellProvider(MirrorProvider):
new_env = os.environ.copy()
new_env["TUNASYNC_MIRROR_NAME"] = self.name
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
_cmd = self.command[0]