在 k8s的 配置文件 如果转json 去看,会发现有三次层的嵌套字典,如果只有一个类 转 json 形成嵌套字典,有一些键就必须要写str 写死,非常不友好,如果键还是跟着类 的属性名走 ,就最好不过了。像java scala c++ 都有内部类
便寻思python 有没有 ,发现当然有,而且还是很不错 的,
class Dag:
class Cat:
def __init__(self):
self.containerP=8080
def __init__(self):
self.apiVersion="apps/v1beta1"
self.kind='Deployment'
wifi_arr=['geo','tmtl','father']
self.metadata=wifi_arr
cat=self.Cat()
ports_Arr=[cat.__dict__]
self.ports=ports_Arr
dic={'app': {
"containers": [
{
"name": "springboot-demo",
"image": "springboot-demo",
"imagePullPolicy": "IfNotPresent",
"ports": [
{
"containerPort": 5555
}
]
}
]
}}
#print(str(dic))
self.di=dic
meta_Dict={'name':'springboot-demo-deployment','labels':dic}
self.metadata=meta_Dict
Dog 是外部类 ,Cat 是内部类,我在内部类定义的属性,在外部类可以访问,最关键的是,我在 外部类的 构造函数中,可以初始化内部类,然后 利用内部类的属性 再为外部类的属性赋值,
最后大家发现 生成的yaml 完全符合要求
apiVersion: apps/v1beta1
di: &id001
app:
containers:
- image: springboot-demo
imagePullPolicy: IfNotPresent
name: springboot-demo
ports:
- containerPort: 5555
kind: Deployment
metadata:
labels: *id001
name: springboot-demo-deployment
ports:
- containerP: 8080
唯一缺憾的是python的反射 生成类 还是很薄弱的,