U
    id                      @   sd   d dl mZmZmZmZ d dlmZ d dlZG dd deZG dd deeZ	G dd	 d	eeZ
dS )
    )PluginRedHatPluginUbuntuPlugin	PluginOpt)	translateNc                	   @   sj   e Zd ZdZdZdZeddddeddd	ded
dddeddeddgZdZ	dd Z
dd Zdd ZdS )
Kubernetesz+Kubernetes container orchestration platform
kubernetes)Z	containerallFz'collect all namespace output separately)defaultdescdescribez(collect describe output of all resourcespodlogsz$capture stdout/stderr logs from podspodlogs-filter z1only collect logs from pods matching this pattern)r
   Zval_typer   kubectlc                    s   t  fdd jD S )Nc                    s   g | ]}  |qS  )path_exists).0fselfr   ?/usr/lib/python3/dist-packages/sos/report/plugins/kubernetes.py
<listcomp>&   s     z.Kubernetes.check_is_master.<locals>.<listcomp>)anyfilesr   r   r   r   check_is_master%   s    zKubernetes.check_is_masterc              
      sn    d   d  ddddg ddd	d
ddddddg
}|D ]} j|d qB  s`d S d}dD ]} d j|f  qh d j }|d  dd  }dd |D }ddddddd d!d"d#g
}d$d%d&g}	  fd'd|	D   d( j }
|
d) d*krZ|
d  dd  D ]8}| }|s6q |d* } jd+ j|f d,d- q  d. j   	d/r|
d0d1g  d2 |D ]}d3| } d4rd5 j||f } d6|  |D ]} jd||f |d- qΈ d7rd j|f }|D ]v} d8||f }|d) d*kr
d9d |d  dd  D }|D ],}d j|f } jd:|||f |d- qPq
 d;rd j|f } d<| }|d) d*krd=d |d  dd  D } d>rt d>nd }|D ]4}|rt||sq jd?||f dd- qq d4sjd@ j }|D ]} jd||f |d- qLd S )ANz/etc/kubernetesz/run/flannelZ
KUBECONFIGZKUBERNETES_HTTP_PROXYZKUBERNETES_HTTPS_PROXYZKUBERNETES_NO_PROXYZkubeletzkube-apiserverz
kube-proxyzkube-schedulerzkube-controller-managerzsnap.kubelet.daemonzsnap.kube-apiserver.daemonzsnap.kube-proxy.daemonzsnap.kube-scheduler.daemonz#snap.kube-controller-manager.daemonZunitszget -o json )versionzconfig viewz%s %sz%s get namespacesoutput   c                 S   s(   g | ] }|rt | r| d  qS r   )lensplit)r   nr   r   r   r   O   s       z$Kubernetes.setup.<locals>.<listcomp>ZdeploymentsZ	ingressesZlimitrangespodsZpoliciesZpvcZrcZresourcequotasZroutesservicesZ
namespacesZprojectsZpvsc                    s   g | ]}d  j |f qS )	%s get %s)kube_cmd)r   resr   r   r   r   d   s    z%s get nodesZstatusr   z%s describe node %snodes)Zsubdirz%s get --raw /metricszkubevirt-virtctlZvmsZvmiszvirtctl versionz--namespace=%sr	   z%s %s %sz	%s eventsr   r&   c                 S   s   g | ]}|  d  qS r    r"   )r   kr   r   r   r      s     z%s describe %s %sr   z%s get podsc                 S   s   g | ]}|  d  qS r    r*   )r   pr   r   r   r      s     r   z
%s logs %sz%s get --all-namespaces=true)Zadd_copy_specZadd_env_varadd_journalr   Zadd_cmd_outputr'   Zcollect_cmd_output
splitlinesr"   Zis_installedextendZ
get_optionZexec_cmdr   rematch)r   ZsvcssvcZkube_get_cmdZsubcmdZknZ	kn_outputZknspsZ	resourcesZglobal_resourcesr)   lineZwordsZnoder#   ZknspZk_cmdr(   rZk_listr+   r$   ZregZpodr   r   r   setup(   s    





zKubernetes.setupc                 C   s    d}|  d|d | d d S )NzX(?P<var>{\s*"name":\s*[^,]*(pass|pwd|key|token|cred|PASS|PWD|KEY)[^,]*,\s*"value":)[^}]*r   z\g<var> "********")Zdo_cmd_output_subZdo_cmd_private_sub)r   Z
env_regexpr   r   r   postproc   s
    zKubernetes.postprocN)__name__
__module____qualname__Z
short_descZplugin_nameZprofilesr   strZoption_listr'   r   r5   r6   r   r   r   r   r      s*    r   c                       s(   e Zd ZdZdZdZ fddZ  ZS )RedHatKubernetes)r   zkubernetes-masterzatomic-openshift-master)#/etc/origin/master/admin.kubeconfigz(/etc/origin/node/pods/master-config.yamlr   c                    s"   |  drd| _tt|   d S )Nr<   Zoc)r   r'   superr;   r5   r   	__class__r   r   r5      s    
zRedHatKubernetes.setup)r7   r8   r9   packagesr   r'   r5   __classcell__r   r   r>   r   r;      s   r;   c                       s(   e Zd ZdZdZdZ fddZ  ZS )UbuntuKubernetes)r   )z#/root/cdk/cdk_addons_kubectl_configz/etc/kubernetes/admin.conf)zcdk.master.auth-webhookc                    sV   | j D ]$}| |r|  jd| 7  _ q,q| jD ]}| j|d q2tt|   d S )Nz --kubeconfig=%sr   )r   r   r'   r%   r-   r=   rB   r5   )r   Z_kconfr2   r>   r   r   r5      s    


zUbuntuKubernetes.setup)r7   r8   r9   r@   r   r%   r5   rA   r   r   r>   r   rB      s   rB   )Zsos.report.pluginsr   r   r   r   Zfnmatchr   r0   r   r;   rB   r   r   r   r   <module>   s    *