@@ -16,6 +16,7 @@ package resources
1616
1717import (
1818 "log"
19+ "reflect"
1920
2021 "github.com/Mirantis/k8s-AppController/pkg/client"
2122 "github.com/Mirantis/k8s-AppController/pkg/interfaces"
@@ -58,8 +59,8 @@ func (daemonSetTemplateFactory) Kind() string {
5859
5960// New returns DaemonSets controller for new resource based on resource definition
6061func (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 ()}}
62+ def . DaemonSet = parametrizeResource (def .DaemonSet , gc , daemonSetParamFields ).(* extbeta1.DaemonSet )
63+ return createNewDaemonSet ( def , c .DaemonSets ())
6364}
6465
6566// NewExisting returns DaemonSets controller for existing resource by its name
@@ -71,12 +72,8 @@ func daemonSetKey(name string) string {
7172 return "daemonset/" + name
7273}
7374
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 {
75+ func daemonSetStatus (d * extbeta1.DaemonSet ) (interfaces.ResourceStatus , error ) {
76+ if d .Status .CurrentNumberScheduled == d .Status .DesiredNumberScheduled {
8077 return interfaces .ResourceReady , nil
8178 }
8279 return interfaces .ResourceNotReady , nil
@@ -89,7 +86,22 @@ func (d DaemonSet) Key() string {
8986
9087// Status returns DaemonSet status. interfaces.ResourceReady means that its dependencies can be created
9188func (d DaemonSet ) Status (meta map [string ]string ) (interfaces.ResourceStatus , error ) {
92- return daemonSetStatus (d .Client , d .DaemonSet .Name )
89+ ds , err := d .Client .Get (d .DaemonSet .Name )
90+ if err != nil {
91+ return interfaces .ResourceError , err
92+ }
93+
94+ if ! d .equalsToDefinition (ds ) {
95+ return interfaces .ResourceWaitingForUpgrade , nil
96+ }
97+ return daemonSetStatus (ds )
98+ }
99+
100+ // equalsToDefinition returns whether the resource has the same values as provided object
101+ func (d DaemonSet ) equalsToDefinition (daemonset interface {}) bool {
102+ ds := daemonset .(* extbeta1.DaemonSet )
103+
104+ return reflect .DeepEqual (ds .ObjectMeta , d .DaemonSet .ObjectMeta ) && reflect .DeepEqual (ds .Spec , d .DaemonSet .Spec )
93105}
94106
95107// Create looks for DaemonSet in k8s and creates it if not present
@@ -107,6 +119,19 @@ func (d DaemonSet) Delete() error {
107119 return d .Client .Delete (d .DaemonSet .Name , & v1.DeleteOptions {})
108120}
109121
122+ func createNewDaemonSet (def client.ResourceDefinition , client v1beta1.DaemonSetInterface ) interfaces.Resource {
123+ return report.SimpleReporter {
124+ BaseResource : DaemonSet {
125+ Base : Base {
126+ Definition : def ,
127+ meta : def .Meta ,
128+ },
129+ DaemonSet : def .DaemonSet ,
130+ Client : client ,
131+ },
132+ }
133+ }
134+
110135// ExistingDaemonSet is a wrapper for K8s DaemonSet object which is deployed on a cluster before AppController
111136type ExistingDaemonSet struct {
112137 Base
@@ -121,7 +146,12 @@ func (d ExistingDaemonSet) Key() string {
121146
122147// Status returns DaemonSet status. interfaces.ResourceReady means that its dependencies can be created
123148func (d ExistingDaemonSet ) Status (meta map [string ]string ) (interfaces.ResourceStatus , error ) {
124- return daemonSetStatus (d .Client , d .Name )
149+ ds , err := d .Client .Get (d .Name )
150+ if err != nil {
151+ return interfaces .ResourceError , err
152+ }
153+
154+ return daemonSetStatus (ds )
125155}
126156
127157// Create looks for existing DaemonSet and returns error if there is no such DaemonSet
0 commit comments