
    -_g1                         d dl mZ d dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
 dZdZdZ G d de      Z G d	 d
ee      Z G d dee	e      Zy)    )	translateN)PluginRedHatPluginDebianPluginUbuntuPlugin	PluginOpt)kubelet
kubernetes)r	   zkube-apiserverz
kube-proxyzkube-schedulerzkube-controller-manager)z/etc/kubernetes/admin.confc            
           e Zd ZdZdZdZdZg dZdgZg dZ	g dZ
g d	Z ed
dd       eddd       eddd       eddd       edded      gZdZd Zd Zd Zd Zd Zd Zd Zy )!
Kubernetesz+Kubernetes container orchestration platformr
   )	containeri  )z/etc/kubernetesz/run/flannelz/var/lib/kubelet/config.yamlz"/var/lib/kubelet/kubeadm-flags.envz /var/lib/kubelet/*_manager_statez/etc/kubernetes/pki)z /var/log/pods/kube-system_etcd-*z*/var/log/pods/kube-system_kube-apiserver-*z3/var/log/pods/kube-system_kube-controller-manager-*z*/var/log/pods/kube-system_kube-scheduler-*)eventsdeployments	ingressespodspvcservices
daemonsetsreplicasets	endpointsstatefulsets
configmapsserviceaccountssecretsjobscronjobsclusterrolesclusterrolebindingslimitrangesresourcequotas)scpvrolesrolebindingsallFz'collect all namespace output separately)defaultdescdescribez(collect describe output of all resourceskubelogsz4copy some kube-system pod logs without using the APIpodlogsz2capture stdout/stderr logs from pods using the APIpodlogs-filter z1only collect logs from pods matching this pattern)r&   val_typer'   kubectlc                     t         j                  j                  d      ry | j                  D ]-  }| j	                  |      s| xj
                  d| z  c_         y  y )N
KUBECONFIGz --kubeconfig=)osenvirongetfilespath_existskube_cmd)self_kconfs     ?/usr/lib/python3/dist-packages/sos/report/plugins/kubernetes.pyset_kubeconfigzKubernetes.set_kubeconfigk   sN    ::>>,'jj 	F'>&!::	    c                 @     t         fd j                  D              S )z" Check if this is the master node c              3   @   K   | ]  }j                  |        y wN)r5   ).0fr7   s     r9   	<genexpr>z-Kubernetes.check_is_master.<locals>.<genexpr>u   s     ;14##A&;s   )anyr4   )r7   s   `r9   check_is_masterzKubernetes.check_is_masters   s    ;

;;;r;   c                    | j                  | j                         | j                  | j                         | j	                  d      r| j                  | j
                         | j                  g d       | j                         sy dD ]$  }| j                  | j                   d| d       & | j	                  d      r;| j                  | j                  D cg c]  }| j                   d|  c}d       n:| j                  | j                  D cg c]  }| j                   d	|  c}d       | j                  | j                   d
d      }|d   dk(  rf| j	                  d      rU|d   j                         dd  D ]<  }|j                         }|s|d   }| j                  | j                   d| d       > | j                  | j                   dgd       | j                  | j                   dd       | j                  d      r.| j                  j!                  ddg       | j                  d       | j#                          | j%                          y c c}w c c}w )Nr)   )r0   KUBERNETES_HTTP_PROXYKUBERNETES_HTTPS_PROXYKUBERNETES_NO_PROXY)versionzconfig view cluster-infosubdirr%    get -o json  get z
 get nodesstatusr   r(   output   z describe node z get -o json nodesz get --raw /metricszkubevirt-virtctlvmsvmiszvirtctl version)add_copy_specconfig_filesadd_forbidden_pathforbidden_paths
