mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
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.
This commit is contained in:
@@ -104,6 +104,22 @@ func (r *RootCmd) provisionerDaemonStart() *serpent.Command {
|
||||
return err
|
||||
}
|
||||
|
||||
displayedTags := make(map[string]string, len(tags))
|
||||
if provisionerKey != "" {
|
||||
pkDetails, err := client.GetProvisionerKey(ctx, provisionerKey)
|
||||
if err != nil {
|
||||
return xerrors.New("unable to get provisioner key details")
|
||||
}
|
||||
|
||||
for k, v := range pkDetails.Tags {
|
||||
displayedTags[k] = v
|
||||
}
|
||||
} else {
|
||||
for key, val := range tags {
|
||||
displayedTags[key] = val
|
||||
}
|
||||
}
|
||||
|
||||
if name == "" {
|
||||
name = cliutil.Hostname()
|
||||
}
|
||||
@@ -131,7 +147,7 @@ func (r *RootCmd) provisionerDaemonStart() *serpent.Command {
|
||||
defer closeLogger()
|
||||
}
|
||||
|
||||
if len(tags) == 0 {
|
||||
if len(displayedTags) == 0 {
|
||||
logger.Info(ctx, "note: untagged provisioners can only pick up jobs from untagged templates")
|
||||
}
|
||||
|
||||
@@ -202,7 +218,7 @@ func (r *RootCmd) provisionerDaemonStart() *serpent.Command {
|
||||
defer closeFunc()
|
||||
}
|
||||
|
||||
logger.Info(ctx, "starting provisioner daemon", slog.F("tags", tags), slog.F("name", name))
|
||||
logger.Info(ctx, "starting provisioner daemon", slog.F("tags", displayedTags), slog.F("name", name))
|
||||
|
||||
connector := provisionerd.LocalProvisioners{
|
||||
string(database.ProvisionerTypeTerraform): proto.NewDRPCProvisionerClient(terraformClient),
|
||||
|
||||
@@ -294,6 +294,73 @@ func TestProvisionerDaemon_ProvisionerKey(t *testing.T) {
|
||||
require.Equal(t, proto.CurrentVersion.String(), daemons[0].APIVersion)
|
||||
})
|
||||
|
||||
t.Run("OKWithTags", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
|
||||
defer cancel()
|
||||
client, user := coderdenttest.New(t, &coderdenttest.Options{
|
||||
ProvisionerDaemonPSK: "provisionersftw",
|
||||
LicenseOptions: &coderdenttest.LicenseOptions{
|
||||
Features: license.Features{
|
||||
codersdk.FeatureExternalProvisionerDaemons: 1,
|
||||
codersdk.FeatureMultipleOrganizations: 1,
|
||||
},
|
||||
},
|
||||
})
|
||||
//nolint:gocritic // ignore This client is operating as the owner user, which has unrestricted permissions
|
||||
res, err := client.CreateProvisionerKey(ctx, user.OrganizationID, codersdk.CreateProvisionerKeyRequest{
|
||||
Name: "dont-TEST-me",
|
||||
Tags: map[string]string{
|
||||
"tag1": "value1",
|
||||
"tag2": "value2",
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
inv, conf := newCLI(t, "provisionerd", "start", "--key", res.Key, "--name=matt-daemon")
|
||||
err = conf.URL().Write(client.URL.String())
|
||||
require.NoError(t, err)
|
||||
pty := ptytest.New(t).Attach(inv)
|
||||
clitest.Start(t, inv)
|
||||
pty.ExpectNoMatchBefore(ctx, "check entitlement", "starting provisioner daemon")
|
||||
pty.ExpectMatchContext(ctx, `tags={"tag1":"value1","tag2":"value2"}`)
|
||||
|
||||
var daemons []codersdk.ProvisionerDaemon
|
||||
require.Eventually(t, func() bool {
|
||||
daemons, err = client.OrganizationProvisionerDaemons(ctx, user.OrganizationID, nil)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
return len(daemons) == 1
|
||||
}, testutil.WaitShort, testutil.IntervalSlow)
|
||||
require.Equal(t, "matt-daemon", daemons[0].Name)
|
||||
require.Equal(t, provisionersdk.ScopeOrganization, daemons[0].Tags[provisionersdk.TagScope])
|
||||
require.Equal(t, buildinfo.Version(), daemons[0].Version)
|
||||
require.Equal(t, proto.CurrentVersion.String(), daemons[0].APIVersion)
|
||||
})
|
||||
|
||||
t.Run("NoProvisionerKeyFound", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
|
||||
defer cancel()
|
||||
client, _ := coderdenttest.New(t, &coderdenttest.Options{
|
||||
ProvisionerDaemonPSK: "provisionersftw",
|
||||
LicenseOptions: &coderdenttest.LicenseOptions{
|
||||
Features: license.Features{
|
||||
codersdk.FeatureExternalProvisionerDaemons: 1,
|
||||
codersdk.FeatureMultipleOrganizations: 1,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
inv, conf := newCLI(t, "provisionerd", "start", "--key", "ThisKeyDoesNotExist", "--name=matt-daemon")
|
||||
err := conf.URL().Write(client.URL.String())
|
||||
require.NoError(t, err)
|
||||
err = inv.WithContext(ctx).Run()
|
||||
require.ErrorContains(t, err, "unable to get provisioner key details")
|
||||
})
|
||||
|
||||
t.Run("NoPSK", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user