%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /lib/python2.7/site-packages/salt/modules/
Upload File :
Create Path :
Current File : //lib/python2.7/site-packages/salt/modules/container_resource.pyo

�
���^c
@@s;dZddlmZmZmZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZ
ddlZ
ddlZ
ddlmZmZeje�ZdZd�Zd�Zd�Zd	�Zedddeded
ededd��Zedddeed��ZdS(
ua
Common resources for LXC and systemd-nspawn containers

.. versionadded:: 2015.8.0

These functions are not designed to be called directly, but instead from the
:mod:`lxc <salt.modules.lxc>`, :mod:`nspawn <salt.modules.nspawn>`, and
:mod:`docker <salt.modules.docker>` execution modules. They provide for
common logic to be re-used for common actions.
i(tabsolute_importtprint_functiontunicode_literalsN(tCommandExecutionErrortSaltInvocationErroruJPATH=/bin:/usr/bin:/sbin:/usr/sbin:/opt/bin:/usr/local/bin:/usr/local/sbinc@s"tj���fd��}|S(u;
    Decorator for common function argument validation
    c@s�|jd�}|jd�}id
d6dd6dd6}||krotd	j|d
jt|�����n|||kr�tdjd
j||����n|dkr�tjjjd�r�td��n�|tjj	j
|��S(Nucontainer_typeuexec_driveru
lxc-attachunsenterudocker-execudockerulxcunspawnu2Invalid container type '{0}'. Valid types are: {1}u, u8Invalid command execution driver. Valid drivers are: {0}umThe 'lxc-attach' execution driver has been chosen, but lxc-attach is not available. LXC may not be installed.(u
lxc-attachunsenterudocker-exec(u
lxc-attach(unsenter(tgetRtformattjointsortedtsalttutilstpathtwhichtargstclean_kwargs(R
tkwargstcontainer_typetexec_drivertvalid_driver(twrapped(sC/usr/lib/python2.7/site-packages/salt/modules/container_resource.pytwrapper's$
!"(t	functoolstwraps(RR((RsC/usr/lib/python2.7/site-packages/salt/modules/container_resource.pyt	_validate#scC@s
dj|�S(uE
    Return the nsenter command to attach to the named container
    u4nsenter --target {0} --mount --uts --ipc --net --pid(R(tpid((sC/usr/lib/python2.7/site-packages/salt/modules/container_resource.pyt_nsenterCscC@sV||djtj|��dt�d}y|j�dSWntk
rQdSXdS(u9
    Get the MD5 checksum of a file from a container
    u
md5sum {0}tignore_retcodeustdoutiN(RtpipestquotetTruetsplitt
IndexErrortNone(tnameRtrun_functoutput((sC/usr/lib/python2.7/site-packages/salt/modules/container_resource.pyt_get_md5Ms

cC@sryE|jd�rDtd|�}|s@tdj|���n|SWn&tk
rmtdj|���nX|S(u�
    Wrapper for cp.cache_file which raises an error if the file was unable to
    be cached.

    CLI Example:

    .. code-block:: bash

        salt myminion container_resource.cache_file salt://foo/bar/baz.txt
    usalt://u
cp.cache_fileuUnable to cache {0}uInvalid source file {0}(t
startswitht__salt__RRtAttributeErrorR(tsourcet
cached_source((sC/usr/lib/python2.7/site-packages/salt/modules/container_resource.pyt
cache_file[s
udebugc
C@s5d2}
|d1krd}n3||
krHtdjdj|
����nd}|d1ksit|t�rrg}nXt|ttf�s�y|jd	�}Wq�t	k
r�t
jd
�g}q�Xn|}|dkr�d}|
r|d
jtj
|
��7}n|tk	r<|d7}d|kr<|djt�7}q<n|djg|D]7}|tjkrLdj|tj
tj|��^qL�7}|djtj
|�|�7}n�|dkr�tdj|�|�}dj|�}|tk	r|d7}d|kr|djt�7}qn|djg|D]7}|tjkr.dj|tj
tj|��^q.�7}|dj|�7}n�|dkr_d}|r�|d7}n|dj|�7}|tk	r�|d7}d|kr�|djt�7}q�n|djg|D]7}|tjkrdj|tj
tj|��^q�7}|dj|�7}n|s�t||d|d|d |d!|	�}n�d3\}}tjjj|d#|d$|d%kr�d%nd&d'|d(|d)td*td+td,t�}z0y�x�|jryb|j�\}}|r-||7}n|rY|d1krL||7}qY||7}ntjd-�Wq�tk
r{Pq�Xq�W|d1kr�|n"i|jd6d.d/6|d6|d6}Wngtjjjk
r!tj �}t
j!|�|d1kr�|nid0d6d.d/6|d6|d6}nXWd1|j"�X|S(4uS
    Common logic for running shell commands in containers

    path
        path to the container parent (for LXC only)
        default: /var/lib/lxc (system default)

    CLI Example:

    .. code-block:: bash

        salt myminion container_resource.run mycontainer 'ps aux' container_type=docker exec_driver=nsenter output=stdout
    ustdoutustderruretcodeuallucmd.runu0'output' param must be one of the following: {0}u, ucmd.run_allu,u Invalid keep_env value, ignoringu
