ó
æ”\c           @   s“   d  d l  Z  d  d l Z d d l m Z d d l Td  d l Z d  d l Td  d l	 m
 Z
 d  d l j Z e j j ƒ  Z d e j f d „  ƒ  YZ d S(   iÿÿÿÿNi   (   t   base(   t   *(   t   commandst   ModulesPluginc           B   sb   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 e
 d „ Z d	 „  Z RS(
   s6   
	Plugin for applying custom kernel modules options.
	c         O   s2   t  t |  ƒ j | | Ž  t |  _ t ƒ  |  _ d  S(   N(   t   superR   t   __init__t   Truet   _has_dynamic_optionsR   t   _cmd(   t   selft   argst   kwargs(    (    s@   /usr/lib/python2.7/site-packages/tuned/plugins/plugin_modules.pyR      s    	c         C   s"   t  | _ t | _ | j | _ d  S(   N(   t   Falset   _has_dynamic_tuningR   t   _has_static_tuningt   optionst   _modules(   R	   t   instance(    (    s@   /usr/lib/python2.7/site-packages/tuned/plugins/plugin_modules.pyt   _instance_init   s    		c         C   s   d  S(   N(    (   R	   R   (    (    s@   /usr/lib/python2.7/site-packages/tuned/plugins/plugin_modules.pyt   _instance_cleanup   s    c         C   sÉ   xÂ | D]º } |  j  j d d | g ƒ \ } } | d k  rK t j d ƒ d  S| d k rw t j d | | j ƒ  f ƒ n  |  j  j d | g ƒ \ } } | d k r t j d | | j ƒ  f ƒ q q Wd  S(   Nt   modprobes   -ri    sN   'modprobe' command not found, cannot reload kernel modules, reboot is requireds$   cannot remove kernel module '%s': %ss:   cannot insert/reinsert module '%s', reboot is required: %s(   R   t   executet   logt   warnt   debugt   strip(   R	   t   modulest   modulet   retcodet   out(    (    s@   /usr/lib/python2.7/site-packages/tuned/plugins/plugin_modules.pyt   _reload_modules   s    ! c         C   sÞ  |  j  ƒ  d } d } t } g  } xOt | j j ƒ  ƒ D]8\ } } |  j j | ƒ } |  j j | ƒ }	 | sÑ |  j j d | g ƒ \ } }
 | d k  r® t	 } t
 j d ƒ qÑ | d k rÑ t
 j d | ƒ qÑ n  | sã | d k r8 t |	 ƒ d k r-|	 d d !d k r-t j d	 d |	 ƒ }	 | j | ƒ n  t |	 ƒ d k r\| d
 | d |	 d 7} qpt
 j d | ƒ q8 q8 W|  j j t j | ƒ t | ƒ } | d k rÚ|  j | ƒ t | j ƒ | k rÚt
 j t j ƒ qÚn  d  S(   Nt    i    t   modinfos8   'modinfo' command not found, not checking kernel moduless)   kernel module '%s' not found, skipping iti   i   s   +rs   ^\s*\+r\s*,?\s*s   options t    s   
sK   module '%s' doesn't have any option specified, not writing it to modprobe.d(   t   _clear_modprobe_fileR   t   listR   t   itemst
   _variablest   expandR   R   R   R   R   t   errort   lent   ret   subt   appendR   t   write_to_filet   constst   MODULES_FILER   t   infot   STR_HINT_REBOOT(   R	   R   t   sR   t
   skip_checkt   reload_listt   optiont   valueR   t   vR   t   l(    (    s@   /usr/lib/python2.7/site-packages/tuned/plugins/plugin_modules.pyt   _instance_apply_static*   s8    
"%c         C   s   t  | ƒ j d d ƒ S(   Nt   /R   (   t   strt   replace(   R	   t   path(    (    s@   /usr/lib/python2.7/site-packages/tuned/plugins/plugin_modules.pyt   _unquote_pathI   s    c         C   sŠ  t  } t  } t j d ƒ } xht | j j ƒ  ƒ D]Q\ } } |  j j | ƒ } |  j j | ƒ }	 t j d d |	 ƒ }	 d | }
 t	 j
 j |
 ƒ s³ t } t j t j d | ƒ q1 t j t j d | ƒ | j |	 ƒ } x¥ | D] } | j d ƒ } t | ƒ d k r"t j d	 | | f ƒ qá |  j | d
 | d |  j j |
 d |  j | d
 ƒ d d  d t  ƒ| ƒ t k rá t } qá qá Wq1 W| S(   Ns   \s+s   ^\s*\+r\s*,?\s*R   s   /sys/module/%ss   module '%s' is not loadeds   module '%s' is loadedt   =i   s.   unrecognized module option for module '%s': %si    i   s   /parameters/t   err_rett   no_error(   R   R)   t   compileR#   R   R$   R%   R&   R*   t   osR<   t   existsR   R   R'   R-   t   STR_VERIFY_PROFILE_FAILR/   t   STR_VERIFY_PROFILE_OKt   splitR(   R   t   _verify_valueR   t	   read_fileR=   t   None(   R	   R   t   ignore_missingt   devicest   rett   rR4   R5   R   R6   t   mpathR7   t   itemt   arg(    (    s@   /usr/lib/python2.7/site-packages/tuned/plugins/plugin_modules.pyt   _instance_verify_staticL   s,    "
0c         C   s   | r |  j  ƒ  n  d  S(   N(   R"   (   R	   R   t   full_rollback(    (    s@   /usr/lib/python2.7/site-packages/tuned/plugins/plugin_modules.pyt   _instance_unapply_staticg   s    c         C   sã   |  j  j t j d t ƒ} | j d ƒ } d } } t | ƒ } t j d ƒ } xB | | k  r“ | j	 | | ƒ d  k r† | } | } n  | d 7} qR Wd j | d | !ƒ } t | ƒ d k rÉ | d 7} n  |  j  j t j | ƒ d  S(   NR@   s   
i    s   ^\s*#i   (   R   RH   R-   R.   R   RF   R(   R)   RA   t   searchRI   t   joinR,   (   R	   R1   R7   t   it   jt   llRM   (    (    s@   /usr/lib/python2.7/site-packages/tuned/plugins/plugin_modules.pyR"   k   s    
	(   t   __name__t
   __module__t   __doc__R   R   R   R   R8   R=   RQ   R   RS   R"   (    (    (    s@   /usr/lib/python2.7/site-packages/tuned/plugins/plugin_modules.pyR      s   							(   R)   t   os.pathRB   R   R    t
   decoratorst
   tuned.logst   tunedt
   subprocesst   tuned.utils.commandsR   t   tuned.constsR-   t   logst   getR   t   PluginR   (    (    (    s@   /usr/lib/python2.7/site-packages/tuned/plugins/plugin_modules.pyt   <module>   s   

