Skip to content

Commit 1de9c31

Browse files
authored
Merge pull request #74 from banzaicloud/desired-state
Enhance desired resource state handling
2 parents 66e0cd0 + b4db7c1 commit 1de9c31

File tree

4 files changed

+50
-48
lines changed

4 files changed

+50
-48
lines changed

pkg/k8sutil/unstructured.go

+12-13
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ package k8sutil
1919
import (
2020
"reflect"
2121

22-
"github.com/banzaicloud/istio-operator/pkg/k8sutil/objectmatch"
2322
"github.com/go-logr/logr"
2423
"github.com/goph/emperror"
2524
apierrors "k8s.io/apimachinery/pkg/api/errors"
@@ -29,13 +28,14 @@ import (
2928
"k8s.io/client-go/dynamic"
3029

3130
istiov1beta1 "github.com/banzaicloud/istio-operator/pkg/apis/istio/v1beta1"
31+
"github.com/banzaicloud/istio-operator/pkg/k8sutil/objectmatch"
3232
)
3333

3434
type DesiredState string
3535

3636
const (
37-
CREATED DesiredState = "created"
38-
DELETED DesiredState = "deleted"
37+
DesiredStatePresent DesiredState = "present"
38+
DesiredStateAbsent DesiredState = "absent"
3939
)
4040

4141
type DynamicObject struct {
@@ -49,25 +49,24 @@ type DynamicObject struct {
4949
}
5050

5151
func (d *DynamicObject) Reconcile(log logr.Logger, client dynamic.Interface, desiredState DesiredState) error {
52+
if desiredState == "" {
53+
desiredState = DesiredStatePresent
54+
}
5255
desired := d.unstructured()
5356
desiredType := reflect.TypeOf(desired)
5457
log = log.WithValues("type", reflect.TypeOf(d), "name", d.Name)
5558
current, err := client.Resource(d.Gvr).Namespace(d.Namespace).Get(d.Name, metav1.GetOptions{})
5659
if err != nil && !apierrors.IsNotFound(err) {
5760
return emperror.WrapWith(err, "getting resource failed", "name", d.Name, "kind", desiredType)
5861
}
59-
if apierrors.IsNotFound(err) {
60-
if desiredState == CREATED {
61-
if _, err := client.Resource(d.Gvr).Namespace(d.Namespace).Create(desired, metav1.CreateOptions{}); err != nil {
62-
return emperror.WrapWith(err, "creating resource failed", "name", d.Name, "kind", desiredType)
63-
}
64-
log.Info("resource created", "kind", d.Gvr.Resource)
65-
} else if desiredState == DELETED {
66-
log.Info("resource not found, already deleted", "kind", d.Gvr.Resource)
62+
if apierrors.IsNotFound(err) && desiredState == DesiredStatePresent {
63+
if _, err := client.Resource(d.Gvr).Namespace(d.Namespace).Create(desired, metav1.CreateOptions{}); err != nil {
64+
return emperror.WrapWith(err, "creating resource failed", "name", d.Name, "kind", desiredType)
6765
}
66+
log.Info("resource created", "kind", d.Gvr.Resource)
6867
}
6968
if err == nil {
70-
if desiredState == CREATED {
69+
if desiredState == DesiredStatePresent {
7170
objectsEquals, err := objectmatch.Match(current, desired)
7271
if err != nil {
7372
log.Error(err, "could not match objects", "kind", desiredType)
@@ -81,7 +80,7 @@ func (d *DynamicObject) Reconcile(log logr.Logger, client dynamic.Interface, des
8180
return emperror.WrapWith(err, "updating resource failed", "name", d.Name, "kind", desiredType)
8281
}
8382
log.Info("resource updated", "kind", d.Gvr.Resource)
84-
} else if desiredState == DELETED {
83+
} else if desiredState == DesiredStateAbsent {
8584
if err := client.Resource(d.Gvr).Namespace(d.Namespace).Delete(d.Name, &metav1.DeleteOptions{}); err != nil {
8685
return emperror.WrapWith(err, "deleting resource failed", "name", d.Name, "kind", desiredType)
8786
}

pkg/resources/citadel/citadel.go

+7-6
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,14 @@ limitations under the License.
1717
package citadel
1818

1919
import (
20-
istiov1beta1 "github.com/banzaicloud/istio-operator/pkg/apis/istio/v1beta1"
21-
"github.com/banzaicloud/istio-operator/pkg/k8sutil"
22-
"github.com/banzaicloud/istio-operator/pkg/resources"
2320
"github.com/go-logr/logr"
2421
"github.com/goph/emperror"
2522
"k8s.io/client-go/dynamic"
2623
"sigs.k8s.io/controller-runtime/pkg/client"
24+
25+
istiov1beta1 "github.com/banzaicloud/istio-operator/pkg/apis/istio/v1beta1"
26+
"github.com/banzaicloud/istio-operator/pkg/k8sutil"
27+
"github.com/banzaicloud/istio-operator/pkg/resources"
2728
)
2829

2930
const (
@@ -86,12 +87,12 @@ func (r *Reconciler) Reconcile(log logr.Logger) error {
8687

8788
var mTLSDesiredState k8sutil.DesiredState
8889
if r.Config.Spec.MTLS {
89-
mTLSDesiredState = k8sutil.CREATED
90+
mTLSDesiredState = k8sutil.DesiredStatePresent
9091
} else {
91-
mTLSDesiredState = k8sutil.DELETED
92+
mTLSDesiredState = k8sutil.DesiredStateAbsent
9293
}
9394
drs := []resources.DynamicResourceWithDesiredState{
94-
{DynamicResource: r.meshPolicy, DesiredState: k8sutil.CREATED},
95+
{DynamicResource: r.meshPolicy, DesiredState: k8sutil.DesiredStatePresent},
9596
{DynamicResource: r.destinationRuleDefaultMtls, DesiredState: mTLSDesiredState},
9697
{DynamicResource: r.destinationRuleApiServerMtls, DesiredState: mTLSDesiredState},
9798
}

pkg/resources/mixer/mixer.go

+26-25
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,14 @@ package mixer
1919
import (
2020
"fmt"
2121

22-
istiov1beta1 "github.com/banzaicloud/istio-operator/pkg/apis/istio/v1beta1"
23-
"github.com/banzaicloud/istio-operator/pkg/k8sutil"
24-
"github.com/banzaicloud/istio-operator/pkg/resources"
2522
"github.com/go-logr/logr"
2623
"github.com/goph/emperror"
2724
"k8s.io/client-go/dynamic"
2825
"sigs.k8s.io/controller-runtime/pkg/client"
26+
27+
istiov1beta1 "github.com/banzaicloud/istio-operator/pkg/apis/istio/v1beta1"
28+
"github.com/banzaicloud/istio-operator/pkg/k8sutil"
29+
"github.com/banzaicloud/istio-operator/pkg/resources"
2930
)
3031

3132
const (
@@ -85,28 +86,28 @@ func (r *Reconciler) Reconcile(log logr.Logger) error {
8586
}
8687
}
8788
drs := []resources.DynamicResourceWithDesiredState{
88-
{DynamicResource: r.istioProxyAttributeManifest, DesiredState: k8sutil.CREATED},
89-
{DynamicResource: r.kubernetesAttributeManifest, DesiredState: k8sutil.CREATED},
90-
{DynamicResource: r.stdioHandler, DesiredState: k8sutil.CREATED},
91-
{DynamicResource: r.accessLogLogentry, DesiredState: k8sutil.CREATED},
92-
{DynamicResource: r.tcpAccessLogLogentry, DesiredState: k8sutil.CREATED},
93-
{DynamicResource: r.stdioRule, DesiredState: k8sutil.CREATED},
94-
{DynamicResource: r.stdioTcpRule, DesiredState: k8sutil.CREATED},
95-
{DynamicResource: r.prometheusHandler, DesiredState: k8sutil.CREATED},
96-
{DynamicResource: r.requestCountMetric, DesiredState: k8sutil.CREATED},
97-
{DynamicResource: r.requestDurationMetric, DesiredState: k8sutil.CREATED},
98-
{DynamicResource: r.requestSizeMetric, DesiredState: k8sutil.CREATED},
99-
{DynamicResource: r.responseSizeMetric, DesiredState: k8sutil.CREATED},
100-
{DynamicResource: r.tcpByteReceivedMetric, DesiredState: k8sutil.CREATED},
101-
{DynamicResource: r.tcpByteSentMetric, DesiredState: k8sutil.CREATED},
102-
{DynamicResource: r.promHttpRule, DesiredState: k8sutil.CREATED},
103-
{DynamicResource: r.promTcpRule, DesiredState: k8sutil.CREATED},
104-
{DynamicResource: r.kubernetesEnvHandler, DesiredState: k8sutil.CREATED},
105-
{DynamicResource: r.attributesKubernetes, DesiredState: k8sutil.CREATED},
106-
{DynamicResource: r.kubeAttrRule, DesiredState: k8sutil.CREATED},
107-
{DynamicResource: r.tcpKubeAttrRule, DesiredState: k8sutil.CREATED},
108-
{DynamicResource: r.policyDestinationRule, DesiredState: k8sutil.CREATED},
109-
{DynamicResource: r.telemetryDestinationRule, DesiredState: k8sutil.CREATED},
89+
{DynamicResource: r.istioProxyAttributeManifest},
90+
{DynamicResource: r.kubernetesAttributeManifest},
91+
{DynamicResource: r.stdioHandler},
92+
{DynamicResource: r.accessLogLogentry},
93+
{DynamicResource: r.tcpAccessLogLogentry},
94+
{DynamicResource: r.stdioRule},
95+
{DynamicResource: r.stdioTcpRule},
96+
{DynamicResource: r.prometheusHandler},
97+
{DynamicResource: r.requestCountMetric},
98+
{DynamicResource: r.requestDurationMetric},
99+
{DynamicResource: r.requestSizeMetric},
100+
{DynamicResource: r.responseSizeMetric},
101+
{DynamicResource: r.tcpByteReceivedMetric},
102+
{DynamicResource: r.tcpByteSentMetric},
103+
{DynamicResource: r.promHttpRule},
104+
{DynamicResource: r.promTcpRule},
105+
{DynamicResource: r.kubernetesEnvHandler},
106+
{DynamicResource: r.attributesKubernetes},
107+
{DynamicResource: r.kubeAttrRule},
108+
{DynamicResource: r.tcpKubeAttrRule},
109+
{DynamicResource: r.policyDestinationRule},
110+
{DynamicResource: r.telemetryDestinationRule},
110111
}
111112
for _, dr := range drs {
112113
o := dr.DynamicResource()

pkg/resources/pilot/pilot.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,14 @@ limitations under the License.
1717
package pilot
1818

1919
import (
20-
istiov1beta1 "github.com/banzaicloud/istio-operator/pkg/apis/istio/v1beta1"
21-
"github.com/banzaicloud/istio-operator/pkg/k8sutil"
22-
"github.com/banzaicloud/istio-operator/pkg/resources"
2320
"github.com/go-logr/logr"
2421
"github.com/goph/emperror"
2522
"k8s.io/client-go/dynamic"
2623
"sigs.k8s.io/controller-runtime/pkg/client"
24+
25+
istiov1beta1 "github.com/banzaicloud/istio-operator/pkg/apis/istio/v1beta1"
26+
"github.com/banzaicloud/istio-operator/pkg/k8sutil"
27+
"github.com/banzaicloud/istio-operator/pkg/resources"
2728
)
2829

2930
const (
@@ -80,7 +81,7 @@ func (r *Reconciler) Reconcile(log logr.Logger) error {
8081
}
8182
}
8283
drs := []resources.DynamicResourceWithDesiredState{
83-
{DynamicResource: r.gateway, DesiredState: k8sutil.CREATED},
84+
{DynamicResource: r.gateway},
8485
}
8586
for _, dr := range drs {
8687
o := dr.DynamicResource()

0 commit comments

Comments
 (0)