Merge pull request #2115 from jalemieux/master
provider/cloudstack: add project support for CloudStack Instances
This commit is contained in:
commit
ec5cef4de8
|
@ -89,3 +89,6 @@ var CLOUDSTACK_TEMPLATE_FORMAT = ""
|
||||||
var CLOUDSTACK_TEMPLATE_URL = ""
|
var CLOUDSTACK_TEMPLATE_URL = ""
|
||||||
var CLOUDSTACK_TEMPLATE_OS_TYPE = ""
|
var CLOUDSTACK_TEMPLATE_OS_TYPE = ""
|
||||||
var CLOUDSTACK_ZONE = ""
|
var CLOUDSTACK_ZONE = ""
|
||||||
|
var CLOUDSTACK_PROJECT_NAME = ""
|
||||||
|
var CLOUDSTACK_PROJECT_ID = ""
|
||||||
|
|
||||||
|
|
|
@ -87,6 +87,13 @@ func resourceCloudStackInstance() *schema.Resource {
|
||||||
Optional: true,
|
Optional: true,
|
||||||
Default: false,
|
Default: false,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
"project": &schema.Schema{
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
ForceNew: true,
|
||||||
|
},
|
||||||
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -157,6 +164,16 @@ func resourceCloudStackInstanceCreate(d *schema.ResourceData, meta interface{})
|
||||||
p.SetUserdata(ud)
|
p.SetUserdata(ud)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If project contains any info, we retreive the project id
|
||||||
|
if project, ok := d.GetOk("project"); ok {
|
||||||
|
projectid, e := retrieveUUID(cs, "project", project.(string))
|
||||||
|
if e != nil {
|
||||||
|
return e.Error()
|
||||||
|
}
|
||||||
|
log.Printf("[DEBUG] project id %s", projectid)
|
||||||
|
p.SetProjectid(projectid)
|
||||||
|
}
|
||||||
|
|
||||||
// Create the new instance
|
// Create the new instance
|
||||||
r, err := cs.VirtualMachine.DeployVirtualMachine(p)
|
r, err := cs.VirtualMachine.DeployVirtualMachine(p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -200,7 +217,8 @@ func resourceCloudStackInstanceRead(d *schema.ResourceData, meta interface{}) er
|
||||||
setValueOrUUID(d, "network", vm.Nic[0].Networkname, vm.Nic[0].Networkid)
|
setValueOrUUID(d, "network", vm.Nic[0].Networkname, vm.Nic[0].Networkid)
|
||||||
setValueOrUUID(d, "service_offering", vm.Serviceofferingname, vm.Serviceofferingid)
|
setValueOrUUID(d, "service_offering", vm.Serviceofferingname, vm.Serviceofferingid)
|
||||||
setValueOrUUID(d, "template", vm.Templatename, vm.Templateid)
|
setValueOrUUID(d, "template", vm.Templatename, vm.Templateid)
|
||||||
|
setValueOrUUID(d, "project", vm.Project, vm.Projectid)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -99,6 +99,48 @@ func TestAccCloudStackInstance_fixedIP(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAccCloudStackInstance_Projectname(t *testing.T) {
|
||||||
|
var instance cloudstack.VirtualMachine
|
||||||
|
|
||||||
|
resource.Test(t, resource.TestCase{
|
||||||
|
PreCheck: func() { testAccPreCheck(t) },
|
||||||
|
Providers: testAccProviders,
|
||||||
|
CheckDestroy: testAccCheckCloudStackInstanceDestroy,
|
||||||
|
Steps: []resource.TestStep{
|
||||||
|
resource.TestStep{
|
||||||
|
Config: testAccCloudStackInstance_projectname,
|
||||||
|
Check: resource.ComposeTestCheckFunc(
|
||||||
|
testAccCheckCloudStackInstanceExists(
|
||||||
|
"cloudstack_instance.foobar", &instance),
|
||||||
|
resource.TestCheckResourceAttr(
|
||||||
|
"cloudstack_instance.foobar", "project", CLOUDSTACK_PROJECT_NAME),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAccCloudStackInstance_Projectid(t *testing.T) {
|
||||||
|
var instance cloudstack.VirtualMachine
|
||||||
|
|
||||||
|
resource.Test(t, resource.TestCase{
|
||||||
|
PreCheck: func() { testAccPreCheck(t) },
|
||||||
|
Providers: testAccProviders,
|
||||||
|
CheckDestroy: testAccCheckCloudStackInstanceDestroy,
|
||||||
|
Steps: []resource.TestStep{
|
||||||
|
resource.TestStep{
|
||||||
|
Config: testAccCloudStackInstance_projectid,
|
||||||
|
Check: resource.ComposeTestCheckFunc(
|
||||||
|
testAccCheckCloudStackInstanceExists(
|
||||||
|
"cloudstack_instance.foobar", &instance),
|
||||||
|
resource.TestCheckResourceAttr(
|
||||||
|
"cloudstack_instance.foobar", "project", CLOUDSTACK_PROJECT_ID),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func testAccCheckCloudStackInstanceExists(
|
func testAccCheckCloudStackInstanceExists(
|
||||||
n string, instance *cloudstack.VirtualMachine) resource.TestCheckFunc {
|
n string, instance *cloudstack.VirtualMachine) resource.TestCheckFunc {
|
||||||
return func(s *terraform.State) error {
|
return func(s *terraform.State) error {
|
||||||
|
@ -249,3 +291,38 @@ resource "cloudstack_instance" "foobar" {
|
||||||
CLOUDSTACK_NETWORK_1_IPADDRESS,
|
CLOUDSTACK_NETWORK_1_IPADDRESS,
|
||||||
CLOUDSTACK_TEMPLATE,
|
CLOUDSTACK_TEMPLATE,
|
||||||
CLOUDSTACK_ZONE)
|
CLOUDSTACK_ZONE)
|
||||||
|
|
||||||
|
|
||||||
|
var testAccCloudStackInstance_projectname = fmt.Sprintf(`
|
||||||
|
resource "cloudstack_instance" "foobar" {
|
||||||
|
name = "terraform-test"
|
||||||
|
display_name = "terraform"
|
||||||
|
service_offering= "%s"
|
||||||
|
network = "%s"
|
||||||
|
template = "%s"
|
||||||
|
zone = "%s"
|
||||||
|
expunge = true
|
||||||
|
project = "%s"
|
||||||
|
}`,
|
||||||
|
CLOUDSTACK_SERVICE_OFFERING_1,
|
||||||
|
CLOUDSTACK_NETWORK_1,
|
||||||
|
CLOUDSTACK_TEMPLATE,
|
||||||
|
CLOUDSTACK_ZONE,
|
||||||
|
CLOUDSTACK_PROJECT_NAME)
|
||||||
|
|
||||||
|
var testAccCloudStackInstance_projectid = fmt.Sprintf(`
|
||||||
|
resource "cloudstack_instance" "foobar" {
|
||||||
|
name = "terraform-test"
|
||||||
|
display_name = "terraform"
|
||||||
|
service_offering= "%s"
|
||||||
|
network = "%s"
|
||||||
|
template = "%s"
|
||||||
|
zone = "%s"
|
||||||
|
expunge = true
|
||||||
|
project = "%s"
|
||||||
|
}`,
|
||||||
|
CLOUDSTACK_SERVICE_OFFERING_1,
|
||||||
|
CLOUDSTACK_NETWORK_1,
|
||||||
|
CLOUDSTACK_TEMPLATE,
|
||||||
|
CLOUDSTACK_ZONE,
|
||||||
|
CLOUDSTACK_PROJECT_ID)
|
||||||
|
|
|
@ -79,6 +79,8 @@ func retrieveUUID(cs *cloudstack.CloudStackClient, name, value string) (uuid str
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
err = fmt.Errorf("Could not find UUID of OS Type: %s", value)
|
err = fmt.Errorf("Could not find UUID of OS Type: %s", value)
|
||||||
|
case "project":
|
||||||
|
uuid, err = cs.Project.GetProjectID(value)
|
||||||
default:
|
default:
|
||||||
return uuid, &retrieveError{name: name, value: value,
|
return uuid, &retrieveError{name: name, value: value,
|
||||||
err: fmt.Errorf("Unknown request: %s", name)}
|
err: fmt.Errorf("Unknown request: %s", name)}
|
||||||
|
|
Loading…
Reference in New Issue