Skip to content
Open
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
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -342,10 +342,10 @@ endef
# E2E Test targets
E2E_CLUSTER_NAME ?= agentcube-e2e
AGENT_SANDBOX_REPO ?= https://github.com/kubernetes-sigs/agent-sandbox.git
AGENT_SANDBOX_VERSION ?= main
AGENT_SANDBOX_VERSION ?= v0.5.0rc1

e2e:
./test/e2e/run_e2e.sh
AGENT_SANDBOX_VERSION=$(AGENT_SANDBOX_VERSION) ./test/e2e/run_e2e.sh

e2e-clean:
@echo "Cleaning up E2E environment..."
Expand Down
6 changes: 3 additions & 3 deletions cmd/agentd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import (
"k8s.io/apimachinery/pkg/runtime"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/client-go/kubernetes/scheme"
sandboxv1alpha1 "sigs.k8s.io/agent-sandbox/api/v1alpha1"
sandboxv1beta1 "sigs.k8s.io/agent-sandbox/api/v1beta1"
ctrl "sigs.k8s.io/controller-runtime"
metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"

Expand All @@ -36,7 +36,7 @@ var (

func init() {
utilruntime.Must(scheme.AddToScheme(schemeBuilder))
utilruntime.Must(sandboxv1alpha1.AddToScheme(schemeBuilder))
utilruntime.Must(sandboxv1beta1.AddToScheme(schemeBuilder))
}

func main() {
Expand All @@ -54,7 +54,7 @@ func main() {
}

err = ctrl.NewControllerManagedBy(mgr).
For(&sandboxv1alpha1.Sandbox{}).
For(&sandboxv1beta1.Sandbox{}).
Complete(&agentd.Reconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
Expand Down
10 changes: 5 additions & 5 deletions cmd/workload-manager/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ import (
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/client-go/kubernetes/scheme"
"k8s.io/klog/v2"
sandboxv1alpha1 "sigs.k8s.io/agent-sandbox/api/v1alpha1"
extensionsv1alpha1 "sigs.k8s.io/agent-sandbox/extensions/api/v1alpha1"
sandboxv1beta1 "sigs.k8s.io/agent-sandbox/api/v1beta1"
extensionsv1beta1 "sigs.k8s.io/agent-sandbox/extensions/api/v1beta1"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/log/zap"
metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
Expand All @@ -46,8 +46,8 @@ var (

func init() {
utilruntime.Must(scheme.AddToScheme(schemeBuilder))
utilruntime.Must(sandboxv1alpha1.AddToScheme(schemeBuilder))
utilruntime.Must(extensionsv1alpha1.AddToScheme(schemeBuilder))
utilruntime.Must(sandboxv1beta1.AddToScheme(schemeBuilder))
utilruntime.Must(extensionsv1beta1.AddToScheme(schemeBuilder))
utilruntime.Must(runtimev1alpha1.AddToScheme(schemeBuilder))
}

Expand Down Expand Up @@ -187,7 +187,7 @@ func main() {
func setupControllers(mgr ctrl.Manager, sandboxReconciler *workloadmanager.SandboxReconciler, codeInterpreterReconciler *workloadmanager.CodeInterpreterReconciler) error {
// Setup Sandbox controller
if err := ctrl.NewControllerManagedBy(mgr).
For(&sandboxv1alpha1.Sandbox{}).
For(&sandboxv1beta1.Sandbox{}).
Complete(sandboxReconciler); err != nil {
return fmt.Errorf("unable to create sandbox controller: %w", err)
}
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ require (
k8s.io/client-go v0.35.4
k8s.io/klog/v2 v2.140.0
k8s.io/utils v0.0.0-20251002143259-bc988d571ff4
sigs.k8s.io/agent-sandbox v0.4.6
sigs.k8s.io/agent-sandbox v0.4.7-0.20260608211546-6af1bbd0cf64
sigs.k8s.io/controller-runtime v0.23.3
)

Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -252,8 +252,8 @@ k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 h1:SjGebBtkBqHFOli+05xYbK8YF1Dzk
k8s.io/utils v0.0.0-20251002143259-bc988d571ff4/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
sigs.k8s.io/agent-sandbox v0.4.6 h1:dUUvQ+rlv4kT3CB9p2MgnPcNSMAQg6eTBrWyCiYgxYs=
sigs.k8s.io/agent-sandbox v0.4.6/go.mod h1:rrBXoA+nKZO2MIs3pTG+qOuKadX5gzMvO/nrlwC9W1w=
sigs.k8s.io/agent-sandbox v0.4.7-0.20260608211546-6af1bbd0cf64 h1:dekixt66KCBkSC7rk35SiGE1irxnvVK/e6mvIm5PhtA=
sigs.k8s.io/agent-sandbox v0.4.7-0.20260608211546-6af1bbd0cf64/go.mod h1:++skTINslx4yHlnoqWoijeZuzhh0DobbtjPanh/JgRI=
sigs.k8s.io/controller-runtime v0.23.3 h1:VjB/vhoPoA9l1kEKZHBMnQF33tdCLQKJtydy4iqwZ80=
sigs.k8s.io/controller-runtime v0.23.3/go.mod h1:B6COOxKptp+YaUT5q4l6LqUJTRpizbgf9KSRNdQGns0=
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg=
Expand Down
6 changes: 3 additions & 3 deletions pkg/agentd/agentd.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import (

"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/runtime"
sandboxv1alpha1 "sigs.k8s.io/agent-sandbox/api/v1alpha1"
sandboxv1beta1 "sigs.k8s.io/agent-sandbox/api/v1beta1"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"

Expand All @@ -36,7 +36,7 @@ type Reconciler struct {
}

func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
sandbox := &sandboxv1alpha1.Sandbox{}
sandbox := &sandboxv1beta1.Sandbox{}
err := r.Get(ctx, req.NamespacedName, sandbox)
if err != nil {
if errors.IsNotFound(err) {
Expand Down Expand Up @@ -80,6 +80,6 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu
// SetupWithManager sets up the controller with the Manager.
func (r *Reconciler) SetupWithManager(mgr ctrl.Manager) error {
return ctrl.NewControllerManagedBy(mgr).
For(&sandboxv1alpha1.Sandbox{}).
For(&sandboxv1beta1.Sandbox{}).
Complete(r)
}
44 changes: 22 additions & 22 deletions pkg/agentd/agentd_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import (
"k8s.io/apimachinery/pkg/types"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/client-go/scale/scheme"
sandboxv1alpha1 "sigs.k8s.io/agent-sandbox/api/v1alpha1"
sandboxv1beta1 "sigs.k8s.io/agent-sandbox/api/v1beta1"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/client/fake"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
Expand All @@ -39,7 +39,7 @@ import (
func setupTestScheme() *runtime.Scheme {
testScheme := runtime.NewScheme()
utilruntime.Must(scheme.AddToScheme(testScheme))
utilruntime.Must(sandboxv1alpha1.AddToScheme(testScheme))
utilruntime.Must(sandboxv1beta1.AddToScheme(testScheme))
return testScheme
}

Expand All @@ -49,13 +49,13 @@ func TestReconciler_Reconcile_RuntimeRegistration(t *testing.T) {

tests := []struct {
name string
sandbox *sandboxv1alpha1.Sandbox
sandbox *sandboxv1beta1.Sandbox
expectRequeue bool
expectDeletion bool
}{
{
name: "Newly registered sandbox without last-activity-time should not be deleted",
sandbox: &sandboxv1alpha1.Sandbox{
sandbox: &sandboxv1beta1.Sandbox{
ObjectMeta: metav1.ObjectMeta{
Name: "new-sandbox",
Namespace: "default",
Expand All @@ -67,7 +67,7 @@ func TestReconciler_Reconcile_RuntimeRegistration(t *testing.T) {
},
{
name: "Sandbox with empty last-activity-time annotation should not be deleted",
sandbox: &sandboxv1alpha1.Sandbox{
sandbox: &sandboxv1beta1.Sandbox{
ObjectMeta: metav1.ObjectMeta{
Name: "empty-annotation-sandbox",
Namespace: "default",
Expand Down Expand Up @@ -108,7 +108,7 @@ func TestReconciler_Reconcile_RuntimeRegistration(t *testing.T) {
}

// Verify sandbox still exists
sandbox := &sandboxv1alpha1.Sandbox{}
sandbox := &sandboxv1beta1.Sandbox{}
err = fakeClient.Get(context.Background(), types.NamespacedName{
Name: tt.sandbox.Name,
Namespace: tt.sandbox.Namespace,
Expand All @@ -131,15 +131,15 @@ func TestReconciler_Reconcile_LifecycleOrchestration(t *testing.T) {

tests := []struct {
name string
sandbox *sandboxv1alpha1.Sandbox
sandbox *sandboxv1beta1.Sandbox
expectDeletion bool
expectRequeue bool
expectedRequeueAt time.Duration
description string
}{
{
name: "Sandbox with recent activity should be requeued",
sandbox: &sandboxv1alpha1.Sandbox{
sandbox: &sandboxv1beta1.Sandbox{
ObjectMeta: metav1.ObjectMeta{
Name: "recent-activity-sandbox",
Namespace: "default",
Expand All @@ -155,7 +155,7 @@ func TestReconciler_Reconcile_LifecycleOrchestration(t *testing.T) {
},
{
name: "Sandbox exactly at expiration boundary should be deleted",
sandbox: &sandboxv1alpha1.Sandbox{
sandbox: &sandboxv1beta1.Sandbox{
ObjectMeta: metav1.ObjectMeta{
Name: "expired-sandbox",
Namespace: "default",
Expand All @@ -170,7 +170,7 @@ func TestReconciler_Reconcile_LifecycleOrchestration(t *testing.T) {
},
{
name: "Sandbox past expiration should be deleted",
sandbox: &sandboxv1alpha1.Sandbox{
sandbox: &sandboxv1beta1.Sandbox{
ObjectMeta: metav1.ObjectMeta{
Name: "past-expired-sandbox",
Namespace: "default",
Expand All @@ -185,7 +185,7 @@ func TestReconciler_Reconcile_LifecycleOrchestration(t *testing.T) {
},
{
name: "Sandbox with activity just before expiration should be requeued",
sandbox: &sandboxv1alpha1.Sandbox{
sandbox: &sandboxv1beta1.Sandbox{
ObjectMeta: metav1.ObjectMeta{
Name: "near-expiration-sandbox",
Namespace: "default",
Expand All @@ -201,7 +201,7 @@ func TestReconciler_Reconcile_LifecycleOrchestration(t *testing.T) {
},
{
name: "Sandbox with custom short timeout should be deleted",
sandbox: &sandboxv1alpha1.Sandbox{
sandbox: &sandboxv1beta1.Sandbox{
ObjectMeta: metav1.ObjectMeta{
Name: "custom-short-timeout-sandbox",
Namespace: "default",
Expand All @@ -217,7 +217,7 @@ func TestReconciler_Reconcile_LifecycleOrchestration(t *testing.T) {
},
{
name: "Sandbox with custom long timeout should be requeued",
sandbox: &sandboxv1alpha1.Sandbox{
sandbox: &sandboxv1beta1.Sandbox{
ObjectMeta: metav1.ObjectMeta{
Name: "custom-long-timeout-sandbox",
Namespace: "default",
Expand All @@ -234,7 +234,7 @@ func TestReconciler_Reconcile_LifecycleOrchestration(t *testing.T) {
},
{
name: "Sandbox with invalid custom timeout should fallback to default",
sandbox: &sandboxv1alpha1.Sandbox{
sandbox: &sandboxv1beta1.Sandbox{
ObjectMeta: metav1.ObjectMeta{
Name: "invalid-timeout-sandbox",
Namespace: "default",
Expand All @@ -251,7 +251,7 @@ func TestReconciler_Reconcile_LifecycleOrchestration(t *testing.T) {
},
{
name: "Sandbox with negative custom timeout should fallback to default",
sandbox: &sandboxv1alpha1.Sandbox{
sandbox: &sandboxv1beta1.Sandbox{
ObjectMeta: metav1.ObjectMeta{
Name: "negative-timeout-sandbox",
Namespace: "default",
Expand All @@ -268,7 +268,7 @@ func TestReconciler_Reconcile_LifecycleOrchestration(t *testing.T) {
},
{
name: "Sandbox with zero custom timeout should fallback to default",
sandbox: &sandboxv1alpha1.Sandbox{
sandbox: &sandboxv1beta1.Sandbox{
ObjectMeta: metav1.ObjectMeta{
Name: "zero-timeout-sandbox",
Namespace: "default",
Expand Down Expand Up @@ -318,7 +318,7 @@ func TestReconciler_Reconcile_LifecycleOrchestration(t *testing.T) {
}

// Verify deletion status
sandbox := &sandboxv1alpha1.Sandbox{}
sandbox := &sandboxv1beta1.Sandbox{}
err = fakeClient.Get(context.Background(), types.NamespacedName{
Name: tt.sandbox.Name,
Namespace: tt.sandbox.Namespace,
Expand Down Expand Up @@ -366,7 +366,7 @@ func TestReconciler_Reconcile_ErrorPaths(t *testing.T) {
{
name: "Invalid time format should return error and requeue",
setupClient: func() client.Client {
sandbox := &sandboxv1alpha1.Sandbox{
sandbox := &sandboxv1beta1.Sandbox{
ObjectMeta: metav1.ObjectMeta{
Name: "invalid-time-sandbox",
Namespace: "default",
Expand Down Expand Up @@ -425,14 +425,14 @@ func TestReconciler_Reconcile_EdgeCases(t *testing.T) {

tests := []struct {
name string
sandbox *sandboxv1alpha1.Sandbox
sandbox *sandboxv1beta1.Sandbox
expectRequeue bool
expectDeletion bool
description string
}{
{
name: "Sandbox with future last-activity-time should not be deleted",
sandbox: &sandboxv1alpha1.Sandbox{
sandbox: &sandboxv1beta1.Sandbox{
ObjectMeta: metav1.ObjectMeta{
Name: "future-time-sandbox",
Namespace: "default",
Expand All @@ -447,7 +447,7 @@ func TestReconciler_Reconcile_EdgeCases(t *testing.T) {
},
{
name: "Sandbox with multiple annotations should work correctly",
sandbox: &sandboxv1alpha1.Sandbox{
sandbox: &sandboxv1beta1.Sandbox{
ObjectMeta: metav1.ObjectMeta{
Name: "multi-annotation-sandbox",
Namespace: "default",
Expand Down Expand Up @@ -491,7 +491,7 @@ func TestReconciler_Reconcile_EdgeCases(t *testing.T) {
}

// Verify deletion status
sandbox := &sandboxv1alpha1.Sandbox{}
sandbox := &sandboxv1beta1.Sandbox{}
err = fakeClient.Get(context.Background(), types.NamespacedName{
Name: tt.sandbox.Name,
Namespace: tt.sandbox.Namespace,
Expand Down
Loading
Loading