protoc_gen_crd

command
v0.0.0-...-b03bf0d Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 23, 2023 License: MIT Imports: 12 Imported by: 0

README

protoc-gen-crd

This is a protobuf compiler plugin to generate Kubernetes YAML spec for CRD from protobuf definition.

Usage

First, you need to write the protobuf spec with the CRD annotations:

import "library/go/k8s/protoc_gen_crd/proto/crd.proto";

message Spec {
    // your fields
}

message Status {
    // your fields
}

message MyCrdKind {
    option (protoc_gen_crd.k8s_crd) = {
           api_group: "my-api.yandex-team.ru",
           kind: "MyCrdKind",
           plural: "mycrdkinds",
           singular: "mycrdkind",
    };

    Spec spec = 1;
    Status status = 2;
}

Then add the following to ya.make of your PROTO_LIBRARY:

INCLUDE(${ARCADIA_ROOT}/library/go/k8s/protoc_gen_crd/build.inc)

Finally you build it:

ya make --add-result .crd.yaml --replace-result

This will give you <filename>.crd.yaml, which can be put with kubectl apply -f <filename>.crd.yaml.

Kustomize patch hints

Optionally you can specify kustomize patch parameters via special annotation:

message Spec {
    repeated MyField my_fields = 1 [(protoc_gen_crd.k8s_patch) = {
        merge_key: "some_key",
        merge_strategy: "merge",
    }];
}

Usage in k8s controllers

If you are writing k8s CRD controller in Go, you might also want to include deepcopy and doc generators for kubebuilder in your ya.make:

INCLUDE(${ARCADIA_ROOT}/yt/yt/orm/go/codegen/proto-comments/build.inc)
INCLUDE(${ARCADIA_ROOT}/yp/go/protoc-gen-deepcopy/build.inc)

The contents of MyCrdKind should mimic the corresponding Go struct that would be registered in controller:

//+kubebuilder:object:root=true
type MyCrdKind struct {
	metav1.TypeMeta   `json:",inline"`
	metav1.ObjectMeta `json:"metadata,omitempty"`

	Spec   *protobuf_v1.Spec   `json:"spec,omitempty"`
	Status *protobuf_v1.Status `json:"status,omitempty"`
}

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL