Squerly从嵌套的dict和list中去掉了单调乏味的内容。

squerl的Python项目详细描述


概述

让在python字典和列表的嵌套中四处挖掘变得不那么乏味。在

动机

假设您有一堆这样的yaml文档(为了简洁起见,截取了一些数据):

计划程序:

apiVersion:operator.openshift.io/v1kind:KubeSchedulermetadata:annotations:release.openshift.io/create-only:'true'creationTimestamp:2019-09-09 06:16:52+00:00generation:1name:clusterresourceVersion:'20599'selfLink:/apis/operator.openshift.io/v1/kubeschedulers/clusteruid:6a531a9d-d2c9-11e9-b8a1-005056be2a3bspec:managementState:Managedstatus:conditions:-lastTransitionTime:2019-09-09 06:41:57+00:00status:'False'type:MonitoringResourceControllerDegradedlatestAvailableRevision:6latestAvailableRevisionReason:''nodeStatuses:-currentRevision:6nodeName:control-plane-0-currentRevision:6nodeName:control-plane-2-currentRevision:5nodeName:control-plane-1targetRevision:6readyReplicas:0

管制员

^{pr2}$

APIServer服务器

apiVersion:operator.openshift.io/v1kind:KubeAPIServermetadata:annotations:release.openshift.io/create-only:'true'creationTimestamp:2019-09-09 06:16:52+00:00generation:4name:clusterresourceVersion:'20635'selfLink:/apis/operator.openshift.io/v1/kubeapiservers/clusteruid:6a5ecbb4-d2c9-11e9-b8a1-005056be2a3bspec:logLevel:''managementState:ManagedobservedConfig:admission:pluginConfig:network.openshift.io/ExternalIPRanger:configuration:allowIngressIP:falseapiVersion:network.openshift.io/v1kind:ExternalIPRangerAdmissionConfignetwork.openshift.io/RestrictedEndpointsAdmission:configuration:apiVersion:network.openshift.io/v1kind:RestrictedEndpointsAdmissionConfigrestrictedCIDRs:-10.128.0.0/14-172.30.0.0/16apiServerArguments:cloud-config:-/etc/kubernetes/static-pod-resources/configmaps/cloud-config/configcloud-provider:-some_cloudfeature-gates:-ExperimentalCriticalPodAnnotation=true-RotateKubeletServerCertificate=true-SupportPodPidsLimit=true-LocalStorageCapacityIsolation=falseauthConfig:oauthMetadataFile:/etc/kubernetes/static-pod-resources/configmaps/oauth-metadata/oauthMetadatacorsAllowedOrigins:-//127\.0\.0\.1(:|$)-//localhost(:|$)imagePolicyConfig:internalRegistryHostname:image-registry.openshift-image-registry.svc:5000servicesSubnet:172.30.0.0/16servingInfo:namedCertificates:-certFile:/etc/kubernetes/static-pod-certs/secrets/localhost-serving-cert-certkey/tls.crtkeyFile:/etc/kubernetes/static-pod-certs/secrets/localhost-serving-cert-certkey/tls.key-certFile:/etc/kubernetes/static-pod-certs/secrets/service-network-serving-certkey/tls.crtkeyFile:/etc/kubernetes/static-pod-certs/secrets/service-network-serving-certkey/tls.key-certFile:/etc/kubernetes/static-pod-certs/secrets/external-loadbalancer-serving-certkey/tls.crtkeyFile:/etc/kubernetes/static-pod-certs/secrets/external-loadbalancer-serving-certkey/tls.key-certFile:/etc/kubernetes/static-pod-certs/secrets/internal-loadbalancer-serving-certkey/tls.crtkeyFile:/etc/kubernetes/static-pod-certs/secrets/internal-loadbalancer-serving-certkey/tls.keystorageConfig:urls:-https://etcd-0.example.com:2379-https://etcd-1.example.com:2379-https://etcd-2.example.com:2379operatorLogLevel:''unsupportedConfigOverrides:nullstatus:conditions:-lastTransitionTime:2019-09-09 06:34:21+00:00message:3 nodes are active; 1 nodes are at revision 2; 2 nodes are at revision 5status:'True'type:Available-lastTransitionTime:2019-09-09 06:21:53+00:00message:1 nodes are at revision 2; 2 nodes are at revision 5status:'True'type:ProgressinglatestAvailableRevision:5latestAvailableRevisionReason:''nodeStatuses:-currentRevision:2nodeName:control-plane-1targetRevision:5-currentRevision:5nodeName:control-plane-0-currentRevision:5nodeName:control-plane-2readyReplicas:0

你想知道在最新版本中,哪些节点没有提到节点状态。在

你可以这样做:

defget_stale(resources):results=[]fordocinresources:forstatusindoc.get("status",{}).get("nodeStatuses",[]):if"targetRevision"instatusandstatus["targetRevision"]!=status["currentRevision"]:results.append(doc)returnresultsscheduler=load("scheduler.yaml")cm=load("controller_manager.yaml")api=load("api_server.yaml")stale=get_stale([scheduler,cm,api])

或者你可以这样做:

fromsquerlyimportList,convert,Queryablescheduler=convert(load("scheduler.yaml"))cm=convert(load("controller_manager.yaml"))api=convert(load("api_server.yaml"))docs=Queryable(List([scheduler,cm,api]))stale=docs.status.nodeStatuses.where(lambdas:s.currentRevision!=s.targetRevision).roots

或者更好的方法是运行./analyze.py must-gather.local.12345/并访问 every存档中的资源:

In[1]:stale=conf.status.nodeStatuses.where(lambdas:s.currentRevision!=s.targetRevision).rootsIn[2]:stale.kindOut[2]:-kind:KubeScheduler-kind:KubeAPIServerIn[3]:conf.find(("message",matches("Perm")))Out[3]:-message:'rm: cannot remove ''/etc/cni/net.d/80-openshift-network.conf'': Permissiondenied'-message:'rm: cannot remove ''/etc/cni/net.d/80-openshift-network.conf'': Permissiondenied'-message:'+ source /run/etcd/environment/bin/sh:line3:/run/etcd/environment:Permissiondenied'In[8]:conf.find(("message",matches("Perm"))).upto("items").metadata.nameOut[8]:-name:sdn-7llq6-name:etcd-member-control-plane-0

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何读取、验证和移动数据。csv文件?   用于在线蛇游戏的java解析scaing   java JavaFX:在窗口上移动元素(阶段)调整大小   mysql如何使用java中的IOUtils包在jsp中显示多个图像?   Java dateFormat不可解析日期异常   spring mvc java。执行单元测试时lang.AssertionError   java在一个webapp中运行多个调度器有什么问题吗?   JAVAlang.ArrayIndexOutofBounds异常:1未来。get()多线程   java使用MDC或spring boot中的任何过滤器屏蔽日志消息中的密码,而不使用logback。xml文件   与应用服务器的java AJP和SSL通信   java Hibernate更新列表中的特定对象   Java小程序:使用keylistener移动多边形   java访问是一个独立于MainActivity的进程   来自服务器的java重复密钥或完整性约束冲突消息:“列“volume”不能为null”   java是否有任何方法可以确保在Flink on job cancel with savepoint上通知所有检查点侦听器检查点完成?