
自定义资源进阶
|
285
Cost: in.Status.Cost,
},
}
out.TypeMeta.APIVersion = apiVersion
for i := range in.Spec.Toppings {
for j := 0; j < in.Spec.Toppings[i].Quantity; j++ {
out.Spec.Toppings = append(
out.Spec.Toppings, in.Spec.Toppings[i].Name)
}
}
return out, nil
default:
}
klog.V(2).Infof("Unknown type %T", in)
return nil, fmt.Errorf("unknown type %T", in)
}
不管是哪个方向的转换,我们都直接复制
TypeMeta
和
ObjectMeta
字段并把
API
版本修改为指定的版本,然后转换配料对象,这部分才是整个结构体中
真正发生变化的部分。
如果还有更多的版本需要转换,就需要为每个版本提供额外的双向转换函数。
另一种实现方法是像在聚合
API
服务器中那样(参考“
8.4.3
内部类型和转换”)
使用一个中枢版本作为各个版本之间的过渡版本,这样就不需要为每一个外
部版本分别实现转换函数了。
9.1.5
部署转换
Webhook
下面我们将开始部署转换 ...