@@ -11,6 +11,7 @@ import (
1111 "encoding/base64"
1212 "encoding/pem"
1313 "fmt"
14+ "log"
1415
1516 "github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns"
1617 "github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex"
@@ -120,20 +121,30 @@ func dataSourceIBMISBareMetalServerInitializationRead(context context.Context, d
120121 bareMetalServerID := d .Get (isBareMetalServerID ).(string )
121122 sess , err := meta .(conns.ClientSession ).VpcV1API ()
122123 if err != nil {
123- return diag .FromErr (err )
124+ tfErr := flex .DiscriminatedTerraformErrorf (err , err .Error (), "(Data) ibm_is_bare_metal_server_initialization" , "read" , "initialize-client" )
125+ log .Printf ("[DEBUG]\n %s" , tfErr .GetDebugMessage ())
126+ return tfErr .GetDiag ()
124127 }
125128 options := & vpcv1.GetBareMetalServerInitializationOptions {
126129 ID : & bareMetalServerID ,
127130 }
128131
129- initialization , response , err := sess .GetBareMetalServerInitializationWithContext (context , options )
132+ initialization , _ , err := sess .GetBareMetalServerInitializationWithContext (context , options )
130133 if err != nil || initialization == nil {
131- return diag .FromErr (fmt .Errorf ("[ERROR] Error getting Bare Metal Server (%s) initialization : %s\n %s" , bareMetalServerID , err , response ))
134+ tfErr := flex .TerraformErrorf (err , fmt .Sprintf ("GetBareMetalServerInitializationWithContext failed: %s" , err .Error ()), "(Data) ibm_is_bare_metal_server_initialization" , "read" )
135+ log .Printf ("[DEBUG]\n %s" , tfErr .GetDebugMessage ())
136+ return tfErr .GetDiag ()
132137 }
133138 d .SetId (bareMetalServerID )
134139 if initialization .Image != nil {
135- d .Set (isBareMetalServerImage , initialization .Image .ID )
136- d .Set (isBareMetalServerImageName , initialization .Image .Name )
140+
141+ if err = d .Set (isBareMetalServerImage , initialization .Image .ID ); err != nil {
142+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting image: %s" , err ), "(Data) ibm_is_bare_metal_server_initialization" , "read" , "set-image" ).GetDiag ()
143+ }
144+
145+ if err = d .Set (isBareMetalServerImageName , initialization .Image .Name ); err != nil {
146+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting image_name: %s" , err ), "(Data) ibm_is_bare_metal_server_initialization" , "read" , "set-image_name" ).GetDiag ()
147+ }
137148 }
138149
139150 var keys []string
@@ -143,7 +154,10 @@ func dataSourceIBMISBareMetalServerInitializationRead(context context.Context, d
143154 keys = append (keys , * key .ID )
144155 }
145156 }
146- d .Set (isBareMetalServerKeys , flex .NewStringSet (schema .HashString , keys ))
157+
158+ if err = d .Set (isBareMetalServerKeys , flex .NewStringSet (schema .HashString , keys )); err != nil {
159+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting keys: %s" , err ), "(Data) ibm_is_bare_metal_server_initialization" , "read" , "set-keys" ).GetDiag ()
160+ }
147161 accList := make ([]map [string ]interface {}, 0 )
148162 if initialization .UserAccounts != nil {
149163
@@ -165,14 +179,17 @@ func dataSourceIBMISBareMetalServerInitializationRead(context context.Context, d
165179 if keyFlag != "" {
166180 block , err := pem .Decode (keybytes )
167181 if block == nil {
168- return diag .FromErr (fmt .Errorf ("[ERROR] Failed to load the private key from the given key contents. Instead of the key file path, please make sure the private key is pem format (%v)" , err ))
182+ err := fmt .Errorf ("[ERROR] Failed to load the private key from the given key contents. Instead of the key file path, please make sure the private key is pem format (%v)" , err )
183+ return flex .DiscriminatedTerraformErrorf (err , err .Error (), "(Data) ibm_is_bare_metal_server_initialization" , "read" , "decode-pem" ).GetDiag ()
184+
169185 }
170186 isEncrypted := false
171187 if block .Type == "OPENSSH PRIVATE KEY" {
172188 var err error
173189 isEncrypted , err = isOpenSSHPrivKeyEncrypted (block .Bytes )
174190 if err != nil {
175- return diag .FromErr (fmt .Errorf ("[ERROR] Failed to check if the provided open ssh key is encrypted or not %s" , err ))
191+ err = fmt .Errorf ("[ERROR] Failed to check if the provided open ssh key is encrypted or not %s" , err )
192+ return flex .DiscriminatedTerraformErrorf (err , err .Error (), "(Data) ibm_is_bare_metal_server_initialization" , "read" , "check-encryption" ).GetDiag ()
176193 }
177194 } else {
178195 isEncrypted = x509 .IsEncryptedPEMBlock (block )
@@ -183,24 +200,28 @@ func dataSourceIBMISBareMetalServerInitializationRead(context context.Context, d
183200 if pass , ok := d .GetOk (isBareMetalServerPassphrase ); ok {
184201 passphrase = pass .(string )
185202 } else {
186- return diag .FromErr (fmt .Errorf ("[ERROR] Mandatory field 'passphrase' not provided" ))
203+ err := fmt .Errorf ("[ERROR] Mandatory field 'passphrase' not provided" )
204+ return flex .DiscriminatedTerraformErrorf (err , err .Error (), "(Data) ibm_is_bare_metal_server_initialization" , "read" , "missing-passphrase" ).GetDiag ()
187205 }
188206 var err error
189207 privateKey , err = sshkeys .ParseEncryptedRawPrivateKey (keybytes , []byte (passphrase ))
190208 if err != nil {
191- return diag .FromErr (fmt .Errorf ("[ERROR] Fail to decrypting the private key: %s" , err ))
209+ err := fmt .Errorf ("[ERROR] Fail to decrypting the private key: %s" , err )
210+ return flex .DiscriminatedTerraformErrorf (err , err .Error (), "(Data) ibm_is_bare_metal_server_initialization" , "read" , "decrypt-private_key" ).GetDiag ()
192211 }
193212 } else {
194213 var err error
195214 privateKey , err = sshkeys .ParseEncryptedRawPrivateKey (keybytes , nil )
196215 if err != nil {
197- return diag .FromErr (fmt .Errorf ("[ERROR] Fail to decrypting the private key: %s" , err ))
216+ err := fmt .Errorf ("[ERROR] Fail to decrypting the private key: %s" , err )
217+ return flex .DiscriminatedTerraformErrorf (err , err .Error (), "(Data) ibm_is_bare_metal_server_initialization" , "read" , "fail-decrypt-private_key" ).GetDiag ()
198218 }
199219 }
200220 var ok bool
201221 rsaKey , ok = privateKey .(* rsa.PrivateKey )
202222 if ! ok {
203- return diag .FromErr (fmt .Errorf ("[ERROR] Failed to convert to RSA private key" ))
223+ err := fmt .Errorf ("[ERROR] Failed to convert to RSA private key" )
224+ return flex .DiscriminatedTerraformErrorf (err , err .Error (), "(Data) ibm_is_bare_metal_server_initialization" , "read" , "convert-rsa" ).GetDiag ()
204225 }
205226 }
206227 }
@@ -212,15 +233,19 @@ func dataSourceIBMISBareMetalServerInitializationRead(context context.Context, d
212233 rng := rand .Reader
213234 clearPassword , err := rsa .DecryptPKCS1v15 (rng , rsaKey , ciphertext )
214235 if err != nil {
215- return diag .FromErr (fmt .Errorf ("[ERROR] Can not decrypt the password with the given key, %s" , err ))
236+ err := fmt .Errorf ("[ERROR] Can not decrypt the password with the given key, %s" , err )
237+ return flex .DiscriminatedTerraformErrorf (err , err .Error (), "(Data) ibm_is_bare_metal_server_initialization" , "read" , "decrypt-password" ).GetDiag ()
216238 }
217239 password = string (clearPassword )
218240 }
219241 currAccount [isBareMetalServerUserAccountPassword ] = password
220242 }
221243 accList = append (accList , currAccount )
222244 }
223- d .Set (isBareMetalServerUserAccounts , accList )
245+
246+ if err = d .Set (isBareMetalServerUserAccounts , accList ); err != nil {
247+ return flex .DiscriminatedTerraformErrorf (err , fmt .Sprintf ("Error setting user_accounts: %s" , err ), "(Data) ibm_is_bare_metal_server_initialization" , "read" , "set-user_accounts" ).GetDiag ()
248+ }
224249 }
225250 return nil
226251}
0 commit comments