
Wc           @   s+  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 Z d  d k Z d  d k Z d  d k l Z d  d k l Z d e f d	     YZ d
   Z e d j o e   n d S(   i(   t   ContentClassHandler(   t   ElementTree(   t	   BaseClass(   t   CommonN(   t   FileSync(   t   CMSVersionDeploymentPolicyt   Deployc           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 d   Z d   Z d   Z d   Z d   Z d   Z RS(   c         C   s]   t  i |   t t    t |  j o |  i | t  n
 | |  _ |  i   d  |  _	 d  S(   N(
   R   t   __init__t   typet   strt   loadJsonConfigt   Truet   configt   initParameterst   Nonet   combinedPath(   t   selft   inputfileOrObject(    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyR   &   s    	
c         C   s   | |  _  d  S(   N(   R   (   R   t   path(    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyt   setCombinedConfigJsonPath/   s    c         C   sy   d } | d } | d } t  i |  } t d   |  } t |  p d  St  i | d | d | d | d  d  S(   Ns   /opt/tandbergtv/cms/workflows	   /rejecteds
   /templatesc         S   s
   d  |  j S(   s   Target Title(    (   t   t(    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyt   <lambda>8   s    t   /i    (   t   ost   listdirt   filtert   lent   rename(   R   t   workflowt   rejectedt	   templatest   dirlistt   tt(    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyt   checkTargetTitle2   s    

c         C   s0   | o% x" | D] } |  i  | d  q Wn d  S(   NR   (   t   deleteConfigFilesViaDirectory(   R   t   configFileToRemoveDirectoriest   configFileDir(    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyt   deleteConfigFiles>   s     c         C   s   x t  i t  i i |   D]h \ } } } xV | D]N } |  i | | t  i i | |   } t  i i |  o t  i |  q2 q2 Wq Wd  S(   N(   R   t   walkR   t   abspatht   getTargetFilePatht   joint   existst   remove(   R   t	   directoryt	   targetDirR   t   dirst   filest   filenamet   targetFilePath(    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyR"   C   s      $c         C   s3   | o( x% | D] } |  i  | d |  q Wn d  S(   NR   (   t!   copyResourceFilesAndReplaceParams(   R   t   configFileDirectoriest   paramsR$   (    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyt   copyAllResouceFilesJ   s     c         C   s  |  i  d  xt i t i i |   D]\ } } } x | D] } t i i | |  } |  i | | |  }	 t i i |	  pA t i |	  |	 i	 d  d j o |  i
 d d |	 t  q q? q? Wx(t i | d  D]}
 |
 i d  pt i i | |
  } t |  i i   } z | ~ } | i   } Wd  QXd | j oU | d  j	 oD t |  o7 x4 | D]( } | i d | d	 d
 | d  } qhWqn |  i | | |  } | d } t | d  i i   } zJ | ~ } | i |  | i	 d  d j o |  i
 d d | t  n Wd  QXt i i |  p% t i | |  |  i  d |  qt i t |  i    i   } t i t |  i    i   } | | j o2 |  i |  t i | |  |  i  d |  qt i |  q q Wq) Wd  S(   NsE   Copying all file from resource directory and replace with parameters.s   /opt/i    t   nobodyt   *s   .svnt    s   ${t   NAMEt   }t   VALUEs   .tmpt   ws   File not exists, create file: s*   File changed, backup and over write file: (   t   outputR   R&   R   R'   R)   R(   R*   t   mkdirt   findt   chownR   t   fnmatchR   t
   startswitht   opent   __exit__t	   __enter__t   readR   R   t   replacet   writet   shutilt   movet   hashlibt   md5t	   hexdigestt
   backupFileR+   (   R   R,   R-   R4   R   R.   R/   t   dirt   dirpatht   saveDirpathR0   t   filepatht   _[1]t   ft   st   paramt   finalFilepatht   tempSaveFileptht   _[2]t
   oldFilemd5t
   newFilemd5(    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyR2   O   sL      " # .
& !!c         C   s   | | | i  |  t |  S(   N(   t   indexR   (   R   R,   R-   RR   (    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyR(   v   s    c         C   s  | d  j p t |  o d  Sg  } g  } x< | D]4 } |  i |  o | i |  q3 | i |  q3 Wd GH| GHd GH| GHd } t | d  i   } t | d  } x | D] } | i   p | i |  q n t } t }	 xA | D]9 }
 x0 | i	   D]" } | |
 d j o t
 } Pq q Wq WxA | D]9 } x0 | i	   D]" } | | d j o t
 }	 PqAqAWq.W| o/ |	 o' d | d d	 !| f GH| i |  q q Wx- | D]% } | i d
 | d | d f  qW| i   d  S(   Ns%   The following hosts will be deleted: s.   The following hosts will be added or updated: s
   /etc/hostst   rR<   R9   s   add host(%s) to %si    is   
%s	%sR;   (   R   R   t   getIsDeletet   appendt   filet	   readlinest   stripRH   t   Falset   rsplitR   t   close(   R   t   hostst   toBeDeletedHostst   toBeAddedHostst   hostt   fnt   existingHostst   newHostFilet   deletet   updatet   toBeDeletedHostt   hostPartt   toBeAddedHost(    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyt   configureResourceHostsy   sX           #c   	      C   sa  t  i GH| d  j o d  St i   } |  i | i  x$| D]} | i d  p
 d  } n | d } | i d  p
 d  } n | d } | i d  p
 d } n | d } | i d  p
 d } n | d } | i d  p
 d } n | d } | i | d | d t | d	  | d
 | d | | | | | | d t | d  |  i	 |   q= Wd  S(   Nt   commandParametert   messageParametert
   routingDirt    t
   failureDirt   looseFileNamePatternR   R   t	   frequencyt   processClasst
   messageUIDt   eventst   threads(
   R   t
   isOverrideR   t   WatchFolderConfigurationRN   t   filePatht   has_keyt   handleR	   R^   (	   R   t   watchfolderst   wfct   wfRs   Rt   Ru   Rw   Rx   (    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyt   configureWatchfolders   s.     









c         C   sg   | d  j o d  St i   } |  i | i  x2 | D]* } | i | d | d |  i |   q5 Wd  S(   NR9   t   GROUPS(   R   t   DistTemplateConfigurationRN   R   R   R^   (   R   R   t   dtt   template(    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyt   configureDistTemplates   s     c         C   sn   | d  j o d  St i   } |  i | i  x9 | D]1 } | i | d | d | d |  i |   q5 Wd  S(   Nt   HOSTt   USERt   PASSWORD(   R   t   FTPConfigurationRN   R   R   R^   (   R   t	   ftpConfigt   fcRT   (    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyt   configureFTPConfig   s     c         C   sN   |  i  d  } | d  j	 o. | i   d j o t i d d  i   GHn d  S(   Nt	   setupSFTPt   trues   sh scripts/SetupSFTPUpload.shR]   (   t	   getConfigR   t   lowerR   t   popenRF   (   R   R   R   (    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyt   setupSFTPUpload   s     c         C   s:  | o/t  i   d j  o |  i d d d |  i d d i d d  d |  i d d	 d
 |  i d d d |  i d d } t i d | d d i |  d d  i   GHq6t  i   i	   } x\ | D]T } d | GHt
 | d  i i   } z& | ~ } | i   i | i    Wd  QXq W| i   n d  S(   Ng      @t   oraclet   userR   t   passwordt   $s   \$t   @Ri   t   :t   portt   sids   sh scripts/DataPatch.sh s    "t    t   "R]   s   Starting to execute datapath: (   R   t   getCMSVersionR   RG   R   R   R)   RF   t   getPrepackDepolymentPolicyt   getDatabaseConnectionRC   RD   RE   t   cursort   executet   commit(   R   t   sqlFilest
   dbSettingst
   connectiont   sfRS   RT   (    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyt   doDataPatch   s    i4 	&#c      
   C   sZ  t    } | i d  | i   i d  } d } d } x/ | D]' } | i d d j o | i } q> q> Wx/ | D]' } | i d d j o | i } qp qp W| d j o | d j o |  i   } t i i	 | d |  p7 t i
 | d |  |  i d	 d	 | d | t  n d
 | } |  i | d | |  t i d d d	 d	 | f  n d  S(   Ns4   /opt/tandbergtv/cms/workflow/preferences/batonqc.xmlt   entryRv   t   keys   report.enables   report.symbolic.link.nameR   R   R6   s8   /opt/tandbergtv/watchpoint/tomcat/webapps/baton-reports/s   chown %s%s:%s %ss   -h (   R   t   parset   getroott   getiteratort   attribt   textt   getMountPrefixR   R   R*   R>   R@   R   t   createSymlinkR   (   R   t   treet   entriest   reportEnablet   symbolicLinkNamet   et   mountPrefixt   linkFilePath(    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyt    configureBatonReportSymbolicLink   s*    	  "
c         C   s$  t    } | i d  | i   i d  } d } d } x/ | D]' } | i d d j o | i } q> q> W| d j o | d j o |  i   } t i i	 | d |  p7 t i
 | d |  |  i d	 d	 | d | t  n d
 } |  i | d | |  t i d d d	 d	 | f  n d  S(   Ns5   /opt/tandbergtv/cms/workflow/preferences/verifier.xmlR   Rv   s   verifier-reportsR   s   report.enableR   R   R6   s:   /opt/tandbergtv/watchpoint/tomcat/webapps/verifier-reportss   chown %s%s:%s %ss   -h (   R   R   R   R   R   R   R   R   R   R*   R>   R@   R   R   R   (   R   R   R   R   R   R   R   R   (    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyt   configureVerifierReport  s"    	 "c         C   s\   t    } | i d  | i   i d  } x* | D]" } | i d d j o | i Sq2 Wd  S(   Ns3   /opt/tandbergtv/cms/workflow/preferences/system.xmlR   R   s   mount.prefix(   R   R   R   R   R   R   (   R   R   R   R   (    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyR   #  s    	 c         C   sC   d d | } d | } |  i  d  |  i  |  t i |  d  S(   Ns8   /bin/rpm -Uvh --ignoreos --nodeps --force --replacepkgs s   rpms/%ss   command=s   RPM installing.(   R=   R   t   system(   R   t   rpmNamet
   RPMCMDLINEt	   outputstr(    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyt
   installRpm+  s
    
c         C   s  |  i  d d d t  |  i d g  |  i d  t i d  t i d  |  i d  d d	 d
 d d d d g } t |  i |  |  i d  |  i  d d d t  |  i d  d d d d d g } t |  i |  x$ | D] } |  i  d d | t  q W|  i |  i	  d  S(   Nt   roots   /etc/vsftpdt   vsftpds   Configure ftpusers ads and iptvsC   useradd -d /content -m ads -p \$1\$Z6Giw8dM\$inoJyvC6w/7q27ukZabZB.sK   useradd -d /content/ftp -m iptv; (echo iptv123; echo iptv123) | passwd iptvs0   Verify and correct /content required directoriess   /content/adis   /content/unmappeds   /content/mappeds   /content/deriveds   /content/uploadeds   /content/txns_temps   /home/cms/adis   Creating FTP directoriesR6   s#   Creating Content Ingest directoriess   /content/datas   /content/data/temps   /content/data/dists   /content/data/faileds   /content/data/ingest(
   R@   R   t   restartLocalServicesR=   R   R   t   mapt   makeDirR   R   (   R   t   contentDirst   dataDirsR,   (    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyt   initialSetUp2  s6    		 c         C   s   d } t  t i d   } | d j o | Gd GHn x t oy t  t i d   } | d j o
 d GHPn d G| | Gd G| GH| d } t i d  | d	 j o t d
   q8 q8 Wd  S(   Ni    s&   /opt/tandbergtv/cms/workflow/templatess#   templates are not ready, waiting...s   All templates are ready nows   Ingested templates:R   i   i   ih  sY   Templates are not ready!!! please check the path "/opt/tandbergtv/cms/workflow/templates"(   R   R   R   R   t   timet   sleept   RuntimeError(   R   t   retry_timest   countt   cnt_templates(    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyt   waitForAllTemplatesIngested[  s     
c         C   s  |  i  d d } |  i  d d } g  } g  } |  i d  d  j	 o |  i d  } n |  i d  d  j	 o |  i d  } n t |  p t |  oUh  } xE | D]= } | d | i   j o  | i h | d | d 6 q q WxE | D]= } | d | i   j o  | i h | d | d 6 q q Wx| i   D]} g  }	 |  i i   od t i	 |  }
 |
 d j oD d	 t
 |  t i d
  d } t i | |
 | |  | g }	 qn xP | D]H } | | d j o1 |	 g  } | d D] } | | d q~ }	 qqWg  } xP | D]H } | | d j o1 | g  } | d D] } | | d qF~ } qqWd | d t i d
  d } d | d G|	 G| GHt i |	 | |  t i | | | |  t i | | |  |  i i   q=Wn d GHd GHd  S(   Nt   cmsR   R   t   contentClassest   contentClassesToDeleteR9   t   DESCRIPTIONi    t   current_content_class_s   %Y%m%d%H%M%Ss   .xmlt   CONTENTCLASSFILESt   FILENAMEt   final_merged_content_class_t   _s   merge content class for s   : s   Content class no change.s   Import content class completed!(   R   R   R   R   t   keysRn   t   helpert   contentClassEverImportedR    t   getContentClassIdByNameR	   R   t   strftimet
   exportByIdt   mergeContentClassest   addHeadOfContentClasst   importContentClasst!   writeContentClassImportedFlagFile(   R   t   usernameR   t   mer_ct_cls_listt   del_ct_cls_listt   contentClassesListt   mer_ct_cls_itemt   del_ct_cls_itemt   ct_cls_itemt
   mer_ct_clst	   ct_cls_idt   cur_cls_pathRS   t   ct
   del_ct_clsRY   t   xmlPath(    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyR   l  sX     $ $ ! 5 5c         C   s6   t  i   d j o t i   } | i   d GHn d  S(   Ng@s   Database schema update done.(   R   R   t   DatabaseSchemaExecutorR   (   R   t   dse(    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyt   updateDatabaseSchema  s    
c         C   sf  d GHd } | d t  i d  } t i |  t i d | d  t i d | d  t i d	 | d
  t i d | d  | d } t i |  t i d | d |  t i | d | d  t i | d
 | d
  t i | d | d  t i | d  } | i	   t i | d | d  t i d | d | d  t i | d d  d GHd  S(   Ns'   Start to repacking cms ear for CMS 5.2.t   ear_workspaceR   s   %Y%m%d%H%M%Ss4   /opt/tandbergtv/jboss/standalone/deployments/cms.ears   /cms.ears>   /opt/tandbergtv/jboss/standalone/deployments/rulesservices.wars   /rulesservices.wars=   /opt/tandbergtv/jboss/standalone/deployments/siteservices.wars   /siteservices.warsH   /opt/tandbergtv/jboss/standalone/deployments/prepack_device_services.wars   /prepack_device_services.wars   /cms.ear.extracts   unzip s   /cms.ear -d s   /META-INF/application.xmls   /cms-old.ears	   jar -cvf s   /cms.ear -C s    .s%   Finish repacking cms ear for CMS 5.2.(
   R   R   R   t   makedirsRI   RJ   R   t   copyt   CMSEarApplicationXmlt   addPrepackModules(   R   t   ear_workspace_dirt   cur_workspace_dirt   cur_ear_extract_dirt   applicationXMLHandler(    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyt   repackageCMSEarWithPrepackWar  s*    

c         C   s  t  i   p t i   n |  i d |  i  |  i |  i  t  i d  j	 o |  i d t  i  n |  i d  t	 i
   d j  o* |  i d d g  |  i d d g  n! |  i d g  |  i d g  |  i |  i d   |  i d	  } d
 } | d  j	 o t |  o xd | D]\ } y" |  i | d t i |   Wqt i j
 o" |  i d | d  d } qXqW| d j o |  i d  t i d  qn |  i |  i d   |  i d  } g  } | o |  i |  } n |  i d  } | d  j	 o/ t |  o" x | D] } |  i |  q!Wn |  i d  } | d  j	 o/ t |  o" x | D] } |  i |  qlWn |  i d  }	 |	 d  j	 o/ t |	  o" x |	 D] } |  i |  qWn |  i d  }
 |
 d  j	 o/ t |
  o" x |
 D] } |  i |  qWn |  i d  } | o" x | D] } |  i |  q:Wn t  i   p |  i   n | o |  i |  n |  i d  |  i d  } | d  j	 oE t |  o8 x5 | D]) } |  i |  |  i d d | t  qWn t	 i
   d j  o |  i d g  n |  i d g  |  i   |  i    |  i! |  i d   |  i" |  i d   |  i# |  i d   |  i$ |  i d   |  i% |  i d   |  i& |  i d   |  i' |  i d    |  i( |  i d!   |  i) |  i d"   |  i* |  i d#   |  i+   |  i, |  i d$   |  i- |  i d%  |  i d&   |  i. |  i d'   |  i/ |  i d(   |  i0 |  i d)   |  i1 |  i d*   t	 i2 |  i3  |  i4   |  i5 |  i d+   |  i6 |  i d,  |  i3 d d- |  i3 d d.  |  i7   |  i d/  o |  i8   n |  i d0  o |  i9   n |  i |  i d1   |  i: |  i d2   |  i d3  o |  i d4  d5 d  k; } d6 |  i< d7 } | i= | d8 t d9 | i> d: | i? } | i@ iA   } x | D] } |  i |  qW|  i d;  n |  i d<  o |  i d=  p8 |  i d=  iB   d> j oU |  i d=  iB   d? j o9 |  i d<  GHtC |  i d<   iD   } | p tE Sn |  i d@ d d d g  |  iF d@ d d d g  |  i dA  t S(B   Ns   deploy for s   Mode: s   
