Shared_Processors/Rsync.py (43 lines of code) (raw):
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Copyright (c) 2015, Facebook, Inc.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree. An additional grant
# of patent rights can be found in the PATENTS file in the same directory.
"""See docstring for Rsync class."""
from __future__ import absolute_import
import subprocess
from autopkglib import Processor, ProcessorError
__all__ = ["Rsync"]
class Rsync(Processor):
"""Rsyncs a path to another path."""
description = __doc__
input_variables = {
"source_path": {
"required": True,
"description": ("Path to file or directory to copy from."),
},
"destination_path": {
"required": True,
"description": ("Path to file or directory to copy to."),
},
"rsync_arguments": {
"required": False,
"description": ("List of arguments passed to rsync directly."),
},
"rsync_path": {
"required": False,
"description": ("Custom path to rsync. Defaults to /usr/bin/rsync."),
},
}
output_variables = {}
__doc__ = description
def main(self):
rsync_location = self.env.get("rsync_path", "/usr/bin/rsync")
rsync_args = self.env.get("rsync_arguments", [])
if isinstance(rsync_args, basestring):
raise ProcessorError("rsync_args must be a list!")
cmd = [rsync_location]
if rsync_args:
cmd.extend(rsync_args)
cmd.extend([self.env["source_path"], self.env["destination_path"]])
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(rout, rerr) = proc.communicate()
if rerr:
raise ProcessorError(rerr)
self.output(rout)
if __name__ == "__main__":
PROCESSOR = Rsync()
PROCESSOR.execute_shell()