@@ -6,18 +6,18 @@ package iam
6
6
import (
7
7
"context"
8
8
"fmt"
9
- "reflect"
10
9
"strings"
11
10
12
11
"github.com/aws/aws-sdk-go-v2/aws"
13
12
"github.com/aws/aws-sdk-go-v2/service/iam"
14
13
awstypes "github.com/aws/aws-sdk-go-v2/service/iam/types"
15
14
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
15
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
16
16
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
17
17
"github.com/hashicorp/terraform-provider-aws/internal/conns"
18
18
"github.com/hashicorp/terraform-provider-aws/internal/errs/sdkdiag"
19
- "github.com/hashicorp/terraform-provider-aws/internal/flex"
20
19
tftags "github.com/hashicorp/terraform-provider-aws/internal/tags"
20
+ inttypes "github.com/hashicorp/terraform-provider-aws/internal/types"
21
21
"github.com/hashicorp/terraform-provider-aws/internal/verify"
22
22
"github.com/hashicorp/terraform-provider-aws/names"
23
23
)
@@ -42,12 +42,12 @@ func dataSourceOpenIDConnectProvider() *schema.Resource {
42
42
Computed : true ,
43
43
Elem : & schema.Schema {Type : schema .TypeString },
44
44
},
45
+ names .AttrTags : tftags .TagsSchemaComputed (),
45
46
"thumbprint_list" : {
46
47
Type : schema .TypeList ,
47
48
Computed : true ,
48
49
Elem : & schema.Schema {Type : schema .TypeString },
49
50
},
50
- names .AttrTags : tftags .TagsSchemaComputed (),
51
51
names .AttrURL : {
52
52
Type : schema .TypeString ,
53
53
Optional : true ,
@@ -62,71 +62,67 @@ func dataSourceOpenIDConnectProvider() *schema.Resource {
62
62
63
63
func dataSourceOpenIDConnectProviderRead (ctx context.Context , d * schema.ResourceData , meta any ) diag.Diagnostics {
64
64
var diags diag.Diagnostics
65
-
66
65
conn := meta .(* conns.AWSClient ).IAMClient (ctx )
67
66
68
- input := & iam.GetOpenIDConnectProviderInput {}
67
+ var input iam.GetOpenIDConnectProviderInput
69
68
70
69
if v , ok := d .GetOk (names .AttrARN ); ok {
71
70
input .OpenIDConnectProviderArn = aws .String (v .(string ))
72
71
} else if v , ok := d .GetOk (names .AttrURL ); ok {
73
72
url := v .(string )
74
73
75
- oidcpEntry , err := dataSourceGetOpenIDConnectProviderByURL (ctx , conn , url )
74
+ oidcpEntry , err := findOpenIDConnectProviderByURL (ctx , conn , url )
75
+
76
76
if err != nil {
77
- return sdkdiag .AppendErrorf (diags , "finding IAM OIDC Provider by url (%s): %s" , url , err )
77
+ return sdkdiag .AppendErrorf (diags , "reading IAM OIDC Provider (%s): %s" , url , err )
78
78
}
79
79
80
- if oidcpEntry == nil {
81
- return sdkdiag .AppendErrorf (diags , "finding IAM OIDC Provider by url (%s): not found" , url )
82
- }
83
80
input .OpenIDConnectProviderArn = oidcpEntry .Arn
84
81
}
85
82
86
- resp , err := conn . GetOpenIDConnectProvider (ctx , input )
83
+ output , err := findOpenIDConnectProvider (ctx , conn , & input )
87
84
88
85
if err != nil {
89
86
return sdkdiag .AppendErrorf (diags , "reading IAM OIDC Provider: %s" , err )
90
87
}
91
88
92
- d .SetId (aws .ToString (input .OpenIDConnectProviderArn ))
93
- d .Set (names .AttrARN , input .OpenIDConnectProviderArn )
94
- d .Set (names .AttrURL , resp .Url )
95
- d .Set ("client_id_list" , flex .FlattenStringValueList (resp .ClientIDList ))
96
- d .Set ("thumbprint_list" , flex .FlattenStringValueList (resp .ThumbprintList ))
89
+ arn := aws .ToString (input .OpenIDConnectProviderArn )
90
+ d .SetId (arn )
91
+ d .Set (names .AttrARN , arn )
92
+ d .Set ("client_id_list" , output .ClientIDList )
93
+ d .Set ("thumbprint_list" , output .ThumbprintList )
94
+ d .Set (names .AttrURL , output .Url )
97
95
98
- setTagsOut (ctx , resp .Tags )
96
+ setTagsOut (ctx , output .Tags )
99
97
100
98
return diags
101
99
}
102
100
103
- func dataSourceGetOpenIDConnectProviderByURL (ctx context.Context , conn * iam.Client , url string ) (* awstypes.OpenIDConnectProviderListEntry , error ) {
104
- var result * awstypes.OpenIDConnectProviderListEntry
105
-
106
- input := & iam.ListOpenIDConnectProvidersInput {}
101
+ func findOpenIDConnectProviderByURL (ctx context.Context , conn * iam.Client , url string ) (* awstypes.OpenIDConnectProviderListEntry , error ) {
102
+ var input iam.ListOpenIDConnectProvidersInput
107
103
108
- output , err := conn .ListOpenIDConnectProviders (ctx , input )
104
+ output , err := conn .ListOpenIDConnectProviders (ctx , & input )
109
105
110
106
if err != nil {
111
107
return nil , err
112
108
}
113
109
114
- for _ , oidcp := range output .OpenIDConnectProviderList {
115
- if reflect . ValueOf ( oidcp ). IsZero () {
110
+ for _ , v := range output .OpenIDConnectProviderList {
111
+ if p := & v ; inttypes . IsZero (p ) {
116
112
continue
117
113
}
118
114
119
- arnUrl , err := urlFromOpenIDConnectProviderARN (aws .ToString (oidcp .Arn ))
115
+ arnUrl , err := urlFromOpenIDConnectProviderARN (aws .ToString (v .Arn ))
120
116
if err != nil {
121
117
return nil , err
122
118
}
123
119
124
120
if arnUrl == strings .TrimPrefix (url , "https://" ) {
125
- return & oidcp , nil
121
+ return & v , nil
126
122
}
127
123
}
128
124
129
- return result , nil
125
+ return nil , & retry. NotFoundError {}
130
126
}
131
127
132
128
func urlFromOpenIDConnectProviderARN (arn string ) (string , error ) {
0 commit comments