get_optionkube_system_logsadd_env_varrC   add_cmd_outputr6   global_resourcescollect_cmd_output
splitlinessplitis_installed	resourcesextendcollect_per_resource_detailscollect_all_resources)r7   subcmdresnodeslinewordsnodes          r9   setupzKubernetes.setupw   s   4,,- 4 45??:&t445 
 	 ##%0 	F==/6(+%   	 ??5!00! ==/se4! %   &
 00! ==/se,! %   & ''4==/(D/= ( ??aDOOJ$?h224QR8 	

Qx##}}o_TF;) $ 	 	}}o/0
  	 	"
 	}}o01! 	 	
 /0NN!!5&/2 12))+""$S!
!s   I%I*c           
         | j                  | j                   dd      }|d   j                         dd }|D cg c]2  }|st        |j	                               s |j	                         d   4 }}|D ]?  }d| }| j                  d	      r=| j                   d
| }| j                  D ]  }| j                  | d| d|         | j                  d      r| j                   d| }| j                  D ]  }|dk(  r	| j                  | d|       }	|	d   dk(  s(|	d   j                         dd D 
cg c]  }
|
j	                         d    }}
|D ]4  }| j                   d| }| j                  | d| d| d| d|        6  | j                  d      s/| j                  |       B yc c}w c c}
w )z7 Collect details about each resource in all namespaces z get namespacesrJ   rK   rP   rQ   Nr   z--namespace=r%   rM   rI   cluster-info/r(   r   rN   rO   z
 describe /r*   )
r]   r6   r^   lenr_   rX   ra   r[   exec_cmd_get_pod_logs)r7   kns	kn_outputnknspsnspaceknspk_cmdrf   retkk_listitems                r9   rc   z'Kubernetes.collect_per_resource_details   s    %%&G-; & = M,,.qr2	'0I!A#aggi.1II 	)F!&*Du%==/tf=>> C'' '3%(!.vh7 (  z*==/4&1>> Ch --5'se(<=C8})"%h-":":"<QR"@"B1!'')A, "B "B$* D'+}}oQtf$=E //#('C5$ @)6vhau'E 0  y)""4(;	) J*"Bs   F:F:F:;F?c                    | j                    d| }| j                  | d      }|d   dk(  rt        j                  |d         }| j	                  d      rt        | j	                  d            nd }|d   D ]  }|rt        j                  ||d   d	         s"d
|d   d    d|d   d	    }d|d   v rB|d   d   D ]7  }|d   d	   }	|d	   }
| j                  | j                    d| d|	 d|
 |       9 d|d   v s|d   d   D ]7  }|d   d	   }	|d	   }
| j                  | j                    d| d|	 d|
 |       9  y y )NrM   z podsrO   r   rP   r+   itemsmetadatanamerm   	namespacez	/podlogs/
containersspecrI   z logs z -c rK   initContainers)	r6   rp   jsonloadsrX   r   rematchr[   )r7   r   rx   ry   r   regpod_subdircontpod_name	cont_names              r9   rq   zKubernetes._get_pod_logs   s   ==/yk:mmugUO,x=A::c(m,D ??#34 T__-=>?:> G} rxxS_V-DE*!*ok:;9!*of568  3v;. #FL 9 #&z?6#:$(L	++#}}oQyk'jYK9#* ,  $s6{2 #F,< = #&z?6#:$(L	++#}}oQyk'jYK9#* , ! r;   c                     | j                  d      s9| j                   d}| j                  D ]  }| j                  | d| d        yy)z% Collect details about all resources r%   z get --all-namespaces=truerI   rJ   rK   N)rX   r6   ra   r[   )r7   rx   rf   s      r9   rd   z Kubernetes.collect_all_resources  s[    u%}}o%?@E~~ ##gQse$) $  &r;   c                 p   d}| j                  | j                  |d       | j                  | j                         ddj                  | j                         d}| j                  |       d}d}ddj                  t        | j                        | j                  z          d}| j                  |||       y )NzX(?P<var>{\s*"name":\s*[^,]*(pass|pwd|key|token|cred|PASS|PWD|KEY)[^,]*,\s*"value":)[^}]*z\g<var> "********"z^(|)zLS0tLS1CRUdJ[A-Za-z0-9+/=]+z***** SCRUBBED BASE64 PEM *****)	do_cmd_output_subr6   do_cmd_private_subjoinrU   do_file_private_sublistr4   do_path_regex_sub)r7   
env_regexppathexpregexpsubsts        r9   postproczKubernetes.postproc  s    
M
t}}j4	6
 	.!2!234A6  ) 01djj!1$2C2C!CDEQGw6r;   N)__name__
