@@ -5,15 +5,18 @@ import (
5
5
"encoding/base64"
6
6
"fmt"
7
7
"log"
8
+ "strconv"
8
9
9
10
"github.com/aws/aws-sdk-go/aws"
10
11
"github.com/aws/aws-sdk-go/service/mq"
11
12
"github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr"
12
13
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff"
14
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
13
15
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
14
16
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
15
17
"github.com/hashicorp/terraform-provider-aws/internal/conns"
16
18
tftags "github.com/hashicorp/terraform-provider-aws/internal/tags"
19
+ "github.com/hashicorp/terraform-provider-aws/internal/tfresource"
17
20
"github.com/hashicorp/terraform-provider-aws/internal/verify"
18
21
)
19
22
@@ -97,81 +100,101 @@ func resourceConfigurationCreate(d *schema.ResourceData, meta interface{}) error
97
100
defaultTagsConfig := meta .(* conns.AWSClient ).DefaultTagsConfig
98
101
tags := defaultTagsConfig .MergeTags (tftags .New (d .Get ("tags" ).(map [string ]interface {})))
99
102
100
- input := mq.CreateConfigurationRequest {
103
+ name := d .Get ("name" ).(string )
104
+ input := & mq.CreateConfigurationRequest {
101
105
EngineType : aws .String (d .Get ("engine_type" ).(string )),
102
106
EngineVersion : aws .String (d .Get ("engine_version" ).(string )),
103
- Name : aws .String (d . Get ( " name" ).( string ) ),
107
+ Name : aws .String (name ),
104
108
}
105
109
106
110
if v , ok := d .GetOk ("authentication_strategy" ); ok {
107
111
input .AuthenticationStrategy = aws .String (v .(string ))
108
112
}
113
+
109
114
if len (tags ) > 0 {
110
115
input .Tags = Tags (tags .IgnoreAWS ())
111
116
}
112
117
113
- log . Printf ( "[INFO] Creating MQ Configuration: %s" , input )
114
- out , err := conn . CreateConfiguration ( & input )
118
+ output , err := conn . CreateConfiguration ( input )
119
+
115
120
if err != nil {
116
- return err
121
+ return fmt . Errorf ( "creating MQ Configuration (%s): %w" , name , err )
117
122
}
118
123
119
- d .SetId (aws .StringValue (out .Id ))
120
- d .Set ("arn" , out .Arn )
124
+ d .SetId (aws .StringValue (output .Id ))
125
+
126
+ if v , ok := d .GetOk ("data" ); ok {
127
+ input := & mq.UpdateConfigurationRequest {
128
+ ConfigurationId : aws .String (d .Id ()),
129
+ Data : aws .String (base64 .StdEncoding .EncodeToString ([]byte (v .(string )))),
130
+ }
131
+
132
+ if v , ok := d .GetOk ("description" ); ok {
133
+ input .Description = aws .String (v .(string ))
134
+ }
135
+
136
+ _ , err := conn .UpdateConfiguration (input )
121
137
122
- return resourceConfigurationUpdate (d , meta )
138
+ if err != nil {
139
+ return fmt .Errorf ("updating MQ Configuration (%s): %w" , d .Id (), err )
140
+ }
141
+ }
142
+
143
+ return resourceConfigurationRead (d , meta )
123
144
}
124
145
125
146
func resourceConfigurationRead (d * schema.ResourceData , meta interface {}) error {
126
147
conn := meta .(* conns.AWSClient ).MQConn
127
148
defaultTagsConfig := meta .(* conns.AWSClient ).DefaultTagsConfig
128
149
ignoreTagsConfig := meta .(* conns.AWSClient ).IgnoreTagsConfig
129
150
130
- log .Printf ("[INFO] Reading MQ Configuration %s" , d .Id ())
131
- out , err := conn .DescribeConfiguration (& mq.DescribeConfigurationInput {
132
- ConfigurationId : aws .String (d .Id ()),
133
- })
151
+ configuration , err := FindConfigurationByID (conn , d .Id ())
152
+
153
+ if ! d .IsNewResource () && tfresource .NotFound (err ) {
154
+ log .Printf ("[WARN] MQ Configuration (%s) not found, removing from state" , d .Id ())
155
+ d .SetId ("" )
156
+ return nil
157
+ }
158
+
134
159
if err != nil {
135
- if tfawserr .ErrCodeEquals (err , mq .ErrCodeNotFoundException ) {
136
- log .Printf ("[WARN] MQ Configuration %q not found, removing from state" , d .Id ())
137
- d .SetId ("" )
138
- return nil
139
- }
140
- return err
160
+ return fmt .Errorf ("reading MQ Configuration (%s): %w" , d .Id (), err )
141
161
}
142
162
143
- d .Set ("arn" , out .Arn )
144
- d .Set ("authentication_strategy" , out .AuthenticationStrategy )
145
- d .Set ("description" , out .LatestRevision .Description )
146
- d .Set ("engine_type" , out .EngineType )
147
- d .Set ("engine_version" , out .EngineVersion )
148
- d .Set ("latest_revision" , out .LatestRevision .Revision )
149
- d .Set ("name" , out .Name )
163
+ d .Set ("arn" , configuration .Arn )
164
+ d .Set ("authentication_strategy" , configuration .AuthenticationStrategy )
165
+ d .Set ("description" , configuration .LatestRevision .Description )
166
+ d .Set ("engine_type" , configuration .EngineType )
167
+ d .Set ("engine_version" , configuration .EngineVersion )
168
+ d .Set ("latest_revision" , configuration .LatestRevision .Revision )
169
+ d .Set ("name" , configuration .Name )
150
170
151
- rOut , err := conn .DescribeConfigurationRevision (& mq.DescribeConfigurationRevisionInput {
171
+ revision := strconv .FormatInt (aws .Int64Value (configuration .LatestRevision .Revision ), 10 )
172
+ configurationRevision , err := conn .DescribeConfigurationRevision (& mq.DescribeConfigurationRevisionInput {
152
173
ConfigurationId : aws .String (d .Id ()),
153
- ConfigurationRevision : aws .String (fmt . Sprintf ( "%d" , * out . LatestRevision . Revision ) ),
174
+ ConfigurationRevision : aws .String (revision ),
154
175
})
176
+
155
177
if err != nil {
156
- return err
178
+ return fmt . Errorf ( "reading MQ Configuration (%s) revision (%s): %w" , d . Id (), revision , err )
157
179
}
158
180
159
- b , err := base64 .StdEncoding .DecodeString (* rOut .Data )
181
+ data , err := base64 .StdEncoding .DecodeString (aws .StringValue (configurationRevision .Data ))
182
+
160
183
if err != nil {
161
- return err
184
+ return fmt . Errorf ( "base64 decoding: %w" , err )
162
185
}
163
186
164
- d .Set ("data" , string (b ))
187
+ d .Set ("data" , string (data ))
165
188
166
- tags := KeyValueTags (out .Tags ).IgnoreAWS ().IgnoreConfig (ignoreTagsConfig )
189
+ tags := KeyValueTags (configuration .Tags ).IgnoreAWS ().IgnoreConfig (ignoreTagsConfig )
167
190
168
191
//lintignore:AWSR002
169
192
if err := d .Set ("tags" , tags .RemoveDefaultConfig (defaultTagsConfig ).Map ()); err != nil {
170
- return fmt .Errorf ("error setting tags: %w" , err )
193
+ return fmt .Errorf ("setting tags: %w" , err )
171
194
}
172
195
173
196
if err := d .Set ("tags_all" , tags .Map ()); err != nil {
174
- return fmt .Errorf ("error setting tags_all: %w" , err )
197
+ return fmt .Errorf ("setting tags_all: %w" , err )
175
198
}
176
199
177
200
return nil
@@ -181,35 +204,58 @@ func resourceConfigurationUpdate(d *schema.ResourceData, meta interface{}) error
181
204
conn := meta .(* conns.AWSClient ).MQConn
182
205
183
206
if d .HasChanges ("data" , "description" ) {
184
- rawData := d .Get ("data" ).(string )
185
- data := base64 .StdEncoding .EncodeToString ([]byte (rawData ))
186
-
187
- input := mq.UpdateConfigurationRequest {
207
+ input := & mq.UpdateConfigurationRequest {
188
208
ConfigurationId : aws .String (d .Id ()),
189
- Data : aws .String (data ),
209
+ Data : aws .String (base64 . StdEncoding . EncodeToString ([] byte ( d . Get ( " data" ).( string ))) ),
190
210
}
211
+
191
212
if v , ok := d .GetOk ("description" ); ok {
192
213
input .Description = aws .String (v .(string ))
193
214
}
194
215
195
- log . Printf ( "[INFO] Updating MQ Configuration %s: %s" , d . Id (), input )
196
- _ , err := conn . UpdateConfiguration ( & input )
216
+ _ , err := conn . UpdateConfiguration ( input )
217
+
197
218
if err != nil {
198
- return err
219
+ return fmt . Errorf ( "updating MQ Configuration (%s): %w" , d . Id (), err )
199
220
}
200
221
}
201
222
202
223
if d .HasChange ("tags_all" ) {
203
224
o , n := d .GetChange ("tags_all" )
204
225
205
226
if err := UpdateTags (conn , d .Get ("arn" ).(string ), o , n ); err != nil {
206
- return fmt .Errorf ("error updating MQ Broker (%s) tags: %s " , d .Get ("arn" ).(string ), err )
227
+ return fmt .Errorf ("updating MQ Configuration (%s) tags: %w " , d .Get ("arn" ).(string ), err )
207
228
}
208
229
}
209
230
210
231
return resourceConfigurationRead (d , meta )
211
232
}
212
233
234
+ func FindConfigurationByID (conn * mq.MQ , id string ) (* mq.DescribeConfigurationOutput , error ) {
235
+ input := & mq.DescribeConfigurationInput {
236
+ ConfigurationId : aws .String (id ),
237
+ }
238
+
239
+ output , err := conn .DescribeConfiguration (input )
240
+
241
+ if tfawserr .ErrCodeEquals (err , mq .ErrCodeNotFoundException ) {
242
+ return nil , & resource.NotFoundError {
243
+ LastError : err ,
244
+ LastRequest : input ,
245
+ }
246
+ }
247
+
248
+ if err != nil {
249
+ return nil , err
250
+ }
251
+
252
+ if output == nil {
253
+ return nil , tfresource .NewEmptyResultError (input )
254
+ }
255
+
256
+ return output , nil
257
+ }
258
+
213
259
func suppressXMLEquivalentConfig (k , old , new string , d * schema.ResourceData ) bool {
214
260
os , err := CanonicalXML (old )
215
261
if err != nil {
0 commit comments