def rsync(self, is_need_restart=False): """ 1. 首先要源码服务器同步最新代码 2. rsync到指定服务器 3. 是否需要复制配置文件 4. 是否要重启项目 """ response_text = [] response_err = [] source_server = self.get_svn_source_server() self.ss.connect(source_server) _response_text, _response_err = self.ss.execute( self.svn_command) _response_text.insert(0, 'Login Svn Server: %s' % source_server) response_text.extend(_response_text) response_err.extend(_response_err) _response_text, _response_err = self.ss.execute( self.rsync_command % { 'app_prepath': self.app_prepath}) response_text.extend(_response_text) response_err.extend(_response_err) self.ss.close() # 关闭上一个源码服务器的连接 # 初始化一个ssh对象连接到指定host if self.extra_command or is_need_restart: self.ss = SSH() self.ss.connect(self.host) response_text.extend(['\n', 'Login App Server: %s\n' % self.host]) if self.extra_command: _response_text, _response_err = self.ss.execute( self.extra_command) response_text.extend(_response_text) response_err.extend(_response_err) if is_need_restart: _response_text, _response_err = self.ss.execute( self.restart_command) response_text.extend(_response_text) response_err.extend(_response_err) return response_text, response_err
def __init__(self, project='', app_name='', host='', host_line_type='telecom', extra_command=''): self.ss = SSH() self.host = host self.project = project self.app_name = app_name self.host_line_type = host_line_type self.extra_command = extra_command self.svn_command = "cd /home/tonnnsrc/%(project)s/%(app_name)s/ \ && svn up" % { 'project': project, 'app_name': app_name, } self.rsync_command = "sudo /usr/local/bin/rsync -az --delete \ --progress /home/tonnnsrc/%(project)s/%(app_name)s/trunk/ \ --exclude-from=/home/tonnnsrc/zhimeng/config/trunk/rsync_exclude \ -e 'ssh -p 57222' roy@%(host)s:/home/%%(app_prepath)s/%(app_name)s/" % { 'project': project, 'app_name': app_name, 'host': host,} self.restart_command = "sudo /usr/local/etc/rc.d/%s onerestart" \ % app_name
class Host(object): """ __init__( project='', app_name='', host='', host_line_type='telecom', extra_command='') """ def __init__(self, project='', app_name='', host='', host_line_type='telecom', extra_command=''): self.ss = SSH() self.host = host self.project = project self.app_name = app_name self.host_line_type = host_line_type self.extra_command = extra_command self.svn_command = "cd /home/tonnnsrc/%(project)s/%(app_name)s/ \ && svn up" % { 'project': project, 'app_name': app_name, } self.rsync_command = "sudo /usr/local/bin/rsync -az --delete \ --progress /home/tonnnsrc/%(project)s/%(app_name)s/trunk/ \ --exclude-from=/home/tonnnsrc/zhimeng/config/trunk/rsync_exclude \ -e 'ssh -p 57222' roy@%(host)s:/home/%%(app_prepath)s/%(app_name)s/" % { 'project': project, 'app_name': app_name, 'host': host,} self.restart_command = "sudo /usr/local/etc/rc.d/%s onerestart" \ % app_name @property def app_prepath(self): if self.app_name in ('pimages', 'templates',): return 'htdocs' return 'workspace' def get_svn_source_server(self): if self.host_line_type == 'telecom': return '61.147.97.226' if self.host_line_type == 'unicom': return '211.147.242.64' if self.host_line_type == 'bgp': return '61.147.97.226' return '61.147.97.226' def run_command(self, command): response_text = [] response_err = [] self.ss.connect(self.host) _response_text, _response_err = self.ss.execute(command) response_text.extend(_response_text) response_err.extend(_response_err) self.ss.close() return response_text, response_err def rsync(self, is_need_restart=False): """ 1. 首先要源码服务器同步最新代码 2. rsync到指定服务器 3. 是否需要复制配置文件 4. 是否要重启项目 """ response_text = [] response_err = [] source_server = self.get_svn_source_server() self.ss.connect(source_server) _response_text, _response_err = self.ss.execute( self.svn_command) _response_text.insert(0, 'Login Svn Server: %s' % source_server) response_text.extend(_response_text) response_err.extend(_response_err) _response_text, _response_err = self.ss.execute( self.rsync_command % { 'app_prepath': self.app_prepath}) response_text.extend(_response_text) response_err.extend(_response_err) self.ss.close() # 关闭上一个源码服务器的连接 # 初始化一个ssh对象连接到指定host if self.extra_command or is_need_restart: self.ss = SSH() self.ss.connect(self.host) response_text.extend(['\n', 'Login App Server: %s\n' % self.host]) if self.extra_command: _response_text, _response_err = self.ss.execute( self.extra_command) response_text.extend(_response_text) response_err.extend(_response_err) if is_need_restart: _response_text, _response_err = self.ss.execute( self.restart_command) response_text.extend(_response_text) response_err.extend(_response_err) return response_text, response_err def close(self): self.ss.close()