g      @R   t   tomcatR   t   resourceHostst	   hostnamesi    s    = t   's-   ' is not a resolvable hostname, please fix...i   s
   exiting...t   preInstallationScriptst   AdapterPropertiest   resourceTypeRpmst   resourceGroupRpmst   templateRpmst	   otherRpmst
   commonRpmss   Creating required directoriest   directoriesToCreateR6   t   rpmsToDeletet   templateToDeletet   ruleSetsToDeletet   selectorKeyst   customFieldst	   resourcest   resourceGroupsAllocationt   sitest   alertst
   meprofilest   configFileToDeleteDirst   configFileDirsR4   t   distTemplatesR   R   t   queriest   partnerst   ruleSetsR   R   t   batonReportEnablet   verifierReportEnablet   postInstallationScriptst   dataPatchSqlFilest   configMigrationStepss%   Start configuration file migration...isY   sh /opt/tandbergtv/cms/scripts/config-migration-tool-cmd/bin/config-migration-tool.sh -i s    -st   shellt   stdoutt   stderrs&   Finish configuration file migration...t   cluster_app_nodest   ignoreFileSycnt   Yt   YESR   s   Deployment complete.(G   R   t   isFreshInstallR   t   setOverrideR=   t   namet   installerVersiont   installModeR   R   R   t   stopServiceInClusterNodest   stopLocalServicesRr   R   R   t   sockett   gethostbynamet   gaierrort   syst   exitt   executeScriptst   backupFilesToRestoreR   t   isUpgradeModeR   t   restoreBackupFilesR   R@   R   R   R   t   waitForOtherServersAvailablet   unstallRpmst   disableProcessDefinitionst   deleteRuleSetst   insertSelectorKeyst   insertCustomFieldsGroupst   insertResourcest   updateResourceGroupsAllocationt   insertSitest   insertAlertst   handleMeSubsProfilest   restartAlertsR%   R5   R   R   R   t   configureDatabaset   installAndConfigureReportsR   R   t   insertPartnerst   importRulest   sortRuleSetR   R   R   t
   subprocessR   t   Popent   PIPEt   STDOUTR#  Ra   t   upperR   t   dosyncRc   t   restartServiceInClusterNodes(   R   t   dnshostnamest   failuret   hostnamet   adapterPropst   backupFilePairsR  RT   R  R	  R
  R  R  R,   RJ  t   cmdt   pt   linest   linet   sync_successed(    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyt   deploy  s     "	      


"
2
' !	(   t   __name__t
   __module__R   R   R!   R%   R"   R5   R2   R(   Rr   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R[  (    (    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyR   %   s0   								'		6	"											)		,		c          C   s:   t  d  }  t  d  }  |  i   t i   |  i   d  S(   Ns8   /root/prepack-aio-master-SNAPSHOT.1698/scripts/file.jsonsC   /root/prepack-aio-master-SNAPSHOT.1698/scripts/deployMERuleset.json(   R   t
   initPolicyR   R*  R[  (   R[  (    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyt   mainy  s
    

t   __main__(   t   FileAssemblerR    t   xml.etree.ElementTreeR   R   R   R   R   R   R   R   RA   RK   R   RI   R0  R3  R   t   filesyncR   R   R   R_  R\  (    (    (    s`   /home/jenkins/workspace/prepack-aio-release-4.2/prepack-aio/src/main/resources/scripts/deploy.pyt   <module>   s.     V		