__module____qualname__
short_descplugin_nameprofilesplugin_timeoutrU   rW   rY   ra   r\   r   stroption_listr6   r:   rC   rk   rc   rq   rd   r    r;   r9   r   r   &   s    >JKHNL 	OI. 	%@	B*eA	C*eM	O)UK	M"BJ	LK H<C%J&)PB7r;   r   c                   4     e Zd ZeZeZeZ fdZ	 fdZ
 xZS )RedHatKubernetesc                 D    | j                  d      ryt        | 	         S )Nzopenshift-hyperkubeF)r`   supercheck_enabledr7   	__class__s    r9   r   zRedHatKubernetes.check_enabled/  s#    23w$&&r;   c                 B    | j                          t        | 	          y r>   )r:   r   rk   r   s    r9   rk   zRedHatKubernetes.setup5  s    r;   )r   r   r   KUBE_PACKAGESpackagesKUBECONFIGSr4   	KUBE_SVCSr   r   rk   __classcell__r   s   @r9   r   r   '  s!    HEH' r;   r   c                   L     e Zd Zedz   Zedz   Zedz   Z fdZ	d Z
 fdZ xZS )UbuntuKubernetes)k8s)z#/root/cdk/cdk_addons_kubectl_configz4/var/snap/microk8s/current/credentials/client.config)zsnap.kubelet.daemonzsnap.kube-apiserver.daemonzsnap.kube-proxy.daemonzsnap.kube-scheduler.daemonz#snap.kube-controller-manager.daemonzcdk.master.auth-webhookc                     | j                          | j                  d      rd| _        n(| j                  d      rd| _        | j                          | j                  j                  ddg       t        |           y )Nmicrok8szmicrok8s kubectlr   zk8s kubectlz/root/cdk/kubelet/config.yamlz!/root/cdk/audit/audit-policy.yaml)r:   r`   r6   _canonical_kubernetesrU   rb   r   rk   r   s    r9   rk   zUbuntuKubernetes.setupO  so    Z(.DMu%)DM&&(  +/"
 	 	r;   c           
          | j                  d       d}d}ddg}| j                  | d| d| d	| d
| d| d| dg       | j                  |D cg c]	  }| d|  c}       y c c}w )Nz
snap.k8s.*)unitsr   z/var/snap/k8s/commonrO   r3   z/argsz/var/lib/k8s-dqlite/info.yamlz /var/lib/k8s-dqlite/cluster.yamlz'/var/lib/k8sd/state/truststore/k8s.yamlz&/var/lib/k8sd/state/database/info.yamlz)/var/lib/k8sd/state/database/cluster.yamlz/var/lib/k8sd/state/daemon.yamlrI   )add_journalrT   r[   )r7   k8s_cmd
k8s_commonk8s_subcmdsre   s        r9   r   z&UbuntuKubernetes._canonical_kubernetes^  s    |,+
 

 	l% l78l:;lABl@AlCDl9:
 	 	0;
&,wiq!
 	 
s   A-c                 D    t         |           | j                  d       y )Nz;/var/snap/k8s/common/var/lib/k8sd/state/truststore/k8s.yaml)r   r   r   r   s    r9   r   zUbuntuKubernetes.postprocw  s       I	Kr;   )r   r   r   r   r   r   r4   r   r   rk   r   r   r   r   s   @r9   r   r   :  sJ       H   E
   H2K Kr;   r   )fnmatchr   r   r   r1   sos.report.pluginsr   r   r   r   r   r   r   r   r   r   r   r   r;   r9   <module>r      sc     	  	9 9
	
~7 ~7Bz< &AKz< AKr;   