forked from kubernetes-sigs/kubebuilder-declarative-pattern
/
application.go
74 lines (61 loc) · 2.21 KB
/
application.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
/*
Copyright 2019 The Kubernetes Authors.
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 addon
import (
"context"
"errors"
"github.com/gtracer/kubebuilder-declarative-pattern/pkg/patterns/addon/pkg/utils"
"github.com/gtracer/kubebuilder-declarative-pattern/pkg/patterns/declarative"
"github.com/gtracer/kubebuilder-declarative-pattern/pkg/patterns/declarative/pkg/manifest"
)
// Application Constants
const (
// Used to indicate that not all of application's components
// have been deployed yet.
Pending = "Pending"
// Used to indicate that all of application's components
// have already been deployed.
Succeeded = "Succeeded"
// Used to indicate that deployment of application's components
// failed. Some components might be present, but deployment of
// the remaining ones will not be re-attempted.
Failed = "Failed"
)
// TransformApplicationFromStatus modifies the Application in the deployment based off the CommonStatus
func TransformApplicationFromStatus(ctx context.Context, instance declarative.DeclarativeObject, objects *manifest.Objects) error {
status, err := utils.GetCommonStatus(instance)
if err != nil {
return err
}
healthy := status.Healthy
spec, err := utils.GetCommonSpec(instance)
if err != nil {
return err
}
version := spec.Version
app, err := declarative.ExtractApplication(objects)
if err != nil {
return err
}
if app == nil {
return errors.New("cannot TransformApplicationFromStatus without an app.k8s.io/Application in the manifest")
}
assemblyPhase := Pending
if healthy {
assemblyPhase = Succeeded
}
// TODO: Version should be on CommonStatus as well
app.SetNestedField(version, "spec", "descriptor", "version")
app.SetNestedField(assemblyPhase, "spec", "assemblyPhase")
return nil
}