Python
fabric

Fabricでrsyncでroot権限で送る(だけに限らないオプションの設定方法)

More than 1 year has passed since last update.

tomotaka_ito さんの Python - fabricで高速なファイル転送 - Qiita でもいいのだけど、extra_optsで設定した方が見通しがいいと思うのです。

Fabricのrsync_projectextra_optsでは、メソッドの引数で指定できないrsyncコマンドの引数を指定することができます。

--rsync-pathは転送先で利用するrsyncコマンドを指定することが可能で、たとえば、複数バージョンのrsyncを利用するなどの場合に指定することができます(そんなことってあるのかな???)。また、ここで、当該ユーザでのsudoの権限をつけた状態でsudo rsyncを指定すれば、転送先ではsudo経由のroot権限で送ることが可能になるわけです。

これはなかなか、Fabric でやる場合に限らず、便利です。

from fabric.contrib.project import rsync_project

@task
def rsync_test():
    rsync_project(
        local_dir='./mydir',
        remote_dir='/usr/local/destination/mydir',
        exclude=['.DS_Store', '*.tmp'],
        extra_opts="--rsync-path='sudo rsync'"
    )

もちろんあらかじめ、sudoの設定はしておきましょうね。

追記

もちろん、こういうのも出来ますよ。
差分で更新されたものだけアップロードとか。

from fabric.contrib.project import rsync_project

@task
def rsync_test():
    rsync_project(
        local_dir='./mydir',
        remote_dir='/usr/local/destination/mydir',
        exclude=['.DS_Store', '*.tmp', '.git/', '.gitignore'],
        extra_opts="--link-dest ../old/ --rsync-path='sudo rsync'"
    )