-
Notifications
You must be signed in to change notification settings - Fork 88
/
disasterrecovery.go
118 lines (109 loc) · 3.04 KB
/
disasterrecovery.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package disasterrecovery
import (
"github.com/pkg/errors"
kotsadmtypes "github.com/replicatedhq/kots/pkg/kotsadm/types"
"gopkg.in/yaml.v2"
kustomizetypes "sigs.k8s.io/kustomize/api/types"
"sigs.k8s.io/kustomize/kyaml/resid"
)
type LabelTransformer struct {
APIVersion string `json:"apiVersion" yaml:"apiVersion"`
Kind string `json:"kind" yaml:"kind"`
Metadata OverlySimpleMetadata `json:"metadata" yaml:"metadata"`
Labels map[string]string `json:"labels,omitempty" yaml:"labels,omitempty"`
FieldSpecs []kustomizetypes.FieldSpec `json:"fieldSpecs,omitempty" yaml:"fieldSpecs,omitempty"`
}
type OverlySimpleMetadata struct {
Name string `yaml:"name"`
}
func GetLabelTransformerYAML(additionalLabels map[string]string) ([]byte, error) {
labels := map[string]string{
kotsadmtypes.BackupLabel: kotsadmtypes.BackupLabelValue,
}
for k, v := range additionalLabels {
labels[k] = v
}
// References (selectors, matchLabels, and PVCs that are part of a StatefulSet are excluded)
// CommonLabels list: https://github.com/kubernetes-sigs/kustomize/blob/6b81ae9a93c06c2ef500a407e27a52c68b01e3d8/api/konfig/builtinpluginconsts/commonlabels.go
// LabelTransformer example: https://github.com/kubernetes-sigs/kustomize/blob/73cb5961223b80b233a9a0684d4133207881c103/plugin/builtin/labeltransformer/LabelTransformer_test.go
labelTransformer := LabelTransformer{
APIVersion: "builtin",
Kind: "LabelTransformer",
Metadata: OverlySimpleMetadata{
Name: "backup-label-transformer",
},
Labels: labels,
FieldSpecs: []kustomizetypes.FieldSpec{
{
Path: "metadata/labels",
CreateIfNotPresent: true,
},
{
Path: "spec/template/metadata/labels",
Gvk: resid.Gvk{
Version: "v1",
Kind: "ReplicationController",
},
CreateIfNotPresent: true,
},
{
Path: "spec/template/metadata/labels",
Gvk: resid.Gvk{
Kind: "Deployment",
},
CreateIfNotPresent: true,
},
{
Path: "spec/template/metadata/labels",
Gvk: resid.Gvk{
Kind: "ReplicaSet",
},
CreateIfNotPresent: true,
},
{
Path: "spec/template/metadata/labels",
Gvk: resid.Gvk{
Kind: "DaemonSet",
},
CreateIfNotPresent: true,
},
{
Path: "spec/template/metadata/labels",
Gvk: resid.Gvk{
Group: "apps",
Kind: "StatefulSet",
},
CreateIfNotPresent: true,
},
{
Path: "spec/template/metadata/labels",
Gvk: resid.Gvk{
Group: "batch",
Kind: "Job",
},
CreateIfNotPresent: true,
},
{
Path: "spec/jobTemplate/metadata/labels",
Gvk: resid.Gvk{
Group: "batch",
Kind: "CronJob",
},
CreateIfNotPresent: true,
},
{
Path: "spec/jobTemplate/spec/template/metadata/labels",
Gvk: resid.Gvk{
Group: "batch",
Kind: "CronJob",
},
CreateIfNotPresent: true,
},
},
}
b, err := yaml.Marshal(labelTransformer)
if err != nil {
return nil, errors.Wrap(err, "failed to marshal disaster recovery label transformer")
}
return b, nil
}