lxc-attachulxc-attach u-P {0} u--clear-env uPATHu--set-var {0} u u--set-var {0}={1}u -n {0} -- {1}unsenteru{0}.pidu8nsenter --target {0} --mount --uts --ipc --net --pid -- uenv -i u{0} u{0}={1}u {0}udocker-execudocker exec u-i tstdintpython_shelltoutput_loglevelRutshelltlog_stdin_leveluquietuinfotlog_stdout_leveltlog_stderr_levelt
log_stdoutt
log_stderrt
stream_stdoutt
stream_stderrg�?iupidiN(ustdoutustderruretcodeuall(uu(#R RRRt
isinstancetbooltlistttupleRR'tlogtwarningRRRtPATHtostenvironR&R	R
tvttTerminaltFalsethas_unread_datatrecvttimetsleeptKeyboardInterruptt
exitstatustTerminalExceptiont	tracebackt
format_excterrort	terminate(R!tcmdRRR#tno_startR+R,R-RRtuse_vttkeep_envtvalid_outputtcmd_functto_keeptfull_cmdtxRtrettstdouttstderrtproctcstdouttcstderrttrace((sC/usr/lib/python2.7/site-packages/salt/modules/container_resource.pytrunus�		



	
;"	
	
;

	
;
	



	


c@s#tdj�����fd�}i�itd6}	�d'kr[�|	d<��d<n��fd�}
|
|�}|dkr�tdj|���nt|�}tjj|�\}
}tjj|�s�t	d	��nKtjj
|�st	d
j|���n!tjj|�s-t	d��ntjj|�sNt	d��n||d
jtj
|��|	�ddkr�tjj||�}n�tjj|�\}}||d
jtj
|��|	�ddkrz|r\||djtj
|��|	�}|ddkrwdj||�}|drJ|dj|d�7}nt|��qwqzt	dj|�|���n|r�||djtj
|��|	�ddkr�tdj|���ntd|d�}|t|||�krtjdj|||��tStjdj|�||��|dkr�d}�rh|djtj
���7}ndj|t|||�}nm|dkr�tdj��|�}d j|t|�t|�}n'|d!kr�d"j||t|�}ntd#|d$td%d&�|t|||�kS((u]
    Common logic for copying files to containers

    path
        path to the container parent (for LXC only)
        default: /var/lib/lxc (system default)

    CLI Example:

    .. code-block:: bash

        salt myminion container_resource.copy_to mycontainer /local/file/path /container/file/path container_type=docker exec_driver=nsenter
    u	{0}.statec@sNtj|�}�dkr4d|kr4�|d<ntdj��||�S(Nulxcupathu{0}.run_all(ulxc(tcopytdeepcopyR&R(R
takwargs(RR(sC/usr/lib/python2.7/site-packages/salt/modules/container_resource.pytrun_all&s

uignore_retcodeulxcupathc@s!�r�|��S�|�SdS(N((R!(tstatetstate_kwargs(sC/usr/lib/python2.7/site-packages/salt/modules/container_resource.pyt_state3s
urunninguContainer '{0}' is not runninguSource path must be absoluteuSource file {0} does not existuSource must be a regular fileu!Destination path must be absoluteutest -d {0}uretcodeiumkdir -p {0}u=Unable to create destination directory {0} in container '{1}'ustderru: {0}u3Directory {0} does not exist on {1} container '{2}'utest -e {0}uGDestination path {0} already exists. Use overwrite=True to overwrite itufile.get_sumumd5u0{0} and {1}:{2} are the same file, skipping copyu)Copying {0} to {1} container '{2}' as {3}u
lxc-attachu -P {0}u=cat "{0}" | {4} --clear-env --set-var {1} -n {2} -- tee "{3}"unsenteru{0}.pidu$cat "{0}" | {1} env -i {2} tee "{3}"udocker-execu3cat "{0}" | docker exec -i {1} env -i {2} tee "{3}"ucmd.runR,R-uquiet(ulxc(R&RRRR*R=RRtisabsRtexiststisfileRRRR$R:tdebugR<R(R!R(tdestRRRt	overwritetmakedirsRat
cmd_kwargsRdtc_statet
local_filet
source_dirtsource_nametdest_dirt	dest_nametresultRKt
source_md5t	lxcattachtcopy_cmdR((RRRbRcsC/usr/lib/python2.7/site-packages/salt/modules/container_resource.pytcopy_to
s�


	

( t__doc__t
__future__RRRRR^tloggingR=RRDRItsalt.utils.argsR	tsalt.utils.patht
salt.utils.vttsalt.exceptionsRRt	getLoggert__name__R:R<RRR$R*R RARR]Rw(((sC/usr/lib/python2.7/site-packages/salt/modules/container_resource.pyt<module>sH	 	
		�

Zerion Mini Shell 1.0