o
    *b                      @   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)	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                    s8    d   d  g d g d}|D ]} j|d q  s&d S d}dD ]} d j|f  q* d	 j }|d
  dd  }dd |D }g d}g d}	  fdd|	D   d j }
|
d dkr|
d
  dd  D ]}| }|sq||d } jd j|f dd q| d j   	dr|
ddg  d |D ]}d| } drd j||f } d|  |D ]} jd||f |d q͈ d r%d j|f }|D ]:} d!||f }|d dkr$d"d |d
  dd  D }|D ]}d j|f } jd#|||f |d qq d$r{d j|f } d%| }|d dkr{d&d |d
  dd  D } d'r\t d'nd }|D ]}|rnt||snq` jd(||f d)d q`q dsd* j }|D ]} jd||f |d qd S d S )+Nz/etc/kubernetesz/run/flannel)Z
KUBECONFIGZKUBERNETES_HTTP_PROXYZKUBERNETES_HTTPS_PROXYZKUBERNETES_NO_PROXY)
Z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services)Z
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 nodes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      g | ]}|  d  qS r!   r#   )r   kr   r   r   r          z%s describe %s %sr   z%s get podsc                 S   r,   r!   r-   )r   pr   r   r   r      r/   r   z
%s logs %sr%   z%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subcmd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   r:   r;   r   r   r   r   r      s,     r   c                       (   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 )NrB   oc)r   r(   superrA   r:   r   	__class__r   r   r:      s   
zRedHatKubernetes.setup)r<   r=   r>   packagesr   r(   r:   __classcell__r   r   rE   r   rA      s
    rA   c                       r@   )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  _ nq| jD ]}| j|d qtt|   d S )Nz --kubeconfig=%sr   )r   r   r(   r&   r1   rD   rI   r:   )r   Z_kconfr6   rE   r   r   r:      s   


zUbuntuKubernetes.setup)r<   r=   r>   rG   r   r&   r:   rH   r   r   rE   r   rI      s
    rI   )Zsos.report.pluginsr   r   r   r   fnmatchr   r4   r   rA   rI   r   r   r   r   <module>   s    *