diff --git a/cni/ipam/ipam.go b/cni/ipam/ipam.go index 9aa458080a..2c17ef92b1 100644 --- a/cni/ipam/ipam.go +++ b/cni/ipam/ipam.go @@ -19,11 +19,6 @@ import ( cniTypesCurr "github.com/containernetworking/cni/pkg/types/current" ) -const ( - // Plugin name. - name = "azure-vnet-ipam" -) - var ( ipv4DefaultRouteDstPrefix = net.IPNet{net.IPv4zero, net.IPv4Mask(0, 0, 0, 0)} ) @@ -35,7 +30,7 @@ type ipamPlugin struct { } // NewPlugin creates a new ipamPlugin object. -func NewPlugin(config *common.PluginConfig) (*ipamPlugin, error) { +func NewPlugin(name string, config *common.PluginConfig) (*ipamPlugin, error) { // Setup base plugin. plugin, err := cni.NewPlugin(name, config.Version) if err != nil { diff --git a/cni/ipam/ipam_test.go b/cni/ipam/ipam_test.go index ad67e9fef5..0a6738b21f 100644 --- a/cni/ipam/ipam_test.go +++ b/cni/ipam/ipam_test.go @@ -51,7 +51,7 @@ func TestMain(m *testing.M) { } // Create the plugin. - plugin, err = NewPlugin(&config) + plugin, err = NewPlugin("ipamtest", &config) if err != nil { fmt.Printf("Failed to create IPAM plugin, err:%v.\n", err) return diff --git a/cni/ipam/plugin/main.go b/cni/ipam/plugin/main.go index 6ab1e49f3c..7278cb956e 100644 --- a/cni/ipam/plugin/main.go +++ b/cni/ipam/plugin/main.go @@ -10,6 +10,11 @@ import ( "github.com/Azure/azure-container-networking/cni" "github.com/Azure/azure-container-networking/cni/ipam" "github.com/Azure/azure-container-networking/common" + "github.com/Azure/azure-container-networking/log" +) + +const ( + name = "azure-vnet-ipam" ) // Version is populated by make during build. @@ -20,7 +25,16 @@ func main() { var config common.PluginConfig config.Version = version - ipamPlugin, err := ipam.NewPlugin(&config) + log.SetName(name) + log.SetLevel(log.LevelInfo) + if err := log.SetTarget(log.TargetLogfile); err != nil { + fmt.Printf("Failed to setup cni logging: %v\n", err) + return + } + + defer log.Close() + + ipamPlugin, err := ipam.NewPlugin(name, &config) if err != nil { fmt.Printf("Failed to create IPAM plugin, err:%v.\n", err) os.Exit(1) diff --git a/ipam/azure.go b/ipam/azure.go index 286c883f55..808eec7e15 100644 --- a/ipam/azure.go +++ b/ipam/azure.go @@ -5,6 +5,7 @@ package ipam import ( "encoding/xml" + "fmt" "net" "net/http" "strings" @@ -17,9 +18,12 @@ import ( const ( // Host URL to query. azureQueryUrl = "http://168.63.129.16/machine/plugins?comp=nmagent&type=getinterfaceinfov1" - // Minimum time interval between consecutive queries. azureQueryInterval = 10 * time.Second + // http connection timeout + httpConnectionTimeout = 10 + // http response header timeout + responseHeaderTimeout = 10 ) // Microsoft Azure IPAM configuration source. @@ -84,14 +88,27 @@ func (s *azureSource) refresh() error { return err } + httpClient := common.InitHttpClient(httpConnectionTimeout, responseHeaderTimeout) + if httpClient == nil { + log.Errorf("[ipam] Failed intializing http client") + return fmt.Errorf("Error intializing http client") + } + + log.Printf("[ipam] Wireserver call %v to retrieve IP List", s.queryUrl) // Fetch configuration. - resp, err := http.Get(s.queryUrl) + resp, err := httpClient.Get(s.queryUrl) if err != nil { + log.Printf("[ipam] wireserver call failed with: %v", err) return err } defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + log.Errorf("[ipam] http return error code for wireserver call %+v", resp) + return fmt.Errorf("wireserver http error %+v", resp) + } + // Decode XML document. var doc common.XmlDocument decoder := xml.NewDecoder(resp.Body)