provider/openstack allow specifying tenant_id on a floatingip resource

Allow a cloud admin to target a specific tenant in which to allocate
a floating IP. This is useful when the cloud admin does not want to
delegate network privileges to the tenants or various Q&A scenarios.
This commit is contained in:
Cristian Calin 2016-05-24 16:31:09 +03:00
parent a764238d7d
commit d2b33d51b8
2 changed files with 16 additions and 2 deletions

View File

@ -43,6 +43,12 @@ func resourceNetworkingFloatingIPV2() *schema.Resource {
Optional: true, Optional: true,
Computed: true, Computed: true,
}, },
"tenant_id": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Computed: true,
ForceNew: true,
},
}, },
} }
} }
@ -64,6 +70,7 @@ func resourceNetworkFloatingIPV2Create(d *schema.ResourceData, meta interface{})
createOpts := floatingips.CreateOpts{ createOpts := floatingips.CreateOpts{
FloatingNetworkID: poolID, FloatingNetworkID: poolID,
PortID: d.Get("port_id").(string), PortID: d.Get("port_id").(string),
TenantID: d.Get("tenant_id").(string),
} }
log.Printf("[DEBUG] Create Options: %#v", createOpts) log.Printf("[DEBUG] Create Options: %#v", createOpts)
floatingIP, err := floatingips.Create(networkingClient, createOpts).Extract() floatingIP, err := floatingips.Create(networkingClient, createOpts).Extract()
@ -107,6 +114,7 @@ func resourceNetworkFloatingIPV2Read(d *schema.ResourceData, meta interface{}) e
return fmt.Errorf("Error retrieving floating IP pool name: %s", err) return fmt.Errorf("Error retrieving floating IP pool name: %s", err)
} }
d.Set("pool", poolName) d.Set("pool", poolName)
d.Set("tenant_id", floatingIP.TenantID)
return nil return nil
} }

View File

@ -35,8 +35,13 @@ The following arguments are supported:
* `pool` - (Required) The name of the pool from which to obtain the floating * `pool` - (Required) The name of the pool from which to obtain the floating
IP. Changing this creates a new floating IP. IP. Changing this creates a new floating IP.
* `port_id` - ID of an existing port with at least one IP address to associate with * `port_id` - (Optional) ID of an existing port with at least one IP address to
this floating IP. associate with this floating IP.
* `tenant_id` - (Optional) The target tenant ID in which to allocate the floating
IP, if you specify this together with a port_id, make sure the target port
belongs to the same tenant. Changing this creates a new floating IP (which
may or may not have a different address)
## Attributes Reference ## Attributes Reference
@ -46,3 +51,4 @@ The following attributes are exported:
* `pool` - See Argument Reference above. * `pool` - See Argument Reference above.
* `address` - The actual floating IP address itself. * `address` - The actual floating IP address itself.
* `port_id` - ID of associated port. * `port_id` - ID of associated port.
* `tenant_id` - the ID of the tenant in which to create the floating IP.