diff --git a/enterprise/coderd/provisionerkeys.go b/enterprise/coderd/provisionerkeys.go index ea89538965afa..08556e2eb24c2 100644 --- a/enterprise/coderd/provisionerkeys.go +++ b/enterprise/coderd/provisionerkeys.go @@ -147,9 +147,13 @@ func (api *API) provisionerKeyDaemons(rw http.ResponseWriter, r *http.Request) { pkDaemons := []codersdk.ProvisionerKeyDaemons{} for _, key := range sdkKeys { - // currently we exclude user-auth from this list + // The key.OrganizationID for the `user-auth` key is hardcoded to + // the default org in the database and we are overwriting it here + // to be the correct org we used to query the list. + // This will be changed when we update the `user-auth` keys to be + // directly tied to a user ID. if key.ID.String() == codersdk.ProvisionerKeyIDUserAuth { - continue + key.OrganizationID = organization.ID } daemons := []codersdk.ProvisionerDaemon{} for _, daemon := range recentDaemons { diff --git a/site/src/modules/provisioners/ProvisionerGroup.tsx b/site/src/modules/provisioners/ProvisionerGroup.tsx index ee333c915a2fe..79bcac0c9ba20 100644 --- a/site/src/modules/provisioners/ProvisionerGroup.tsx +++ b/site/src/modules/provisioners/ProvisionerGroup.tsx @@ -27,7 +27,7 @@ import { createDayString } from "utils/createDayString"; import { docs } from "utils/docs"; import { ProvisionerTag } from "./ProvisionerTag"; -type ProvisionerGroupType = "builtin" | "psk" | "key"; +type ProvisionerGroupType = "builtin" | "userAuth" | "psk" | "key"; interface ProvisionerGroupProps { readonly buildInfo: BuildInfoResponse; @@ -103,7 +103,8 @@ export const ProvisionerGroup: FC = ({ : `${provisionersWithWarnings} provisioners`; const hasMultipleTagVariants = - type === "psk" && provisioners.some((it) => !isSimpleTagSet(it.tags)); + (type === "psk" || type === "userAuth") && + provisioners.some((it) => !isSimpleTagSet(it.tags)); return (
= ({ )} + {type === "userAuth" && } + {type === "psk" && } {type === "key" && (

Key group – {keyName}

@@ -249,7 +252,7 @@ export const ProvisionerGroup: FC = ({
{hasMultipleTagVariants && ( - + )} @@ -335,11 +338,11 @@ const ProvisionerVersionPopover: FC = ({ ); }; -interface PskProvisionerTagsProps { +interface InlineProvisionerTagsProps { tags: Record; } -const PskProvisionerTags: FC = ({ tags }) => { +const InlineProvisionerTags: FC = ({ tags }) => { const daemonScope = tags.scope || "organization"; const iconScope = daemonScope === "organization" ? : ; @@ -413,6 +416,30 @@ const BuiltinProvisionerTitle: FC = () => { ); }; +const UserAuthProvisionerTitle: FC = () => { + return ( +

+ + User-authenticated provisioners + + + + User-authenticated provisioners + + These provisioners are connected by users using the{" "} + coder CLI, and are authorized by the users + credentials. They can be tagged to only run provisioner jobs for + that user. User-authenticated provisioners are only available for + the default organization.{" "} + Learn more… + + + + +

+ ); +}; + const PskProvisionerTitle: FC = () => { return (

diff --git a/site/src/pages/ManagementSettingsPage/OrganizationProvisionersPageView.stories.tsx b/site/src/pages/ManagementSettingsPage/OrganizationProvisionersPageView.stories.tsx index dec8e40e28d59..5bbf6cfe81731 100644 --- a/site/src/pages/ManagementSettingsPage/OrganizationProvisionersPageView.stories.tsx +++ b/site/src/pages/ManagementSettingsPage/OrganizationProvisionersPageView.stories.tsx @@ -7,6 +7,7 @@ import { MockProvisionerBuiltinKey, MockProvisionerKey, MockProvisionerPskKey, + MockProvisionerUserAuthKey, MockProvisionerWithTags, MockUserProvisioner, mockApiError, @@ -79,6 +80,17 @@ export const Provisioners: Story = { name: `ケイラ-${i}`, })), }, + { + key: MockProvisionerUserAuthKey, + daemons: [ + MockUserProvisioner, + { + ...MockUserProvisioner, + id: "mock-user-provisioner-2", + name: "Test User Provisioner 2", + }, + ], + }, ], }, play: async ({ step }) => { diff --git a/site/src/pages/ManagementSettingsPage/OrganizationProvisionersPageView.tsx b/site/src/pages/ManagementSettingsPage/OrganizationProvisionersPageView.tsx index eac651f10219e..7dd1bccab1aac 100644 --- a/site/src/pages/ManagementSettingsPage/OrganizationProvisionersPageView.tsx +++ b/site/src/pages/ManagementSettingsPage/OrganizationProvisionersPageView.tsx @@ -110,28 +110,16 @@ const ViewContent: FC = ({ buildInfo, provisioners }) => { )} - {provisioners.map((group) => { - const type = getGroupType(group.key); - - // We intentionally hide user-authenticated provisioners for now - // because there are 1. some grouping issues on the backend and 2. we - // should ideally group them by the user who authenticated them, and - // not just lump them all together. - if (type === "userAuth") { - return null; - } - - return ( - - ); - })} + {provisioners.map((group) => ( + + ))} ); diff --git a/site/src/testHelpers/entities.ts b/site/src/testHelpers/entities.ts index be2a1ccdda196..7b654e54c48a2 100644 --- a/site/src/testHelpers/entities.ts +++ b/site/src/testHelpers/entities.ts @@ -610,7 +610,7 @@ export const MockProvisioner2: TypesGen.ProvisionerDaemon = { }; export const MockUserProvisioner: TypesGen.ProvisionerDaemon = { - ...MockProvisioner, + ...MockUserAuthProvisioner, id: "test-user-provisioner", name: "Test User Provisioner", tags: { scope: "user", owner: "12345678-abcd-1234-abcd-1234567890abcd" },