o
    id                     @   s@   d dl Z d dlmZ d dlmZ d dlmZ G dd deZdS )    N)ContainerRuntime)sos_get_command_output)quotec                   @   s:   e Zd ZdZdZdZdd ZdddZd	d
 Zdd Z	dS )CrioContainerRuntimez-Runtime class to use for systems running criocriocrictlc                 C   s   dS )NF )selfr   r   </usr/lib/python3/dist-packages/sos/policies/runtimes/crio.pycheck_can_copy   s   z#CrioContainerRuntime.check_can_copyFc                 C   sv   g }d| j |r	dndf }| jr9t|| jjd}|d dkr9t|d }|d D ]}||d	 |d
 d f q)|S )zGet a list of containers present on the system.

        :param get_all: If set, include stopped containers as well
        :type get_all: ``bool``
        z%s ps %s -o jsonz-a chrootstatusr   output
containersidmetadataname)binaryactiver   policysysrootjsonloadsappend)r	   get_allr   _cmdoutout_json	containerr   r   r
   get_containers   s   z#CrioContainerRuntime.get_containersc                 C   s   g }| j r^td| j | jjd}|d dkr^t|d }|d D ]<}t|d dkr<|d D ]}|||d f q/q!t|d	 dkrGd
}n|d	 d 	dd }||d |d f q!|S )zGet a list of images present on the system

        :returns: A list of 2-tuples containing (image_name, image_id)
        :rtype: ``list``
        z%s images -o jsonr   r   r   r   imagesrepoTagsr   repoDigestsz<none>@z:<none>)
r   r   r   r   r   r   r   lenr   split)r	   r"   r   r   imagerepo_tag
image_namer   r   r
   
get_images,   s"   
zCrioContainerRuntime.get_imagesc                 C   s8   |rt |}n|}| |}|durd| j||f S dS )a  Format a command to run inside a container using the runtime

        :param container: The name or ID of the container in which to run
        :type container: ``str``

        :param cmd: The command to run inside `container`
        :type cmd: ``str``

        :param quotecmd: Whether the cmd should be quoted.
        :type quotecmd: ``bool``

        :returns: Formatted string to run `cmd` inside `container`
        :rtype: ``str``
        Nz%s %s %sr   )r   get_container_by_namerun_cmd)r	   r    cmdquotecmd
quoted_cmdcontainer_idr   r   r
   fmt_container_cmdE   s   

z&CrioContainerRuntime.fmt_container_cmdN)F)
__name__
__module____qualname____doc__r   r   r   r!   r+   r2   r   r   r   r
   r      s    
r   )r   sos.policies.runtimesr   sos.utilitiesr   pipesr   r   r   r   r   r
   <module>   s
   	