diff --git a/decort/resource_rg.go b/decort/resource_rg.go index 5935a44..4a07cb6 100644 --- a/decort/resource_rg.go +++ b/decort/resource_rg.go @@ -24,6 +24,7 @@ Visit https://github.com/rudecs/terraform-provider-decort for full source code p package decort import ( + "encoding/json" "fmt" "net/url" @@ -122,6 +123,19 @@ func resourceResgroupCreate(d *schema.ResourceData, m interface{}) error { d.SetId(api_resp) // rg/create API returns ID of the newly creted resource group on success // rg.ID, _ = strconv.Atoi(api_resp) + if !set_quota { + resp, err := utilityResgroupCheckPresence(d, m) + if err != nil { + return err + } + + rg := ResgroupGetResp{} + if err := json.Unmarshal([]byte(resp), &rg); err != nil { + return err + } + + d.Set("quota", parseQuota(rg.Quota)) + } // re-read newly created RG to make sure schema contains complete and up to date set of specifications return resourceResgroupRead(d, m) @@ -130,7 +144,7 @@ func resourceResgroupCreate(d *schema.ResourceData, m interface{}) error { func resourceResgroupRead(d *schema.ResourceData, m interface{}) error { log.Debugf("resourceResgroupRead: called for RG name %s, account ID %s", d.Get("name").(string), d.Get("account_id").(int)) - + rg_facts, err := utilityResgroupCheckPresence(d, m) if rg_facts == "" { // if empty string is returned from utilityResgroupCheckPresence then there is no @@ -165,9 +179,8 @@ func resourceResgroupUpdate(d *schema.ResourceData, m interface{}) error { if attr_new.(int) != attr_old.(int) { return fmt.Errorf("resourceResgroupUpdate: RG ID %s: changing ext_net_id for existing RG is not allowed", d.Id()) } - - do_general_update := false // will be true if general RG update is necessary (API rg/update) + do_general_update := false // will be true if general RG update is necessary (API rg/update) controller := m.(*ControllerCfg) url_values := &url.Values{} @@ -314,18 +327,18 @@ func resourceResgroup() *schema.Resource { }, "account_id": { - Type: schema.TypeInt, - Required: true, + Type: schema.TypeInt, + Required: true, ValidateFunc: validation.IntAtLeast(1), - Description: "Unique ID of the account, which this resource group belongs to.", + Description: "Unique ID of the account, which this resource group belongs to.", }, "def_net_type": { - Type: schema.TypeString, - Optional: true, - Default: "PRIVATE", + Type: schema.TypeString, + Optional: true, + Default: "PRIVATE", ValidateFunc: validation.StringInSlice([]string{"PRIVATE", "PUBLIC", "NONE"}, false), - Description: "Type of the network, which this resource group will use as default for its computes - PRIVATE or PUBLIC or NONE.", + Description: "Type of the network, which this resource group will use as default for its computes - PRIVATE or PUBLIC or NONE.", }, "def_net_id": { @@ -354,7 +367,7 @@ func resourceResgroup() *schema.Resource { }, /* commented out, as in this version of provider we use default Grid ID - "grid_id": { + "grid_id": { Type: schema.TypeInt, Optional: true, Default: 0, // if 0 is passed, default Grid ID will be used @@ -367,6 +380,7 @@ func resourceResgroup() *schema.Resource { "quota": { Type: schema.TypeList, Optional: true, + Computed: true, MaxItems: 1, Elem: &schema.Resource{ Schema: quotaRgSubresourceSchemaMake(), @@ -387,30 +401,30 @@ func resourceResgroup() *schema.Resource { }, /* - "status": { - Type: schema.TypeString, - Computed: true, - Description: "Current status of this resource group.", - }, + "status": { + Type: schema.TypeString, + Computed: true, + Description: "Current status of this resource group.", + }, - "vins": { - Type: schema.TypeList, // this is a list of ints - Computed: true, - MaxItems: LimitMaxVinsPerResgroup, - Elem: &schema.Schema{ - Type: schema.TypeInt, + "vins": { + Type: schema.TypeList, // this is a list of ints + Computed: true, + MaxItems: LimitMaxVinsPerResgroup, + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + Description: "List of VINs deployed in this resource group.", }, - Description: "List of VINs deployed in this resource group.", - }, - "computes": { - Type: schema.TypeList, // this is a list of ints - Computed: true, - Elem: &schema.Schema{ - Type: schema.TypeInt, + "computes": { + Type: schema.TypeList, // this is a list of ints + Computed: true, + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + Description: "List of computes deployed in this resource group.", }, - Description: "List of computes deployed in this resource group.", - }, */ }, }