Skip to content

Commit 40e329a

Browse files
committed
Treat redacted env sentinel as no env update
1 parent 8223b51 commit 40e329a

2 files changed

Lines changed: 55 additions & 0 deletions

File tree

lib/instances/update.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ func (m *manager) updateInstance(ctx context.Context, id string, req UpdateInsta
4949
}
5050
req.RestartPolicy = normalizedRestartPolicy
5151
}
52+
req.Env = mergeEnvUpdate(nil, req.Env)
5253

5354
if err := validateUpdateInstanceRequest(meta, req); err != nil {
5455
return nil, err

lib/instances/update_test.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/kernel/hypeman/lib/autostandby"
1010
"github.com/kernel/hypeman/lib/egressproxy"
1111
"github.com/kernel/hypeman/lib/healthcheck"
12+
"github.com/kernel/hypeman/lib/redact"
1213
snapshotstore "github.com/kernel/hypeman/lib/snapshot"
1314
"github.com/stretchr/testify/assert"
1415
"github.com/stretchr/testify/require"
@@ -401,3 +402,56 @@ func TestManagerUpdateInstanceHealthCheckOnlyPublishesLifecycleUpdate(t *testing
401402
t.Fatal("timed out waiting for lifecycle update event")
402403
}
403404
}
405+
406+
func TestManagerUpdateInstanceIgnoresSentinelOnlyEnvUpdateOnStoppedInstance(t *testing.T) {
407+
t.Parallel()
408+
409+
manager, _ := setupTestManager(t)
410+
id := "inst-update-sentinel-noop"
411+
require.NoError(t, manager.ensureDirectories(id))
412+
meta := &metadata{
413+
StoredMetadata: StoredMetadata{
414+
Id: id,
415+
Name: id,
416+
CreatedAt: time.Now(),
417+
DataDir: manager.paths.InstanceDir(id),
418+
SocketPath: manager.paths.InstanceSocket(id, "cloud-hypervisor.sock"),
419+
NetworkEgress: &NetworkEgressPolicy{
420+
Enabled: true,
421+
},
422+
Credentials: map[string]CredentialPolicy{
423+
"OUTBOUND_OPENAI_KEY": {
424+
Source: CredentialSource{Env: "OUTBOUND_OPENAI_KEY"},
425+
},
426+
},
427+
Env: map[string]string{
428+
"OUTBOUND_OPENAI_KEY": "real-secret",
429+
},
430+
AutoStandby: &autostandby.Policy{
431+
Enabled: false,
432+
IdleTimeout: "5m0s",
433+
},
434+
},
435+
}
436+
require.NoError(t, manager.saveMetadata(meta))
437+
438+
updated, err := manager.UpdateInstance(context.Background(), id, UpdateInstanceRequest{
439+
Env: map[string]string{
440+
"OUTBOUND_OPENAI_KEY": redact.Sentinel,
441+
},
442+
AutoStandby: &autostandby.Policy{
443+
Enabled: true,
444+
IdleTimeout: "10m",
445+
},
446+
})
447+
require.NoError(t, err)
448+
require.NotNil(t, updated)
449+
require.NotNil(t, updated.AutoStandby)
450+
assert.True(t, updated.AutoStandby.Enabled)
451+
assert.Equal(t, "10m0s", updated.AutoStandby.IdleTimeout)
452+
453+
saved, err := manager.loadMetadata(id)
454+
require.NoError(t, err)
455+
require.NotNil(t, saved)
456+
assert.Equal(t, "real-secret", saved.Env["OUTBOUND_OPENAI_KEY"])
457+
}

0 commit comments

Comments
 (0)