Skip to content

Commit

Permalink
Fixing StackTag import (#360)
Browse files Browse the repository at this point in the history
### Summary
- Fixed import by removing usage of req.GetProperties()

### Testing
- Tested import - `pulumi import pulumiservice:index:StackTag testImport
IaroslavTitov/PulumiTS/PulumiTS/quality`
  • Loading branch information
IaroslavTitov authored Jul 22, 2024
1 parent 5f73fd7 commit 0f9010d
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 9 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG_PENDING.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
### Improvements

### Bug Fixes
- Fixed import by refactoring Read method of EnvironmentVersionTag resource [311](https://github.com/pulumi/pulumi-pulumiservice/issues/311)
- Fixed import by refactoring Read method of OrgAccessToken resource [311](https://github.com/pulumi/pulumi-pulumiservice/issues/311)
- Fixed import by refactoring Read method of StackTag resource [311](https://github.com/pulumi/pulumi-pulumiservice/issues/311)

### Miscellaneous
34 changes: 26 additions & 8 deletions provider/pkg/provider/stack_tags.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"fmt"
"path"
"strings"

pbempty "google.golang.org/protobuf/types/known/emptypb"

Expand Down Expand Up @@ -135,26 +136,34 @@ func (st *PulumiServiceStackTagResource) Update(req *pulumirpc.UpdateRequest) (*

func (st *PulumiServiceStackTagResource) Read(req *pulumirpc.ReadRequest) (*pulumirpc.ReadResponse, error) {
ctx := context.Background()
var inputs PulumiServiceStackTagInput
err := serde.FromProperties(req.GetProperties(), structTagKey, &inputs)

organization, project, stack, tagName, err := splitStackTagId(req.Id)
if err != nil {
return nil, err
}

stackName := pulumiapi.StackIdentifier{
OrgName: inputs.Organization,
ProjectName: inputs.Project,
StackName: inputs.Stack,
OrgName: organization,
ProjectName: project,
StackName: stack,
}
tag, err := st.client.GetStackTag(ctx, stackName, inputs.Name)
tag, err := st.client.GetStackTag(ctx, stackName, tagName)
if err != nil {
return nil, fmt.Errorf("failed to read StackTag (%q): %w", req.Id, err)
}
if tag == nil {
// if the tag doesn't exist, then return empty response
return &pulumirpc.ReadResponse{}, nil
}
inputs.Value = tag.Value
props, err := serde.ToProperties(inputs, structTagKey)

input := PulumiServiceStackTagInput{
Organization: organization,
Project: project,
Stack: stack,
Name: tag.Name,
Value: tag.Value,
}
props, err := serde.ToProperties(input, structTagKey)
if err != nil {
return nil, fmt.Errorf("failed to marshal inputs to properties: %w", err)
}
Expand All @@ -167,3 +176,12 @@ func (st *PulumiServiceStackTagResource) Read(req *pulumirpc.ReadRequest) (*pulu

func (st *PulumiServiceStackTagResource) Configure(_ PulumiServiceConfig) {
}

func splitStackTagId(id string) (organization string, project string, stack string, tagName string, err error) {
// format: organization/project/stack/tagName
s := strings.Split(id, "/")
if len(s) != 4 {
return "", "", "", "", fmt.Errorf("%q is invalid, must be in organization/project/stack/tagName format", id)
}
return s[0], s[1], s[2], s[3], nil
}

0 comments on commit 0f9010d

Please sign in to comment.