diff options
| author | k8s-merge-robot <k8s.production.user@gmail.com> | 2016-04-28 06:49:46 -0700 |
|---|---|---|
| committer | k8s-merge-robot <k8s.production.user@gmail.com> | 2016-04-28 06:49:46 -0700 |
| commit | 2bb6a7ac1c194d4cc082995656d92cdb09f392fd (patch) | |
| tree | 6c27640c5dac783623ff54a28ba12bc3ccc5b3b7 /adding-an-APIGroup.md | |
| parent | b2a0bc70116a62b046542b20f0a6b594ba009851 (diff) | |
| parent | 16d43fd660a9127b98ad221b7c92279272dc6f9e (diff) | |
Merge pull request #24231 from mikebrow/design-docs-80col-updates
Automatic merge from submit-queue
Cleans up line wrap at 80 cols and some minor editing issues
Address line wrap issue #1488. Also cleans up other minor editing issues in the docs/design/* tree such as spelling errors.
Signed-off-by: mikebrow <brownwm@us.ibm.com>
Diffstat (limited to 'adding-an-APIGroup.md')
| -rw-r--r-- | adding-an-APIGroup.md | 65 |
1 files changed, 50 insertions, 15 deletions
diff --git a/adding-an-APIGroup.md b/adding-an-APIGroup.md index 2732ffa5..240c3eb1 100644 --- a/adding-an-APIGroup.md +++ b/adding-an-APIGroup.md @@ -35,30 +35,55 @@ Documentation for other releases can be found at Adding an API Group =============== -This document includes the steps to add an API group. You may also want to take a look at PR [#16621](https://github.com/kubernetes/kubernetes/pull/16621) and PR [#13146](https://github.com/kubernetes/kubernetes/pull/13146), which add API groups. +This document includes the steps to add an API group. You may also want to take +a look at PR [#16621](https://github.com/kubernetes/kubernetes/pull/16621) and +PR [#13146](https://github.com/kubernetes/kubernetes/pull/13146), which add API +groups. -Please also read about [API conventions](api-conventions.md) and [API changes](api_changes.md) before adding an API group. +Please also read about [API conventions](api-conventions.md) and +[API changes](api_changes.md) before adding an API group. ### Your core group package: -We plan on improving the way the types are factored in the future; see [#16062](https://github.com/kubernetes/kubernetes/pull/16062) for the directions in which this might evolve. +We plan on improving the way the types are factored in the future; see +[#16062](https://github.com/kubernetes/kubernetes/pull/16062) for the directions +in which this might evolve. -1. Create a folder in pkg/apis to hold you group. Create types.go in pkg/apis/`<group>`/ and pkg/apis/`<group>`/`<version>`/ to define API objects in your group; +1. Create a folder in pkg/apis to hold you group. Create types.go in + pkg/apis/`<group>`/ and pkg/apis/`<group>`/`<version>`/ to define API objects + in your group; -2. Create pkg/apis/`<group>`/{register.go, `<version>`/register.go} to register this group's API objects to the encoding/decoding scheme (e.g., [pkg/apis/extensions/register.go](../../pkg/apis/extensions/register.go) and [pkg/apis/extensions/v1beta1/register.go](../../pkg/apis/extensions/v1beta1/register.go); +2. Create pkg/apis/`<group>`/{register.go, `<version>`/register.go} to register +this group's API objects to the encoding/decoding scheme (e.g., +[pkg/apis/extensions/register.go](../../pkg/apis/extensions/register.go) and +[pkg/apis/extensions/v1beta1/register.go](../../pkg/apis/extensions/v1beta1/register.go); -3. Add a pkg/apis/`<group>`/install/install.go, which is responsible for adding the group to the `latest` package, so that other packages can access the group's meta through `latest.Group`. You probably only need to change the name of group and version in the [example](../../pkg/apis/extensions/install/install.go)). You need to import this `install` package in {pkg/master, pkg/client/unversioned}/import_known_versions.go, if you want to make your group accessible to other packages in the kube-apiserver binary, binaries that uses the client package. +3. Add a pkg/apis/`<group>`/install/install.go, which is responsible for adding +the group to the `latest` package, so that other packages can access the group's +meta through `latest.Group`. You probably only need to change the name of group +and version in the [example](../../pkg/apis/extensions/install/install.go)). You +need to import this `install` package in {pkg/master, +pkg/client/unversioned}/import_known_versions.go, if you want to make your group +accessible to other packages in the kube-apiserver binary, binaries that uses +the client package. -Step 2 and 3 are mechanical, we plan on autogenerate these using the cmd/libs/go2idl/ tool. +Step 2 and 3 are mechanical, we plan on autogenerate these using the +cmd/libs/go2idl/ tool. ### Scripts changes and auto-generated code: 1. Generate conversions and deep-copies: - 1. Add your "group/" or "group/version" into hack/after-build/{update-generated-conversions.sh, update-generated-deep-copies.sh, verify-generated-conversions.sh, verify-generated-deep-copies.sh}; - 2. Make sure your pkg/apis/`<group>`/`<version>` directory has a doc.go file with the comment `// +genconversion=true`, to catch the attention of our gen-conversion script. + 1. Add your "group/" or "group/version" into +hack/after-build/{update-generated-conversions.sh, +update-generated-deep-copies.sh, verify-generated-conversions.sh, +verify-generated-deep-copies.sh}; + 2. Make sure your pkg/apis/`<group>`/`<version>` directory has a doc.go file +with the comment `// +genconversion=true`, to catch the attention of our +gen-conversion script. 3. Run hack/update-all.sh. + 2. Generate files for Ugorji codec: 1. Touch types.generated.go in pkg/apis/`<group>`{/, `<version>`}; @@ -71,19 +96,29 @@ Step 2 and 3 are mechanical, we plan on autogenerate these using the cmd/libs/go ### Client (optional): -We are overhauling pkg/client, so this section might be outdated; see [#15730](https://github.com/kubernetes/kubernetes/pull/15730) for how the client package might evolve. Currently, to add your group to the client package, you need to +We are overhauling pkg/client, so this section might be outdated; see +[#15730](https://github.com/kubernetes/kubernetes/pull/15730) for how the client +package might evolve. Currently, to add your group to the client package, you +need to: -1. Create pkg/client/unversioned/`<group>`.go, define a group client interface and implement the client. You can take pkg/client/unversioned/extensions.go as a reference. +1. Create pkg/client/unversioned/`<group>`.go, define a group client interface +and implement the client. You can take pkg/client/unversioned/extensions.go as a +reference. -2. Add the group client interface to the `Interface` in pkg/client/unversioned/client.go and add method to fetch the interface. Again, you can take how we add the Extensions group there as an example. +2. Add the group client interface to the `Interface` in +pkg/client/unversioned/client.go and add method to fetch the interface. Again, +you can take how we add the Extensions group there as an example. -3. If you need to support the group in kubectl, you'll also need to modify pkg/kubectl/cmd/util/factory.go. +3. If you need to support the group in kubectl, you'll also need to modify +pkg/kubectl/cmd/util/factory.go. ### Make the group/version selectable in unit tests (optional): -1. Add your group in pkg/api/testapi/testapi.go, then you can access the group in tests through testapi.`<group>`; +1. Add your group in pkg/api/testapi/testapi.go, then you can access the group +in tests through testapi.`<group>`; -2. Add your "group/version" to `KUBE_API_VERSIONS` and `KUBE_TEST_API_VERSIONS` in hack/test-go.sh. +2. Add your "group/version" to `KUBE_API_VERSIONS` and `KUBE_TEST_API_VERSIONS` +in hack/test-go.sh. TODO: Add a troubleshooting section. |
