@@ -116,6 +116,179 @@ func TestAccServer_Basic(t *testing.T) {
116116 })
117117}
118118
119+ func TestAccServer_CloudInit (t * testing.T ) {
120+ tt := acctest .NewTestTools (t )
121+ defer tt .Cleanup ()
122+
123+ if ! IsOfferAvailable (OfferName , scw .Zone (Zone ), tt ) {
124+ t .Skip ("Offer is out of stock" )
125+ }
126+
127+ SSHKeyName := "TestAccServer_CloudInit"
128+ name := "TestAccServer_CloudInit"
129+
130+ resource .ParallelTest (t , resource.TestCase {
131+ ProtoV6ProviderFactories : tt .ProviderFactories ,
132+ CheckDestroy : baremetalchecks .CheckServerDestroy (tt ),
133+
134+ Steps : []resource.TestStep {
135+ {
136+ Config : fmt .Sprintf (`
137+ variable "cloud_init" {
138+ type = string
139+ default = <<EOF
140+ #cloud-config
141+ apt_update: true
142+ apt_upgrade: true
143+ EOF
144+ }
145+
146+ data "scaleway_baremetal_os" "my_os" {
147+ zone = "%s"
148+ name = "Ubuntu"
149+ version = "22.04 LTS (Jammy Jellyfish)"
150+ }
151+
152+ resource "scaleway_iam_ssh_key" "main" {
153+ name = "%s"
154+ public_key = "%s"
155+ }
156+
157+ resource "scaleway_baremetal_server" "base" {
158+ name = "%s"
159+ zone = "%s"
160+ description = "test a description"
161+ offer = "%s"
162+ os = data.scaleway_baremetal_os.my_os.os_id
163+
164+ cloud_init = var.cloud_init
165+
166+ tags = ["terraform-test", "scaleway_baremetal_server", "cloudinit"]
167+ ssh_key_ids = [scaleway_iam_ssh_key.main.id]
168+ }
169+ ` , Zone , SSHKeyName , SSHKeyBaremetal , name , Zone , OfferName ),
170+
171+ Check : resource .ComposeTestCheckFunc (
172+ testAccCheckBaremetalServerExists (tt , "scaleway_baremetal_server.base" ),
173+ resource .TestCheckResourceAttr ("scaleway_baremetal_server.base" , "name" , name ),
174+ resource .TestCheckResourceAttr ("scaleway_baremetal_server.base" , "offer_name" , OfferName ),
175+ resource .TestCheckResourceAttr ("scaleway_baremetal_server.base" , "cloud_init" , "#cloud-config\n apt_update: true\n apt_upgrade: true\n " ),
176+ ),
177+ },
178+
179+ {
180+ // Update cloud-init + reinstall
181+ Config : fmt .Sprintf (`
182+ variable "cloud_init" {
183+ type = string
184+ default = <<EOF
185+ #cloud-config
186+ apt_update: true
187+ apt_upgrade: true
188+
189+ packages:
190+ - curl
191+ EOF
192+ }
193+
194+ data "scaleway_baremetal_os" "my_os" {
195+ zone = "%s"
196+ name = "Ubuntu"
197+ version = "22.04 LTS (Jammy Jellyfish)"
198+ }
199+
200+ resource "scaleway_iam_ssh_key" "main" {
201+ name = "%s"
202+ public_key = "%s"
203+ }
204+
205+ resource "scaleway_baremetal_server" "base" {
206+ name = "%s"
207+ zone = "%s"
208+ description = "test a description"
209+ offer = "%s"
210+ os = data.scaleway_baremetal_os.my_os.os_id
211+
212+ cloud_init = var.cloud_init
213+
214+ tags = ["terraform-test", "scaleway_baremetal_server", "cloudinit", "edited"]
215+ ssh_key_ids = [scaleway_iam_ssh_key.main.id]
216+ }
217+ ` , Zone , SSHKeyName , SSHKeyBaremetal , name , Zone , OfferName ),
218+
219+ Check : resource .ComposeTestCheckFunc (
220+ testAccCheckBaremetalServerExists (tt , "scaleway_baremetal_server.base" ),
221+ resource .TestCheckResourceAttr (
222+ "scaleway_baremetal_server.base" ,
223+ "cloud_init" ,
224+ "#cloud-config\n apt_update: true\n apt_upgrade: true\n \n packages:\n - curl\n " ,
225+ ),
226+ resource .TestCheckResourceAttr ("scaleway_baremetal_server.base" , "tags.#" , "4" ),
227+ ),
228+ },
229+ },
230+ })
231+ }
232+
233+ func TestAccServer_CloudInitNotCompatibleOffer (t * testing.T ) {
234+ tt := acctest .NewTestTools (t )
235+ defer tt .Cleanup ()
236+
237+ if ! IsOfferAvailable (OfferName , scw .Zone (Zone ), tt ) {
238+ t .Skip ("Offer is out of stock" )
239+ }
240+
241+ SSHKeyName := "TestAccServer_CloudInitIncompatibleOffer"
242+ name := "TestAccServer_CloudInitIncompatibleOffer"
243+ OfferNameNotCompatible := "EM-L110X-SATA"
244+
245+ resource .ParallelTest (t , resource.TestCase {
246+ ProtoV6ProviderFactories : tt .ProviderFactories ,
247+ CheckDestroy : baremetalchecks .CheckServerDestroy (tt ),
248+
249+ Steps : []resource.TestStep {
250+ {
251+ Config : fmt .Sprintf (`
252+ variable "cloud_init" {
253+ type = string
254+ default = <<EOF
255+ #cloud-config
256+ apt_update: true
257+ apt_upgrade: true
258+ EOF
259+ }
260+
261+ data "scaleway_baremetal_os" "my_os" {
262+ zone = "%s"
263+ name = "Ubuntu"
264+ version = "22.04 LTS (Jammy Jellyfish)"
265+ }
266+
267+ resource "scaleway_iam_ssh_key" "main" {
268+ name = "%s"
269+ public_key = "%s"
270+ }
271+
272+ resource "scaleway_baremetal_server" "base" {
273+ name = "%s"
274+ zone = "%s"
275+ description = "test a description"
276+ offer = "%s"
277+ os = data.scaleway_baremetal_os.my_os.os_id
278+
279+ cloud_init = var.cloud_init
280+
281+ tags = ["terraform-test", "scaleway_baremetal_server", "cloudinit"]
282+ ssh_key_ids = [scaleway_iam_ssh_key.main.id]
283+ }
284+ ` , Zone , SSHKeyName , SSHKeyBaremetal , name , Zone , OfferNameNotCompatible ),
285+
286+ ExpectError : regexp .MustCompile ("Service Unavailable: cloud-init is not supported on this offer" ),
287+ },
288+ },
289+ })
290+ }
291+
119292func TestAccServer_RequiredInstallConfig (t * testing.T ) {
120293 tt := acctest .NewTestTools (t )
121294 defer tt .Cleanup ()
0 commit comments