|
@@ -0,0 +1,58 @@ |
|
|
|
|
|
""" |
|
|
|
|
|
SSH publisher |
|
|
|
|
|
============= |
|
|
|
|
|
Contains classes and utilities that help publishing a hyde website |
|
|
|
|
|
via ssh/rsync. |
|
|
|
|
|
|
|
|
|
|
|
Usage |
|
|
|
|
|
----- |
|
|
|
|
|
In site.yaml, add the following lines |
|
|
|
|
|
|
|
|
|
|
|
publisher: |
|
|
|
|
|
ssh: |
|
|
|
|
|
type: hyde.ext.publishers.ssh.SSH |
|
|
|
|
|
username: username |
|
|
|
|
|
server: ssh.server.com |
|
|
|
|
|
target: /www/username/mysite/ |
|
|
|
|
|
command: rsync |
|
|
|
|
|
opts: -r -e ssh |
|
|
|
|
|
|
|
|
|
|
|
Note that the final two settings (command and opts) are optional, and the |
|
|
|
|
|
values shown are the default. With this set, generate and publish the site |
|
|
|
|
|
as follows: |
|
|
|
|
|
|
|
|
|
|
|
>$ hyde gen |
|
|
|
|
|
>$ hyde publish -p ssh |
|
|
|
|
|
|
|
|
|
|
|
For the above options, this will lead to execution of the following command, |
|
|
|
|
|
assuming the specified deploy directory is ``deploy/``: |
|
|
|
|
|
|
|
|
|
|
|
rsync -r -e ssh [deploy/] username@ssh.server.com:/www/username/mysite/ |
|
|
|
|
|
|
|
|
|
|
|
""" |
|
|
|
|
|
from hyde.publisher import Publisher |
|
|
|
|
|
|
|
|
|
|
|
from subprocess import Popen, PIPE |
|
|
|
|
|
|
|
|
|
|
|
class SSH(Publisher): |
|
|
|
|
|
def initialize(self, settings): |
|
|
|
|
|
self.settings = settings |
|
|
|
|
|
self.username = settings.username |
|
|
|
|
|
self.server = settings.server |
|
|
|
|
|
self.target = settings.target |
|
|
|
|
|
self.command = getattr(settings, 'command', 'rsync') |
|
|
|
|
|
self.opts = getattr(settings, 'opts', '-r -e ssh') |
|
|
|
|
|
|
|
|
|
|
|
def publish(self): |
|
|
|
|
|
command = "{command} {opts} ./ {username}@{server}:{target}".format( |
|
|
|
|
|
command=self.command, |
|
|
|
|
|
opts=self.opts, |
|
|
|
|
|
username=self.username, |
|
|
|
|
|
server=self.server, |
|
|
|
|
|
target=self.target) |
|
|
|
|
|
deploy_path = self.site.config.deploy_root_path.path |
|
|
|
|
|
|
|
|
|
|
|
cmd = Popen(command, cwd=unicode(deploy_path), stdout=PIPE, shell=True) |
|
|
|
|
|
cmdresult = cmd.communicate()[0] |
|
|
|
|
|
if cmd.returncode: |
|
|
|
|
|
raise Exception(cmdresult) |