Ejemplo n.º 1
0
 def save_current_for_rollback(self):
     if not path_exists(self.current):
         #for the first time deploy, there is no current link
         return
     path = self.get_rel_id()
     curr = self.current_release()
     mine("echo '%s' > '%s'" % (curr, os.path.join(path, 'PREV')))
Ejemplo n.º 2
0
 def overwrite_to_release(self, src):
     rel = self.get_rel_id()
     if path_exists(rel):
         abort('try to overwrite a exists release:%s->%s' % (src, rel))
     curr = self.current_release(True)
     mine("cp -r '%s' '%s'" % (curr, rel))
     mine("cp -r '%s'/* '%s'" % (src, rel))
     return rel
Ejemplo n.º 3
0
def rollback():
    '''
    rollback to previous version
    '''
    schema = schemas.Cap(myenv.home)
    curr = schema.current_release()
    prev = schema.get_previous()
    schema.switch_current_to(prev)
    mine("rm -rf '%s'" % curr)
Ejemplo n.º 4
0
        def rollback_if_failed():
            bak = self.current+'.bak'
            mine('mv %s %s' % (self.current, bak))
            def rollback():
                mine('mv %s %s' % (bak, self.current))

            try:
                ok = link_to()
            except:
                rollback()
                raise

            if ok:
                mine('rm -r %s' % bak)
            else:
                rollback()
                abort('switch failed, rollback to original')
Ejemplo n.º 5
0
 def get_previous(self, rel=None):
     if rel:
         rel = self.release(rel, True)
     else:
         rel = self.current_release(True)
     prev = os.path.join(rel, 'PREV')
     if path_exists(prev):
         return mine("cat '%s'" % prev).stdout
     abort('no avaiable previous version')
Ejemplo n.º 6
0
 def current_release(self, check_exists=False):
     '''
     real path to which the current symbol link refer
     '''
     path = mine("readlink '%s'" % self.current).stdout
     if not os.path.isabs(path):
         path = os.path.join(os.path.dirname(self.current), path)
     if check_exists and not path_exists(path):
         abort('no such release:%s' % path)
     return path
Ejemplo n.º 7
0
 def rollback():
     mine('mv %s %s' % (bak, self.current))
Ejemplo n.º 8
0
 def link_to():
     with settings(warn_only=True):
         return mine('ln -s %s %s' % (path, self.current)).succeeded
Ejemplo n.º 9
0
 def remove_useless(self, Dfiles):
     rel = self.get_rel_id()
     with cd(rel):
         for name in Dfiles:
             mine('rm -rf %s' % name.base)
Ejemplo n.º 10
0
 def push_to_release(self, src):
     rel = self.get_rel_id()
     if path_exists(rel):
         abort('try to overwrite a exists release:%s->%s' % (src, rel))
     mine("cp -r '%s' '%s'" % (src, rel))
     return rel
Ejemplo n.º 11
0
 def tag_info(self):
     with cd(self.current):
         return {
             'TAG': mine('cat TAG').stdout,
             'REV': mine('cat REV').stdout,
             }
Ejemplo n.º 12
0
 def build(self):
     '''
     build hierarchical directory structure in home
     '''
     for path in self.walk():
         mine('mkdir -p %s' % path)