/
keptnapp_types.go
125 lines (106 loc) · 3.84 KB
/
keptnapp_types.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
119
120
121
122
123
124
125
/*
Copyright 2022.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package v1
import (
"github.com/keptn/lifecycle-toolkit/lifecycle-operator/apis/lifecycle/v1/common"
operatorcommon "github.com/keptn/lifecycle-toolkit/lifecycle-operator/common"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/trace"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
// KeptnAppSpec defines the desired state of KeptnApp
type KeptnAppSpec struct {
// Version defines the version of the application. For automatically created KeptnApps,
// the version is a function of all KeptnWorkloads that are part of the KeptnApp.
Version string `json:"version"`
// Revision can be modified to trigger another deployment of a KeptnApp of the same version.
// This can be used for restarting a KeptnApp which failed to deploy,
// e.g. due to a failed preDeploymentEvaluation/preDeploymentTask.
// +kubebuilder:default:=1
// +optional
Revision uint `json:"revision,omitempty"`
// Workloads is a list of all KeptnWorkloads that are part of the KeptnApp.
// +optional
Workloads []KeptnWorkloadRef `json:"workloads,omitempty"`
}
// KeptnAppStatus defines the observed state of KeptnApp
type KeptnAppStatus struct {
// CurrentVersion indicates the version that is currently deployed or being reconciled.
// +optional
CurrentVersion string `json:"currentVersion,omitempty"`
}
// KeptnWorkloadRef refers to a KeptnWorkload that is part of a KeptnApp
type KeptnWorkloadRef struct {
// Name is the name of the KeptnWorkload.
Name string `json:"name"`
// Version is the version of the KeptnWorkload.
Version string `json:"version"`
}
// +kubebuilder:object:root=true
// +kubebuilder:storageversion
// +kubebuilder:subresource:status
// KeptnApp is the Schema for the keptnapps API
type KeptnApp struct {
metav1.TypeMeta `json:",inline"`
// +optional
metav1.ObjectMeta `json:"metadata,omitempty"`
// Spec describes the desired state of the KeptnApp.
// +optional
Spec KeptnAppSpec `json:"spec,omitempty"`
// Status describes the current state of the KeptnApp.
// +optional
Status KeptnAppStatus `json:"status,omitempty"`
}
// +kubebuilder:object:root=true
// KeptnAppList contains a list of KeptnApp
type KeptnAppList struct {
metav1.TypeMeta `json:",inline"`
// +optional
metav1.ListMeta `json:"metadata,omitempty"`
Items []KeptnApp `json:"items"`
}
func init() {
SchemeBuilder.Register(&KeptnApp{}, &KeptnAppList{})
}
func (a KeptnApp) GetAppVersionName() string {
return operatorcommon.CreateResourceName(common.MaxK8sObjectLength, common.MinKeptnNameLen, a.Name, a.Spec.Version, common.Hash(a.Generation))
}
func (a KeptnApp) SetSpanAttributes(span trace.Span) {
span.SetAttributes(a.GetSpanAttributes()...)
}
func (a KeptnApp) GenerateAppVersion(previousVersion string) KeptnAppVersion {
return KeptnAppVersion{
ObjectMeta: metav1.ObjectMeta{
Name: a.GetAppVersionName(),
Namespace: a.Namespace,
},
Spec: KeptnAppVersionSpec{
KeptnAppSpec: a.Spec,
AppName: a.Name,
PreviousVersion: previousVersion,
},
}
}
func (a KeptnApp) GetSpanAttributes() []attribute.KeyValue {
return []attribute.KeyValue{
common.AppName.String(a.Name),
common.AppVersion.String(a.Spec.Version),
}
}
func (a KeptnApp) GetEventAnnotations() map[string]string {
return map[string]string{
"appName": a.Name,
"appVersion": a.Spec.Version,
"appRevision": common.Hash(a.Generation),
}
}