66
77 "github.com/aws/aws-sdk-go/aws"
88 "github.com/aws/aws-sdk-go/service/neptune"
9+ "github.com/hashicorp/aws-sdk-go-base/tfawserr"
910 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1011 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1112 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
@@ -107,18 +108,21 @@ func resourceAwsNeptuneClusterParameterGroupCreate(d *schema.ResourceData, meta
107108 Tags : tags ,
108109 }
109110
110- log .Printf ("[DEBUG] Create Neptune Cluster Parameter Group: %#v" , createOpts )
111- resp , err := conn .CreateDBClusterParameterGroup (& createOpts )
111+ _ , err := conn .CreateDBClusterParameterGroup (& createOpts )
112112 if err != nil {
113- return fmt .Errorf ("Error creating Neptune Cluster Parameter Group: %s" , err )
113+ return fmt .Errorf ("error creating Neptune Cluster Parameter Group (%s): %w" , groupName , err )
114114 }
115115
116116 d .SetId (aws .StringValue (createOpts .DBClusterParameterGroupName ))
117- log .Printf ("[INFO] Neptune Cluster Parameter Group ID: %s" , d .Id ())
118117
119- d .Set ("arn" , resp .DBClusterParameterGroup .DBClusterParameterGroupArn )
118+ if v , ok := d .GetOk ("parameter" ); ok && v .(* schema.Set ).Len () > 0 {
119+ err := modifyNeptuneClusterParameterGroupParameters (conn , d .Id (), expandNeptuneParameters (v .(* schema.Set ).List ()))
120+ if err != nil {
121+ return fmt .Errorf ("error modifying Neptune Cluster Parameter Group (%s): %w" , d .Id (), err )
122+ }
123+ }
120124
121- return resourceAwsNeptuneClusterParameterGroupUpdate (d , meta )
125+ return resourceAwsNeptuneClusterParameterGroupRead (d , meta )
122126}
123127
124128func resourceAwsNeptuneClusterParameterGroupRead (d * schema.ResourceData , meta interface {}) error {
@@ -130,17 +134,21 @@ func resourceAwsNeptuneClusterParameterGroupRead(d *schema.ResourceData, meta in
130134 }
131135
132136 describeResp , err := conn .DescribeDBClusterParameterGroups (& describeOpts )
133- if err != nil {
134- if isAWSErr (err , neptune .ErrCodeDBParameterGroupNotFoundFault , "" ) {
135- log .Printf ("[WARN] Neptune Cluster Parameter Group (%s) not found, removing from state" , d .Id ())
136- d .SetId ("" )
137- return nil
138- }
137+ if ! d .IsNewResource () && tfawserr .ErrCodeEquals (err , neptune .ErrCodeDBParameterGroupNotFoundFault ) {
138+ log .Printf ("[WARN] Neptune Cluster Parameter Group (%s) not found, removing from state" , d .Id ())
139+ d .SetId ("" )
140+ return nil
141+ }
139142
140- return err
143+ if err != nil {
144+ return fmt .Errorf ("error reading Neptune Cluster Parameter Group (%s): %w" , d .Id (), err )
141145 }
142146
143- if len (describeResp .DBClusterParameterGroups ) == 0 {
147+ if describeResp == nil || len (describeResp .DBClusterParameterGroups ) == 0 {
148+ if d .IsNewResource () {
149+ return fmt .Errorf ("error reading Neptune Cluster Parameter Group (%s): not found" , d .Id ())
150+ }
151+
144152 log .Printf ("[WARN] Neptune Cluster Parameter Group (%s) not found, removing from state" , d .Id ())
145153 d .SetId ("" )
146154 return nil
@@ -164,17 +172,17 @@ func resourceAwsNeptuneClusterParameterGroupRead(d *schema.ResourceData, meta in
164172 }
165173
166174 if err := d .Set ("parameter" , flattenNeptuneParameters (describeParametersResp .Parameters )); err != nil {
167- return fmt .Errorf ("error setting neptune parameter: %s " , err )
175+ return fmt .Errorf ("error setting neptune parameter: %w " , err )
168176 }
169177
170178 tags , err := keyvaluetags .NeptuneListTags (conn , d .Get ("arn" ).(string ))
171179
172180 if err != nil {
173- return fmt .Errorf ("error listing tags for Neptune Cluster Parameter Group (%s): %s " , d .Get ( "arn" ).( string ), err )
181+ return fmt .Errorf ("error listing tags for Neptune Cluster Parameter Group (%s): %w " , d .Id ( ), err )
174182 }
175183
176184 if err := d .Set ("tags" , tags .IgnoreAws ().IgnoreConfig (ignoreTagsConfig ).Map ()); err != nil {
177- return fmt .Errorf ("error setting tags: %s " , err )
185+ return fmt .Errorf ("error setting tags: %w " , err )
178186 }
179187
180188 return nil
@@ -198,26 +206,9 @@ func resourceAwsNeptuneClusterParameterGroupUpdate(d *schema.ResourceData, meta
198206 parameters := expandNeptuneParameters (ns .Difference (os ).List ())
199207
200208 if len (parameters ) > 0 {
201- // We can only modify 20 parameters at a time, so walk them until
202- // we've got them all.
203- for parameters != nil {
204- var paramsToModify []* neptune.Parameter
205- if len (parameters ) <= neptuneClusterParameterGroupMaxParamsBulkEdit {
206- paramsToModify , parameters = parameters [:], nil
207- } else {
208- paramsToModify , parameters = parameters [:neptuneClusterParameterGroupMaxParamsBulkEdit ], parameters [neptuneClusterParameterGroupMaxParamsBulkEdit :]
209- }
210- parameterGroupName := d .Get ("name" ).(string )
211- modifyOpts := neptune.ModifyDBClusterParameterGroupInput {
212- DBClusterParameterGroupName : aws .String (parameterGroupName ),
213- Parameters : paramsToModify ,
214- }
215-
216- log .Printf ("[DEBUG] Modify Neptune Cluster Parameter Group: %s" , modifyOpts )
217- _ , err := conn .ModifyDBClusterParameterGroup (& modifyOpts )
218- if err != nil {
219- return fmt .Errorf ("Error modifying Neptune Cluster Parameter Group: %s" , err )
220- }
209+ err := modifyNeptuneClusterParameterGroupParameters (conn , d .Id (), parameters )
210+ if err != nil {
211+ return fmt .Errorf ("error updating Neptune Cluster Parameter Group (%s) parameter: %w" , d .Id (), err )
221212 }
222213 }
223214 }
@@ -226,7 +217,7 @@ func resourceAwsNeptuneClusterParameterGroupUpdate(d *schema.ResourceData, meta
226217 o , n := d .GetChange ("tags" )
227218
228219 if err := keyvaluetags .NeptuneUpdateTags (conn , d .Get ("arn" ).(string ), o , n ); err != nil {
229- return fmt .Errorf ("error updating Neptune Cluster Parameter Group (%s) tags: %s " , d .Get ( "arn" ).( string ), err )
220+ return fmt .Errorf ("error updating Neptune Cluster Parameter Group (%s) tags: %w " , d .Id ( ), err )
230221 }
231222 }
232223
@@ -240,13 +231,37 @@ func resourceAwsNeptuneClusterParameterGroupDelete(d *schema.ResourceData, meta
240231 DBClusterParameterGroupName : aws .String (d .Id ()),
241232 }
242233
243- log .Printf ("[DEBUG] Deleting Neptune Cluster Parameter Group: %s" , d .Id ())
244234 _ , err := conn .DeleteDBClusterParameterGroup (& input )
245235 if err != nil {
246- if isAWSErr (err , neptune .ErrCodeDBParameterGroupNotFoundFault , "" ) {
236+ if tfawserr . ErrCodeEquals (err , neptune .ErrCodeDBParameterGroupNotFoundFault ) {
247237 return nil
248238 }
249- return fmt .Errorf ("error deleting Neptune Cluster Parameter Group (%s): %s" , d .Id (), err )
239+ return fmt .Errorf ("error deleting Neptune Cluster Parameter Group (%s): %w" , d .Id (), err )
240+ }
241+
242+ return nil
243+ }
244+
245+ func modifyNeptuneClusterParameterGroupParameters (conn * neptune.Neptune , name string , parameters []* neptune.Parameter ) error {
246+ // We can only modify 20 parameters at a time, so walk them until
247+ // we've got them all.
248+ for parameters != nil {
249+ var paramsToModify []* neptune.Parameter
250+ if len (parameters ) <= neptuneClusterParameterGroupMaxParamsBulkEdit {
251+ paramsToModify , parameters = parameters [:], nil
252+ } else {
253+ paramsToModify , parameters = parameters [:neptuneClusterParameterGroupMaxParamsBulkEdit ], parameters [neptuneClusterParameterGroupMaxParamsBulkEdit :]
254+ }
255+
256+ modifyOpts := neptune.ModifyDBClusterParameterGroupInput {
257+ DBClusterParameterGroupName : aws .String (name ),
258+ Parameters : paramsToModify ,
259+ }
260+
261+ _ , err := conn .ModifyDBClusterParameterGroup (& modifyOpts )
262+ if err != nil {
263+ return err
264+ }
250265 }
251266
252267 return nil
0 commit comments