Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ require (
github.com/go-logr/logr v1.2.2
github.com/onsi/ginkgo v1.16.5
github.com/onsi/gomega v1.17.0
github.com/openshift/api v0.0.0-20211217221424-8779abfbd571
github.com/openshift/api v0.0.0-20220325173635-8107b7a38e53
github.com/openshift/machine-api-operator v0.2.1-0.20211220105028-362d5b50beca
golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f
google.golang.org/api v0.44.0
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -551,8 +551,8 @@ github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3I
github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
github.com/openshift/api v0.0.0-20211209135129-c58d9f695577/go.mod h1:DoslCwtqUpr3d/gsbq4ZlkaMEdYqKxuypsDjorcHhME=
github.com/openshift/api v0.0.0-20211215120111-7c47a5f63470/go.mod h1:F/eU6jgr6Q2VhMu1mSpMmygxAELd7+BUxs3NHZ25jV4=
github.com/openshift/api v0.0.0-20211217221424-8779abfbd571 h1:+ShYlGoPriGahTTFTjQ0RtNXW0srxDodk2STdc238Rk=
github.com/openshift/api v0.0.0-20211217221424-8779abfbd571/go.mod h1:F/eU6jgr6Q2VhMu1mSpMmygxAELd7+BUxs3NHZ25jV4=
github.com/openshift/api v0.0.0-20220325173635-8107b7a38e53 h1:WpOfczPbuY5llRH94DJRsGTsgm7d8iAA2b7m0+YXAqI=
github.com/openshift/api v0.0.0-20220325173635-8107b7a38e53/go.mod h1:F/eU6jgr6Q2VhMu1mSpMmygxAELd7+BUxs3NHZ25jV4=
github.com/openshift/build-machinery-go v0.0.0-20210712174854-1bb7fd1518d3/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE=
github.com/openshift/build-machinery-go v0.0.0-20210806203541-4ea9b6da3a37/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE=
github.com/openshift/build-machinery-go v0.0.0-20211213093930-7e33a7eb4ce3/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE=
Expand Down
15 changes: 6 additions & 9 deletions pkg/cloud/gcp/actuators/machine/conditions.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package machine

import (
machinev1 "github.com/openshift/api/machine/v1beta1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/klog/v2"
)
Expand All @@ -13,8 +12,8 @@ const (
)

func shouldUpdateCondition(
oldCondition machinev1.GCPMachineProviderCondition,
newCondition machinev1.GCPMachineProviderCondition,
oldCondition metav1.Condition,
newCondition metav1.Condition,
) bool {
if oldCondition.Status != newCondition.Status ||
oldCondition.Reason != newCondition.Reason ||
Expand All @@ -24,7 +23,7 @@ func shouldUpdateCondition(
return false
}

// setProviderCondition sets the condition for the machine and
// reconcileConditions sets the condition for the machine and
// returns the new slice of conditions.
// If the machine does not already have a condition with the specified type,
// a condition will be added to the slice.
Expand All @@ -33,20 +32,19 @@ func shouldUpdateCondition(
// 1) Requested Status is different than existing status.
// 2) requested Reason is different that existing one.
// 3) requested Message is different that existing one.
func reconcileProviderConditions(conditions []machinev1.GCPMachineProviderCondition, newCondition machinev1.GCPMachineProviderCondition) []machinev1.GCPMachineProviderCondition {
func reconcileConditions(conditions []metav1.Condition, newCondition metav1.Condition) []metav1.Condition {
now := metav1.Now()
currentCondition := findCondition(conditions, newCondition.Type)
if currentCondition == nil {
klog.V(4).Infof("Adding new provider condition %v", newCondition)
conditions = append(
conditions,
machinev1.GCPMachineProviderCondition{
metav1.Condition{
Type: newCondition.Type,
Status: newCondition.Status,
Reason: newCondition.Reason,
Message: newCondition.Message,
LastTransitionTime: now,
LastProbeTime: now,
},
)
} else {
Expand All @@ -61,15 +59,14 @@ func reconcileProviderConditions(conditions []machinev1.GCPMachineProviderCondit
currentCondition.Status = newCondition.Status
currentCondition.Reason = newCondition.Reason
currentCondition.Message = newCondition.Message
currentCondition.LastProbeTime = now
}
}
return conditions
}

// findCondition finds in the machine the condition that has the
// specified condition type. If none exists, then returns nil.
func findCondition(conditions []machinev1.GCPMachineProviderCondition, conditionType machinev1.ConditionType) *machinev1.GCPMachineProviderCondition {
func findCondition(conditions []metav1.Condition, conditionType string) *metav1.Condition {
for i, condition := range conditions {
if condition.Type == conditionType {
return &conditions[i]
Expand Down
39 changes: 19 additions & 20 deletions pkg/cloud/gcp/actuators/machine/conditions_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,65 +3,64 @@ package machine
import (
"testing"

machinev1 "github.com/openshift/api/machine/v1beta1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func TestShouldUpdateCondition(t *testing.T) {
testCases := []struct {
oldCondition machinev1.GCPMachineProviderCondition
newCondition machinev1.GCPMachineProviderCondition
oldCondition metav1.Condition
newCondition metav1.Condition
expected bool
}{
{
oldCondition: machinev1.GCPMachineProviderCondition{
oldCondition: metav1.Condition{
Reason: "foo",
Message: "bar",
Status: corev1.ConditionTrue,
Status: metav1.ConditionTrue,
},
newCondition: machinev1.GCPMachineProviderCondition{
newCondition: metav1.Condition{
Reason: "foo",
Message: "bar",
Status: corev1.ConditionTrue,
Status: metav1.ConditionTrue,
},
expected: false,
},
{
oldCondition: machinev1.GCPMachineProviderCondition{
oldCondition: metav1.Condition{
Reason: "foo",
Message: "bar",
Status: corev1.ConditionTrue,
Status: metav1.ConditionTrue,
},
newCondition: machinev1.GCPMachineProviderCondition{
newCondition: metav1.Condition{
Reason: "different reason",
Message: "bar",
Status: corev1.ConditionTrue,
Status: metav1.ConditionTrue,
},
expected: true,
},
{
oldCondition: machinev1.GCPMachineProviderCondition{
oldCondition: metav1.Condition{
Reason: "foo",
Message: "different message",
Status: corev1.ConditionTrue,
Status: metav1.ConditionTrue,
},
newCondition: machinev1.GCPMachineProviderCondition{
newCondition: metav1.Condition{
Reason: "foo",
Message: "bar",
Status: corev1.ConditionTrue,
Status: metav1.ConditionTrue,
},
expected: true,
},
{
oldCondition: machinev1.GCPMachineProviderCondition{
oldCondition: metav1.Condition{
Reason: "foo",
Message: "bar",
Status: corev1.ConditionTrue,
Status: metav1.ConditionTrue,
},
newCondition: machinev1.GCPMachineProviderCondition{
newCondition: metav1.Condition{
Reason: "foo",
Message: "bar",
Status: corev1.ConditionFalse,
Status: metav1.ConditionFalse,
},
expected: true,
},
Expand Down
19 changes: 10 additions & 9 deletions pkg/cloud/gcp/actuators/machine/reconciler.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
googleapi "google.golang.org/api/googleapi"
corev1 "k8s.io/api/core/v1"
apimachineryerrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/klog/v2"
"sigs.k8s.io/controller-runtime/pkg/client"
)
Expand Down Expand Up @@ -267,11 +268,11 @@ func (r *Reconciler) create() error {
Namespace: r.machine.Namespace,
Reason: err.Error(),
})
if reconcileWithCloudError := r.reconcileMachineWithCloudState(&machinev1.GCPMachineProviderCondition{
Type: machinev1.MachineCreated,
if reconcileWithCloudError := r.reconcileMachineWithCloudState(&metav1.Condition{
Type: string(machinev1.MachineCreated),
Reason: machineCreationFailedReason,
Message: err.Error(),
Status: corev1.ConditionFalse,
Status: metav1.ConditionFalse,
}); reconcileWithCloudError != nil {
klog.Errorf("Failed to reconcile machine with cloud state: %v", reconcileWithCloudError)
}
Expand Down Expand Up @@ -303,10 +304,10 @@ func (r *Reconciler) update() error {
// reconcileMachineWithCloudState reconcile machineSpec and status with the latest cloud state
// if a failedCondition is passed it updates the providerStatus.Conditions and return
// otherwise it fetches the relevant cloud instance and reconcile the rest of the fields
func (r *Reconciler) reconcileMachineWithCloudState(failedCondition *machinev1.GCPMachineProviderCondition) error {
func (r *Reconciler) reconcileMachineWithCloudState(failedCondition *metav1.Condition) error {
klog.Infof("%s: Reconciling machine object with cloud state", r.machine.Name)
if failedCondition != nil {
r.providerStatus.Conditions = reconcileProviderConditions(r.providerStatus.Conditions, *failedCondition)
r.providerStatus.Conditions = reconcileConditions(r.providerStatus.Conditions, *failedCondition)
return nil
} else {
freshInstance, err := r.computeService.InstancesGet(r.projectID, r.providerSpec.Zone, r.machine.Name)
Expand Down Expand Up @@ -348,13 +349,13 @@ func (r *Reconciler) reconcileMachineWithCloudState(failedCondition *machinev1.G
r.machine.Status.Addresses = nodeAddresses
r.providerStatus.InstanceState = &freshInstance.Status
r.providerStatus.InstanceID = &freshInstance.Name
succeedCondition := machinev1.GCPMachineProviderCondition{
Type: machinev1.MachineCreated,
succeedCondition := metav1.Condition{
Type: string(machinev1.MachineCreated),
Reason: machineCreationSucceedReason,
Message: machineCreationSucceedMessage,
Status: corev1.ConditionTrue,
Status: metav1.ConditionTrue,
}
r.providerStatus.Conditions = reconcileProviderConditions(r.providerStatus.Conditions, succeedCondition)
r.providerStatus.Conditions = reconcileConditions(r.providerStatus.Conditions, succeedCondition)

r.setMachineCloudProviderSpecifics(freshInstance)

Expand Down
20 changes: 10 additions & 10 deletions pkg/cloud/gcp/actuators/machine/reconciler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,17 @@ func TestCreate(t *testing.T) {
name string
labels map[string]string
providerSpec *machinev1.GCPMachineProviderSpec
expectedCondition *machinev1.GCPMachineProviderCondition
expectedCondition *metav1.Condition
secret *corev1.Secret
mockInstancesInsert func(project string, zone string, instance *compute.Instance) (*compute.Operation, error)
validateInstance func(t *testing.T, instance *compute.Instance)
expectedError error
}{
{
name: "Successfully create machine",
expectedCondition: &machinev1.GCPMachineProviderCondition{
Type: machinev1.MachineCreated,
Status: corev1.ConditionTrue,
expectedCondition: &metav1.Condition{
Type: string(machinev1.MachineCreated),
Status: metav1.ConditionTrue,
Reason: machineCreationSucceedReason,
Message: machineCreationSucceedMessage,
},
Expand Down Expand Up @@ -71,9 +71,9 @@ func TestCreate(t *testing.T) {
{
name: "Fail on compute service error",
expectedError: errors.New("failed to create instance via compute service: fail"),
expectedCondition: &machinev1.GCPMachineProviderCondition{
Type: machinev1.MachineCreated,
Status: corev1.ConditionFalse,
expectedCondition: &metav1.Condition{
Type: string(machinev1.MachineCreated),
Status: metav1.ConditionFalse,
Reason: machineCreationFailedReason,
Message: "fail",
},
Expand All @@ -84,9 +84,9 @@ func TestCreate(t *testing.T) {
{
name: "Fail on google api error",
expectedError: machinecontroller.InvalidMachineConfiguration("error launching instance: %v", "googleapi: Error 400: error"),
expectedCondition: &machinev1.GCPMachineProviderCondition{
Type: machinev1.MachineCreated,
Status: corev1.ConditionFalse,
expectedCondition: &metav1.Condition{
Type: string(machinev1.MachineCreated),
Status: metav1.ConditionFalse,
Reason: machineCreationFailedReason,
Message: "googleapi: Error 400: error",
},
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading