
ɪWc           @   sr  d  d k  l  Z  d  d k l Z d  d k l Z d  d k l Z d  d k l Z d  d k Z d  d k Z d  d k	 Z	 d  d k
 Z
 d  d k Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k l Z d  d k l Z d  d	 k l Z d  d
 k l Z d  d k l Z d  d k l Z d e f d     YZ d   Z d   Z e d j o e i d d  Z e   n d S(   i(   t	   BaseClass(   t   Common(   t   InstallHelper(   t   ContentClassHandler(   t   DaoN(   t   InstallComponentCollector(   t   InstallComponent(   t   CMSVersionDeploymentPolicy(   t   FileSync(   t   SSHCommander(   t   EnhancementRulesett   Rollbackc           B   s   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z e d  Z d   Z d   Z d   Z RS(   c         C   sO   t  i |   |  i |  |  i   t i   i   |  _ |  i i   |  _	 d  S(   N(
   R   t   __init__t   loadJsonConfigt
   initPolicyR   t   getPrepackDepolymentPolicyt   getDatabaseConnectiont   _Rollback__connt   cursort   _Rollback__cursor(   t   selft   systemInfoFile(    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyR   '   s
    
c         C   sH   d GH|  i  i d  t i |  i  |  i d  d d  |  i i   d  S(   Ns   Rollback template versions=   update JBPM_PROCESSDEFINITION set PROCESSDEFINITIONTYPEID = 1t   templateVersionst   JBPM_PROCESSDEFINITIONt   ID_(   R   t   executeR   t   updatet	   getConfigR   t   commit(   R   (    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyt   rollbackTemplate.   s    "c         C   sM  | d  j p t i i |  o d  S| d } t i | |  | d } d | GH|  i d | | |  t i |  i d d |  i d d  } | i	 |  } | i	 |  } g  }	 | D] }
 |
 | j o |	 |
 q q ~	 } d | GH| i
 |  |  i |  |  i | | |  t i |  i |  i d	  d
 d d  |  i i   d  S(   Ns
   _orig_.xmls   _export_.xmls   export current ruleset to s   -101t   cmst   usert   passwords   to be delete rule set ids: %st   ruleSetStatust   TRE_RULESETt	   RULESETIDt   RULENAME(   t   Nonet   ost   patht   existst   shutilt   copyfilet   exportRulest   Rulesetst   configt   getUuidsFromXmlt   deleteRulSetsByUuidt   updateProfileIdt   importRulesFromXmlR   R   R   R   R   R   (   R   t   origFilePatht   usernameR    t   orgRuleSetExportPatht   curRuleSetExportPatht   ruleSetst   orgRuleSetIdst   curRuleSetIdst   _[1]t   idt   toBeDeleteRuleSetIds(    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyt   rollbackRuleSet4   s"    !

	(2	%c         C   s   t    } | i |  d S(   sU   
        Description: Update the ME profile id with the actual profile name 
        N(   R
   t   replaceWithProfileId(   R   t   rulesetPatht   enhancement(    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyR0   M   s    	c   	      C   sV  d GHy|  i  d  } t i |  i d  } g  } | D] } | | d q7 ~ } g  } | D]" } | d | j o | | q\ q\ ~ } x | D]} } |  i | d  ob | d d j oQ d | d GH|  i i d | d  d t |  GHt i |  i | d	 d  q q W|  i i	   Wn2 t
 j
 o& } t i   GHd
 GH|  i i   n Xd  S(   Ns   rollback resource groupt   resourceGroupss2   SELECT RESOURCEGROUPID,NAME FROM TTV_RESOURCEGROUPt   RESOURCEGROUPIDt   NAMEt   ClustersD   UPDATE jbpm_node SET resourcegroupid=NULL WHERE resourcegroupid = %ss   delete resource group: t   TTV_RESOURCEGROUPs    FAILED TO ROLLBACK RESOURCEGROUP(   R   R   t   exportR   t/   _Rollback__existsRelativeRecordForResourceGroupR   t   strt   deleteR   R   t	   Exceptiont	   tracebackt
   format_exct   rollback(	   R   t   org_recourceGroupst   cur_recourceGroupsR9   t   rgt	   org_rgIdst   _[2]t   durtyRecourceGroupst   e(    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyt   rollbackRecourceGroupT   s$    %6 &!c         C   sL   d GHy |  i  |  i d   Wn& t j
 o } t i   GHd GHd  SXd  S(   Ns#   rollback resource groups allocationt   resourceGroupsAllocations,   FAILED TO ROLLBACK RESOURCEGROUPS ALLOCATION(   t   updateResourceGroupsAllocationR   RI   RJ   RK   (   R   RS   (    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyt    rollbackResourceGroupsAllocationh   s    c         C   s   d | } |  i  i |  |  i  i   d } | d j o t Sd | } |  i  i |  |  i  i   d } | d j o t St Sd  S(   Nse   SELECT COUNT(*) FROM JBPM_TOKEN WHERE NODE_ IN (SELECT ID_ FROM JBPM_NODE WHERE RESOURCEGROUPID = %s)i    s7   SELECT COUNT(*) FROM JBPM_LOG WHERE RESOURCEGROUPID =%s(   R   R   t   fetchonet   Truet   False(   R   t   resourceGruopIdt   sqlt   rowCount(    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyt&   __existsRelativeRecordForResourceGroupq   s    

c   	      C   s1  y d GH|  i  d  } t i |  i d  } g  } | D] } | | d q7 ~ } g  } | D]" } | d | j o | | q\ q\ ~ } x` | D]X } |  i | d  o= | d d j o, d t |  GHt i |  i | d d  q q W|  i i   Wn2 t	 j
 o& } t
 i   GHd	 GH|  i i   n Xd  S(
   Ns   rollback resource typet   resourceTypessI   select RESOURCETYPEID,NAME,RESOURCECONNECTIONTYPEID from TTV_RESOURCETYPEt   RESOURCETYPEIDRB   RC   s   delete resource type: t   TTV_RESOURCETYPEs   FAILED TO ROLLBACK RESOURCETYPE(   R   R   RE   R   t.   _Rollback__existsRelativeRecordForResourceTypeRG   RH   R   R   RI   RJ   RK   RL   (	   R   t   org_recourceTypest   cur_recourceTypesR9   t   rtt	   org_rtIdsRQ   t   durtyRecourceTypesRS   (    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyt   rollbackResourceType   s     %6 &!c         C   s7   d | } |  i  i |  |  i  i   d } | d j S(   Ns@   SELECT COUNT(*) FROM TTV_RESOURCEGROUP WHERE RESOURCETYPEID = %si    (   R   R   RX   (   R   t   resourceTypeIdR\   R]   (    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyt%   __existsRelativeRecordForResourceType   s    
c         C   s   t  i |  i  i   d  S(   N(   R   t   getReportInstallerR-   t   configureCategoryAndReports(   R   (    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyt   rollBackReports   s    c         C   sc  d GH|  i  d  } | oDg  } | D]4 } t t i d | d t i   o | | q& q& ~ } g  } | D]4 } t t i d | d t i   o | | qn qn ~ } g  } | D]4 } t t i d | d t i   o | | q q ~ } g  }	 | D]5 } t t i d | d t i   o |	 | q q ~	 }
 |
 | | | } |  i |  n d  S(   Ns   rollback queriest   rollBackQueriess	   drop viewt   QUERYs   drop sequences
   drop tablet   drop(   R   t   boolt   ret   matcht   It   configureDatabase(   R   t   sqlsR9   t   qt   drop_view_sqlsRQ   t   drop_sequence_sqlst   _[3]t   drop_table_sqlst   _[4]t
   others_qls(    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyt   rollbackQueries   s    HHHIc         C   sq   d GH|  i  d  } | GH| oM x9 | D]1 } t i |  i | d | d t | d   q' W|  i i   n d  S(   Ns   rollback QueriesDatat   queriesDatat   datat   TABLEt
   ID_COLUMNS(   R   R   R   R   t   tupleR   R   (   R   R   t   dictObj(    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyt   rollbackQueriesData   s     /c         C   s]   d GH|  i  d  } | o> x; | D]/ } t i | |  i d d |  i d d  q" Wn d  S(   Ns   rollback content classest   contentClassBackupPathsR   R   R    (   R   R   t   importContentClassR-   (   R   t   contentClassPathst   xmlPath(    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyt   rollbackContentClasses   s     c         C   s   |  i  d  } | ow t | d t xd | D]X } y t i |  | d GHWq- t j
 o) } | i t i j o | d GHq q- Xq- Wn d  S(   Nt   directoriesToRemovet   reverses    directory was deleteds    directory not empty(   R   t   sortedRY   R&   t   rmdirt   OSErrort   errnot	   ENOTEMPTY(   R   R   t   dt   ex(    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyt   rollbackCreatedDirectories   s     c         C   s    |  i    } |  i d |  d S(   s2   
            roll back prepack info files
        t   prepackVersionInfoFileToDeleteN(   t   getPrepackInfoBackupDirt   _rollbackFiles(   R   t   prepackInfoBackupDir(    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyt   rollbackPrepackVersionInfo   s    c         C   s   d GH|  i  d  } | d  j o d  Sd  } x| D]} | d } | d } |  i  |  } | d  j p t |  d j o t d |   n t i | } t i i |  } t i i	 |  p t i
 |  n t i |  i   | |  x | D] }	 d |	 d GHz y t |	 d |	 d	 |	 d
  } d | | f }
 | i |
 |	 d  \ } } | GH| d j o  t d | d |	 d   n Wn t j
 o
   n XWd  | o | i   n Xq Wt i i |  o t i |  q3 t i | d t q3 Wd  S(   Ns   Rollback remote filest   remoteFilesToRestoret
   remotePatht   remoteNodeConfigNamei    s%   Required config entry has not found: s$   Start to rollback a file to remote: t   ipR   R    s   su root -c "\cp -rf %s %s"t
   rootPasswds   Failed to rollback file [s   ] on t   ignore_errors(   R   R%   t   lenRI   R   t   COMMON_SHARED_FOLDERR&   R'   t   dirnameR(   t   makedirsR)   R*   t   getFileBackupDirR	   t   execute_interactivet   logoutt   isfilet   removet   rmtreeRY   (   R   t   itemst   cmdt   it   rmtPatht   cfgNamet   remoteNodest   shared_fileR   t   rndt   rollback_cmdt   statust   output(    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyt   rollbackRemoteFiles   sF     

   $c         C   st  |  i  | d t |  i   t i   |  i d |  i  |  i |  i  |  i d  |  i d d d g  |  i	 d d d g  |  i
   |  i   |  i   |  i |  i d   |  i |  i d   |  i |  i d	   t i   d
 j  o |  i |  i d   n |  i   |  i   |  i   |  i   |  i   |  i   |  i d d g  |  i   |  i   |  i |  i d   |  i |  i d   |  i   |  i  |  i d  |  i! d d |  i! d d  |  i" |  i d   |  i# |  i d   |  i d  o|  i d  p8 |  i d  i$   d j o |  i d  i$   d j o |  i d  GHd } | t% i& d } t% i' i( |  ps t% i' i) |  p t% i* |  n t% i' i+ t% i' i, t-   } t% i' i+ |  t% i& d } t. i/ | |  n t0 |  i d   i1   } | p t2 Sn |  i d d d g  |  i3 d d d g  |  i d  t S(   Nt   mergeWithExistings   Rollback for s   
R   t   workflowt   tomcatt   selectorKeyst   customFieldst	   resourcesg      @t   alertst   partnerst
   meprofilest   ruleSetsBackupPathR   R    t   sitest   rollbackPostScriptst   cluster_app_nodest   ignoreFileSycnt   Yt   YESs+   /opt/tandbergtv/cms/prepack/filesync/scripts   sync.pysG   components/BASE/conf/opt/tandbergtv/cms/prepack/filesync/script/sync.pys   Rollback complete.(4   R   RY   t   initParametersR    t   setOverrideR   t   namet   backupVersiont   stopServiceInClusterNodest   stopLocalServicest   rollbackFilesR   R   t   insertSelectorKeysR   t   insertCustomFieldsGroupst   insertResourcesR   t   getCMSVersiont   insertAlertst   restartAlertsRT   Rh   RW   R   R~   t   restartLocalServicest   waitForOtherServersAvailableRm   t   insertPartnerst   handleMeSubsProfilesR   R<   R-   t   insertSitest   executeScriptst   upperR&   t   sepR'   R(   t   isdirR   R   t   realpatht   __file__R)   R*   R   t   dosyncRZ   t   restartServiceInClusterNodes(   R   t   rollbackJsonConfigt   sync_script_dirt   sync_scriptt   running_script_dirt   to_copy_scriptt   sync_successed(    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyt	   _rollback   sf    













2	c         C   s   t  i   i   d GHd  S(   Ns   clean database connection(   R   R   t   cleanDatabaseConnection(   R   (    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyt   cleanC  s    c         C   s  |  i  i   p |  i d  t S|  i  i   |  _ |  i  i |  i  \ } } | o! |  i d | d | d  nn t i   |  i d  t i d  |  i	   t i d  |  i
 |  i  t i   |  i  i d  p t S|  i   d	 |  i } |  i  i t i |  i t i  y^ |  i |  } | o@ |  i  i t i |  i t i  |  i   |  i  i |  i  n | SWn t j
 o t i   GHt SXd  S(
   NsX   No backup is currently available for roll back, please contact the system administrator.s4   System is rolling back current Prepack from version s    to version t   .sY   System will roll back from current status to last snapshot, please refer below as detail:s   Current Prepack Status: s   Last Snapshot Prepack Status: sN   Are you sure you want to proceed? Type 'yes' to proceed, type 'no' to skip... t   /(   t   helpert   getLatestBackupVersionR   RZ   R   t   getUpgradeFromToR   t   printSeperateLinet   printHighlightMessaget    printCurrentPrepackInstallStatust   printBackupPrepackInstallStatust   promptYesOrNot   getBackupDirt   ROLLBACK_JSONt
   logActionst   ROLLBACKt   STARTR   t   FINISHR   t   rollBackToLastVersionRI   RJ   RK   (   R   t   autot   fromVersiont	   toVersiont   rollbackJsonConfigPatht   result(    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyRL   G  s8    !



c         C   sD   |  i  i   } |  i  i   } |  i  i   } |  i | | |  d  S(   N(   R   t   getCurrentPrepackVersiont"   getPatchesForCurrentPrepackVersiont   loadInstalledComponentst   printInstallStatus(   R   t   prepackVersiont   patchest   installedComponents(    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyR   j  s    c         C   sM   |  i  i |  } |  i  i |  } |  i  i |  } |  i | | |  d  S(   N(   R   t   getBackupPrepackVersiont!   getPatchesForBackupPrepackVersiont   loadBackupInstalledComponentsR  (   R   R   R  R  R  (    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyR   p  s    c         C   s{   d } | o
 | } n d | GHd } | o d i  |  } n d | GHd GH| o t   i t i |   n d GHd  S(   Nt   Scratchs   Prepack Version: R%   t   ,s   Installed Patches: s   Installed Components: (   t   joinR   t   printInstallComponentsR   t   fromJsonObject(   R   R  R  R  t   preparckVersionDisplayt   patchesDisplay(    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyR  v  s    
		(   t   __name__t
   __module__R   R   R<   R0   RT   RW   RF   Rh   Rb   Rm   R~   R   R   R   R   R   R   R   RZ   RL   R   R   R  (    (    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyR   %   s,   																		+	H	#		c         C   s	   |  GHd  S(   N(    (   t	   outputstr(    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyR     s    c          C   sa  t  i i d  }  |  d j o% t d  t d  t i d  n t i   } | i d d d d	 d
 d d d d d | i	   \ } } d i
 |  GHd  } z yA t | i  } | i   } | p t d  t i d  n WnQ t j
 o( t d  t d  t i d  n t j
 o t i   GHn XWd  | o | i   n Xt i d  d  S(   Nt   LOGNAMEt   roots   You must run this as user root.s
   Exiting...i   s   -is
   --sys-infot   actiont   storet   typet   stringt   destR   t   helps%   Configuration for system information.s   options: {0}s   Rollback Failed Or Skipped.i   t    s   <CTRL>-C detected...Exiting...i    (   R&   t   environt   getR   t   syst   exitt   optparset   OptionParsert
   add_optiont
   parse_argst   formatR%   R   R   RL   t   KeyboardInterruptRI   RJ   RK   R   (   t	   userlogint	   optparsert   optionst   argst   rolR   (    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyt   main  s8    

 


t   __main__s   rollback.logt   a(   R    R   R   t   FileAssemblerR   t   dbutilsR   R,   t   TeeR   R&   R  R   Rr   R)   RJ   R   R   R   t   filesyncR   R	   R
   R   R   R+  R  t   logFile(    (    (    sb   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/rollback.pyt   <module>   s4    f		!