From 7fb82d543f7a7514cb54827a4824de8e21c1aafc Mon Sep 17 00:00:00 2001 From: Erez Freiberger Date: Sun, 14 Feb 2016 10:33:14 +0200 Subject: [PATCH] kubelet: reading cloudinfo from cadvisor When no --cloud-provider flag is given, try to use data from cadvisor to determine the current cloud provider. --- pkg/kubelet/kubelet.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index 49884621646..a9fb5b1302b 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -1064,6 +1064,11 @@ func (kl *Kubelet) initialNodeStatus() (*api.Node, error) { } } else { node.Spec.ExternalID = kl.hostname + // If no cloud provider is defined - use the one detected by cadvisor + info, err := kl.GetCachedMachineInfo() + if err == nil { + kl.updateCloudProviderFromMachineInfo(node, info) + } } if err := kl.setNodeStatus(node); err != nil { return nil, err @@ -3011,6 +3016,18 @@ func (kl *Kubelet) setNodeAddress(node *api.Node) error { return nil } +func (kl *Kubelet) updateCloudProviderFromMachineInfo(node *api.Node, info *cadvisorapi.MachineInfo) { + if info.CloudProvider != cadvisorapi.UnknownProvider && + info.CloudProvider != cadvisorapi.Baremetal { + // The cloud providers from pkg/cloudprovider/providers/* that update ProviderID + // will use the format of cloudprovider://project/availability_zone/instance_name + // here we only have the cloudprovider and the instance name so we leave project + // and availability zone empty for compatibility. + node.Spec.ProviderID = strings.ToLower(string(info.CloudProvider)) + + ":////" + string(info.InstanceID) + } +} + func (kl *Kubelet) setNodeStatusMachineInfo(node *api.Node) { // TODO: Post NotReady if we cannot get MachineInfo from cAdvisor. This needs to start // cAdvisor locally, e.g. for test-cmd.sh, and in integration test.