U
    Ad                     @   s   d Z ddlZddlZddlZddlZddlZddlmZmZm	Z	 ddl
mZmZmZmZmZmZ ddlmZ ddlmZ ddlmZ dZdd	d
Zdd Zedkre  Zeee dS )z(Debug network config format conversions.    N)distroslogsafeyaml)eninetplannetwork_managernetwork_statenetworkd	sysconfig)DataSourceAzure)	openstack)guestcust_utilznet-convertc                 C   s   | st jttd} | jddtdddd | jdd	d
ddddgddd | jdddddd | jdddd tj D dd | jdddddd | jd d!d"d# | jd$d%d
d&d'd(d)gdd*d | S )+a  Build or extend and arg parser for net-convert utility.

    @param parser: Optional existing ArgumentParser instance representing the
        subcommand which will be extended to support the args of this utility.

    @returns: ArgumentParser with proper argument configuration.
    )progZdescriptionz-pz--network-dataPATHTz!The network configuration to read)typemetavarrequiredhelpz-kz--kindr   network_data.jsonyaml
azure-imds
vmware-imcz&The format of the given network config)choicesr   r   z-dz--directoryzdirectory to place output in)r   r   r   z-Dz--distroc                 S   s   g | ]}|D ]}|qqS  r   ).0Zsublistitemr   r   A/usr/lib/python3/dist-packages/cloudinit/cmd/devel/net_convert.py
<listcomp>E   s      zget_parser.<locals>.<listcomp>)r   r   z-mz--maczname,macappendzinterface name to mac mapping)r   actionr   z--debug
store_truezenable debug logging to stderr.)r   r   z-Oz--output-kindr   r	   r
   network-managerz!The network config format to emit)	argparseArgumentParserNAME__doc__add_argumentopenr   Z
OSFAMILIESvalues)parserr   r   r   
get_parser   sr      r*   c              	   C   s  |j ds| j d7  _ tj|j s4t|j  |jrJtjtj	d ntjtj
d |jri }|jD ]}|dd\}}|||< qhnd }|j }|jdkrt|}n|jdkrt|}d|kr|d}|jrtjdd	t|d
g np|jdkrtjt||d}nN|jdkr<tt|d }n,|jdkrht !t "|jj#}t $|d}t%&|j'}	|	|j'i d }
|j(dkrtj)}|
j*d}n|j(dkrt+j)}|
j*di }d|d< |d dd  |d< ddg|d< nh|j(dkrt,j)}|
j*d}nH|j(dkr,t-j)}|
j*d}n(|j(dkrLt.j)}|
j*d}nt/d||d}t0j1||d}|jrtjdd
dt23|d
g tjd
d|j|jj#f d|j(|j f gd  |j4||j d d S ) N/)level,   r   r   Znetwork
z
Input YAML r   )
known_macsr   r   Fr   ZpostcmdsZnetplan_pathzdhcp-use-domainszipv6-mtuZfeaturesr	   r
   r!   zInvalid output_kind)config)ZrendererzInternal Statez"Read input format '%s' from '%s'.
z!Wrote output format '%s' to '%s'
)r   target)5Z	directoryendswithospathisdirmakedirsdebugr   ZsetupBasicLoggingDEBUGZWARNZmacsplitZnetwork_datareadZkindr   Zconvert_eni_datar   loadgetsysstderrwritejoindumpsr   Zconvert_net_jsonjsonloadsazureZ6generate_network_config_from_instance_network_metadatar   ZConfigZ
ConfigFilenameZ%get_network_data_from_vmware_cust_cfgr   ZfetchdistroZoutput_kindZRendererZrenderer_configsr   r	   r
   r   RuntimeErrorr   Zparse_net_config_datar   dumpZrender_network_state)rG   argsr1   r   Z
iface_nameZ	iface_macZnet_dataZpre_nsr2   Z
distro_clsrH   Zr_clsrnsr   r   r   handle_args^   s    





  
 
rN   __main__)N)r%   r"   rD   r5   r?   r   Z	cloudinitr   r   r   Zcloudinit.netr   r   r   r   r	   r
   Zcloudinit.sourcesr   rF   Zcloudinit.sources.helpersr   Z$cloudinit.sources.helpers.vmware.imcr   r$   r*   rN   __name__
parse_argsrK   r   r   r   r   <module>   s     
B\
