Skip to content

Commit f55b82e

Browse files
Add conversion doc (#473)
Signed-off-by: Prajyot-Parab <[email protected]>
1 parent 277daf8 commit f55b82e

File tree

3 files changed

+28
-0
lines changed

3 files changed

+28
-0
lines changed

docs/book/src/SUMMARY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
- [Creating a cluster](./topics/powervs/creating-a-cluster.md)
1212
- [Developer Guide](./developer/index.md)
1313
- [Rapid iterative development with Tilt](./developer/tilt.md)
14+
- [Guide for API conversions](./developer/conversion.md)
1415
- [Release Process](./developer/release.md)
1516
- [Troubleshooting](./user/troubleshooting.md)
1617
- [Reference](./reference/reference.md)

docs/book/src/developer/conversion.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Guide for API conversions
2+
3+
## Introduction
4+
The purpose of this document is to help/assist contributors with future API conversions using conversion-gen tool.
5+
6+
## Prerequisites
7+
1. Create a new API version.
8+
```shell
9+
kubebuilder create api --group <group> --version <version> --kind <kind>
10+
```
11+
2. Copy over existing types, and make the required changes.
12+
3. Mark a storage version, add marker `+kubebuilder:storageversion` to concerned version package.
13+
14+
**_NOTE:_** [Refer for more detailed information about prerequisites.](https://kubebuilder.io/multiversion-tutorial/api-changes.html#changing-things-up)
15+
16+
## Conversion flow
17+
1. In each “spoke” version package, add marker `+k8s:conversion-gen` directive pointing to the “hub” version package. It must be in `doc.go`. [Refer](https://github.com/kubernetes-sigs/cluster-api-provider-ibmcloud/blob/main/api/v1alpha4/doc.go)
18+
2. In “hub” version package, create `doc.go` file without any marker. [Refer](https://github.com/kubernetes-sigs/cluster-api-provider-ibmcloud/blob/main/api/v1beta1/doc.go)
19+
3. In “spoke” version package, add a var `localSchemeBuilder = &SchemeBuilder.SchemeBuilder` in `groupversion_info.go` so the auto-generated code would compile. [Refer]( https://github.com/kubernetes-sigs/cluster-api-provider-ibmcloud/blob/e55357a520089abc6ac2a9ca91a5b9cf0606bbbc/api/v1alpha4/groupversion_info.go#L37)
20+
4. In “hub” version package, create a `conversion.go` to implement the “hub” methods. [Refer](https://github.com/kubernetes-sigs/cluster-api-provider-ibmcloud/blob/main/api/v1beta1/conversion.go)
21+
5. Run target `make generate-go-conversions-core`, this will generate `zz_generated.conversion.go` in the spoke version package.
22+
6. In "spoke" version package, update `{kind}_conversion.go` to implement Convertible for each type. When `conversion-gen` stops generating methods because of incompatibilities or we need to override the behavior, we stick them in this source file. Our “spoke” versions need to implement the Convertible interface. Namely, they’ll need ConvertTo and ConvertFrom methods to convert to/from the hub version. [Refer](https://github.com/kubernetes-sigs/cluster-api-provider-ibmcloud/blob/main/api/v1alpha4/ibmpowervs_conversion.go)
23+
24+
## References
25+
- [What are hubs and spokes?](https://book.kubebuilder.io/multiversion-tutorial/conversion-concepts.html)
26+
- [Sample Tutorial](https://book.kubebuilder.io/multiversion-tutorial/tutorial.html)

docs/book/src/developer/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# Developer Guide
22

33
- [Rapid iterative development with Tilt](/developer/tilt.html)
4+
- [Guide for API conversions](/developer/conversion.html)
45
- [Release process](/developer/release.html)

0 commit comments

Comments
 (0)