1515package resources
1616
1717import (
18+ "fmt"
1819 "log"
20+ "reflect"
1921
2022 "github.com/Mirantis/k8s-AppController/pkg/client"
2123 "github.com/Mirantis/k8s-AppController/pkg/interfaces"
@@ -58,8 +60,8 @@ func (daemonSetTemplateFactory) Kind() string {
5860
5961// New returns DaemonSets controller for new resource based on resource definition
6062func (d daemonSetTemplateFactory ) New (def client.ResourceDefinition , c client.Interface , gc interfaces.GraphContext ) interfaces.Resource {
61- newDaemonSet : = parametrizeResource (def .DaemonSet , gc , daemonSetParamFields ).(* extbeta1.DaemonSet )
62- return report. SimpleReporter { BaseResource : DaemonSet { Base : Base { def . Meta }, DaemonSet : newDaemonSet , Client : c .DaemonSets ()}}
63+ def . DaemonSet = parametrizeResource (def .DaemonSet , gc , daemonSetParamFields ).(* extbeta1.DaemonSet )
64+ return createNewDaemonSet ( def , c .DaemonSets ())
6365}
6466
6567// NewExisting returns DaemonSets controller for existing resource by its name
@@ -71,12 +73,8 @@ func daemonSetKey(name string) string {
7173 return "daemonset/" + name
7274}
7375
74- func daemonSetStatus (d v1beta1.DaemonSetInterface , name string ) (interfaces.ResourceStatus , error ) {
75- daemonSet , err := d .Get (name )
76- if err != nil {
77- return interfaces .ResourceError , err
78- }
79- if daemonSet .Status .CurrentNumberScheduled == daemonSet .Status .DesiredNumberScheduled {
76+ func daemonSetStatus (d * extbeta1.DaemonSet ) (interfaces.ResourceStatus , error ) {
77+ if d .Status .CurrentNumberScheduled == d .Status .DesiredNumberScheduled {
8078 return interfaces .ResourceReady , nil
8179 }
8280 return interfaces .ResourceNotReady , nil
@@ -89,7 +87,22 @@ func (d DaemonSet) Key() string {
8987
9088// Status returns DaemonSet status. interfaces.ResourceReady means that its dependencies can be created
9189func (d DaemonSet ) Status (meta map [string ]string ) (interfaces.ResourceStatus , error ) {
92- return daemonSetStatus (d .Client , d .DaemonSet .Name )
90+ ds , err := d .Client .Get (d .DaemonSet .Name )
91+ if err != nil {
92+ return interfaces .ResourceError , err
93+ }
94+
95+ if ! d .EqualToDefinition (ds ) {
96+ return interfaces .ResourceWaitingForUpgrade , fmt .Errorf (string (interfaces .ResourceWaitingForUpgrade ))
97+ }
98+ return daemonSetStatus (ds )
99+ }
100+
101+ // EqualToDefinition returns whether the resource has the same values as provided object
102+ func (d DaemonSet ) EqualToDefinition (daemonset interface {}) bool {
103+ ds := daemonset .(* extbeta1.DaemonSet )
104+
105+ return reflect .DeepEqual (ds .ObjectMeta , d .DaemonSet .ObjectMeta ) && reflect .DeepEqual (ds .Spec , d .DaemonSet .Spec )
93106}
94107
95108// Create looks for DaemonSet in k8s and creates it if not present
@@ -107,6 +120,19 @@ func (d DaemonSet) Delete() error {
107120 return d .Client .Delete (d .DaemonSet .Name , & v1.DeleteOptions {})
108121}
109122
123+ func createNewDaemonSet (def client.ResourceDefinition , client v1beta1.DaemonSetInterface ) interfaces.Resource {
124+ return report.SimpleReporter {
125+ BaseResource : DaemonSet {
126+ Base : Base {
127+ Definition : def ,
128+ meta : def .Meta ,
129+ },
130+ DaemonSet : def .DaemonSet ,
131+ Client : client ,
132+ },
133+ }
134+ }
135+
110136// ExistingDaemonSet is a wrapper for K8s DaemonSet object which is deployed on a cluster before AppController
111137type ExistingDaemonSet struct {
112138 Base
@@ -121,7 +147,12 @@ func (d ExistingDaemonSet) Key() string {
121147
122148// Status returns DaemonSet status. interfaces.ResourceReady means that its dependencies can be created
123149func (d ExistingDaemonSet ) Status (meta map [string ]string ) (interfaces.ResourceStatus , error ) {
124- return daemonSetStatus (d .Client , d .Name )
150+ ds , err := d .Client .Get (d .Name )
151+ if err != nil {
152+ return interfaces .ResourceError , err
153+ }
154+
155+ return daemonSetStatus (ds )
125156}
126157
127158// Create looks for existing DaemonSet and returns error if there is no such DaemonSet
0 commit comments