Commit 60c797b2 authored by Mitchell Hashimoto's avatar Mitchell Hashimoto

Merge pull request #637 from johnbellone/master

builder/openstack: add ProxyUrl parameter for OpenStack builder
parents e1042cbc e3af0ead
...@@ -4,6 +4,8 @@ import ( ...@@ -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 { ...@@ -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) { ...@@ -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) { ...@@ -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)
} }
......
...@@ -59,7 +59,7 @@ Optional: ...@@ -59,7 +59,7 @@ Optional:
* `ssh_timeout` (string) - The time to wait for SSH to become available * `ssh_timeout` (string) - The time to wait for SSH to become available
before timing out. The format of this value is a duration such as "5s" before timing out. The format of this value is a duration such as "5s"
or "5m". The default SSH timeout is "1m". or "1m". The default SSH timeout is "5m".
* `ssh_username` (string) - The username to use in order to communicate * `ssh_username` (string) - The username to use in order to communicate
over SSH to the running server. The default is "root". over SSH to the running server. The default is "root".
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment