%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/lib/python2.7/site-packages/salt/utils/docker/translate/
Upload File :
Create Path :
Current File : //usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyo

�
���^c@@s�dZddlmZmZmZddlZddlmZddlm	Z	ddl
mZddlm
Z
id	d
6dd6d
d6dd6dd6dd6dd6dd6dd6dd6dd6dd 6d!d"6d#d$6d%d&6d'd(6d)d*6d+d,6d-d.6d/d06Zege	je�D]\ZZeef^q�Zd1�Zd2�Zd3�Zd4�Zd5�Zd6�Zd7�Zd8�Zd9�Zd:�Zd;�Zd<�Zd=�Z d>�Z!d?�Z"d@�Z#dA�Z$dB�Z%dC�Z&dD�Z'dE�Z(dF�Z)dG�Z*dH�Z+dI�Z,dJ�Z-dK�Z.dL�Z/dM�Z0dN�Z1dO�Z2dP�Z3dQ�Z4dR�Z5dS�Z6dT�Z7dU�Z8dV�Z9dW�Z:dX�Z;dY�Z<dZ�Z=d[�Z>d\�Z?d]�Z@d^�ZAd_�ZBd`�ZCda�ZDdb�ZEdc�ZFdd�ZGde�ZHdf�ZIdg�ZJdh�ZKdi�ZLdj�ZMdk�ZNdl�ZOdm�ZPdn�ZQdo�ZRdp�ZSdq�ZTdr�ZUds�ZVdt�ZWdu�ZXdv�ZYdS(wu5
Functions to translate input for container creation
i(tabsolute_importtprint_functiontunicode_literalsN(tSaltInvocationError(tsix(trangei(thelpersucommanducmducpuset_cpusucpusetudns_optu
dns_optionuenvironmentuenvuportsuexposeu
stdin_openuinteractiveuipc_modeuipculabelsulabelu	mem_limitumemoryu
memswap_limitumemory_swapu
port_bindingsupublishupublish_all_portsupublish_allurestart_policyurestartuauto_removeurmusysctlsusysctlusecurity_optu
security_optsuulimitsuulimituuserns_modeuuser_ns_modeuvolumesuvolumeuworking_diruworkdircC@s�|jdtj�}|jdtj�}d|kr�|tjk	sT|tjk	r�i|tjk	rl|ndd6|tjk	r�|nid6|d<q�ndS(uc
    The log_config is a mixture of the CLI options --log-driver and --log-opt
    (which we support in Salt as log_driver and log_opt, respectively), but it
    must be submitted to the host config in the format {'Type': log_driver,
    'Config': log_opt}. So, we need to construct this argument to be passed to
    the API from those two arguments.
    u
log_driverulog_optu
log_configunoneuTypeuConfigN(tpopRtNOTSET(tkwargst
log_drivertlog_opt((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyt_merge_keys,sc@s\|jd�dk	r>|jd�r>|jd�d|d<n|jd�dk	r�|jd�dkr�|jd�d|d<n|jd�dk	r"�tks�t�fd	�dD��r"g}t|dt�r4x�tj|d�D]A}y$d|kr|j	|d�nWq�t
k
r,q�q�Xq�Wn�t|dt�rT|d}n1ytj
|d�}Wntk
r�g}nXxF|D]>}y!|j	tj
|d
�d�Wq�tk
r�q�q�Xq�W|r"|jdg�}|jg|D]}||kr�|^q��|j�q"n|jd�dk	r�t�fd�dD��r�t|d�}|r�t|jdg��}	|	jg|D]}tj|�^q��t|	�|d<q�nd|krXt�fd�dD��rXxmt|d�D]X\}
}y5|d|
ddkr9|	|
d|d|
<nWq�t
k
rPq�q�Xq�WndS(uC
    Additional container-specific post-translation processing
    u
port_bindingsupublish_all_portsu*Cannot be used when publish_all_ports=Trueuhostnameunetwork_modeuhostu%Cannot be used when network_mode=Trueubindsc3@s|]}|�kVqdS(N((t.0tx(tskip_translate(sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pys	<genexpr>Tsuvolumeuvolumesubindu:ic3@s|]}|�kVqdS(N((R
R(R(sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pys	<genexpr>usuexposeuportsc3@s|]}|�kVqdS(N((R
R(R(sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pys	<genexpr>�sutcpiN(ubindsuvolumeuvolumes(u
port_bindingsuexposeuports(uexposeuports(tgettNoneRtTruetallt
isinstancetdictRt
itervaluestappendt	TypeErrortlistRtsplittAttributeErrort
IndexErrort
setdefaulttextendtsorttsettupdatetget_port_deft	enumerate(R	Rtinvalidtauto_volumestvaltauto_volume_defstactual_volumesRt
ports_to_bindt
ports_to_opentindext_((RsI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyt_post_processingCsh









!

)
cK@s
tj|�S(N(Rttranslate_bool(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytauto_remove�scK@sdt|t�s`t|t�s`ytj|�}Wq]tk
rYtdj|���q]Xq`n|S(u�
    On the CLI, these are passed as multiple instances of a given CLI option.
    In Salt, we accept these as a comma-delimited list but the API expects a
    Python list.
    u5'{0}' is not a dictionary or list of bind definitions(RRRRRRRtformat(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytbinds�s
cK@s
tj|�S(N(Rt
translate_int(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytblkio_weight�scK@s�tj|dd�}xmtt|��D]Y}y t||d�||d<Wq(ttfk
r�tdj||���q(Xq(W|S(u�
    CLI input is a list of PATH:WEIGHT pairs, but the API expects a list of
    dictionaries in the format [{'Path': path, 'Weight': weight}]
    uPathuWeightu5Weight '{Weight}' for path '{Path}' is not an integer(	Rtmap_valsRtlentintRt
ValueErrorRR0(R&R	tidx((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytblkio_weight_device�s cK@s
tj|�S(N(Rttranslate_stringlist(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytcap_add�scK@s
tj|�S(N(RR:(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytcap_drop�scK@s
tj|�S(N(Rttranslate_command(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytcommand�scK@s
tj|�S(N(Rt
translate_str(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytcpuset_cpus�scK@s
tj|�S(N(RR?(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytcpuset_mems�scK@s
tj|�S(N(RR2(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyt	cpu_group�scK@s
tj|�S(N(RR2(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyt
cpu_period�scK@s
tj|�S(N(RR2(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyt
cpu_shares�scK@s
tj|�S(N(RR.(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytdetach�scK@stj|dt�S(Ntnumeric_rate(Rttranslate_device_ratestFalse(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytdevice_read_bps�scK@stj|dt�S(NRF(RRGR(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytdevice_read_iops�scK@stj|dt�S(NRF(RRGRH(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytdevice_write_bps�scK@stj|dt�S(NRF(RRGR(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytdevice_write_iops�scK@s
tj|�S(N(RR:(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytdevices�scK@s
tj|�S(N(RR:(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytdns_opt�scK@s
tj|�S(N(RR:(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyt
dns_search�scK@sFtj|�}|jdt�rBx|D]}tj|�q(Wn|S(Nuvalidate_ip_addrs(RR:RRtvalidate_ip(R&R	titem((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytdns�s

cK@s
tj|�S(N(RR?(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyt
domainnamescK@s
tj|�S(N(RR=(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyt
entrypointscK@stj|dd�S(Nt	delimiteru=(Rttranslate_key_val(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytenvironmentscK@sPtj|dd�}|jdt�rLx"|D]}tj||�q.Wn|S(NRUu:uvalidate_ip_addrs(RRVRRRP(R&R	tkey((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytextra_hostss

cK@s
tj|�S(N(RR:(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyt	group_addscK@s
tj|�S(N(Rttranslate_dict(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pythost_configscK@s
tj|�S(N(RR?(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pythostnamescK@s
tj|�S(N(RR?(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytipc_mode scK@s
tj|�S(N(RR?(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyt	isolation$scK@s
tj|�S(N(Rttranslate_labels(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytlabels(scK@stj|dd�S(NRUu:(RRV(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytlinks,scK@s
tj|�S(N(RR?(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyR
0scK@stj|dd�S(NRUu=(RRV(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyR4scK@stj|dd�S(NRUu=(RRV(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytlxc_conf8scK@s
tj|�S(N(RR?(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytmac_address<scK@s
tj|�S(N(Rttranslate_bytes(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyt	mem_limit@scK@s
tj|�S(N(RR2(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytmem_swappinessDscK@s
tj|�S(N(RRe(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyt
memswap_limitHscK@s
tj|�S(N(RR?(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytnameLscK@s
tj|�S(N(RR.(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytnetwork_disabledPscK@s
tj|�S(N(RR?(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytnetwork_modeTscK@s
tj|�S(N(RR.(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytoom_kill_disableXscK@s
tj|�S(N(RR2(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyt
oom_score_adj\scK@s
tj|�S(N(RR?(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytpid_mode`scK@s
tj|�S(N(RR2(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyt
pids_limitdscK@s�|jdt�}t|t�s�t|t�srytj|�}Wqrtk
rntjtj	|��}qrXnxJt
t|��D]6}t||tj�s�tj	||�||<q�q�Wd�}i}x|D]}tj|d�}t|�}|dkr�tj	|d�}	|	dkr3t
d��n|	jd�\}	}
}ytj|	�\}}
Wn%tk
r�}t
|j���nXgt
||
d�D]}|||�df^q�}n>|d	kr:|ddkr�t
d
j|���n|ddkr t
dj|���n|djd�\}	}
}y2tj|	�\}}tj|d�\}}Wn%tk
r�}t
|j���nX||||kr�t
dj|d|	���ntt
||d��}tt
||d��}gt
t|��D]#}||||�||f^q}n�|d
kr�|dd	!\}}|rotj|�n|d	jd�\}	}
}ytj|	�\}}Wn%tk
r�}t
|j���nXtt
||d��}|dkrdgt|�}n�ytj|�\}}Wn%tk
rG}t
|j���nXtt
||d��}||||kr�t
dj||	���ngt|�D]D\}}|||�||dkr�|fn
|||ff^q�}nt
dj||���x�|D]�\}}||kr.|||<q	t||t�rU||j|�n|||g||<x|t
t||��D]d}|||dkr�y%t|jd�d�|||<Wq�tk
r�||||<q�Xq�q�Wq	Wq�W|}n|S(u=
    On the CLI, these are passed as multiple instances of a given CLI option.
    In Salt, we accept these as a comma-delimited list but the API expects a
    Python dictionary mapping ports to their bindings. The format the API
    expects is complicated depending on whether or not the external port maps
    to a different internal port, or if the port binding is for UDP instead of
    TCP (the default). For reference, see the "Port bindings" section in the
    docker-py documentation at the following URL:
    http://docker-py.readthedocs.io/en/stable/api.html
    uvalidate_ip_addrscS@s'|j�dkr#tj|�dS|S(Nuudpu/udp(tlowerRt	text_type(tport_numtproto((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyt_format_portsu:iiuu#Empty port binding definition foundu/iu0Empty host port in port binding definition '{0}'u5Empty container port in port binding definition '{0}'u^Host port range ({0}) does not have the same number of ports as the container port range ({1})iuY'{0}' is an invalid port binding definition (at most 3 components are allowed, found {1})N(RRRRRRRRRRqRR5tstring_typesRt	partitiontget_port_rangeR7t__str__RR0RPR#RR6(R&R	tvalidate_ip_addrsR8Rttbindingstbindingt
bind_partstnum_bind_partstcontainer_portR,RststarttendtexcRrt	bind_valstcport_startt	cport_endthport_startt	hport_endt
cport_listt
hport_listRthost_ipt	host_porttcporttbind_def((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyt
port_bindingshs�
	
5<W
%
!	c
K@stt|t�slytj|�}Wqltk
rht|tj�rP|g}qitdj|���qlXnt	�}x�|D]�}t|tj�r�|j
|�q|ny|jd�\}}}Wn&tk
r�tdj|���nXytj|�\}}Wn%t
k
r,}t|j���nX|jgt||d�D]}	tj|	|�^qG�q|Wt|�S(u"
    Like cap_add, cap_drop, etc., this option can be specified multiple times,
    and each time can be a port number or port range. Ultimately, the API
    expects a list, but elements in the list are ints when the port is TCP, and
    a tuple (port_num, 'udp') when the port is UDP.
    u$'{0}' is not a valid port definitionu/i(RRRRRRt
integer_typesRR0R taddRvRwR7RxR!RR"(
R&R	t	new_portsRQR,Rstrange_startt	range_endR�R((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytportss2
	


	4cK@s
tj|�S(N(RR.(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyt
privileged-scK@s
tj|�S(N(RR.(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytpublish_all_ports1scK@s
tj|�S(N(RR.(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyt	read_only5scK@s�tj|dddd�}t|�dkr<td��n|d}yt|d�|d<Wn0ttfk
r�tdj|d���nX|S(	u
    CLI input is in the format NAME[:RETRY_COUNT] but the API expects {'Name':
    name, 'MaximumRetryCount': retry_count}. We will use the 'fill' kwarg here
    to make sure the mapped result uses '0' for the count if this optional
    value was omitted.
    uNameuMaximumRetryCounttfillu0iuOnly one policy is permittediu Retry count '{0}' is non-numeric(RR4R5RR6RR7R0(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytrestart_policy9s	
cK@s
tj|�S(N(RR:(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytsecurity_optXscK@s
tj|�S(N(RRe(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytshm_size\scK@s
tj|�S(N(RR.(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyt
stdin_open`scK@s
tj|�S(N(RR?(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytstop_signaldscK@s
tj|�S(N(RR2(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytstop_timeouthscK@stj|dd�S(NRUu=(RRV(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytstorage_optlscK@stj|dd�S(NRUu=(RRV(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytsysctlspscK@s
tj|�S(N(RR[(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyttmpfstscK@s
tj|�S(N(RR.(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytttyxscK@s>tj|�}x(tt|��D]}t||t�s"y8tj||dd�\}}tj|dd�}Wn0ttfk
r�t	dj
||���nXt|�dkr�|d9}n|\}}y/i|d6t|�d6t|�d6||<Wq6ttfk
r2t	d	j
||���q6Xq"q"W|S(
Nu=iu:uIUlimit definition '{0}' is not in the format type=soft_limit[:hard_limit]iuNameuSoftuHardu)Limit '{0}' contains non-numeric value(s)(
RR:RR5RRRRR7RR0R6R(R&R	R8tulimit_nametlimitstcompst
soft_limitt
hard_limit((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytulimits|s,


cK@s�t|tj�s?yt|�}Wq?ttfk
r;q?Xnt|tjtjf�sitd��n6t|tj�r�|dkr�tdj|���n|S(u6
    This can be either a string or a numeric uid
    uValue must be a username or uidiu'{0}' is an invalid uid(	RRR�R6RR7RuRR0(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytuser�scK@s
tj|�S(N(RR?(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytuserns_mode�scK@s
tj|�S(N(RR?(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyt
volume_driver�scK@sNtj|�}x8|D]0}tjj|�stdj|���qqW|S(u,
    Should be a list of absolute paths
    u'{0}' is not an absolute path(RR:tostpathtisabsRR0(R&R	RQ((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytvolumes�s
cK@s
tj|�S(N(RR:(R&R	((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytvolumes_from�scK@sRytjj|�}Wntk
r/t}nX|sNtdj|���n|S(u"
    Must be an absolute path
    u'{0}' is not an absolute path(R�R�R�RRHRR0(R&R	tis_abs((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pytworking_dir�s

(Zt__doc__t
__future__RRRR�tsalt.exceptionsRtsalt.extRtsalt.ext.six.movesRtRtALIASESRt	iteritemsRtytALIASES_REVMAPRR-R/R1R3R9R;R<R>R@RARBRCRDRERIRJRKRLRMRNRORRRSRTRWRYRZR\R]R^R_RaRbR
RRcRdRfRgRhRiRjRkRlRmRnRoR�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�(((sI/usr/lib/python2.7/site-packages/salt/utils/docker/translate/container.pyt<module>s�
4		J																																															�	(																		
	

Zerion Mini Shell 1.0