Skip to content

Commit 3a9a7d1

Browse files
committed
feat(provisionerd): pass owner git ssh key
1 parent a1d3b82 commit 3a9a7d1

File tree

6 files changed

+226
-136
lines changed

6 files changed

+226
-136
lines changed

coderd/provisionerdserver/provisionerdserver.go

+7
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,11 @@ func (s *server) acquireProtoJob(ctx context.Context, job database.ProvisionerJo
467467
if err != nil {
468468
return nil, failJob(fmt.Sprintf("get owner: %s", err))
469469
}
470+
var ownerSSHPublicKey, ownerSSHPrivateKey string
471+
if ownerSSHKey, err := s.Database.GetGitSSHKey(ctx, owner.ID); err == nil {
472+
ownerSSHPublicKey = ownerSSHKey.PublicKey
473+
ownerSSHPrivateKey = ownerSSHKey.PrivateKey
474+
}
470475
ownerGroups, err := s.Database.GetGroupsByOrganizationAndUserID(ctx, database.GetGroupsByOrganizationAndUserIDParams{
471476
UserID: owner.ID,
472477
OrganizationID: s.OrganizationID,
@@ -586,6 +591,8 @@ func (s *server) acquireProtoJob(ctx context.Context, job database.ProvisionerJo
586591
TemplateName: template.Name,
587592
TemplateVersion: templateVersion.Name,
588593
WorkspaceOwnerSessionToken: sessionToken,
594+
WorkspaceOwnerSshPublicKey: ownerSSHPublicKey,
595+
WorkspaceOwnerSshPrivateKey: ownerSSHPrivateKey,
589596
},
590597
LogLevel: input.LogLevel,
591598
},

provisioner/terraform/provision.go

+2
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,8 @@ func provisionEnv(
202202
"CODER_WORKSPACE_OWNER_NAME="+metadata.GetWorkspaceOwnerName(),
203203
"CODER_WORKSPACE_OWNER_OIDC_ACCESS_TOKEN="+metadata.GetWorkspaceOwnerOidcAccessToken(),
204204
"CODER_WORKSPACE_OWNER_GROUPS="+string(ownerGroups),
205+
"CODER_WORKSPACE_OWNER_SSH_PUBLIC_KEY="+metadata.GetWorkspaceOwnerSshPublicKey(),
206+
"CODER_WORKSPACE_OWNER_SSH_PRIVATE_KEY="+metadata.GetWorkspaceOwnerSshPrivateKey(),
205207
"CODER_WORKSPACE_ID="+metadata.GetWorkspaceId(),
206208
"CODER_WORKSPACE_OWNER_ID="+metadata.GetWorkspaceOwnerId(),
207209
"CODER_WORKSPACE_OWNER_SESSION_TOKEN="+metadata.GetWorkspaceOwnerSessionToken(),

provisioner/terraform/provision_test.go

+46
Original file line numberDiff line numberDiff line change
@@ -572,6 +572,52 @@ func TestProvision(t *testing.T) {
572572
}},
573573
},
574574
},
575+
{
576+
Name: "ssh-key",
577+
Files: map[string]string{
578+
"main.tf": `terraform {
579+
required_providers {
580+
coder = {
581+
source = "coder/coder"
582+
}
583+
}
584+
}
585+
586+
resource "null_resource" "example" {}
587+
data "coder_workspace_owner" "me" {}
588+
resource "coder_metadata" "example" {
589+
resource_id = null_resource.example.id
590+
item {
591+
key = "pubkey"
592+
value = data.coder_workspace_owner.me.ssh_public_key
593+
}
594+
item {
595+
key = "privkey"
596+
value = data.coder_workspace_owner.me.ssh_private_key
597+
}
598+
}
599+
`,
600+
},
601+
Request: &proto.PlanRequest{
602+
Metadata: &proto.Metadata{
603+
WorkspaceOwnerSshPublicKey: "fake public key",
604+
WorkspaceOwnerSshPrivateKey: "fake private key",
605+
},
606+
},
607+
Response: &proto.PlanComplete{
608+
Resources: []*proto.Resource{{
609+
Name: "example",
610+
Type: "null_resource",
611+
Metadata: []*proto.Resource_Metadata{{
612+
Key: "pubkey",
613+
Value: "fake public key",
614+
}, {
615+
Key: "privkey",
616+
Value: "fake private key",
617+
}},
618+
}},
619+
},
620+
},
575621
}
576622

577623
for _, testCase := range testCases {

0 commit comments

Comments
 (0)