mirror of
https://github.com/octoleo/lsyncd.git
synced 2024-12-04 19:03:17 +00:00
added lftp example
This commit is contained in:
parent
993ef08eb2
commit
7fbf97cd21
163
examples/lftp.lua
Normal file
163
examples/lftp.lua
Normal file
@ -0,0 +1,163 @@
|
||||
--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
-- lftp.lua
|
||||
--
|
||||
-- Syncs with lftp
|
||||
-- A (Layer 1) configuration.
|
||||
--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
lftp = {
|
||||
|
||||
-----
|
||||
-- Spawns rsync for a list of events
|
||||
--
|
||||
action = function(inlet)
|
||||
|
||||
-- gets all events ready for syncing
|
||||
local elist = inlet.getEvents(
|
||||
function(event)
|
||||
return event.etype ~= 'Init' and event.etype ~= 'Blanket'
|
||||
end
|
||||
)
|
||||
|
||||
-----
|
||||
-- replaces filter rule by literals
|
||||
--
|
||||
local function sub(p)
|
||||
if not p then
|
||||
return
|
||||
end
|
||||
return p:gsub('%?', '\\?'):
|
||||
gsub('%*', '\\*'):
|
||||
gsub('%[', '\\['):
|
||||
gsub('%]', '\\]')
|
||||
end
|
||||
|
||||
local config = inlet.getConfig()
|
||||
|
||||
local commands = elist.getPaths(
|
||||
function(etype, path1, path2)
|
||||
if etype == 'Delete' then
|
||||
if string.byte(path1, -1) == 47 then
|
||||
return 'rm -r '..
|
||||
config.targetdir..sub(path1)
|
||||
else
|
||||
return 'rm '..
|
||||
config.targetdir..sub(path1)
|
||||
end
|
||||
elseif
|
||||
etype == 'Create' or
|
||||
etype == 'Modify' or
|
||||
etype == 'Attrib'
|
||||
then
|
||||
if string.byte(path1, -1) == 47 then
|
||||
return 'mirror -R '..
|
||||
config.source..sub(path1)..' '..
|
||||
config.targetdir..sub(path1)
|
||||
else
|
||||
return 'put '..
|
||||
config.source..sub(path1)..
|
||||
' -o '..config.targetdir..sub(path1)
|
||||
end
|
||||
end
|
||||
end
|
||||
)
|
||||
|
||||
if #commands == 0 then
|
||||
spawn(elist, '/bin/true')
|
||||
return
|
||||
end
|
||||
|
||||
commands = table.concat(commands, ';\n')
|
||||
|
||||
log('Normal', 'Calling lftp with commands\n', commands)
|
||||
|
||||
spawn(elist, '/usr/bin/lftp',
|
||||
'<', commands,
|
||||
'-u', config.user..','..config.pass, config.host
|
||||
)
|
||||
end,
|
||||
|
||||
-----
|
||||
-- Spawns the recursive startup sync
|
||||
--
|
||||
init = function(event)
|
||||
local config = event.config
|
||||
local inlet = event.inlet
|
||||
local excludes = inlet.getExcludes()
|
||||
local delete = nil
|
||||
if config.delete then delete = { '--delete', '--ignore-errors' }; end
|
||||
|
||||
if #excludes ~= 0 then
|
||||
error('lftp does not work with excludes', 4)
|
||||
end
|
||||
|
||||
log('Normal', 'recursive startup lftp: ', config.source, ' to host: ', config.host)
|
||||
|
||||
spawn(event, '/usr/bin/lftp',
|
||||
'-c',
|
||||
'open -u '..config.user..','..config.pass..' '..config.host..'; '..
|
||||
'mirror -R -e '..config.source..' '..config.targetdir..';'
|
||||
)
|
||||
end,
|
||||
|
||||
-----
|
||||
-- Checks the configuration.
|
||||
--
|
||||
prepare = function(config)
|
||||
|
||||
if not config.host then
|
||||
error('lftps needs "host" configured', 4);
|
||||
end
|
||||
|
||||
if not config.user then
|
||||
error('lftps needs "user" configured', 4);
|
||||
end
|
||||
|
||||
if not config.pass then
|
||||
error('lftps needs "pass" configured', 4);
|
||||
end
|
||||
|
||||
if not config.targetdir then
|
||||
error('lftp needs "targetdir" configured', 4)
|
||||
end
|
||||
|
||||
if config.target then
|
||||
error('lftp needs NOT "target" configured', 4)
|
||||
end
|
||||
|
||||
if config.exclude then
|
||||
error('lftp does not work with excludes', 4)
|
||||
end
|
||||
|
||||
if config.rsyncOpts then
|
||||
error('lftp needs NOT "rsyncOpts" configured', 4)
|
||||
end
|
||||
|
||||
if string.sub(config.targetdir, -1) == '/' then
|
||||
error('please make targetdir not end with a /', 4)
|
||||
end
|
||||
|
||||
end,
|
||||
|
||||
-----
|
||||
-- Exit codes for rsync.
|
||||
--
|
||||
exitcodes = {
|
||||
[ 0] = 'ok',
|
||||
[ 1] = 'ok',
|
||||
},
|
||||
|
||||
-----
|
||||
-- Default delay
|
||||
--
|
||||
delay = 1,
|
||||
}
|
||||
|
||||
sync{
|
||||
lftp,
|
||||
host = 'localhost',
|
||||
user = 'test',
|
||||
pass = 'test',
|
||||
source = 'src',
|
||||
targetdir = '.',
|
||||
}
|
Loading…
Reference in New Issue
Block a user