Skip to content

Commit 02058b4

Browse files
fix: remove user-data conditional (#121)
1 parent 997dbb2 commit 02058b4

File tree

2 files changed

+54
-17
lines changed

2 files changed

+54
-17
lines changed

cloudstack/resource_cloudstack_instance.go

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -390,7 +390,7 @@ func resourceCloudStackInstanceCreate(d *schema.ResourceData, meta interface{})
390390
}
391391

392392
if userData, ok := d.GetOk("user_data"); ok {
393-
ud, err := getUserData(userData.(string), cs.HTTPGETOnly)
393+
ud, err := getUserData(userData.(string))
394394
if err != nil {
395395
return err
396396
}
@@ -695,7 +695,7 @@ func resourceCloudStackInstanceUpdate(d *schema.ResourceData, meta interface{})
695695
if d.HasChange("user_data") {
696696
log.Printf("[DEBUG] user_data changed for %s, starting update", name)
697697

698-
ud, err := getUserData(d.Get("user_data").(string), cs.HTTPGETOnly)
698+
ud, err := getUserData(d.Get("user_data").(string))
699699
if err != nil {
700700
return err
701701
}
@@ -772,25 +772,11 @@ func resourceCloudStackInstanceImport(d *schema.ResourceData, meta interface{})
772772
}
773773

774774
// getUserData returns the user data as a base64 encoded string
775-
func getUserData(userData string, httpGetOnly bool) (string, error) {
775+
func getUserData(userData string) (string, error) {
776776
ud := userData
777777
if _, err := base64.StdEncoding.DecodeString(ud); err != nil {
778778
ud = base64.StdEncoding.EncodeToString([]byte(userData))
779779
}
780780

781-
// deployVirtualMachine uses POST by default, so max userdata is 32K
782-
maxUD := 32768
783-
784-
if httpGetOnly {
785-
// deployVirtualMachine using GET instead, so max userdata is 2K
786-
maxUD = 2048
787-
}
788-
789-
if len(ud) > maxUD {
790-
return "", fmt.Errorf(
791-
"The supplied user_data contains %d bytes after encoding, "+
792-
"this exceeds the limit of %d bytes", len(ud), maxUD)
793-
}
794-
795781
return ud, nil
796782
}

cloudstack/resource_cloudstack_instance_test.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ package cloudstack
2121

2222
import (
2323
"fmt"
24+
"regexp"
2425
"testing"
2526

2627
"github.com/apache/cloudstack-go/v2/cloudstack"
@@ -274,6 +275,26 @@ func TestAccCloudStackInstance_importProject(t *testing.T) {
274275
})
275276
}
276277

278+
func TestAccCloudStackInstance_userData(t *testing.T) {
279+
resource.Test(t, resource.TestCase{
280+
PreCheck: func() { testAccPreCheck(t) },
281+
Providers: testAccProviders,
282+
CheckDestroy: testAccCheckCloudStackInstanceDestroy,
283+
ExternalProviders: map[string]resource.ExternalProvider{
284+
"random": {
285+
VersionConstraint: ">= 3.6.0",
286+
Source: "hashicorp/random",
287+
},
288+
},
289+
Steps: []resource.TestStep{
290+
{
291+
Config: testAccCloudStackInstance_userData,
292+
ExpectError: regexp.MustCompile("User data has exceeded configurable max length"),
293+
},
294+
},
295+
})
296+
}
297+
277298
func testAccCheckCloudStackInstanceExists(
278299
n string, instance *cloudstack.VirtualMachine) resource.TestCheckFunc {
279300
return func(s *terraform.State) error {
@@ -525,3 +546,33 @@ resource "cloudstack_instance" "foobar" {
525546
zone = cloudstack_network.foo.zone
526547
expunge = true
527548
}`
549+
550+
const testAccCloudStackInstance_userData = `
551+
resource "random_bytes" "string" {
552+
length = 32768
553+
}
554+
555+
resource "cloudstack_network" "foo" {
556+
name = "terraform-network"
557+
display_text = "terraform-network"
558+
cidr = "10.1.1.0/24"
559+
network_offering = "DefaultIsolatedNetworkOfferingWithSourceNatService"
560+
zone = "Sandbox-simulator"
561+
}
562+
563+
resource "cloudstack_instance" "foobar" {
564+
name = "terraform-test"
565+
display_name = "terraform-test"
566+
service_offering= "Small Instance"
567+
network_id = cloudstack_network.foo.id
568+
template = "CentOS 5.6 (64-bit) no GUI (Simulator)"
569+
zone = cloudstack_network.foo.zone
570+
expunge = true
571+
user_data = <<-EOFTF
572+
#!/bin/bash
573+
574+
echo <<EOF
575+
${random_bytes.string.base64}
576+
EOF
577+
EOFTF
578+
}`

0 commit comments

Comments
 (0)