Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a8becfb

Browse files
authored
fix: improve log on provisioner daemon started with pk (#15588)
Resolve #15126 This PR aims to fetch the provisioned key details when starting a provisioned daemon - for now in order to access the tags associated to the provisioned key and display them accordingly in the starting logs. We do not want to change any other logic inside this PR as it was already working as expected.
1 parent 32b4b77 commit a8becfb

File tree

2 files changed

+85
-2
lines changed

2 files changed

+85
-2
lines changed

enterprise/cli/provisionerdaemonstart.go

+18-2
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,22 @@ func (r *RootCmd) provisionerDaemonStart() *serpent.Command {
104104
return err
105105
}
106106

107+
displayedTags := make(map[string]string, len(tags))
108+
if provisionerKey != "" {
109+
pkDetails, err := client.GetProvisionerKey(ctx, provisionerKey)
110+
if err != nil {
111+
return xerrors.New("unable to get provisioner key details")
112+
}
113+
114+
for k, v := range pkDetails.Tags {
115+
displayedTags[k] = v
116+
}
117+
} else {
118+
for key, val := range tags {
119+
displayedTags[key] = val
120+
}
121+
}
122+
107123
if name == "" {
108124
name = cliutil.Hostname()
109125
}
@@ -131,7 +147,7 @@ func (r *RootCmd) provisionerDaemonStart() *serpent.Command {
131147
defer closeLogger()
132148
}
133149

134-
if len(tags) == 0 {
150+
if len(displayedTags) == 0 {
135151
logger.Info(ctx, "note: untagged provisioners can only pick up jobs from untagged templates")
136152
}
137153

@@ -202,7 +218,7 @@ func (r *RootCmd) provisionerDaemonStart() *serpent.Command {
202218
defer closeFunc()
203219
}
204220

205-
logger.Info(ctx, "starting provisioner daemon", slog.F("tags", tags), slog.F("name", name))
221+
logger.Info(ctx, "starting provisioner daemon", slog.F("tags", displayedTags), slog.F("name", name))
206222

207223
connector := provisionerd.LocalProvisioners{
208224
string(database.ProvisionerTypeTerraform): proto.NewDRPCProvisionerClient(terraformClient),

enterprise/cli/provisionerdaemonstart_test.go

+67
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,73 @@ func TestProvisionerDaemon_ProvisionerKey(t *testing.T) {
294294
require.Equal(t, proto.CurrentVersion.String(), daemons[0].APIVersion)
295295
})
296296

297+
t.Run("OKWithTags", func(t *testing.T) {
298+
t.Parallel()
299+
300+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
301+
defer cancel()
302+
client, user := coderdenttest.New(t, &coderdenttest.Options{
303+
ProvisionerDaemonPSK: "provisionersftw",
304+
LicenseOptions: &coderdenttest.LicenseOptions{
305+
Features: license.Features{
306+
codersdk.FeatureExternalProvisionerDaemons: 1,
307+
codersdk.FeatureMultipleOrganizations: 1,
308+
},
309+
},
310+
})
311+
//nolint:gocritic // ignore This client is operating as the owner user, which has unrestricted permissions
312+
res, err := client.CreateProvisionerKey(ctx, user.OrganizationID, codersdk.CreateProvisionerKeyRequest{
313+
Name: "dont-TEST-me",
314+
Tags: map[string]string{
315+
"tag1": "value1",
316+
"tag2": "value2",
317+
},
318+
})
319+
require.NoError(t, err)
320+
inv, conf := newCLI(t, "provisionerd", "start", "--key", res.Key, "--name=matt-daemon")
321+
err = conf.URL().Write(client.URL.String())
322+
require.NoError(t, err)
323+
pty := ptytest.New(t).Attach(inv)
324+
clitest.Start(t, inv)
325+
pty.ExpectNoMatchBefore(ctx, "check entitlement", "starting provisioner daemon")
326+
pty.ExpectMatchContext(ctx, `tags={"tag1":"value1","tag2":"value2"}`)
327+
328+
var daemons []codersdk.ProvisionerDaemon
329+
require.Eventually(t, func() bool {
330+
daemons, err = client.OrganizationProvisionerDaemons(ctx, user.OrganizationID, nil)
331+
if err != nil {
332+
return false
333+
}
334+
return len(daemons) == 1
335+
}, testutil.WaitShort, testutil.IntervalSlow)
336+
require.Equal(t, "matt-daemon", daemons[0].Name)
337+
require.Equal(t, provisionersdk.ScopeOrganization, daemons[0].Tags[provisionersdk.TagScope])
338+
require.Equal(t, buildinfo.Version(), daemons[0].Version)
339+
require.Equal(t, proto.CurrentVersion.String(), daemons[0].APIVersion)
340+
})
341+
342+
t.Run("NoProvisionerKeyFound", func(t *testing.T) {
343+
t.Parallel()
344+
345+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
346+
defer cancel()
347+
client, _ := coderdenttest.New(t, &coderdenttest.Options{
348+
ProvisionerDaemonPSK: "provisionersftw",
349+
LicenseOptions: &coderdenttest.LicenseOptions{
350+
Features: license.Features{
351+
codersdk.FeatureExternalProvisionerDaemons: 1,
352+
codersdk.FeatureMultipleOrganizations: 1,
353+
},
354+
},
355+
})
356+
357+
inv, conf := newCLI(t, "provisionerd", "start", "--key", "ThisKeyDoesNotExist", "--name=matt-daemon")
358+
err := conf.URL().Write(client.URL.String())
359+
require.NoError(t, err)
360+
err = inv.WithContext(ctx).Run()
361+
require.ErrorContains(t, err, "unable to get provisioner key details")
362+
})
363+
297364
t.Run("NoPSK", func(t *testing.T) {
298365
t.Parallel()
299366

0 commit comments

Comments
 (0)