diff --git a/go.mod b/go.mod index 96752e294..1a2e57bc5 100644 --- a/go.mod +++ b/go.mod @@ -5,8 +5,8 @@ go 1.21 require ( github.com/Azure/azure-kusto-go v0.14.0 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible - github.com/Azure/azure-sdk-for-go-extensions v0.1.4 - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0 + github.com/Azure/azure-sdk-for-go-extensions v0.1.5 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.1 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute v1.0.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.1.0 @@ -32,7 +32,7 @@ require ( github.com/stretchr/testify v1.8.4 go.uber.org/multierr v1.11.0 go.uber.org/zap v1.26.0 - golang.org/x/crypto v0.14.0 + golang.org/x/crypto v0.16.0 k8s.io/api v0.28.3 k8s.io/apiextensions-apiserver v0.28.3 k8s.io/apimachinery v0.28.3 @@ -47,7 +47,7 @@ require ( require ( contrib.go.opencensus.io/exporter/ocagent v0.7.1-0.20200907061046-05415f1de66d // indirect contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1 // indirect github.com/Azure/go-armbalancer v0.0.2 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect @@ -66,7 +66,7 @@ require ( github.com/deckarep/golang-set v1.8.0 // indirect github.com/emicklei/go-restful/v3 v3.11.0 // indirect github.com/evanphx/json-patch/v5 v5.7.0 // indirect - github.com/felixge/httpsnoop v1.0.3 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect @@ -113,17 +113,17 @@ require ( github.com/spf13/cobra v1.7.0 // indirect github.com/spf13/pflag v1.0.5 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0 // indirect - go.opentelemetry.io/otel v1.19.0 // indirect - go.opentelemetry.io/otel/metric v1.19.0 // indirect - go.opentelemetry.io/otel/trace v1.19.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 // indirect + go.opentelemetry.io/otel v1.21.0 // indirect + go.opentelemetry.io/otel/metric v1.21.0 // indirect + go.opentelemetry.io/otel/trace v1.21.0 // indirect go.uber.org/automaxprocs v1.5.3 // indirect golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect - golang.org/x/net v0.17.0 // indirect + golang.org/x/net v0.19.0 // indirect golang.org/x/oauth2 v0.13.0 // indirect golang.org/x/sync v0.5.0 // indirect - golang.org/x/sys v0.14.0 // indirect - golang.org/x/term v0.13.0 // indirect + golang.org/x/sys v0.15.0 // indirect + golang.org/x/term v0.15.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.4.0 // indirect golang.org/x/tools v0.14.0 // indirect diff --git a/go.sum b/go.sum index 873759a1e..a4d781a82 100644 --- a/go.sum +++ b/go.sum @@ -39,14 +39,14 @@ github.com/Azure/azure-kusto-go v0.14.0 h1:5XVmjh5kVgsm2scpsWisJ6Q1ZgWHJcIOPCZC1 github.com/Azure/azure-kusto-go v0.14.0/go.mod h1:wSmXIsQwBVPHDNsSQsX98nuc12VyvxoNHQa2q9t1Ce0= github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU= github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go-extensions v0.1.4 h1:XNT7IWmj4u3AfSag3t2mFupHT59J58pknX+daqprjm8= -github.com/Azure/azure-sdk-for-go-extensions v0.1.4/go.mod h1:dJfn8QUzuvyO4hGZ8pkROwd7/VQzDG8ER2SRk+V0afY= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0 h1:fb8kj/Dh4CSwgsOzHeZY4Xh68cFVbzXx+ONXGMY//4w= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0/go.mod h1:uReU2sSxZExRPBAg3qKzmAucSi51+SP1OhohieR821Q= +github.com/Azure/azure-sdk-for-go-extensions v0.1.5 h1:iGNv4we/Mst2hPcaZOynmCJJGNsPyN4YNV1YTzaGCb8= +github.com/Azure/azure-sdk-for-go-extensions v0.1.5/go.mod h1:27StPiXJp6Xzkq2AQL7gPK7VC0hgmCnUKlco1dO1jaM= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1 h1:lGlwhPtrX6EVml1hO0ivjkUxsSyl4dsiw9qcA1k/3IQ= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1/go.mod h1:RKUqNu35KJYcVG/fqTRqmuXJZYNhYkBrnC/hX7yGbTA= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.1 h1:LNHhpdK7hzUcx/k1LIcuh5k7k1LGIWLQfCjaneSj7Fc= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.1/go.mod h1:uE9zaUfEQT/nbQjVi2IblCG9iaLtZsuYZ8ne+PuQ02M= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0 h1:d81/ng9rET2YqdVkVwkb6EXeRrLJIwyGnJcAlAWKwhs= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0/go.mod h1:s4kgfzA0covAXNicZHDMN58jExvcng2mC/DepXiF1EI= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1 h1:6oNBlSdi1QqM1PNW7FPA6xOGA5UNsXnkaYZz9vdPGhA= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1/go.mod h1:s4kgfzA0covAXNicZHDMN58jExvcng2mC/DepXiF1EI= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute v1.0.0 h1:/Di3vB4sNeQ+7A8efjUVENvyB945Wruvstucqp7ZArg= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute v1.0.0/go.mod h1:gM3K25LQlsET3QR+4V74zxCsFAy0r6xMNN9n80SZn+4= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.1.0 h1:Sg/D8VuUQ+bw+FOYJF+xRKcwizCOP13HL0Se8pWNBzE= @@ -142,8 +142,8 @@ github.com/evanphx/json-patch v5.7.0+incompatible h1:vgGkfT/9f8zE6tvSCe74nfpAVDQ github.com/evanphx/json-patch v5.7.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0nW9SYGc= github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= -github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= -github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -427,14 +427,14 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0 h1:x8Z78aZx8cOF0+Kkazoc7lwUNMGy0LrzEMxTm4BbTxg= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0/go.mod h1:62CPTSry9QZtOaSsE3tOzhx6LzDhHnXJ6xHeMNNiM6Q= -go.opentelemetry.io/otel v1.19.0 h1:MuS/TNf4/j4IXsZuJegVzI1cwut7Qc00344rgH7p8bs= -go.opentelemetry.io/otel v1.19.0/go.mod h1:i0QyjOq3UPoTzff0PJB2N66fb4S0+rSbSB15/oyH9fY= -go.opentelemetry.io/otel/metric v1.19.0 h1:aTzpGtV0ar9wlV4Sna9sdJyII5jTVJEvKETPiOKwvpE= -go.opentelemetry.io/otel/metric v1.19.0/go.mod h1:L5rUsV9kM1IxCj1MmSdS+JQAcVm319EUrDVLrt7jqt8= -go.opentelemetry.io/otel/trace v1.19.0 h1:DFVQmlVbfVeOuBRrwdtaehRrWiL1JoVs9CPIQ1Dzxpg= -go.opentelemetry.io/otel/trace v1.19.0/go.mod h1:mfaSyvGyEJEI0nyV2I4qhNQnbBOUUmYZpYojqMnX2vo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 h1:aFJWCqJMNjENlcleuuOkGAPH82y0yULBScfXcIEdS24= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1/go.mod h1:sEGXWArGqc3tVa+ekntsN65DmVbVeW+7lTKTjZF3/Fo= +go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc= +go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= +go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4= +go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= +go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc= +go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8= go.uber.org/automaxprocs v1.5.3/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0= @@ -455,8 +455,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= +golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -532,8 +532,8 @@ golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -605,13 +605,13 @@ golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= -golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= -golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/pkg/fake/azureresourcegraphapi.go b/pkg/fake/azureresourcegraphapi.go index e3fa4d07f..f6cd1cee3 100644 --- a/pkg/fake/azureresourcegraphapi.go +++ b/pkg/fake/azureresourcegraphapi.go @@ -39,7 +39,7 @@ type AzureResourceGraphBehavior struct { } // assert that the fake implements the interface -var _ instance.AzureResourceGraphAPI = (*AzureResourceGraphAPI)(nil) +var _ instance.AzureResourceGraphAPI = &AzureResourceGraphAPI{} type AzureResourceGraphAPI struct { AzureResourceGraphBehavior diff --git a/pkg/fake/communityimageversionsapi.go b/pkg/fake/communityimageversionsapi.go index c9d8f265c..860874f22 100644 --- a/pkg/fake/communityimageversionsapi.go +++ b/pkg/fake/communityimageversionsapi.go @@ -30,7 +30,7 @@ type CommunityGalleryImageVersionsAPI struct { } // assert that the fake implements the interface -var _ imagefamily.CommunityGalleryImageVersionsAPI = (*CommunityGalleryImageVersionsAPI)(nil) +var _ imagefamily.CommunityGalleryImageVersionsAPI = &CommunityGalleryImageVersionsAPI{} // NewListPager returns a new pager to return the next page of CommunityGalleryImageVersionsClientListResponse func (c *CommunityGalleryImageVersionsAPI) NewListPager(_ string, _ string, _ string, _ *armcompute.CommunityGalleryImageVersionsClientListOptions) *runtime.Pager[armcompute.CommunityGalleryImageVersionsClientListResponse] { diff --git a/pkg/fake/networkinterfaceapi.go b/pkg/fake/networkinterfaceapi.go index 16eb4402c..4537b0beb 100644 --- a/pkg/fake/networkinterfaceapi.go +++ b/pkg/fake/networkinterfaceapi.go @@ -21,6 +21,8 @@ import ( "fmt" "sync" + "github.com/Azure/azure-sdk-for-go-extensions/pkg/errors" + "github.com/Azure/azure-sdk-for-go/sdk/azcore" "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork" "github.com/Azure/go-autorest/autorest/to" @@ -34,13 +36,18 @@ type NetworkInterfaceCreateOrUpdateInput struct { Options *armnetwork.InterfacesClientBeginCreateOrUpdateOptions } +type NetworkInterfaceDeleteInput struct { + ResourceGroupName, InterfaceName string +} + type NetworkInterfacesBehavior struct { NetworkInterfacesCreateOrUpdateBehavior MockedLRO[NetworkInterfaceCreateOrUpdateInput, armnetwork.InterfacesClientCreateOrUpdateResponse] + NetworkInterfacesDeleteBehavior MockedLRO[NetworkInterfaceDeleteInput, armnetwork.InterfacesClientDeleteResponse] NetworkInterfaces sync.Map } // assert that the fake implements the interface -var _ instance.NetworkInterfacesAPI = (*NetworkInterfacesAPI)(nil) +var _ instance.NetworkInterfacesAPI = &NetworkInterfacesAPI{} type NetworkInterfacesAPI struct { // instance.NetworkInterfacesAPI @@ -79,7 +86,7 @@ func (c *NetworkInterfacesAPI) Get(_ context.Context, resourceGroupName string, id := mkNetworkInterfaceID(resourceGroupName, interfaceName) iface, ok := c.NetworkInterfaces.Load(id) if !ok { - return armnetwork.InterfacesClientGetResponse{}, fmt.Errorf("not found") + return armnetwork.InterfacesClientGetResponse{}, &azcore.ResponseError{ErrorCode: errors.ResourceNotFound} } return armnetwork.InterfacesClientGetResponse{ Interface: iface.(armnetwork.Interface), @@ -87,9 +94,15 @@ func (c *NetworkInterfacesAPI) Get(_ context.Context, resourceGroupName string, } func (c *NetworkInterfacesAPI) BeginDelete(_ context.Context, resourceGroupName string, interfaceName string, _ *armnetwork.InterfacesClientBeginDeleteOptions) (*runtime.Poller[armnetwork.InterfacesClientDeleteResponse], error) { - id := mkNetworkInterfaceID(resourceGroupName, interfaceName) - c.NetworkInterfaces.Delete(id) - return nil, nil + input := &NetworkInterfaceDeleteInput{ + ResourceGroupName: resourceGroupName, + InterfaceName: interfaceName, + } + return c.NetworkInterfacesDeleteBehavior.Invoke(input, func(input *NetworkInterfaceDeleteInput) (*armnetwork.InterfacesClientDeleteResponse, error) { + id := mkNetworkInterfaceID(resourceGroupName, interfaceName) + c.NetworkInterfaces.Delete(id) + return &armnetwork.InterfacesClientDeleteResponse{}, nil + }) } func mkNetworkInterfaceID(resourceGroupName, interfaceName string) string { diff --git a/pkg/fake/pricingapi.go b/pkg/fake/pricingapi.go index 146e4eb55..3a8f1f377 100644 --- a/pkg/fake/pricingapi.go +++ b/pkg/fake/pricingapi.go @@ -36,6 +36,9 @@ type PricingBehavior struct { ProductsPricePage AtomicPtr[client.ProductsPricePage] } +// assert that the fake implements the interface +var _ client.PricingAPI = &PricingAPI{} + func (p *PricingAPI) Reset() { p.NextError.Reset() p.ProductsPricePage.Reset() diff --git a/pkg/fake/virtualmachineextensionsapi.go b/pkg/fake/virtualmachineextensionsapi.go index e118117d9..be8539695 100644 --- a/pkg/fake/virtualmachineextensionsapi.go +++ b/pkg/fake/virtualmachineextensionsapi.go @@ -40,7 +40,7 @@ type VirtualMachineExtensionsBehavior struct { } // assert that ComputeAPI implements ARMComputeAPI -var _ instance.VirtualMachineExtensionsAPI = (*VirtualMachineExtensionsAPI)(nil) +var _ instance.VirtualMachineExtensionsAPI = &VirtualMachineExtensionsAPI{} type VirtualMachineExtensionsAPI struct { // instance.VirtualMachineExtensionsAPI diff --git a/pkg/fake/virtualmachinesapi.go b/pkg/fake/virtualmachinesapi.go index 2066f20de..722b4966a 100644 --- a/pkg/fake/virtualmachinesapi.go +++ b/pkg/fake/virtualmachinesapi.go @@ -66,7 +66,7 @@ type VirtualMachinesBehavior struct { } // assert that the fake implements the interface -var _ instance.VirtualMachinesAPI = (*VirtualMachinesAPI)(nil) +var _ instance.VirtualMachinesAPI = &VirtualMachinesAPI{} type VirtualMachinesAPI struct { // TODO: document the implications of embedding vs. not embedding the interface here diff --git a/pkg/operator/operator.go b/pkg/operator/operator.go index 866c6c02c..f496e6ee3 100644 --- a/pkg/operator/operator.go +++ b/pkg/operator/operator.go @@ -54,10 +54,10 @@ type Operator struct { } func NewOperator(ctx context.Context, operator *operator.Operator) (context.Context, *Operator) { - azConfig, err := GetAzConfig() + azConfig, err := GetAZConfig() lo.Must0(err, "creating Azure config") // TODO: I assume we prefer this over the cleaner azConfig := lo.Must(GetAzConfig()), as this has a helpful error message? - azClient, err := instance.CreateAzClient(ctx, azConfig) + azClient, err := instance.CreateAZClient(ctx, azConfig) lo.Must0(err, "creating Azure client") unavailableOfferingsCache := azurecache.NewUnavailableOfferings() @@ -125,7 +125,7 @@ func NewOperator(ctx context.Context, operator *operator.Operator) (context.Cont } } -func GetAzConfig() (*auth.Config, error) { +func GetAZConfig() (*auth.Config, error) { cfg, err := auth.BuildAzureConfig() if err != nil { return nil, err diff --git a/pkg/providers/instance/azure_client.go b/pkg/providers/instance/azure_client.go index d51a68781..0fb7a6a0b 100644 --- a/pkg/providers/instance/azure_client.go +++ b/pkg/providers/instance/azure_client.go @@ -94,7 +94,7 @@ func NewAZClientFromAPI( } } -func CreateAzClient(ctx context.Context, cfg *auth.Config) (*AZClient, error) { +func CreateAZClient(ctx context.Context, cfg *auth.Config) (*AZClient, error) { // Defaulting env to Azure Public Cloud. env := azure.PublicCloud var err error @@ -132,10 +132,11 @@ func NewAZClient(ctx context.Context, cfg *auth.Config, env *azure.Environment) } opts := armopts.DefaultArmOpts() - extClient, err := armcompute.NewVirtualMachineExtensionsClient(cfg.SubscriptionID, cred, opts) + extensionsClient, err := armcompute.NewVirtualMachineExtensionsClient(cfg.SubscriptionID, cred, opts) if err != nil { return nil, err } + interfacesClient, err := armnetwork.NewInterfacesClient(cfg.SubscriptionID, cred, opts) if err != nil { return nil, err @@ -177,14 +178,11 @@ func NewAZClient(ctx context.Context, cfg *auth.Config, env *azure.Environment) // TODO Move this over to track 2 when skewer is migrated skuClient := skuclient.NewSkuClient(ctx, cfg, env) - return &AZClient{ - networkInterfacesClient: interfacesClient, - virtualMachinesClient: virtualMachinesClient, - virtualMachinesExtensionClient: extClient, - azureResourceGraphClient: azureResourceGraphClient, - - ImageVersionsClient: imageVersionsClient, - SKUClient: skuClient, - LoadBalancersClient: loadBalancersClient, - }, nil + return NewAZClientFromAPI(virtualMachinesClient, + azureResourceGraphClient, + extensionsClient, + interfacesClient, + loadBalancersClient, + imageVersionsClient, + skuClient), nil } diff --git a/pkg/providers/instance/instance.go b/pkg/providers/instance/instance.go index 8544d26fe..aae8885e9 100644 --- a/pkg/providers/instance/instance.go +++ b/pkg/providers/instance/instance.go @@ -19,6 +19,7 @@ package instance import ( "context" "encoding/json" + "errors" "fmt" "math" "sort" @@ -72,8 +73,6 @@ var ( ZonalAllocationFailureReason = "ZonalAllocationFailure" SKUNotAvailableReason = "SKUNotAvailable" - SKUNotAvailableErrorCode = "SkuNotAvailable" - SubscriptionQuotaReachedTTL = 1 * time.Hour SKUNotAvailableSpotTTL = 1 * time.Hour SKUNotAvailableOnDemandTTL = 23 * time.Hour @@ -125,6 +124,9 @@ func (p *Provider) Create(ctx context.Context, nodeClass *v1alpha2.AKSNodeClass, instanceTypes = orderInstanceTypesByPrice(instanceTypes, scheduling.NewNodeSelectorRequirements(nodeClaim.Spec.Requirements...)) vm, instanceType, err := p.launchInstance(ctx, nodeClass, nodeClaim, instanceTypes) if err != nil { + if cleanupErr := p.cleanupAzureResources(ctx, GenerateResourceName(nodeClaim.Name)); cleanupErr != nil { + logging.FromContext(ctx).Errorf("failed to cleanup resources for node claim %s, %w", nodeClaim.Name, cleanupErr) + } return nil, err } zone, err := GetZoneID(vm) @@ -177,27 +179,19 @@ func (p *Provider) List(ctx context.Context) ([]*armcompute.VirtualMachine, erro return vmList, nil } -func (p *Provider) Delete(ctx context.Context, vmName string) error { - logging.FromContext(ctx).Debugf("Deleting virtual machine %s", vmName) - return deleteVirtualMachine(ctx, p.azClient.virtualMachinesClient, p.resourceGroup, vmName) +func (p *Provider) Delete(ctx context.Context, resourceName string) error { + logging.FromContext(ctx).Debugf("Deleting virtual machine %s and associated resources") + return p.cleanupAzureResources(ctx, resourceName) } // createAKSIdentifyingExtension attaches a VM extension to identify that this VM participates in an AKS cluster -func (p *Provider) createAKSIdentifyingExtension( - ctx context.Context, - vmName, _ string, -) error { - var err error +func (p *Provider) createAKSIdentifyingExtension(ctx context.Context, vmName string) (err error) { vmExt := p.getAKSIdentifyingExtension() vmExtName := *vmExt.Name logging.FromContext(ctx).Debugf("Creating virtual machine AKS identifying extension for %s", vmName) v, err := createVirtualMachineExtension(ctx, p.azClient.virtualMachinesExtensionClient, p.resourceGroup, vmName, vmExtName, *vmExt) if err != nil { logging.FromContext(ctx).Errorf("Creating VM AKS identifying extension for VM %q failed, %w", vmName, err) - vmErr := deleteVirtualMachine(ctx, p.azClient.virtualMachinesClient, p.resourceGroup, vmName) - if vmErr != nil { - logging.FromContext(ctx).Errorf("virtualMachine.Delete for %s failed: %v", vmName, vmErr) - } return fmt.Errorf("creating VM AKS identifying extension for VM %q, %w failed", vmName, err) } logging.FromContext(ctx).Debugf("Created virtual machine AKS identifying extension for %s, with an id of %s", vmName, *v.ID) @@ -242,7 +236,7 @@ func (p *Provider) newNetworkInterfaceForVM(vmName string, backendPools *loadbal } } -func GenerateVMName(nodeClaimName string) string { +func GenerateResourceName(nodeClaimName string) string { return fmt.Sprintf("aks-%s", nodeClaimName) } @@ -257,9 +251,6 @@ func (p *Provider) createNetworkInterface(ctx context.Context, nicName string, l logging.FromContext(ctx).Debugf("Creating network interface %s", nicName) res, err := createNic(ctx, p.azClient.networkInterfacesClient, p.resourceGroup, nicName, nic) if err != nil { - if nicErr := deleteNicIfExists(ctx, p.azClient.networkInterfacesClient, p.resourceGroup, nicName); nicErr != nil { - logging.FromContext(ctx).Errorf("networkInterface.Delete for %s failed: %v", nicName, nicErr) - } return "", err } logging.FromContext(ctx).Debugf("Successfully created network interface: %v", *res.ID) @@ -376,14 +367,10 @@ func setVMTagsProvisionerName(tags map[string]*string, nodeClaim *corev1beta1.No } } -func (p *Provider) createVirtualMachine(ctx context.Context, vm armcompute.VirtualMachine, vmName, _ string) (*armcompute.VirtualMachine, error) { +func (p *Provider) createVirtualMachine(ctx context.Context, vm armcompute.VirtualMachine, vmName string) (*armcompute.VirtualMachine, error) { result, err := CreateVirtualMachine(ctx, p.azClient.virtualMachinesClient, p.resourceGroup, vmName, vm) if err != nil { logging.FromContext(ctx).Errorf("Creating virtual machine %q failed: %v", vmName, err) - vmErr := deleteVirtualMachineIfExists(ctx, p.azClient.virtualMachinesClient, p.resourceGroup, vmName) - if vmErr != nil { - logging.FromContext(ctx).Errorf("virtualMachine.Delete for %s failed: %v", vmName, vmErr) - } return nil, fmt.Errorf("virtualMachine.BeginCreateOrUpdate for VM %q failed: %w", vmName, err) } logging.FromContext(ctx).Debugf("Created virtual machine %s", *result.ID) @@ -400,41 +387,34 @@ func (p *Provider) launchInstance( if err != nil { return nil, nil, fmt.Errorf("getting launch template: %w", err) } - - vmName := GenerateVMName(nodeClaim.Name) + // resourceName for the NIC, VM, and Disk + resourceName := GenerateResourceName(nodeClaim.Name) // create network interface - nicName := vmName - nicReference, err := p.createNetworkInterface(ctx, vmName, launchTemplate, instanceType) + nicReference, err := p.createNetworkInterface(ctx, resourceName, launchTemplate, instanceType) if err != nil { return nil, nil, err } sshPublicKey := settings.FromContext(ctx).SSHPublicKey nodeIdentityIDs := settings.FromContext(ctx).NodeIdentities - vm := newVMObject(vmName, nicReference, zone, capacityType, p.location, sshPublicKey, nodeIdentityIDs, nodeClass, nodeClaim, launchTemplate, instanceType) + vm := newVMObject(resourceName, nicReference, zone, capacityType, p.location, sshPublicKey, nodeIdentityIDs, nodeClass, nodeClaim, launchTemplate, instanceType) - logging.FromContext(ctx).Debugf("Creating virtual machine %s (%s)", vmName, instanceType.Name) + logging.FromContext(ctx).Debugf("Creating virtual machine %s (%s)", resourceName, instanceType.Name) // Uses AZ Client to create a new virtual machine using the vm object we prepared earlier - resp, err := p.createVirtualMachine(ctx, vm, vmName, nicName) + resp, err := p.createVirtualMachine(ctx, vm, resourceName) if err != nil { azErr := p.handleResponseErrors(ctx, instanceType, zone, capacityType, err) return nil, nil, azErr } - err = p.createAKSIdentifyingExtension(ctx, vmName, nicName) + err = p.createAKSIdentifyingExtension(ctx, resourceName) if err != nil { return nil, nil, err } return resp, instanceType, nil } -// isSKUNotAvailable - to be moved to azure-sdk-for-go-extensions -func isSKUNotAvailable(err error) bool { - azErr := sdkerrors.IsResponseError(err) - return azErr != nil && azErr.ErrorCode == SKUNotAvailableErrorCode -} - func (p *Provider) handleResponseErrors(ctx context.Context, instanceType *corecloudprovider.InstanceType, zone, capacityType string, err error) error { if sdkerrors.SKUFamilyQuotaHasBeenReached(err) { // Subscription quota has been reached for this VM SKU, mark the instance type as unavailable in all zones available to the offering @@ -455,7 +435,7 @@ func (p *Provider) handleResponseErrors(ctx context.Context, instanceType *corec } return fmt.Errorf("subscription level %s vCPU quota for %s has been reached (may try provision an alternative instance type)", capacityType, instanceType.Name) } - if isSKUNotAvailable(err) { + if sdkerrors.IsSKUNotAvailable(err) { // https://aka.ms/azureskunotavailable: either not available for a location or zone, or out of capacity for Spot. // We only expect to observe the Spot case, not location or zone restrictions, because: // - SKUs with location restriction are already filtered out via sku.HasLocationRestriction @@ -569,6 +549,22 @@ func (p *Provider) pickSkuSizePriorityAndZone(ctx context.Context, nodeClaim *co return nil, "", "" } +func (p *Provider) cleanupAzureResources(ctx context.Context, resourceName string) (err error) { + vmErr := deleteVirtualMachineIfExists(ctx, p.azClient.virtualMachinesClient, p.resourceGroup, resourceName) + if vmErr != nil { + logging.FromContext(ctx).Errorf("virtualMachine.Delete for %s failed: %v", resourceName, vmErr) + } + // The order here is intentional, if the VM was created successfully, then we attempt to delete the vm, the + // nic, disk and all associated resources will be removed. If the VM was not created successfully and a nic was found, + // then we attempt to delete the nic. + nicErr := deleteNicIfExists(ctx, p.azClient.networkInterfacesClient, p.resourceGroup, resourceName) + if nicErr != nil { + logging.FromContext(ctx).Errorf("networkInterface.Delete for %s failed: %v", resourceName, nicErr) + } + + return errors.Join(vmErr, nicErr) +} + // getPriorityForInstanceType selects spot if both constraints are flexible and there is an available offering. // The Azure Cloud Provider defaults to Regular, so spot must be explicitly included in capacity type requirements. // diff --git a/pkg/providers/instancetype/suite_test.go b/pkg/providers/instancetype/suite_test.go index d4798260a..d9d6616b0 100644 --- a/pkg/providers/instancetype/suite_test.go +++ b/pkg/providers/instancetype/suite_test.go @@ -60,7 +60,6 @@ import ( "github.com/Azure/karpenter/pkg/apis/v1alpha2" "github.com/Azure/karpenter/pkg/cloudprovider" "github.com/Azure/karpenter/pkg/fake" - "github.com/Azure/karpenter/pkg/providers/instance" "github.com/Azure/karpenter/pkg/providers/instancetype" "github.com/Azure/karpenter/pkg/providers/loadbalancer" "github.com/Azure/karpenter/pkg/test" @@ -143,7 +142,36 @@ var _ = Describe("InstanceType Provider", func() { ExpectCleanedUp(ctx, env.Client) }) - Context("subscription level quota error responses", func() { + Context("vm creation error responses", func() { + It("should delete the network interface on failure to create the vm", func() { + ErrMsg := "test error" + ErrCode := fmt.Sprint(http.StatusNotFound) + ExpectApplied(ctx, env.Client, nodePool, nodeClass) + azureEnv.VirtualMachinesAPI.VirtualMachinesBehavior.VirtualMachineCreateOrUpdateBehavior.Error.Set( + &azcore.ResponseError{ + ErrorCode: ErrCode, + RawResponse: &http.Response{ + Body: createSDKErrorBody(ErrCode, ErrMsg), + }, + }, + ) + pod := coretest.UnschedulablePod() + ExpectProvisioned(ctx, env.Client, cluster, cloudProvider, coreProvisioner, pod) + ExpectNotScheduled(ctx, env.Client, pod) + + // We should have created a nic for the vm + Expect(azureEnv.NetworkInterfacesAPI.NetworkInterfacesCreateOrUpdateBehavior.CalledWithInput.Len()).To(Equal(1)) + // The nic we used in the vm create, should be cleaned up if the vm call fails + nic := azureEnv.NetworkInterfacesAPI.NetworkInterfacesCreateOrUpdateBehavior.CalledWithInput.Pop() + Expect(nic).NotTo(BeNil()) + _, ok := azureEnv.NetworkInterfacesAPI.NetworkInterfaces.Load(nic.Interface.ID) + Expect(ok).To(Equal(false)) + + azureEnv.VirtualMachinesAPI.VirtualMachineCreateOrUpdateBehavior.BeginError.Set(nil) + pod = coretest.UnschedulablePod() + ExpectProvisioned(ctx, env.Client, cluster, cloudProvider, coreProvisioner, pod) + ExpectScheduled(ctx, env.Client, pod) + }) It("should fail to provision when VM SKU family vCPU quota exceeded error is returned, and succeed when it is gone", func() { familyVCPUQuotaExceededErrorMessage := "Operation could not be completed as it results in exceeding approved standardDLSv5Family Cores quota. Additional details - Deployment Model: Resource Manager, Location: westus2, Current Limit: 100, Current Usage: 96, Additional Required: 32, (Minimum) New Limit Required: 128. Submit a request for Quota increase at https://aka.ms/ProdportalCRP/#blade/Microsoft_Azure_Capacity/UsageAndQuota.ReactView/Parameters/%7B%22subscriptionId%22:%(redacted)%22,%22command%22:%22openQuotaApprovalBlade%22,%22quotas%22:[%7B%22location%22:%22westus2%22,%22providerId%22:%22Microsoft.Compute%22,%22resourceName%22:%22standardDLSv5Family%22,%22quotaRequest%22:%7B%22properties%22:%7B%22limit%22:128,%22unit%22:%22Count%22,%22name%22:%7B%22value%22:%22standardDLSv5Family%22%7D%7D%7D%7D]%7D by specifying parameters listed in the ‘Details’ section for deployment to succeed. Please read more about quota limits at https://docs.microsoft.com/en-us/azure/azure-supportability/per-vm-quota-requests" ExpectApplied(ctx, env.Client, nodePool, nodeClass) @@ -158,6 +186,15 @@ var _ = Describe("InstanceType Provider", func() { pod := coretest.UnschedulablePod() ExpectProvisioned(ctx, env.Client, cluster, cloudProvider, coreProvisioner, pod) ExpectNotScheduled(ctx, env.Client, pod) + + // We should have created a nic for the vm + Expect(azureEnv.NetworkInterfacesAPI.NetworkInterfacesCreateOrUpdateBehavior.CalledWithInput.Len()).To(Equal(1)) + // The nic we used in the vm create, should be cleaned up if the vm call fails + nic := azureEnv.NetworkInterfacesAPI.NetworkInterfacesCreateOrUpdateBehavior.CalledWithInput.Pop() + Expect(nic).NotTo(BeNil()) + _, ok := azureEnv.NetworkInterfacesAPI.NetworkInterfaces.Load(nic.Interface.ID) + Expect(ok).To(Equal(false)) + azureEnv.VirtualMachinesAPI.VirtualMachineCreateOrUpdateBehavior.BeginError.Set(nil) pod = coretest.UnschedulablePod() ExpectProvisioned(ctx, env.Client, cluster, cloudProvider, coreProvisioner, pod) @@ -177,6 +214,14 @@ var _ = Describe("InstanceType Provider", func() { pod := coretest.UnschedulablePod() ExpectProvisioned(ctx, env.Client, cluster, cloudProvider, coreProvisioner, pod) ExpectNotScheduled(ctx, env.Client, pod) + // We should have created a nic for the vm + Expect(azureEnv.NetworkInterfacesAPI.NetworkInterfacesCreateOrUpdateBehavior.CalledWithInput.Len()).To(Equal(1)) + // The nic we used in the vm create, should be cleaned up if the vm call fails + nic := azureEnv.NetworkInterfacesAPI.NetworkInterfacesCreateOrUpdateBehavior.CalledWithInput.Pop() + Expect(nic).NotTo(BeNil()) + _, ok := azureEnv.NetworkInterfacesAPI.NetworkInterfaces.Load(nic.Interface.ID) + Expect(ok).To(Equal(false)) + azureEnv.VirtualMachinesAPI.VirtualMachineCreateOrUpdateBehavior.BeginError.Set(nil) pod = coretest.UnschedulablePod() ExpectProvisioned(ctx, env.Client, cluster, cloudProvider, coreProvisioner, pod) @@ -599,7 +644,7 @@ var _ = Describe("InstanceType Provider", func() { AssertUnavailable := func(sku string, capacityType string) { // fake a SKU not available error azureEnv.VirtualMachinesAPI.VirtualMachinesBehavior.VirtualMachineCreateOrUpdateBehavior.Error.Set( - &azcore.ResponseError{ErrorCode: instance.SKUNotAvailableErrorCode}, + &azcore.ResponseError{ErrorCode: sdkerrors.SKUNotAvailableErrorCode}, ) coretest.ReplaceRequirements(nodePool, v1.NodeSelectorRequirement{Key: v1.LabelInstanceTypeStable, Operator: v1.NodeSelectorOpIn, Values: []string{sku}}, diff --git a/pkg/utils/gpu.go b/pkg/utils/gpu.go index e66fbdbfb..a6b657139 100644 --- a/pkg/utils/gpu.go +++ b/pkg/utils/gpu.go @@ -23,11 +23,11 @@ import ( // TODO: Get these from agentbaker const ( Nvidia470CudaDriverVersion = "cuda-470.82.01" - Nvidia525CudaDriverVersion = "cuda-525.85.12" + Nvidia535CudaDriverVersion = "cuda-535.54.03" Nvidia535GridDriverVersion = "grid-535.54.03" AKSGPUGridSHA = "sha-20ffa2" - AKSGPUCudaSHA = "sha-e8873b" + AKSGPUCudaSHA = "sha-ff213d" ) func GetAKSGPUImageSHA(size string) string { @@ -146,7 +146,7 @@ func GetGPUDriverVersion(size string) string { if isStandardNCv1(size) { return Nvidia470CudaDriverVersion } - return Nvidia525CudaDriverVersion + return Nvidia535CudaDriverVersion } func isStandardNCv1(size string) bool { diff --git a/pkg/utils/gpu_test.go b/pkg/utils/gpu_test.go index 71e683fa7..40a70db21 100644 --- a/pkg/utils/gpu_test.go +++ b/pkg/utils/gpu_test.go @@ -55,9 +55,9 @@ func TestGetGPUDriverVersion(t *testing.T) { }{ {"GRID Driver - NV Series v5", "standard_nv6ads_a10_v5", Nvidia535GridDriverVersion}, {"CUDA Driver - NC Series v1", "standard_nc6s", Nvidia470CudaDriverVersion}, - {"CUDA Driver - NC Series v2", "standard_nc6s_v2", Nvidia525CudaDriverVersion}, - {"Unknown SKU", "unknown_sku", Nvidia525CudaDriverVersion}, - {"CUDA Driver - NC Series v3", "standard_nc6s_v3", Nvidia525CudaDriverVersion}, + {"CUDA Driver - NC Series v2", "standard_nc6s_v2", Nvidia535CudaDriverVersion}, + {"Unknown SKU", "unknown_sku", Nvidia535CudaDriverVersion}, + {"CUDA Driver - NC Series v3", "standard_nc6s_v3", Nvidia535CudaDriverVersion}, {"GRID Driver - A10", "standard_nc8ads_a10_v4", Nvidia535GridDriverVersion}, } diff --git a/pkg/utils/opts/armopts.go b/pkg/utils/opts/armopts.go index 68e5834d9..881c88045 100644 --- a/pkg/utils/opts/armopts.go +++ b/pkg/utils/opts/armopts.go @@ -33,6 +33,11 @@ func DefaultArmOpts() *arm.ClientOptions { return opts } +func DefaultNICClientOpts() *arm.ClientOptions { + opts := DefaultArmOpts() + return opts +} + func DefaultRetryOpts() policy.RetryOptions { return policy.RetryOptions{ MaxRetries: 20, diff --git a/skaffold.yaml b/skaffold.yaml index cc0eb94c4..a2115e19b 100644 --- a/skaffold.yaml +++ b/skaffold.yaml @@ -9,7 +9,7 @@ build: paths: - '**/*.go' - '**/*.gtpl' - #flags: ['-tags', 'ccp'] + #flags: ['-tags', 'ccp'] manifests: helm: releases: @@ -29,10 +29,10 @@ manifests: drift: true azure: clusterName: karpenter - clusterEndpoint: https://karpenter-tallaxes-azure-k-26fe00-j3imiwu5.hcp.westus2.staging.azmk8s.io:443 - kubeletClientTLSBootstrapToken: "" # TODO: get this from the cluster + clusterEndpoint: "Please run make az-all" + kubeletClientTLSBootstrapToken: "Please run make az-all" # TODO: get this from the cluster # TODO: autogenerate - sshPublicKey: "" + sshPublicKey: "Please run make az-all" networkPlugin: "azure" # TODO: get this from the cluster networkPolicy: "" replicas: 1 # for better debugging experience @@ -46,23 +46,23 @@ manifests: batchMaxDuration: 10s # 60s is a good value for large runs (500+ nodes) env: - name: ARM_SUBSCRIPTION_ID - value: "" + value: "Please run make az-all" - name: LOCATION value: westus2 - name: ARM_USE_MANAGED_IDENTITY_EXTENSION value: "true" - name: ARM_USER_ASSIGNED_IDENTITY_ID - value: "" + value: "Please run make az-all" - name: AZURE_NODE_RESOURCE_GROUP - value: "" + value: "Please run make az-all" - name: AZURE_SUBNET_ID # the id of subnet to create network interfaces on - value: "" + value: "Please run make az-all" - name: LEADER_ELECT # disable leader election for better debugging experience value: "false" - name: AZURE_VNET_NAME - value: "" + value: "Please run make az-all" - name: AZURE_SUBNET_NAME - value: "" + value: "Please run make az-all" # disable HTTP/2 to reduce ARM throttling on large-scale tests; # with this in place write (and read) QPS can be increased too #- name: GODEBUG