/
info.go
70 lines (58 loc) · 1.85 KB
/
info.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package cluster
import (
"github.com/cosi-project/runtime/pkg/resource"
"github.com/cosi-project/runtime/pkg/resource/meta"
"github.com/cosi-project/runtime/pkg/resource/protobuf"
"github.com/cosi-project/runtime/pkg/resource/typed"
"github.com/siderolabs/talos/pkg/machinery/proto"
)
// InfoType is type of Info resource.
const InfoType = resource.Type("Infos.cluster.talos.dev")
// InfoID is the resource ID for the current cluster info.
const InfoID = resource.ID("current")
// Info resource holds cluster information.
type Info = typed.Resource[InfoSpec, InfoExtension]
// InfoSpec describes cluster information.
//
//gotagsrewrite:gen
type InfoSpec struct {
ClusterID string `yaml:"clusterId" protobuf:"1"`
ClusterName string `yaml:"clusterName" protobuf:"2"`
}
// NewInfo initializes an Info resource.
func NewInfo() *Info {
return typed.NewResource[InfoSpec, InfoExtension](
resource.NewMetadata(NamespaceName, InfoType, InfoID, resource.VersionUndefined),
InfoSpec{},
)
}
// InfoExtension provides auxiliary methods for Info.
type InfoExtension struct{}
// ResourceDefinition implements [typed.Extension] interface.
func (InfoExtension) ResourceDefinition() meta.ResourceDefinitionSpec {
return meta.ResourceDefinitionSpec{
Type: InfoType,
Aliases: []resource.Type{},
DefaultNamespace: NamespaceName,
PrintColumns: []meta.PrintColumn{
{
Name: "Cluster ID",
JSONPath: `{.clusterId}`,
},
{
Name: "Cluster Name",
JSONPath: `{.clusterName}`,
},
},
}
}
func init() {
proto.RegisterDefaultTypes()
err := protobuf.RegisterDynamic[InfoSpec](InfoType, &Info{})
if err != nil {
panic(err)
}
}