o
    wÚ7eª  ã                   @   sL   d dl mZ d dlmZ d dlmZ d dlmZ e e	¡Z
G dd„ dƒZdS )é    )ÚStringIO)Úlog)Úutil)Úchop_commentc                   @   s~   e Zd Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZejd	d„ ƒZed
d„ ƒZ	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú
ResolvConfc                 C   s   || _ d | _d S ©N)Ú_textÚ	_contents)ÚselfÚtext© r   úG/usr/lib/python3/dist-packages/cloudinit/distros/parsers/resolv_conf.pyÚ__init__   s   
zResolvConf.__init__c                 C   s    | j d u r|  | j¡| _ d S d S r   )r	   Ú_parser   ©r
   r   r   r   Úparse   s   
ÿzResolvConf.parsec                 C   s   |   ¡  |  d¡S )NÚ
nameserver©r   Ú_retr_optionr   r   r   r   Únameservers   s   
zResolvConf.nameserversc                 C   s"   |   ¡  |  d¡}|r|d S d S )NÚdomainr   r   )r
   Údmr   r   r   Úlocal_domain   s
   
zResolvConf.local_domainc                 C   s0   |   ¡  |  d¡ | j ddt|ƒdgf¡ |S )Nr   ÚoptionÚ )r   Ú_remove_optionr	   ÚappendÚstr)r
   r   r   r   r   r   '   s   
c                 C   sB   |   ¡  |  d¡}g }|D ]}| d ¡D ]	}|r| |¡ qq|S )NÚsearch)r   r   Úsplitr   )r
   Úcurrent_sdsÚflat_sdsÚsdlistÚsdr   r   r   Úsearch_domains.   s   

€þzResolvConf.search_domainsc                 C   s’   |   ¡  tƒ }| jD ]:\}}|dkr| d¡ q
|dkr&| d|d  ¡ q
|dkrD|\}}}d||f }t|ƒr=||7 }| d| ¡ q
| ¡ S )NÚblankÚ
Úall_commentz%s
r   r   z%s %s)r   r   r	   ÚwriteÚlenÚgetvalue)r
   ÚcontentsÚ	line_typeÚ
componentsÚcfg_optÚ	cfg_valueÚcomment_tailÚliner   r   r   Ú__str__9   s   
€zResolvConf.__str__c                 C   s<   g }| j D ]\}}|dkr|\}}}||kr| |¡ q|S )Nr   ©r	   r   )r
   Úopt_nameÚfoundr,   r-   r.   r/   Ú_comment_tailr   r   r   r   I   s   

€zResolvConf._retr_optionc                 C   st   |   ¡  |  d¡}t|ƒ}| t|ƒ¡ t |¡}t|ƒt|ƒkr#|S |  d¡ |D ]}| j	 dd|dgf¡ q*|S )Nr   r   r   )
r   r   Úlistr   r   r   Ú	uniq_listr)   r   r	   )r
   ÚnsÚ
current_nsÚnew_nsÚnr   r   r   Úadd_nameserverR   s   


zResolvConf.add_nameserverc                    s8   ‡ fdd„}g }| j D ]}||ƒs| |¡ q|| _ d S )Nc                    s.   | \}}|dkr
dS |\}}}|ˆ krdS dS )Nr   FTr   )Úitemr,   r-   r.   Ú
_cfg_valuer6   ©r4   r   r   Ú
remove_opt`   s   
z-ResolvConf._remove_option.<locals>.remove_optr3   )r
   r4   rA   Únew_contentsÚcr   r@   r   r   _   s   	

€
zResolvConf._remove_optionc                 C   s˜   | j }t|ƒ}| t|ƒ¡ t |¡}t|ƒt|ƒkr|S t|ƒdkr)td| ƒ‚d |¡}t|ƒdkr:td| ƒ‚|  	d¡ | j
 dd|dgf¡ |S )	Né   z8Adding %r would go beyond the '6' maximum search domainsú é   zEAdding %r would go beyond the 256 maximum search list character limitr   r   r   )r$   r7   r   r   r   r8   r)   Ú
ValueErrorÚjoinr   r	   )r
   Úsearch_domainr!   Únew_sdsÚs_listr   r   r   Úadd_search_domaino   s,   
ÿÿ
ÿÿ
zResolvConf.add_search_domainc                 C   sÜ   g }t | ¡ ƒD ]c\}}| ¡ }|s| d|gf¡ qt|dƒ\}}t| ¡ ƒs1| d|gf¡ q|s5d}z
| d d¡\}}	W n ttfyV }
 z	t	d|d  ƒ|
‚d }
~
ww |dvrat	d| ƒ‚| d	||	|gf¡ q|S )
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   r)   r   Ú
IndexErrorrG   ÚIOError)r
   r+   ÚentriesÚir1   ÚslineÚheadÚtailr.   Ú
cfg_valuesÚer   r   r   r   ‡   s4   
ÿþ€ÿzResolvConf._parseN)Ú__name__Ú
__module__Ú__qualname__r   r   Úpropertyr   r   Úsetterr$   r2   r   r=   r   rL   r   r   r   r   r   r      s"    




	r   N)Úior   Ú	cloudinitr   Úloggingr   Úcloudinit.distros.parsersr   Ú	getLoggerr\   ÚLOGr   r   r   r   r   Ú<module>   s   
