Add ProxyUrl parameter for OpenStack builder.
In my particular case I need to use a separate HTTP proxy to access my OpenStack API than what is set in the environment. This commit adds an optional parameter to the builder configuration and overrides the net/http client that is used by the gophercloud library.
This commit is contained in:
parent
6867c4f3e3
commit
817b1bdb32
|
@ -4,6 +4,8 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/mitchellh/packer/packer"
|
"github.com/mitchellh/packer/packer"
|
||||||
"github.com/rackspace/gophercloud"
|
"github.com/rackspace/gophercloud"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -14,6 +16,7 @@ type AccessConfig struct {
|
||||||
Project string `mapstructure:"project"`
|
Project string `mapstructure:"project"`
|
||||||
Provider string `mapstructure:"provider"`
|
Provider string `mapstructure:"provider"`
|
||||||
RawRegion string `mapstructure:"region"`
|
RawRegion string `mapstructure:"region"`
|
||||||
|
ProxyUrl string `mapstructure:"proxy_url"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Auth returns a valid Auth object for access to openstack services, or
|
// Auth returns a valid Auth object for access to openstack services, or
|
||||||
|
@ -23,6 +26,7 @@ func (c *AccessConfig) Auth() (gophercloud.AccessProvider, error) {
|
||||||
password := c.Password
|
password := c.Password
|
||||||
project := c.Project
|
project := c.Project
|
||||||
provider := c.Provider
|
provider := c.Provider
|
||||||
|
proxy := c.ProxyUrl
|
||||||
|
|
||||||
if username == "" {
|
if username == "" {
|
||||||
username = os.Getenv("SDK_USERNAME")
|
username = os.Getenv("SDK_USERNAME")
|
||||||
|
@ -47,6 +51,19 @@ func (c *AccessConfig) Auth() (gophercloud.AccessProvider, error) {
|
||||||
authoptions.TenantName = project
|
authoptions.TenantName = project
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For corporate networks it may be the case where we want our API calls
|
||||||
|
// to be sent through a separate HTTP proxy than external traffic.
|
||||||
|
if proxy != "" {
|
||||||
|
url, err := url.Parse(proxy)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// The gophercloud.Context has a UseCustomClient method which
|
||||||
|
// would allow us to override with a new instance of http.Client.
|
||||||
|
http.DefaultTransport = &http.Transport{Proxy: http.ProxyURL(url)}
|
||||||
|
}
|
||||||
|
|
||||||
return gophercloud.Authenticate(provider, authoptions)
|
return gophercloud.Authenticate(provider, authoptions)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue