provider/openstack: Add support for 'value_specs' options to (#13380)

`openstack_compute_servergroup_v2`
Refactor to use common `types.go` and `MapValueSpecs function`.
Added supporting website documentation.
This commit is contained in:
Gavin Williams 2017-04-07 13:15:31 +01:00 committed by Paul Stack
parent 16a3e8bb30
commit afb8bb27e8
3 changed files with 27 additions and 3 deletions

View File

@ -41,6 +41,11 @@ func resourceComputeServerGroupV2() *schema.Resource {
Computed: true, Computed: true,
Elem: &schema.Schema{Type: schema.TypeString}, Elem: &schema.Schema{Type: schema.TypeString},
}, },
"value_specs": &schema.Schema{
Type: schema.TypeMap,
Optional: true,
ForceNew: true,
},
}, },
} }
} }
@ -52,10 +57,14 @@ func resourceComputeServerGroupV2Create(d *schema.ResourceData, meta interface{}
return fmt.Errorf("Error creating OpenStack compute client: %s", err) return fmt.Errorf("Error creating OpenStack compute client: %s", err)
} }
createOpts := &servergroups.CreateOpts{ createOpts := ServerGroupCreateOpts{
Name: d.Get("name").(string), servergroups.CreateOpts{
Policies: resourceServerGroupPoliciesV2(d), Name: d.Get("name").(string),
Policies: resourceServerGroupPoliciesV2(d),
},
MapValueSpecs(d),
} }
log.Printf("[DEBUG] Create Options: %#v", createOpts) log.Printf("[DEBUG] Create Options: %#v", createOpts)
newSG, err := servergroups.Create(computeClient, createOpts).Extract() newSG, err := servergroups.Create(computeClient, createOpts).Extract()
if err != nil { if err != nil {

View File

@ -10,6 +10,7 @@ import (
"strings" "strings"
"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/keypairs" "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/keypairs"
"github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/servergroups"
"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/fwaas/firewalls" "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/fwaas/firewalls"
"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/fwaas/policies" "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/fwaas/policies"
"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/fwaas/rules" "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/fwaas/rules"
@ -250,6 +251,18 @@ func (opts RuleCreateOpts) ToRuleCreateMap() (map[string]interface{}, error) {
return b, nil return b, nil
} }
// ServerGroupCreateOpts represents the attributes used when creating a new router.
type ServerGroupCreateOpts struct {
servergroups.CreateOpts
ValueSpecs map[string]string `json:"value_specs,omitempty"`
}
// ToServerGroupCreateMap casts a CreateOpts struct to a map.
// It overrides routers.ToServerGroupCreateMap to add the ValueSpecs field.
func (opts ServerGroupCreateOpts) ToServerGroupCreateMap() (map[string]interface{}, error) {
return BuildRequest(opts, "server_group")
}
// SubnetCreateOpts represents the attributes used when creating a new subnet. // SubnetCreateOpts represents the attributes used when creating a new subnet.
type SubnetCreateOpts struct { type SubnetCreateOpts struct {
subnets.CreateOpts subnets.CreateOpts

View File

@ -35,6 +35,8 @@ The following arguments are supported:
the Policies section for more information. Changing this creates a new the Policies section for more information. Changing this creates a new
server group. server group.
* `value_specs` - (Optional) Map of additional options.
## Policies ## Policies
* `affinity` - All instances/servers launched in this group will be hosted on * `affinity` - All instances/servers launched in this group will be hosted on