ó
x3áZc           @   sM  d  d l  j Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l m 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  e! d k rIe	 ƒ  Z" e  e" ƒ n  d S(   iÿÿÿÿN(   t   htmlc          C   sb   d }  d } t  t j ƒ d k r2 t j d } | St j j |  ƒ rH |  St j j | ƒ r^ | Sd  S(   Ns6   /opt/tandbergtv/cms/conf/jboss-workflow/standalone.xmlsH   /opt/tandbergtv/watchpoint/jboss/standalone/configuration/standalone.xmli   (   t   lent   syst   argvt   ost   patht   isfile(   t   jboss_standalone_patht   jboss_standalone_52_patht	   file_path(    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyt   get_standalone_filepath   s    c         C   s^   y, t  j d t ƒ } t  j |  | ƒ } | SWn+ t k
 rY } t | ƒ GHt j d ƒ n Xd  S(   Nt   remove_blank_texti   (   t   ETt	   XMLParsert   Truet   parset	   Exceptiont   strR   t   exit(   t   filet   parsert   Tt   ex(    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyt	   parse_xml#   s    c         C   sn   y< t  |  d ƒ } t j | j ƒ  ƒ j ƒ  } | j ƒ  | SWn+ t k
 ri } t | ƒ GHt j	 d ƒ n Xd  S(   Nt   rbi   (
   t   opent   hashlibt   md5t   readt	   hexdigestt   closeR   R   R   R   (   R   t   fpt   hR   (    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyt   file_md52   s    
c         C   sÉ   y‹ | d } | d } |  j  | d t d t d d ƒt | ƒ } t | ƒ } | | k r} t j | | ƒ t j | | ƒ n t j | ƒ Wn7 t k
 rÄ } d | d t | ƒ GHt j	 d	 ƒ n Xd  S(
   Ns   .news   .bakt   pretty_printt   xml_declarationt   encodings   UTF-8s   ERROR: Could not save file 's   ': i   (
   t   writeR   R!   R   t   renamet   removeR   R   R   R   (   t   treeR   t   new_filet   bak_filet   old_md5t   new_md5R   (    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyt   save_xmlA   s    

c         C   s7   |  j  d d | ƒ} t | ƒ d k r+ d  S| d Sd  S(   Ns   *[local-name() = $name]t   namei    (   t   xpathR   t   None(   t   parentt   tag_namet   L(    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyt   find_elementa   s    c         C   sŠ   |  j  d ƒ } t | ƒ d k r* d GHd  St ƒ  } xP | D]H } | j } | d d k r: | d j d ƒ \ } } | j | ƒ q: q: W| S(   Ns   //*[namespace-uri()]i    s<   WARNING: Could not find any element that contains namespace.t   {i   t   }(   R/   R   t   sett   tagt   splitt   add(   R   R3   t
   namespacest   el_nsR.   t   nst   _(    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyt   get_all_xmlnsk   s    		c         C   s   t  j |  d t ƒ} t j | ƒ } | | j d <|  j ƒ  } | j |  ƒ t  j t j | d d d t ƒƒ } | j | ƒ d  S(   NR"   t   xmlnsR$   s   utf-8(	   R   t   tostringR   R    t
   fromstringt   attribt	   getparentR'   t   append(   t   elementR=   t   datat   e_htmlR1   t   e_xml(    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyt   upgrade_element_namespace|   s    $c         C   s   d GHt  |  ƒ t |  ƒ d  S(   Ns     Upgrading WEB(   t   upgrade_web_sslt   upgrade_web_virtsrv(   R   (    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyt   upgrade_web‹   s    
c         C   s_   |  j  d d d ƒ} t | ƒ d k r0 d GHd  Sx( | D]  } d | j d <d | j d	 <q7 Wd  S(
   Ns   //*[local-name() = $name]R.   t   ssli    s0   WARNING: Could not find 'connector/ssl' element.s   TLSv1.2t   protocolt%   TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384s   cipher-suite(   R/   R   RC   (   R   R3   RN   (    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyRK   “   s    c         C   sé   |  j  d d d ƒ} t | ƒ d k r0 d GHd  Sx² | D]ª } t | d ƒ } | d  k r7 t j d ƒ } d | j d <d	 | j d
 <d | j d <| j | ƒ t j d ƒ } d | j d <d | j d <d | j d <| j | ƒ q7 q7 Wd  S(   Ns   //*[local-name() = $name]R.   s   virtual-serveri    s1   WARNING: Could not find 'virtual-server' element.t   rewrites   .*t   patternt   -t   substitutiont   Ft   flagst	   conditions   %{REQUEST_METHOD}t   tests&   ^(TRACE|PATCH|CONNECT|PROPFIND|MKCOL)$t   NC(   R/   R   R4   R0   R   t   ElementRC   RE   (   R   R3   t   el_vst
   el_rewritet   el_condition(    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyRL   Ÿ   s"    c         C   s   d GHt  |  ƒ d  S(   Ns     Upgrading Cache(   t   upgrade_cache_container(   R   (    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyt   upgrade_cache¹   s    c         C   sƒ   |  j  d d d ƒ} |  j  d d d ƒ} t | ƒ d k sN t | ƒ d k rW d GHd  S| | } x | D] } d | j d <qh Wd  S(	   Ns   //*[local-name() = $name]R.   s   cache-containers   local-cachei    s2   WARNING: Could not find 'cache_container' element.t   trues   statistics-enabled(   R/   R   RC   (   R   t   L1t   L2R3   R[   (    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyR^   À   s    $
c         C   s@   |  j  d d k r< |  j  d d k r< |  j ƒ  j |  ƒ n  d  S(   Ns	   jndi-names    java:jboss/datasources/ExampleDSs	   pool-namet	   ExampleDS(   RC   RD   R'   (   t   el_ds(    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyt   ds_remove_unusedÑ   s    &c         C   si   |  j  d d k r d  St |  d ƒ } | d  k r> d | _ n  t |  d ƒ } | d  k re d | _ n  d  S(   Ns	   jndi-names!   java:jboss/datasources/datasources   connection-urls#   jdbc:postgresql://dbserver:5432/ttvt   drivers   postgres.Driver(   RC   R4   R0   t   text(   Rd   t   el_cont   el_drv(    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyt   ds_upgrade_conÚ   s    c         C   sq   t  |  d ƒ } | d  k r d  St  | d ƒ } | d  k rF d | _ n  t  | d ƒ } | d  k rm d | _ n  d  S(   Nt   pools   min-pool-sizet   5s   max-pool-sizet   250(   R4   R0   Rg   (   Rd   t   el_poolt   el_mint   el_max(    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyt   ds_set_pool_sizeé   s    c         C   s   t  |  d ƒ } | d  k r: t j d ƒ } |  j | ƒ n  t  | d ƒ } | d  k rt t j d ƒ } | j | ƒ n  d | _ d  S(   Nt   timeouts   idle-timeout-minutest   10(   R4   R0   R   RZ   RE   Rg   (   Rd   t
   el_timeoutt   el_timeout_idle(    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyt   ds_set_timeoutû   s    c         C   sú   t  |  d ƒ } | d  k r: t j d ƒ } |  j | ƒ n  | j d d d ƒ} xW | D]O } | j d d k s• | j d d k s• | j d d k rV | j | ƒ qV qV Wt j d ƒ } d	 | _ t j d d d d
 d ƒ} | j | ƒ | j | ƒ d  S(   Nt   driverss   *[local-name() = $name]R.   Rf   s   com.edb.Drivers   postgress.Drivers   postgres.Drivers   xa-datasource-classs    org.postgresql.xa.PGXADataSourcet   modules   org.postgresql(	   R4   R0   R   RZ   RE   R/   RC   R'   Rg   (   t   el_dsst
   el_driversR3   Ri   t   el_ds_class(    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyt   ds_upgrade_drivers  s    9	c         C   s°   d GH|  j  d d d ƒ} t | ƒ d k r5 d GHd  St | d ƒ |  j  d d d ƒ} t | ƒ d k rs d GHd  Sx6 | D]. } t | ƒ t | ƒ t | ƒ t | ƒ qz Wd  S(	   Ns     Upgrading datasourcess   //*[local-name() = $name]R.   t   datasourcesi    s.   WARNING: Could not find 'datasources' element.t
   datasources-   WARNING: Could not find 'datasource' element.(   R/   R   R|   Re   Rj   Rq   Rv   (   R   R3   Rd   (    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyt   upgrade_datasources$  s    


c         C   s   d GHt  |  ƒ d  S(   Ns     Upgrading ejb(   t   upgrade_timer_service(   R   (    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyt   upgrade_ejbG  s    c         C   só   |  j  d d d ƒ} t | ƒ d k r0 d GHd  S| d } t | d ƒ } | d  k rY d  S| j d d ƒ x | D] } | j | ƒ qp Wt j d ƒ } t j d	 ƒ } | j d d ƒ | j d
 d ƒ | j d d ƒ | j | ƒ | j | ƒ d  S(   Ns   //*[local-name() = $name]R.   s   timer-servicei    s0   WARNING: Could not find 'timer-service' element.s   data-storess   default-data-stores   default-file-stores   file-data-storeR   s   timer-service-datas   relative-tos   jboss.server.data.dir(	   R/   R   R4   R0   R7   R'   R   RZ   RE   (   R   R3   t   el_timer_servicet   el_data_storest   childt   el_file_data_store(    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyR€   N  s$    
c         C   sI   d GHt  |  ƒ } | d  k s/ t | ƒ d k r8 d GHd  St |  | ƒ d  S(   Ns     Upgrading namespacei    s   Namespace upgrading is ignored(   t   get_upgrade_required_namespacesR0   R   t   upgrade_subsystem_namespaces(   R   R;   (    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyt   upgrade_namespacel  s    c         C   sb  t  j j t  j j t ƒ ƒ } t  j j | d ƒ } y( t | ƒ  } t j | ƒ } Wd  QXWn t	 k
 rv } d GHd  SXd | k r’ | d r’ d  Sd | k r¢ d  Sg  } | d } t
 |  ƒ } x | j ƒ  D] \ }	 }
 g  | D] } |	 | k rÞ | ^ qÞ } t | ƒ d k rqË n  | d } |	 d |
 } | | k	 rË t | | g ƒ } | j | ƒ qË qË W| S(   Ns&   workflow-standalone-xmlns-version.jsonsU   Configuration file for upgrading 'jboss-workflow/standalone.xml' namespaces not foundt   enabledR@   i    t   :(   R   R   t   dirnamet   abspatht   __file__t   joinR   t   jsont   loadR   R?   t   itemsR   t   tupleRE   (   R   t
   script_dirt   xmlns_version_filet	   json_fileRG   R   t   upgrade_required_namespacest   xmlns_objectR;   t   kt   vR=   t   ns_listt   required_nst   upgrade_ns_tup(    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyR†   z  s2    
%
c         C   sd   x] | D]U } d | d } |  j  | ƒ } | d  k rK d | d f GHq n  t | | d ƒ q Wd  S(   Nu   //*{%s}subsystemi    s8   WARNING: Could not find subsystem element with namespacei   (   t   findR0   RJ   (   R   R;   t   ns_tupR/   t   el_subsystem(    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyR‡     s    c         C   s]   d |  GHt  |  ƒ } t | ƒ t | ƒ t | ƒ t | ƒ t | ƒ t | |  ƒ d GHd  S(   Ns
   Upgrading t   Done(   R   RM   R_   R   R   Rˆ   R-   (   R   R   (    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyt   main­  s    	




t   __main__(#   t
   lxml.etreet   etreeR   R   R   R   R   t   lxmlR    R
   R   R!   R-   R4   R?   RJ   RM   RK   RL   R_   R^   Re   Rj   Rq   Rv   R|   R   R   R€   Rˆ   R†   R‡   R¡   t   __name__R	   (    (    (    sF   /opt/tandbergtv/cms/scripts/upgrade/workflow-standalone-xml-upgrade.pyt   <module>   s@   				 	
														#				#			