func (s *CloudProviderOptions) DefaultExternalHost(genericoptions *genericoptions.ServerRunOptions) error { if len(genericoptions.ExternalHost) != 0 { return nil } // TODO: extend for other providers if s.CloudProvider == "gce" || s.CloudProvider == "aws" { cloud, err := cloudprovider.InitCloudProvider(s.CloudProvider, s.CloudConfigFile) if err != nil { return fmt.Errorf("%q cloud provider could not be initialized: %v", s.CloudProvider, err) } instances, supported := cloud.Instances() if !supported { return fmt.Errorf("%q cloud provider has no instances", s.CloudProvider) } hostname, err := os.Hostname() if err != nil { return fmt.Errorf("failed to get hostname: %v", err) } nodeName, err := instances.CurrentNodeName(hostname) if err != nil { return fmt.Errorf("failed to get NodeName from %q cloud provider: %v", s.CloudProvider, err) } addrs, err := instances.NodeAddresses(nodeName) if err != nil { return fmt.Errorf("failed to get external host address from %q cloud provider: %v", s.CloudProvider, err) } else { for _, addr := range addrs { if addr.Type == v1.NodeExternalIP { genericoptions.ExternalHost = addr.Address } } } } return nil }