Support static IP by name on GCE

Signed-off-by: David Gageot <david@gageot.net>
This commit is contained in:
David Gageot 2015-07-19 16:30:15 +02:00
parent 8ce161e830
commit 8aa5e0771a
1 changed files with 32 additions and 1 deletions

View File

@ -4,6 +4,7 @@ import (
"fmt"
"io/ioutil"
"net/url"
"regexp"
"strings"
"time"
@ -88,6 +89,31 @@ func (c *ComputeUtil) deleteDisk() error {
return c.waitForRegionalOp(op.Name)
}
// staticAddress returns the external static IP address.
func (c *ComputeUtil) staticAddress() (string, error) {
// is the address a name?
isName, err := regexp.MatchString("[a-z]([-a-z0-9]*[a-z0-9])?", c.address)
if err != nil {
return "", err
}
if (!isName) {
return c.address, nil
}
// resolve the address by name
externalAddress, err := c.service.Addresses.Get(c.project, c.region(), c.address).Do()
if err != nil {
return "", err
}
return externalAddress.Address, nil
}
func (c *ComputeUtil) region() (string) {
return c.zone[:len(c.zone)-2]
}
func (c *ComputeUtil) firewallRule() (*raw.Firewall, error) {
return c.service.Firewalls.Get(c.project, firewallRule).Do()
}
@ -188,7 +214,12 @@ func (c *ComputeUtil) createInstance(d *Driver) error {
}
if c.address != "" {
instance.NetworkInterfaces[0].AccessConfigs[0].NatIP = c.address
staticAddress, err := c.staticAddress()
if err != nil {
return err
}
instance.NetworkInterfaces[0].AccessConfigs[0].NatIP = staticAddress
}
disk, err := c.disk()