Skip to content
This repository was archived by the owner on Aug 12, 2025. It is now read-only.
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
6 changes: 4 additions & 2 deletions controllers/packetcluster_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
"github.com/pkg/errors"
apierrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/tools/record"
clusterv1 "sigs.k8s.io/cluster-api/api/v1alpha3"
"sigs.k8s.io/cluster-api/util"
ctrl "sigs.k8s.io/controller-runtime"
Expand All @@ -37,8 +38,9 @@ import (
// PacketClusterReconciler reconciles a PacketCluster object
type PacketClusterReconciler struct {
client.Client
Log logr.Logger
Scheme *runtime.Scheme
Log logr.Logger
Recorder record.EventRecorder
Scheme *runtime.Scheme
}

// +kubebuilder:rbac:groups=infrastructure.cluster.x-k8s.io,resources=packetclusters,verbs=get;list;watch;create;update;patch;delete
Expand Down
14 changes: 14 additions & 0 deletions controllers/packetmachine_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package controllers
import (
"context"
"fmt"
"net/http"
"time"

"github.com/go-logr/logr"
Expand All @@ -27,6 +28,7 @@ import (

apierrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/tools/record"
clusterv1 "sigs.k8s.io/cluster-api/api/v1alpha3"
capierrors "sigs.k8s.io/cluster-api/errors"
"sigs.k8s.io/cluster-api/util"
Expand All @@ -38,6 +40,7 @@ import (

packet "github.com/packethost/cluster-api-provider-packet/pkg/cloud/packet"
"github.com/packethost/cluster-api-provider-packet/pkg/cloud/packet/scope"
"github.com/packethost/packngo"

infrastructurev1alpha3 "github.com/packethost/cluster-api-provider-packet/api/v1alpha3"
)
Expand All @@ -50,6 +53,7 @@ const (
type PacketMachineReconciler struct {
client.Client
Log logr.Logger
Recorder record.EventRecorder
Scheme *runtime.Scheme
PacketClient *packet.PacketClient
}
Expand Down Expand Up @@ -248,9 +252,19 @@ func (r *PacketMachineReconciler) reconcileDelete(ctx context.Context, machineSc

device, err := r.PacketClient.GetDevice(providerID)
if err != nil {
if err.(*packngo.ErrorResponse).Response != nil && err.(*packngo.ErrorResponse).Response.StatusCode == http.StatusNotFound {
// When the server does not exist we do not have anything left to do.
// Probably somebody manually deleted the server from the UI or via API.
logger.Info("Server not found, nothing left to do")
controllerutil.RemoveFinalizer(packetmachine, infrastructurev1alpha3.MachineFinalizer)
return ctrl.Result{}, nil
}
return ctrl.Result{}, fmt.Errorf("error retrieving machine status %s: %v", packetmachine.Name, err)
}

// We should never get there but this is a safetly check
if device == nil {

This comment was marked as resolved.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

controllerutil.RemoveFinalizer(packetmachine, infrastructurev1alpha3.MachineFinalizer)
return ctrl.Result{}, fmt.Errorf("machine does not exist: %s", packetmachine.Name)
}

Expand Down
16 changes: 13 additions & 3 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
"k8s.io/apimachinery/pkg/runtime"
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
"k8s.io/client-go/tools/record"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/log/zap"

Expand Down Expand Up @@ -57,10 +58,17 @@ func main() {

ctrl.SetLogger(zap.New(zap.UseDevMode(true)))

// Machine and cluster operations can create enough events to trigger the event recorder spam filter
// Setting the burst size higher ensures all events will be recorded and submitted to the API
broadcaster := record.NewBroadcasterWithCorrelatorOptions(record.CorrelatorOptions{
BurstSize: 100,
})

mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
Scheme: scheme,
MetricsBindAddress: metricsAddr,
Port: 9443,
EventBroadcaster: broadcaster,
LeaderElection: enableLeaderElection,
LeaderElectionID: "cad3ba79.cluster.x-k8s.io",
})
Expand All @@ -77,9 +85,10 @@ func main() {
}

if err = (&controllers.PacketClusterReconciler{
Client: mgr.GetClient(),
Log: ctrl.Log.WithName("controllers").WithName("PacketCluster"),
Scheme: mgr.GetScheme(),
Client: mgr.GetClient(),
Log: ctrl.Log.WithName("controllers").WithName("PacketCluster"),
Recorder: mgr.GetEventRecorderFor("packetcluster-controller"),
Scheme: mgr.GetScheme(),
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "PacketCluster")
os.Exit(1)
Expand All @@ -88,6 +97,7 @@ func main() {
Client: mgr.GetClient(),
Log: ctrl.Log.WithName("controllers").WithName("PacketMachine"),
Scheme: mgr.GetScheme(),
Recorder: mgr.GetEventRecorderFor("packetmachine-controller"),
PacketClient: client,
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "PacketMachine")
Expand Down