def __upgrade_node(self, origin_urls, force=False):
        f_upgrade_log = None
        try:
            f_upgrade_log = open(os.path.join(self.home_dir, 'upgrade_node.log'), 'a')
            custom_installator = self.operator.get_config_value('INSTALLATOR_PATH')
            installator = custom_installator or INSTALLATOR

            for origin_url in origin_urls:
                f_upgrade_log.write('='*80+'\n')
                f_upgrade_log.write('UPGRADE FROM %s ... NOW = %s\n'%(origin_url, datetime.now()))
                f_upgrade_log.write('='*80+'\n')

                params = ['sudo', installator, origin_url]
                if force:
                    params.append('--force')

                ret, cout, cerr = run_command_ex(params)
                f_upgrade_log.write(cout)
                f_upgrade_log.write(cerr)
                if ret != 0:
                    raise Exception(cerr.strip())
            f_upgrade_log.write('Node is upgraded successfully!\n\n')
        finally:
            if f_upgrade_log:
                f_upgrade_log.close()
 def update_node_info(cls):
     ver = 'unknown'
     old_curdir = os.path.abspath(os.curdir)
     try:
         os.chdir(GIT_HOME)
         ret, cout, cerr = run_command_ex(['git', 'describe', '--always', '--tag'])
         if ret != 0:
             raise Exception(cerr)
         ver = cout.strip()
     except Exception, err:
         logger.error('"git describe --always --tag" failed: %s'%err)
    def __upgrade_node(self, origin_url):
        f_upgrage_log = None
        old_curdir = os.path.abspath(os.curdir)
        try:
            if not origin_url:
                raise Exception('origin_url does not found')

            f_upgrage_log = open(os.path.join(self.home_dir, 'upgrade_node.log'), 'a')
            f_upgrage_log.write('='*80+'\n')
            f_upgrage_log.write('UPGRADE FROM %s ... NOW = %s\n'%(origin_url, datetime.now()))
            f_upgrage_log.write('='*80+'\n')

            os.chdir(GIT_HOME)
            os.system('git checkout -- .') #clear local changes...
            os.system('git config --local --replace-all remote.origin.url %s'%origin_url)

            ret, cout, cerr = run_command_ex(['git', 'pull'])
            f_upgrage_log.write('===> git pull finished with code %s\n'%ret)
            f_upgrage_log.write('===> stdout: \n%s'%cout)
            f_upgrage_log.write('===> stderr: \n%s'%cerr)
            if ret != 0:
                raise Exception('git pull failed: %s'%cerr)

            optype = self.operator.get_type()
            ret, cout, cerr = run_command_ex(['./fabnet/bin/upgrade-node', optype])
            f_upgrage_log.write('===> ./fabnet/bin/upgrade-node %s  finished with code %s\n'%(optype, ret))
            f_upgrage_log.write('===> stdout: \n%s'%cout)
            f_upgrage_log.write('===> stderr: \n%s'%cerr)
            if ret != 0:
                raise Exception('upgrade-node script failed!')

            self.update_node_info()

            f_upgrage_log.write('Node is upgraded successfully!\n\n')
        except Exception, err:
            self._throw_event(ET_ALERT, 'UpgradeNodeOperation failed', err)
            logger.error('[UpgradeNodeOperation] %s'%err)