diff --git a/builtin/providers/cloudstack/resource_cloudstack_instance.go b/builtin/providers/cloudstack/resource_cloudstack_instance.go index 6f7ccf1f7..bb8d592da 100644 --- a/builtin/providers/cloudstack/resource_cloudstack_instance.go +++ b/builtin/providers/cloudstack/resource_cloudstack_instance.go @@ -89,13 +89,24 @@ func resourceCloudStackInstance() *schema.Resource { ConflictsWith: []string{"affinity_group_ids"}, }, + "security_group_ids": &schema.Schema{ + Type: schema.TypeSet, + Optional: true, + Computed: true, + ForceNew: true, + Elem: &schema.Schema{Type: schema.TypeString}, + Set: schema.HashString, + ConflictsWith: []string{"security_group_names"}, + }, + "security_group_names": &schema.Schema{ - Type: schema.TypeSet, - Optional: true, - Computed: true, - ForceNew: true, - Elem: &schema.Schema{Type: schema.TypeString}, - Set: schema.HashString, + Type: schema.TypeSet, + Optional: true, + Computed: true, + ForceNew: true, + Elem: &schema.Schema{Type: schema.TypeString}, + Set: schema.HashString, + ConflictsWith: []string{"security_group_ids"}, }, "project": &schema.Schema{ @@ -249,6 +260,17 @@ func resourceCloudStackInstanceCreate(d *schema.ResourceData, meta interface{}) p.SetAffinitygroupnames(groups) } + // If there is a security_group_ids supplied, add it to the parameter struct + if sgids := d.Get("security_group_ids").(*schema.Set); sgids.Len() > 0 { + var groups []string + + for _, group := range sgids.List() { + groups = append(groups, group.(string)) + } + + p.SetSecuritygroupids(groups) + } + // If there is a security_group_names supplied, add it to the parameter struct if sgns := d.Get("security_group_names").(*schema.Set); sgns.Len() > 0 { var groups []string @@ -367,6 +389,15 @@ func resourceCloudStackInstanceRead(d *schema.ResourceData, meta interface{}) er d.Set("affinity_group_names", agns) } + sgids := &schema.Set{F: schema.HashString} + for _, group := range vm.Securitygroup { + sgids.Add(group.Id) + } + + if sgids.Len() > 0 { + d.Set("security_group_ids", sgids) + } + sgns := &schema.Set{F: schema.HashString} for _, group := range vm.Securitygroup { sgns.Add(group.Name) diff --git a/website/source/docs/providers/cloudstack/r/instance.html.markdown b/website/source/docs/providers/cloudstack/r/instance.html.markdown index d198de645..eb03d7494 100644 --- a/website/source/docs/providers/cloudstack/r/instance.html.markdown +++ b/website/source/docs/providers/cloudstack/r/instance.html.markdown @@ -73,6 +73,9 @@ The following arguments are supported: * `affinity_group_names` - (Optional) List of affinity groups to apply to this instance. Changing this forces a new resource to be created. +* `security_group_ids` - (Optional) List of security groups id to apply to this + isnstance. Changing this forces a new resource to be created. + * `security_group_names` - (Optional) List of security groups to apply to this isnstance. Changing this forces a new resource to be created.