Viewing File: /usr/lib/python2.7/site-packages/cloudinit/netinfo.pyo

ó
oBú]c@sëddlmZmZddlZddlmZddlmZddlmZddl	m
Z
ejƒZigd6gd6d	d
6e
d6Zd„Zd
„Zd	d„Zd„Zd„Zd„Zd„Zd„Zdd„ZdS(iÿÿÿÿ(tcopytdeepcopyN(tlog(tnet_prefix_to_ipv4_mask(tutil(tSimpleTabletipv4tipv6tthwaddrtupcCsri}d}x_t|jƒƒD]K\}}tjd|ƒ}|r¾|jdƒjƒjdƒd}|jdƒjdƒ}igd6gd6d	d
6td|ko­d|kƒd
6||<qd|krtjd|ƒ}|sût	j
d||ƒqn||dj|jƒƒqd|krêtjd|ƒ}|sVt	j
d||ƒqn|jƒ}|j
dƒ}|jdƒ\}	}
}|s˜d}n||dji|	d6|drÄ|dnd	d6t|ƒd6|dd6ƒqd|krtjd|ƒ}|s't	j
d||ƒqn|jdƒdkrV|jd
ƒ||d
<qjd	||d
<qqqW|S(s1
    Get network device dicts from ip route and ip link info.

    @param ipaddr_out: Output string from 'ip addr show' command.

    @returns: A dict of device info keyed by network device name containing
              device configuration values.
    @raise: TypeError if ipaddr_out isn't a string.
    s.^\d+:\s(?P<dev>[^:]+):\s+<(?P<flags>\S+)>\s+.*tdevt@itflagst,RRRR	tUPtLOWER_UPR
tinet6s/\s+inet6\s(?P<ip>\S+)\sscope\s(?P<scope6>\S+).*s*Could not parse ip addr show: (line:%d) %stinetsH\s+inet\s(?P<cidr4>\S+)(\sbrd\s(?P<bcast>\S+))?\sscope\s(?P<scope>\S+).*tcidr4t/t32tiptbcasttmasktscopetlinks-\s+link/(?P<link_type>\S+)\s(?P<hwaddr>\S+).*t	link_typetetherN(tNonet	enumeratet
splitlinestretmatchtgrouptlowertsplittbooltLOGtwarningtappendt	groupdicttpopt	partitionR(t
ipaddr_outtdevstdev_nametnumtlinetmR
R!Rtaddrt_tprefix((s5/usr/lib/python2.7/site-packages/cloudinit/netinfo.pyt_netdev_info_iproutes`
")
	
	

cCsãi}xÖ|jƒD]È}t|ƒdkr1qn|ddkr|jƒd}|jdƒrm|d }n||krttƒ||<qn|jƒjƒjƒ}|ddkrÈt||d<n<t|ƒdkrt	j
d|dƒrt||d<qnxÔtt|ƒƒD]À}||d	kr]||d
ji||dj
dƒd6ƒq||jd
ƒr–||j
d
ƒ||d
dd<q||dkrÇ||d||d
dd<q||jdƒr||j
dƒ||d
dd<q||dkr1||d||d
dd<q||dksQ||dkrj||d||d<q||dkrÜ||ddkrµ||dji||dd6ƒq×||dji||dd6ƒq||dkr+||dddd||d}|||ddd<q||jdƒrd||j
dƒ||ddd<q||dkrt	jd||dƒ}|r¶|jdƒ||ddd<q×||d||ddd<qqWqW|S(Nis	t t:iÿÿÿÿR
is
flags=\d+<up,RRsaddr:Rsbcast:Rt	broadcastsmask:RtnetmaskR	RRRit	prefixlenRsscope:tscope6tscopeids	.*<(\S+)>(s	R6(RtlenR$tendswithRtDEFAULT_NETDEV_INFOR#tstriptTrueR tsearchtrangeR(tlstript
startswithR!R"(t
ifconfig_dataR-R0tcurdevttokstitaddr6tres((s5/usr/lib/python2.7/site-packages/cloudinit/netinfo.pyt_netdev_info_ifconfig^sZ
"&!&! ''&&")csßi}tjdƒrBtjdddgƒ\}}t|ƒ}nRtjdƒr‡tjddgdddgƒ\}}t|ƒ}n
tjd	ƒ|d
kr¤|Sttt	f‰d
d
‡‡fd†‰ˆ|d|ƒ|S(NRR2tshowtifconfigs-atrcsiis>Could not print networks: missing 'ip' and 'ifconfig' commandsRcs¡t|tƒr|jƒ}n0t|ttfƒrBt|ƒ}ntdƒ‚xL|D]D\}}||krz|||<qUt|ˆƒrUˆ||ƒqUqUWdS(sTRecursively replace 'empty_vals' in data (dict, tuple, list)
           with new_valsUnexpected input to fillN(t
isinstancetdicttitemsttupletlistRt	TypeError(tdatatnew_valt
empty_valstmyitertkeytval(tfillt
recurse_types(s5/usr/lib/python2.7/site-packages/cloudinit/netinfo.pyR\©s
RW(RR(
RtwhichtsubpR5RLR&R'RQRSRT(temptyR-R,t_errt	ifcfg_out((R\R]s5/usr/lib/python2.7/site-packages/cloudinit/netinfo.pytnetdev_info–s'cCsi}g|d<g|d<|jƒ}idd6dd6dd6dd6dd6dd	6}xŸ|D]—}t|ƒ}|s{q]n|jƒ}d
g}|ddkr·d
|d<d
|d<n}d|dkrã|djdƒ\}}	n-|d}d}	|jdƒt|	ƒ|d<||d<t|	ƒ|d<d
|d<x™tt|ƒƒD]…}
||
dkr‚||
d|d<|jddƒn||
dkr§||
d|d<n||
d	krG||
d|d	<qGqGWdj|ƒ|d<|dj|ƒq]Wy:t	j
dddddddgdddgƒ\}}Wnt	jk
rHnQX|jƒ}
xA|
D]9}i}|stq\n|jƒ}|ddkr§d|d<d|d<n"|d|d<d|d<d
|d<x¸tt|ƒƒD]¤}
||
dkr||
d|d<d|d<n||
dkr6||
d|d<n||
d	kr[||
d|d	<n||
d krÜ|dd!|d<qÜqÜW|dj|ƒq\W|S("sP
    Get network route dicts from ip route info.

    @param iproute_data: Output string from ip route command.

    @returns: A dict containing ipv4 and ipv6 route entries as lists. Each
              item in the list is a route dictionary representing destination,
              gateway, flags, genmask and interface information.
    RRRtdestinationR
tgatewaytgenmasktifacetmetrictUitdefaults0.0.0.0RRtHtviaitGRRs	--onelines-6trouteRTttabletallROs::/0tUGs::texpireste(RRR$R(RRCR=tinserttjoinRR_tProcessExecutionError(tiproute_datatroutestentriestdefault_route_entryR0tentryRHR
R2tcidrRIt
iproute_data6t_err6tentries6((s5/usr/lib/python2.7/site-packages/cloudinit/netinfo.pyt_netdev_route_info_iproute½s‚


	











c	Csi}g|d<g|d<|jƒ}xD|D]<}|s?q-n|jƒ}t|ƒdks-|ddks-|ddks-|ddks-|ddks-|dd	kr³q-nt|ƒd
krú|jdƒ|jdƒ|d|d
<d|d<ni|dd6|dd6|dd6|dd6|dd6|dd6|dd6|d
d6}|dj|ƒq-Wy4tjdddddgdddgƒ\}}Wntjk
r·nKX|jƒ}x;|D]3}|sÝqËn|jƒ}t|ƒd
ksË|ddksË|ddksË|ddksË|dd ksË|dd!krQqËni|dd6|dd6|dd6|dd6|dd6|dd6|dd6}|dd"krºqËn|djd#ƒrítj	d$d%|dƒ|d<n|dj|ƒqËW|S(&NRRiitKerneltDestinationtInternett	Internet6tRoutingit-iiRdiReiRfiR
iRhtreftuseRgtnetstats-ARs--routes	--numericROtPrototActivetlos/128s\/128$R(
RR$R=R(RR_RvR>R tsub(	t
route_dataRxRyR0RHR{troute_data6R~R((s5/usr/lib/python2.7/site-packages/cloudinit/netinfo.pyt_netdev_route_info_netstatsp


"  


.
"  cCs¡i}tjdƒrEtjddddgƒ\}}t|ƒ}nXtjdƒrtjddddgd	d
dgƒ\}}t|ƒ}n
tjdƒ|S(
NRs-oRnRTR‰s--routes	--numerics--extendROiis;Could not print routes: missing 'ip' and 'netstat' commands(RR^R_R€RR&R'(Rxtiproute_outRat	route_out((s5/usr/lib/python2.7/site-packages/cloudinit/netinfo.pyt
route_infoXs!'c
Csg}d}ytd|ƒ}WnAtk
rb}|jtjdjdt|ƒƒddƒƒn¢X|smdSdd	d
ddd
g}t|ƒ}xt|j	ƒƒD]
\}}xR|j
dƒD]A}|j||d|d|d|j
d|ƒ|dfƒqÀWxN|j
dƒD]=}|j||d|d||j
d|ƒ|dfƒqWt|j
dƒƒt|j
dƒƒdkr¤|j||d||||dfƒq¤q¤W|j
ƒ}	tt|	jƒdtƒƒ}
tjdd|
ƒ}|j||	gƒdj|ƒdS(Nt.R`s Net device info failed ({error})terrort!iPs
tDevicetUptAddresstMasktScopes
Hw-AddressRR
RRRR	RR;iRZsNet device infot+(Rct	ExceptionR(RtcentertformattstrRtsortedRRtgettadd_rowR=t
get_stringtmaxRtextendRu(tlinesR`tnetdevRstfieldsttblRRVR2tnetdev_stmax_lentheader((s5/usr/lib/python2.7/site-packages/cloudinit/netinfo.pytnetdev_pformatis<!!.c
	Csbg}y
tƒ}WnUtk
rj}|jtjdjdt|ƒƒddƒƒtjtd|ƒnçX|j	dƒrXddd	d
ddg}t
|ƒ}xbt|j	dƒƒD]K\}}t|ƒ}|j||d
|d|d|d|dgƒq´W|j
ƒ}tt|jƒdtƒƒ}	tjdd|	ƒ}
|j|
|gƒn|j	dƒrQddd	ddg}t
|ƒ}xqt|j	dƒƒD]Z\}}t|ƒ}|ddkrÌqžn|j||d
|d|d|dgƒqžW|j
ƒ}tt|jƒdtƒƒ}	tjdd|	ƒ}
|j|
|gƒndj|ƒdS(NsRoute info failed ({error})R•R–iPsRoute info failed: %sRtRouteR‚tGatewaytGenmaskt	InterfacetFlagsRdReRfRgR
RZsRoute IPv4 infoRœRRŒsRoute IPv6 infos
(R“RR(RRžRŸR tlogexcR&R¢RRR£R¤R=R¥RR¦Ru(
R§RxRst	fields_v4ttbl_v4tntrtroute_idtroute_sR¬R­t	fields_v6ttbl_v6((s5/usr/lib/python2.7/site-packages/cloudinit/netinfo.pyt
route_pformat‹sJ

	"	" s	ci-info: cCs­g}tƒjƒ}|rFx5|D]}|jd||fƒq"Wn
|j|ƒtƒjƒ}|r“x5|D]}|jd||fƒqoWn
|j|ƒdj|ƒS(Ns%s%ss
(R®RR(R¦R½Ru(R4R§tnetdev_linesR0troute_lines((s5/usr/lib/python2.7/site-packages/cloudinit/netinfo.pyt
debug_info´s



(RRR t	cloudinitRtloggingtcloudinit.net.network_stateRRtcloudinit.simpletableRt	getLoggerR&tFalseR?R5RLRcR€RR“R®R½RÀ(((s5/usr/lib/python2.7/site-packages/cloudinit/netinfo.pyt<module>s(
	?	8'	R	I		"	)
Back to Directory File Manager