3 ܓil3@sddlmZddlZddlZddlZddlmZmZmZm Z m Z dZ dZ dZ Gd d d eZGd ddeeZGdddee eZdS)) translateN)Plugin RedHatPlugin DebianPlugin UbuntuPlugin PluginOptkubelet kuberneteskube-apiserver kube-proxykube-schedulerkube-controller-manager/etc/kubernetes/admin.confc@seZdZdZdZdDZdZddddd gZd gZd d d dgZ dddddddddddddddddd d!gZ d"d#d$d%gZ e d&d'd(d)e d*d'd+d)e d,d'd-d)e d.d'd/d)e d0d1e d2d3gZd4Zd5d6Zd7d8Zd9d:Zd;d<Zd=d>Zd?d@ZdAdBZdCS)E Kubernetesz+Kubernetes container orchestration platformr containeriz/etc/kubernetesz /run/flannelz/var/lib/kubelet/config.yamlz"/var/lib/kubelet/kubeadm-flags.envz /var/lib/kubelet/*_manager_statez/etc/kubernetes/pkiz /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-*eventsZ deploymentsZ ingressespodsZpvcservicesZ daemonsetsZ replicasetsZ endpointsZ statefulsetsZ configmapsZserviceaccountsZsecretsZjobsZcronjobsZ clusterrolesZclusterrolebindingsZ limitrangesZresourcequotasZscZpvZrolesZ rolebindingsallFz'collect all namespace output separately)defaultdescdescribez(collect describe output of all resourceskubelogsz4copy some kube-system pod logs without using the APIpodlogsz2capture stdout/stderr logs from pods using the APIzpodlogs-filterz1only collect logs from pods matching this pattern)rZval_typerZkubectlcCsDtjjdrdSx.|jD]$}|j|r|jd|7_PqWdS)N KUBECONFIGz --kubeconfig=)osenvirongetfiles path_existskube_cmd)selfZ_kconfr# /usr/lib/python3.6/kubernetes.pyset_kubeconfigks    zKubernetes.set_kubeconfigcstfddjDS)z" Check if this is the master node c3s|]}j|VqdS)N)r ).0f)r"r#r$ usz-Kubernetes.check_is_master..)anyr)r"r#)r"r$check_is_mastersszKubernetes.check_is_mastercsjjjjjdr.jjjddddgjsLdSx&dD]}jj d|d d qRWjd rjfd d j Dd d njfdd j Dd d j j dd d }|ddkojdr>xR|dj ddD]:}|j }|sq|d}jj d|d d qWjj dgd d jj dd d jdrjjddgjdjjdS)NrrZKUBERNETES_HTTP_PROXYZKUBERNETES_HTTPS_PROXYZKUBERNETES_NO_PROXYversion config view z cluster-info)subdirrcsg|]}jd|qS)z get -o json )r!)r&res)r"r#r$ sz$Kubernetes.setup..csg|]}jd|qS)z get )r!)r&r/)r"r#r$r0sz get nodesstatusrroutputz describe node z get -o json nodesz get --raw /metricszkubevirt-virtctlZvmsZvmiszvirtctl version)r+r,) add_copy_spec config_filesZadd_forbidden_pathforbidden_paths get_optionkube_system_logsZ add_env_varr*add_cmd_outputr!global_resourcescollect_cmd_output splitlinessplit is_installed resourcesextendcollect_per_resource_detailscollect_all_resources)r"subcmdZnodeslineZwordsZnoder#)r"r$setupws\              zKubernetes.setupc Csr|j|jddd}|djdd}dd|D}x2|D](}d |}|jd r|jd |}x,|jD]"}|j|d |d |dqrW|jdrV|jd |}x|jD]}|dkrq|j|d|}|ddkrdd|djddD} xH| D]@} |jd |}|j|d|d | d |d|dqWqW|jdr@|j|q@WdS)z7 Collect details about each resource in all namespaces z get namespacesz cluster-info)r.r2r3NcSs(g|] }|rt|jr|jdqS)r)lenr=)r&nr#r#r$r0sz;Kubernetes.collect_per_resource_details..z --namespace=rz get -o json r-z cluster-info/rrz get r1rcSsg|]}|jdqS)r)r=)r&kr#r#r$r0sz describe /r)r;r!r<r7r?r9exec_cmd _get_pod_logs) r"ZknsZ kn_outputZknspsZnspaceZknspk_cmdr/retZk_listitemr#r#r$rAs8         z'Kubernetes.collect_per_resource_detailsc Csh|jd|}|j|d}|ddkrdtj|d}|jdrTt|jdnd}x|dD]}|rtj||dd  rqdd |dd d |dd }d |dkrxN|dd D]>}|dd } |d } |j|jd|d| d| |dqWd|dkrdxP|ddD]@}|dd } |d } |j|jd|d| d| |dqWqdWdS)Nz get -o json z podsr1rr2zpodlogs-filteritemsZmetadatanamez cluster-info/ namespacez /podlogs/Z containersspecr-z logs z -c )r.ZinitContainers) r!rJjsonloadsr7rrematchr9) r"rQrLrMrZregZpodZ_subdirZcontZpod_nameZ cont_namer#r#r$rKs.     zKubernetes._get_pod_logscCsB|jds>|jd}x&|jD]}|j|d|ddqWdS)z% Collect details about all resources rz get --all-namespaces=truer-z cluster-info)r.N)r7r!r?r9)r"rLr/r#r#r$rBs     z Kubernetes.collect_all_resourcescCsvd}|j|j|d|j|jddj|jd}|j|d}d}ddjt|j|jd}|j|||dS)NzX(?P{\s*"name":\s*[^,]*(pass|pwd|key|token|cred|PASS|PWD|KEY)[^,]*,\s*"value":)[^}]*z\g "********"z^(|)zLS0tLS1CRUdJ[A-Za-z0-9+/=]+z***** SCRUBBED BASE64 PEM *****) Zdo_cmd_output_subr!Zdo_cmd_private_subjoinr5do_file_private_sublistrZdo_path_regex_sub)r"Z env_regexpZpathexpZregexpZsubstr#r#r$postprocs   zKubernetes.postprocN)r)__name__ __module__ __qualname__Z short_descZ plugin_nameZprofilesZplugin_timeoutr5r6r8r?r:rstrZ option_listr!r%r*rErArKrBr\r#r#r#r$r&sn E(! rcs4eZdZeZeZeZfddZ fddZ Z S)RedHatKubernetescs|jdrdStjS)Nzopenshift-hyperkubeF)r>super check_enabled)r") __class__r#r$rc/s zRedHatKubernetes.check_enabledcs|jtjdS)N)r%rbrE)r")rdr#r$rE5szRedHatKubernetes.setup) r]r^r_ KUBE_PACKAGESpackages KUBECONFIGSr KUBE_SVCSrrcrE __classcell__r#r#)rdr$ra's  racsHeZdZedZedZedZfd d Z d d Z fddZ Z S)UbuntuKubernetesk8s#/root/cdk/cdk_addons_kubectl_config4/var/snap/microk8s/current/credentials/client.configsnap.kubelet.daemonsnap.kube-apiserver.daemonsnap.kube-proxy.daemonsnap.kube-scheduler.daemon#snap.kube-controller-manager.daemoncdk.master.auth-webhookcsP|j|jdrd|_n|jdr2d|_|j|jjddgtjdS)NZmicrok8szmicrok8s kubectlrkz k8s kubectlz/root/cdk/kubelet/config.yamlz!/root/cdk/audit/audit-policy.yaml)r%r>r!_canonical_kubernetesr5r@rbrE)r")rdr#r$rEOs  zUbuntuKubernetes.setupc sddddddddg}|j|d d d }d d g}|j|d|d|d|d|d|d|dg|jfdd|DdS)Nzsnap.k8s.containerd.servicezsnap.k8s.etcd.servicezsnap.k8s.k8sd.servicezsnap.k8s.kube-apiserver.servicez(snap.k8s.kube-controller-manager.servicezsnap.k8s.kube-proxy.servicezsnap.k8s.kube-scheduler.servicezsnap.k8s.kubelet.service)Zunitsrkz/var/snap/k8s/commonr1rz/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.yamlcsg|]}d|qS)r-r#)r&rC)k8s_cmdr#r$r0|sz:UbuntuKubernetes._canonical_kubernetes..)Z add_journalr4r9)r"Z k8s_unitsZ k8s_commonZ k8s_subcmdsr#)rur$rt^s. z&UbuntuKubernetes._canonical_kubernetescstj|jddS)Nz;/var/snap/k8s/common/var/lib/k8sd/state/truststore/k8s.yaml)rbr\rZ)r")rdr#r$r\s zUbuntuKubernetes.postproc)rk)rlrm)rnrorprqrrrs) r]r^r_rerfrgrrhrrErtr\rir#r#)rdr$rj:s !rj)rr )rr r r r )r)ZfnmatchrrUrSrZsos.report.pluginsrrrrrrerhrgrrarjr#r#r#r$ s"