
    x[hw                     h    d dl Z d dlmZ d dlmZ d dlmZ  e j                  e      Z	 G d d      Z
y)    N)StringIO)util)chop_commentc                       e Zd Zd Zd Zed        Zed        Zej                  d        Zed        Z	d Z
d Zd	 Zd
 Zd Zd Zy)
ResolvConfc                      || _         d | _        y N)_text	_contents)selftexts     G/usr/lib/python3/dist-packages/cloudinit/distros/parsers/resolv_conf.py__init__zResolvConf.__init__   s    
    c                 ^    | j                   !| j                  | j                        | _         y y r	   )r   _parser
   r   s    r   parsezResolvConf.parse   s%    >>!![[4DN "r   c                 D    | j                          | j                  d      S )N
nameserverr   _retr_optionr   s    r   nameserverszResolvConf.nameservers   s    

  ..r   c                 T    | j                          | j                  d      }|r|d   S y )Ndomainr   r   )r   dms     r   local_domainzResolvConf.local_domain   s*    

x(a5Lr   c                     | j                          | j                  d       | j                  j                  ddt	        |      dgf       |S )Nr   option )r   _remove_optionr   appendstr)r   r   s     r   r   zResolvConf.local_domain'   s@    

H%x(CK)DEFr   c                     | j                          | j                  d      }g }|D ],  }|j                  d       D ]  }|s|j                  |        . |S )Nsearch)r   r   splitr"   )r   current_sdsflat_sdssdlistsds        r   search_domainszResolvConf.search_domains.   s]    

''1! 	(Fll4( (OOB'(	( r   c                 T   | j                          t               }| j                  D ]p  \  }}|dk(  r|j                  d       |dk(  r|j                  d|d   z         :|dk(  s@|\  }}}|d|}t	        |      r||z  }|j                  d|z         r |j                         S )Nblank
all_commentz%s
r   r    )r   r   r   writelengetvalue)r   contents	line_type
componentscfg_opt	cfg_valuecomment_taillines           r   __str__zResolvConf.__str__9   s    

:%)^^ 
	0!IzG#t$m+vA78h&5?2)\")95|$L(Dv/
	0   ""r   c                 x    g }| j                   D ](  \  }}|dk(  s|\  }}}||k(  s|j                  |       * |S )Nr   r   r"   )r   opt_namefoundr5   r6   r7   r8   _comment_tails           r   r   zResolvConf._retr_optionI   sN    %)^^ 	,!IzH$6@3)]h&LL+		,
 r   c                 ^   | j                          | j                  d      }t        |      }|j                  t	        |             t        j                  |      }t        |      t        |      k(  r|S | j                  d       |D ]"  }| j                  j                  dd|dgf       $ |S )Nr   r   r    )
r   r   listr"   r#   r   	uniq_listr2   r!   r   )r   ns
current_nsnew_nsns        r   add_nameserverzResolvConf.add_nameserverR   s    

&&|4
j!c"g'v;#j/)L) 	EANN!!8lAr-B"CD	Er   c                 x    fd}g }| j                   D ]  } ||      r|j                  |        || _         y )Nc                 4    | \  }}|dk7  ry|\  }}}|k7  ryy)Nr   FT )itemr5   r6   r7   
_cfg_valuer@   r>   s         r   
remove_optz-ResolvConf._remove_option.<locals>.remove_opt`   s2    $(!IzH$3=0Wj-("r   r=   )r   r>   rN   new_contentscs    `   r   r!   zResolvConf._remove_option_   s@    	  	'Aa=##A&	' &r   c                    | j                   }t        |      }|j                  t        |             t	        j
                  |      }t        |      t        |      k(  r|S t        |      dk\  rt        d|z        dj                  |      }t        |      dkD  rt        d|z        | j                  d       | j                  j                  dd|dgf       |S )	N   z8Adding %r would go beyond the '6' maximum search domainsr0      zEAdding %r would go beyond the 256 maximum search list character limitr%   r   r    )r+   rB   r"   r#   r   rC   r2   
ValueErrorjoinr!   r   )r   search_domainr(   new_sdss_lists        r   add_search_domainzResolvConf.add_search_domaino   s    &&x.s=)*..)x=CL(Nx=AJ "  '"v;:=JL  	H%x(FB)?@Ar   c                    g }t        |j                               D ]  \  }}|j                         }|s|j                  d|gf       -t	        |d      \  }}t        |j                               s|j                  d|gf       j|sd}	 |j                  d d      \  }}	|dvrt        d|z        |j                  d	||	|gf        |S # t        t        f$ r}
t        d|dz   z        |
d }
~
ww xY w)
Nr-   z;#r/   r       z)Incorrectly formatted resolv.conf line %s)r   r   r%   sortlistoptionsz Unexpected resolv.conf option %sr   )
	enumerate
splitlinesstripr"   r   r2   r&   
IndexErrorrT   IOError)r   r4   entriesir:   slineheadtailr7   
cfg_valueses              r   r   zResolvConf._parse   s    !4!4!67 	DGAtJJLE$01'd3LT4tzz|$v67(,

4(;%*
    @GLMMNNHw
D&ABC3	D4  
+ ?1q5Is   CC2C--C2N)__name__
__module____qualname__r   r   propertyr   r   setterr+   r;   r   rH   r!   rY   r   rK   r   r   r   r      s    5 / /      # & 0r   r   )loggingior   	cloudinitr   cloudinit.distros.parsersr   	getLoggerrj   LOGr   rK   r   r   <module>ru      s1       2g!R Rr   