Skip to content

Commit

Permalink
Refactoring AccessToken Read method (#341)
Browse files Browse the repository at this point in the history
### Summary
- `tokenId` property is not used anywhere at all, lol. The output
tokenId is used as the resourceId, making this one useless
- Eliminated use of req.GetProperties in AccessToken, which fixed import

### Testing 
- pulumi import pulumiservice:index:AccessToken hui
a7a15253-0108-4e39-89ff-3cd8859adba5
  • Loading branch information
IaroslavTitov authored Jun 28, 2024
1 parent e426001 commit 22339c0
Show file tree
Hide file tree
Showing 8 changed files with 43 additions and 66 deletions.
1 change: 1 addition & 0 deletions CHANGELOG_PENDING.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
### Improvements

### Bug Fixes
- Fixed import by refactoring Read method of AccessToken resource + minor refactor [#311](https://github.com/pulumi/pulumi-pulumiservice/issues/311)

### Miscellaneous
5 changes: 0 additions & 5 deletions provider/cmd/pulumi-resource-pulumiservice/schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -564,10 +564,6 @@
"pulumiservice:index:AccessToken": {
"description": "Access tokens allow a user to authenticate against the Pulumi Cloud",
"properties": {
"tokenId": {
"description": "The token identifier.",
"type": "string"
},
"description": {
"description": "Description of the access token.",
"type": "string"
Expand All @@ -579,7 +575,6 @@
}
},
"required": [
"tokenId",
"description",
"value"
],
Expand Down
60 changes: 42 additions & 18 deletions provider/pkg/provider/access_token.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"fmt"

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

"github.com/pulumi/pulumi-pulumiservice/provider/pkg/internal/pulumiapi"
"github.com/pulumi/pulumi/sdk/v3/go/common/resource"
Expand All @@ -20,10 +21,31 @@ type PulumiServiceAccessTokenInput struct {
Description string
}

func (i *PulumiServiceAccessTokenInput) ToPropertyMap() resource.PropertyMap {
pm := resource.PropertyMap{}
pm["description"] = resource.NewPropertyValue(i.Description)
return pm
// AccessToken uses outdated way of storing input in internal __inputs property
func GenerateProperties(input PulumiServiceAccessTokenInput, accessToken pulumiapi.AccessToken) (outputs *structpb.Struct, inputs *structpb.Struct, err error) {
inputMap := resource.PropertyMap{}
inputMap["description"] = resource.NewPropertyValue(input.Description)
outputStore := resource.PropertyMap{}
outputStore["__inputs"] = resource.NewObjectProperty(inputMap)
outputStore["value"] = resource.NewPropertyValue(accessToken.TokenValue)

inputs, err = plugin.MarshalProperties(
inputMap,
plugin.MarshalOptions{},
)
if err != nil {
return nil, nil, err
}

outputs, err = plugin.MarshalProperties(
outputStore,
plugin.MarshalOptions{},
)
if err != nil {
return nil, nil, err
}

return outputs, inputs, err
}

func (at *PulumiServiceAccessTokenResource) ToPulumiServiceAccessTokenInput(inputMap resource.PropertyMap) PulumiServiceAccessTokenInput {
Expand Down Expand Up @@ -56,25 +78,18 @@ func (at *PulumiServiceAccessTokenResource) Delete(req *pulumirpc.DeleteRequest)

func (at *PulumiServiceAccessTokenResource) Create(req *pulumirpc.CreateRequest) (*pulumirpc.CreateResponse, error) {
ctx := context.Background()
inputs, err := plugin.UnmarshalProperties(req.GetProperties(), plugin.MarshalOptions{KeepUnknowns: true, SkipNulls: true})
inputMap, err := plugin.UnmarshalProperties(req.GetProperties(), plugin.MarshalOptions{KeepUnknowns: true, SkipNulls: true})
if err != nil {
return nil, err
}

inputsAccessToken := at.ToPulumiServiceAccessTokenInput(inputs)
accessToken, err := at.createAccessToken(ctx, inputsAccessToken)
input := at.ToPulumiServiceAccessTokenInput(inputMap)
accessToken, err := at.createAccessToken(ctx, input)
if err != nil {
return nil, fmt.Errorf("error creating access token '%s': %s", inputsAccessToken.Description, err.Error())
return nil, fmt.Errorf("error creating access token '%s': %s", input.Description, err.Error())
}

outputStore := resource.PropertyMap{}
outputStore["__inputs"] = resource.NewObjectProperty(inputs)
outputStore["value"] = resource.NewPropertyValue(accessToken.TokenValue)

outputProperties, err := plugin.MarshalProperties(
outputStore,
plugin.MarshalOptions{},
)
outputProperties, _, err := GenerateProperties(input, *accessToken)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -107,9 +122,18 @@ func (at *PulumiServiceAccessTokenResource) Read(req *pulumirpc.ReadRequest) (*p
return &pulumirpc.ReadResponse{}, nil
}

input := PulumiServiceAccessTokenInput{
Description: accessToken.Description,
}
outputProperties, inputs, err := GenerateProperties(input, *accessToken)
if err != nil {
return nil, err
}

return &pulumirpc.ReadResponse{
Id: req.GetId(),
Properties: req.GetProperties(),
Id: accessToken.ID,
Properties: outputProperties,
Inputs: inputs,
}, nil
}

Expand Down
6 changes: 0 additions & 6 deletions sdk/dotnet/AccessToken.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 0 additions & 7 deletions sdk/go/pulumiservice/accessToken.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 0 additions & 14 deletions sdk/java/src/main/java/com/pulumi/pulumiservice/AccessToken.java

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 0 additions & 6 deletions sdk/nodejs/accessToken.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 0 additions & 10 deletions sdk/python/pulumi_pulumiservice/access_token.py

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 22339c0

Please sign in to comment.