Skip to content

Commit

Permalink
Merge pull request #188 from lhb008/lhb-4.5
Browse files Browse the repository at this point in the history
翻译4.5 Markers for Config/Code Generation
  • Loading branch information
majinghe authored Aug 17, 2020
2 parents 6e902a3 + 1b068cb commit 96d81f0
Showing 1 changed file with 28 additions and 43 deletions.
71 changes: 28 additions & 43 deletions docs/book/src/reference/markers.md
Original file line number Diff line number Diff line change
@@ -1,92 +1,77 @@
# Markers for Config/Code Generation
# Config/Code 生成标记

KubeBuilder makes use of a tool called
[controller-gen](/reference/controller-gen.md) for
generating utility code and Kubernetes YAML. This code and config
generation is controlled by the presence of special "marker comments" in
Go code.
Kubebuilder 利用一个叫做[controller-gen](/reference/controller-gen.md)的工具来生成公共的代码和 Kubernetes YAML 文件。
这些代码和配置的生成是由 Go 代码中特殊存在的“标记注释”来控制的。

Markers are single-line comments that start with a plus, followed by
a marker name, optionally followed by some marker specific configuration:

标记都是以加号开头的单行注释,后面跟着一个标记名称,而跟随的关于标记的特定配置则是可选的。

```go
// +kubebuilder:validation:Optional
// +kubebuilder:validation:MaxItems=2
// +kubebuilder:printcolumn:JSONPath=".status.replicas",name=Replicas,type=string
```

See each subsection for information about different types of code and YAML
generation.
关于不同类型的代码和 YAML 生成可以查看每一小节来获取详细信息。

## 在 KubeBuilder 中生成代码 & 制品

## Generating Code & Artifacts in KubeBuilder
Kubebuilder 项目有两个 `make` 命令用到了 controller-gen:

KubeBuilder projects have two `make` targets that make use of
controller-gen:
- `make manifests` 用来生成 Kubernetes 对象的 YAML 文件,像[CustomResourceDefinitions](./markers/crd.md)[WebhookConfigurations](./markers/webhook.md)[RBAC
roles](./markers/rbac.md)

- `make manifests` generates Kubernetes object YAML, like
[CustomResourceDefinitions](./markers/crd.md),
[WebhookConfigurations](./markers/webhook.md), and [RBAC
roles](./markers/rbac.md).
- `make generate` 用来生成代码,像[runtime.Object/DeepCopy
implementations](./markers/object.md)

- `make generate` generates code, like [runtime.Object/DeepCopy
implementations](./markers/object.md).

See [Generating CRDs](./generating-crd.md) for a comprehensive overview.
查看[生成 CRDs]来获取综合描述。

## Marker Syntax
## 标记语法

Exact syntax is described in the [godocs for
controller-tools](https://pkg.go.dev/sigs.k8s.io/controller-tools/pkg/markers?tab=doc).
准确的语法在[godocs for
controller-tools](https://pkg.go.dev/sigs.k8s.io/controller-tools/pkg/markers?tab=doc)有描述。

In general, markers may either be:
通常,标记可以是:

- **Empty** (`+kubebuilder:validation:Optional`): empty markers are like boolean flags on the command line
-- just specifying them enables some behavior.
- **Empty** (`+kubebuilder:validation:Optional`):空标记像命令行中的布尔标记位-- 仅仅是指定他们来开启某些行为。

- **Anonymous** (`+kubebuilder:validation:MaxItems=2`): anonymous markers take
a single value as their argument.
- **Anonymous** (`+kubebuilder:validation:MaxItems=2`):匿名标记使用单个值作为参数。

- **Multi-option**
(`+kubebuilder:printcolumn:JSONPath=".status.replicas",name=Replicas,type=string`): multi-option
markers take one or more named arguments. The first argument is
separated from the name by a colon, and latter arguments are
comma-separated. Order of arguments doesn't matter. Some arguments may
be optional.
(`+kubebuilder:printcolumn:JSONPath=".status.replicas",name=Replicas,type=string`):多选项标记使用一个或多个命名参数。第一个参数与名称之间用冒号隔开,而后面的参数使用逗号隔开。参数的顺序没有关系。有些参数是可选的。

Marker arguments may be strings, ints, bools, slices, or maps thereof.
Strings, ints, and bools follow their Go syntax:

标记的参数可以是字符,整数,布尔,切片,或者 map 类型。
字符,整数,和布尔都应该符合 Go 语法:

```go
// +kubebuilder:validation:ExclusiveMaximum=false
// +kubebuilder:validation:Format="date-time"
// +kubebuilder:validation:Maximum=42
```

For convenience, in simple cases the quotes may be omitted from strings,
although this is not encouraged for anything other than single-word
strings:
为了方便,在简单的例子中字符的引号可以被忽略,尽管这种做法在任何时候都是不被鼓励使用的,即便是单个字符:

```go
// +kubebuilder:validation:Type=string
```

Slices may be specified either by surrounding them with curly braces and
separating with commas:
切片可以用大括号和逗号分隔来指定。

```go
// +kubebuilder:webhooks:Enum={"crackers, Gromit, we forgot the crackers!","not even wensleydale?"}
```

or, in simple cases, by separating with semicolons:
或者,在简单的例子中,用分号来隔开。

```go
// +kubebuilder:validation:Enum=Wallace;Gromit;Chicken
```

Maps are specified with string keys and values of any type (effectively
`map[string]interface{}`). A map is surrounded by curly braces (`{}`),
each key and value is separated by a colon (`:`), and each key-value
pair is separated by a comma:
Maps 是用字符类型的键和任意类型的值(有效地`map[string]interface{}`)来指定的。一个 map 是由大括号(`{}`)包围起来的,每一个键和每一个值是用冒号(`:`)隔开的,每一个键值对是由逗号隔开的。

```go
// +kubebuilder:validation:Default={magic: {numero: 42, stringified: forty-two}}
Expand Down

0 comments on commit 96d81f0

Please sign in to comment.