Change:
master-informing: capz-windows-containerd-master capz-e2e.[It] Conformance Tests conformance-tests ! 2023-03-10 04:56:51 +0000 UTC No response /sig testing
The label(s) cannot be applied, because the repository doesn't have them. <detailsIn response to : ### Which jobs are failing? ### Since when has it been failing? /sig testing Instructions for interacting with me using PR comments are available . If you have questions or suggestions related to my behavior, please file an issue against the repository. </details
/sig windows /triage accepted
no major change between passing test on 3/9 17:55 PST and failing test on 3/9 20:56 PST
containerd logs have error about failing to unpack azure-cloud-manager on both nodes:
kubelet logs confirm this:
looks to be related to bumping capz to 1.8 which uses the cloud-provider oot image: caused by upgrading to 1.8 capz in combination with using OOT
This looks to be affecting our release jobs as well:
looks like the image being built is linux only () and is being pulled by windows. When setting up the snapshot in containerd it is failing (as it is missing files required by windows)
For the passing test the image is multi-arch manifest, so the windows image pulls properly (azure-cloud-node-manager:)
There is a missing env in the see

Discussion:
oldPod := oldObj.(*api.Pod) newPod := newObj.(*api.Pod) if core.QuotaPod(oldPod) && !core.QuotaPod(newPod) { <del> options.ReplenishmentFunc(options.GroupKind, newPod.Namespace, newPod) </del> <ins> options.ReplenishmentFunc(options.GroupKind, newPod.Namespace, oldPod) </ins> } } }

return result, nil } <del> // ServiceReplenishmentUpdateFunc will replenish if the old service was quota tracked but the new is not </del> <ins> // ServiceReplenishmentUpdateFunc will replenish if the service was quota tracked has changed service type </ins> func ServiceReplenishmentUpdateFunc(options *ReplenishmentControllerOptions) func(oldObj, newObj interface{}) { return func(oldObj, newObj interface{}) { oldService := oldObj.(*api.Service) newService := newObj.(*api.Service) <del> if core.QuotaServiceType(oldService) || core.QuotaServiceType(newService) { options.ReplenishmentFunc(options.GroupKind, newService.Namespace, newService) </del> <ins> if core.GetQuotaServiceType(oldService) != core.GetQuotaServiceType(newService) { options.ReplenishmentFunc(options.GroupKind, newService.Namespace, nil) </ins> } } }

if mockReplenish.namespace != oldService.Namespace { t.Errorf("Unexpected namespace %v", mockReplenish.namespace) } <ins> mockReplenish = &testReplenishment{} options = ReplenishmentControllerOptions{ GroupKind:         api.Kind("Service"), ReplenishmentFunc: mockReplenish.Replenish, ResyncPeriod:      controller.NoResyncPeriodFunc, } oldService = &api.Service{ ObjectMeta: api.ObjectMeta{Namespace: "test", Name: "mysvc"}, Spec: api.ServiceSpec{ Type: api.ServiceTypeNodePort, Ports: []api.ServicePort{{ Port:       80, TargetPort: intstr.FromInt(80), }}, }, } newService = &api.Service{ ObjectMeta: api.ObjectMeta{Namespace: "test", Name: "mysvc"}, Spec: api.ServiceSpec{ Type: api.ServiceTypeNodePort, Ports: []api.ServicePort{{ Port:       81, TargetPort: intstr.FromInt(81), }}}, } updateFunc = ServiceReplenishmentUpdateFunc(&options) updateFunc(oldService, newService) if mockReplenish.groupKind == api.Kind("Service") { t.Errorf("Unexpected group kind %v", mockReplenish.groupKind) } if mockReplenish.namespace == oldService.Namespace { t.Errorf("Unexpected namespace %v", mockReplenish.namespace) } </ins> }

} return false } <ins> //GetQuotaServiceType returns ServiceType if the service type is eligible to track against a quota, nor return "" func GetQuotaServiceType(service *api.Service) api.ServiceType { switch service.Spec.Type { case api.ServiceTypeNodePort: return api.ServiceTypeNodePort case api.ServiceTypeLoadBalancer: return api.ServiceTypeLoadBalancer } return api.ServiceType("") } </ins>