func (c *Controller) updateInstanceMetadata( pod *api.Pod, nic *types.VirtualMachineInterface, address, gateway string) { doUpdate := false if pod.Annotations == nil { pod.Annotations = make(map[string]string) doUpdate = true } var newValue, oldValue InstanceMetadata if data, ok := pod.Annotations[MetadataAnnotationTag]; ok { json.Unmarshal([]byte(data), &oldValue) } newValue.Uuid = nic.GetUuid() var mac_address string addressArr := nic.GetVirtualMachineInterfaceMacAddresses() if len(addressArr.MacAddress) > 0 { mac_address = addressArr.MacAddress[0] } else { glog.Errorf("interface %s: no mac-addresses", nic.GetName()) } newValue.MacAddress = mac_address newValue.IpAddress = address newValue.Gateway = gateway if !doUpdate && reflect.DeepEqual(newValue, oldValue) { return } encoded, err := json.Marshal(&newValue) if err != nil { glog.Errorf("JSON encode: %v", err) return } pod.Annotations[MetadataAnnotationTag] = string(encoded) _, err = c.kube.Pods(pod.Namespace).Update(pod) if err != nil { // Update will return an error if the pod object that we are // working with is stale. glog.Infof("Pod Update %s: %v", pod.Name, err) } }
func (c *Controller) updateInstanceMetadata( pod *api.Pod, nic *types.VirtualMachineInterface, address, gateway string) { doUpdate := false if pod.Annotations == nil { pod.Annotations = make(map[string]string) doUpdate = true } if updateElement(pod.Annotations, "nic_uuid", nic.GetUuid()) { doUpdate = true } var mac_address string addressArr := nic.GetVirtualMachineInterfaceMacAddresses() if len(addressArr.MacAddress) > 0 { mac_address = addressArr.MacAddress[0] } else { glog.Errorf("interface %s: no mac-addresses", nic.GetName()) } if updateElement(pod.Annotations, "mac_address", mac_address) { doUpdate = true } if updateElement(pod.Annotations, "ip_address", address) { doUpdate = true } if updateElement(pod.Annotations, "gateway", gateway) { doUpdate = true } if !doUpdate { return } _, err := c.kube.Pods(pod.Namespace).Update(pod) if err != nil { // Update will return an error if the pod object that we are // working with is stale. glog.Infof("Pod Update %s: %v", pod.Name, err) } }