From 9050abc0171d404afa6663a3a19a031dca1e16f6 Mon Sep 17 00:00:00 2001 From: Alison Burgess Date: Fri, 29 Mar 2024 15:36:14 -0700 Subject: [PATCH 01/15] feat: adding api to get k8s version in manifest.json --- apiserver/getcachedvhdimages.go | 50 +++++++++++++++++++++++++++++++++ apiserver/routers.go | 6 ++++ pkg/agent/bakerapi.go | 27 ++++++++++++++++++ pkg/agent/bakerapi_test.go | 13 +++++++++ pkg/agent/datamodel/types.go | 4 +++ pkg/agent/utils.go | 11 ++++++++ pkg/agent/utils_test.go | 9 ++++++ 7 files changed, 120 insertions(+) create mode 100644 apiserver/getcachedvhdimages.go diff --git a/apiserver/getcachedvhdimages.go b/apiserver/getcachedvhdimages.go new file mode 100644 index 00000000000..604adee286f --- /dev/null +++ b/apiserver/getcachedvhdimages.go @@ -0,0 +1,50 @@ +package apiserver + +import ( + "encoding/json" + "fmt" + "log" + "net/http" + + agent "github.com/Azure/agentbaker/pkg/agent" + "github.com/Azure/agentbaker/pkg/agent/datamodel" +) + +const ( + // RoutePathGetCachedVHDImages the route path to get cached vhd images. + RoutePathGetCachedVHDImages string = "/getcachedvhdimages" +) + +// GetCachedVHDImages endpoint for getting cached VHD images. +func (api *APIServer) GetCachedVHDImages(w http.ResponseWriter, r *http.Request) { + var config datamodel.GetLatestSigImageConfigRequest + err := json.NewDecoder(r.Body).Decode(&config) + if err != nil { + log.Println(err.Error()) + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + agentBaker, err := agent.NewAgentBaker() + if err != nil { + log.Println(err.Error()) + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + images, err := agentBaker.GetCachedVHDImages() + if err != nil { + log.Println(err.Error()) + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + + result, err := json.Marshal(images) + if err != nil { + log.Println(err.Error()) + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + w.WriteHeader(http.StatusOK) + fmt.Fprint(w, string(result)) +} diff --git a/apiserver/routers.go b/apiserver/routers.go index 73afb7e22f3..8566c038ae6 100644 --- a/apiserver/routers.go +++ b/apiserver/routers.go @@ -39,6 +39,12 @@ func (api *APIServer) NewRouter() *mux.Router { Path(RoutePathDistroSIGImageConfig). Name("GetDistroSigImageConfig"). HandlerFunc(api.GetDistroSigImageConfig) + + router. + Methods("POST"). + Path(RoutePathGetCachedVHDImages). + Name("GetCachedVHDImages"). + HandlerFunc(api.GetCachedVHDImages) router.Methods("GET").Path("/healthz").Name("healthz").HandlerFunc(healthz) diff --git a/pkg/agent/bakerapi.go b/pkg/agent/bakerapi.go index 993c6c6090f..d6752c98758 100644 --- a/pkg/agent/bakerapi.go +++ b/pkg/agent/bakerapi.go @@ -5,7 +5,10 @@ package agent import ( "context" + "encoding/json" "fmt" + "os" + "path/filepath" "github.com/Azure/agentbaker/pkg/agent/datamodel" ) @@ -15,12 +18,19 @@ type AgentBaker interface { GetNodeBootstrapping(ctx context.Context, config *datamodel.NodeBootstrappingConfiguration) (*datamodel.NodeBootstrapping, error) GetLatestSigImageConfig(sigConfig datamodel.SIGConfig, region string, distro datamodel.Distro) (*datamodel.SigImageConfig, error) GetDistroSigImageConfig(sigConfig datamodel.SIGConfig, region string) (map[datamodel.Distro]datamodel.SigImageConfig, error) + GetCachedVHDImages() ([]string, error) } func NewAgentBaker() (AgentBaker, error) { return &agentBakerImpl{}, nil } +type Manifest struct { + Kubernetes struct { + Versions []string `json:"versions"` + } `json:"kubernetes"` +} + type agentBakerImpl struct{} //nolint:revive, nolintlint // ctx is not used, but may be in the future @@ -130,3 +140,20 @@ func (agentBaker *agentBakerImpl) GetDistroSigImageConfig( return allDistros, nil } + +func (agentBaker *agentBakerImpl) GetCachedVHDImages() ([]string, error) { + pwd, _ := os.Getwd() + manifestFilePath := filepath.Join(pwd, "../../parts/linux/cloud-init/artifacts/manifest.json") + + data, err := os.ReadFile(manifestFilePath) + if err != nil { + return nil, fmt.Errorf("error reading manifest.json file: %v", err) + } + data = trimEOF(data) + + var manifest Manifest + if err := json.Unmarshal(data, &manifest); err != nil { + return nil, fmt.Errorf("error parsing JSON data: %v", err) + } + return manifest.Kubernetes.Versions, nil +} diff --git a/pkg/agent/bakerapi_test.go b/pkg/agent/bakerapi_test.go index 8b2fd649f42..fadcb836caf 100644 --- a/pkg/agent/bakerapi_test.go +++ b/pkg/agent/bakerapi_test.go @@ -252,4 +252,17 @@ var _ = Describe("AgentBaker API implementation tests", func() { Expect(err).To(HaveOccurred()) }) }) + + Context("GetCachedVHDImages", func() { + It("should return the k8s version in manifest.json", func() { + agentBaker, err := NewAgentBaker() + Expect(err).NotTo(HaveOccurred()) + + images, err := agentBaker.GetCachedVHDImages() + Expect(err).NotTo(HaveOccurred()) + + cachedVersions := []string{"1.26.6", "1.26.10", "1.26.12", "1.27.3", "1.27.7", "1.27.9", "1.28.1", "1.28.3", "1.28.5", "1.29.0", "1.29.2"} + Expect(images).To(Equal(cachedVersions)) + }) + }) }) diff --git a/pkg/agent/datamodel/types.go b/pkg/agent/datamodel/types.go index ce403494514..e05cd325d63 100644 --- a/pkg/agent/datamodel/types.go +++ b/pkg/agent/datamodel/types.go @@ -1628,6 +1628,10 @@ type GetLatestSigImageConfigRequest struct { Distro Distro } +type GetCachedVHDImagesRequest struct { + images []string +} + // NodeBootstrappingConfiguration represents configurations for node bootstrapping. // //nolint:musttag // tags can be added if deemed necessary diff --git a/pkg/agent/utils.go b/pkg/agent/utils.go index af54e3f5353..68cedfcf4b3 100644 --- a/pkg/agent/utils.go +++ b/pkg/agent/utils.go @@ -644,3 +644,14 @@ func addFeatureGateString(featureGates string, key string, value bool) string { } return strings.Join(pairs, ",") } + +func trimEOF(data []byte) []byte { + eofIndex := bytes.LastIndex(data, []byte("#EOF")) + if eofIndex != -1 { // #EOF found + newlineIndex := bytes.LastIndex(data[:eofIndex], []byte("\n")) + if newlineIndex != -1 { + return data[:newlineIndex] + } + } + return data +} diff --git a/pkg/agent/utils_test.go b/pkg/agent/utils_test.go index 0739765450f..ee6267d1216 100644 --- a/pkg/agent/utils_test.go +++ b/pkg/agent/utils_test.go @@ -727,3 +727,12 @@ var _ = Describe("Test removeComments", func() { }) }) + +var _ = Describe("trimEOF should remove the #EOF at the end of a file", func() { + It("Should remove #EOF at the end of a file", func() { + input := []byte(`"versions":["1.26.6","1.26.10","1.26.12","1.27.3","1.27.7","1.27.9","1.28.1","1.28.3","1.28.5","1.29.0","1.29.2"]},"_template":{"fileName":"","downloadLocation":"","downloadURL":"","versions":[]}}` + "\n#EOF") + expected := `"versions":["1.26.6","1.26.10","1.26.12","1.27.3","1.27.7","1.27.9","1.28.1","1.28.3","1.28.5","1.29.0","1.29.2"]},"_template":{"fileName":"","downloadLocation":"","downloadURL":"","versions":[]}}` + result := trimEOF(input) + Expect(string(result)).To(Equal(expected)) + }) +}) From 99e81988b8d8cc8b57305ef1a470a7ac63df4d58 Mon Sep 17 00:00:00 2001 From: Alison Burgess Date: Fri, 29 Mar 2024 15:41:53 -0700 Subject: [PATCH 02/15] don't need any inputs --- apiserver/getcachedvhdimages.go | 9 --------- pkg/agent/datamodel/types.go | 4 ---- 2 files changed, 13 deletions(-) diff --git a/apiserver/getcachedvhdimages.go b/apiserver/getcachedvhdimages.go index 604adee286f..829b6d034bf 100644 --- a/apiserver/getcachedvhdimages.go +++ b/apiserver/getcachedvhdimages.go @@ -7,7 +7,6 @@ import ( "net/http" agent "github.com/Azure/agentbaker/pkg/agent" - "github.com/Azure/agentbaker/pkg/agent/datamodel" ) const ( @@ -17,14 +16,6 @@ const ( // GetCachedVHDImages endpoint for getting cached VHD images. func (api *APIServer) GetCachedVHDImages(w http.ResponseWriter, r *http.Request) { - var config datamodel.GetLatestSigImageConfigRequest - err := json.NewDecoder(r.Body).Decode(&config) - if err != nil { - log.Println(err.Error()) - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - agentBaker, err := agent.NewAgentBaker() if err != nil { log.Println(err.Error()) diff --git a/pkg/agent/datamodel/types.go b/pkg/agent/datamodel/types.go index e05cd325d63..ce403494514 100644 --- a/pkg/agent/datamodel/types.go +++ b/pkg/agent/datamodel/types.go @@ -1628,10 +1628,6 @@ type GetLatestSigImageConfigRequest struct { Distro Distro } -type GetCachedVHDImagesRequest struct { - images []string -} - // NodeBootstrappingConfiguration represents configurations for node bootstrapping. // //nolint:musttag // tags can be added if deemed necessary From d1b0a600ba760a8d91287e0537ffb6765b7c7f93 Mon Sep 17 00:00:00 2001 From: Alison Burgess Date: Fri, 29 Mar 2024 15:44:39 -0700 Subject: [PATCH 03/15] fix linter --- pkg/agent/bakerapi.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pkg/agent/bakerapi.go b/pkg/agent/bakerapi.go index d6752c98758..93dfe625fa9 100644 --- a/pkg/agent/bakerapi.go +++ b/pkg/agent/bakerapi.go @@ -142,18 +142,21 @@ func (agentBaker *agentBakerImpl) GetDistroSigImageConfig( } func (agentBaker *agentBakerImpl) GetCachedVHDImages() ([]string, error) { - pwd, _ := os.Getwd() + pwd, err := os.Getwd() + if err != nil { + return nil, fmt.Errorf("error getting current working directory: %w", err) + } manifestFilePath := filepath.Join(pwd, "../../parts/linux/cloud-init/artifacts/manifest.json") data, err := os.ReadFile(manifestFilePath) if err != nil { - return nil, fmt.Errorf("error reading manifest.json file: %v", err) + return nil, fmt.Errorf("error reading manifest.json file: %w", err) } data = trimEOF(data) var manifest Manifest if err := json.Unmarshal(data, &manifest); err != nil { - return nil, fmt.Errorf("error parsing JSON data: %v", err) + return nil, fmt.Errorf("error parsing JSON data: %w", err) } return manifest.Kubernetes.Versions, nil } From e85e450fe011b3f8fa2a6e17f92b88f0d74b7ff1 Mon Sep 17 00:00:00 2001 From: Alison Burgess Date: Fri, 29 Mar 2024 15:49:11 -0700 Subject: [PATCH 04/15] fix linter --- pkg/agent/bakerapi.go | 2 +- pkg/agent/datamodel/sig_config.go | 2 +- pkg/agent/datamodel/types.go | 6 +++--- pkg/agent/utils_test.go | 1 + 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/pkg/agent/bakerapi.go b/pkg/agent/bakerapi.go index 93dfe625fa9..f438fa6b67a 100644 --- a/pkg/agent/bakerapi.go +++ b/pkg/agent/bakerapi.go @@ -155,7 +155,7 @@ func (agentBaker *agentBakerImpl) GetCachedVHDImages() ([]string, error) { data = trimEOF(data) var manifest Manifest - if err := json.Unmarshal(data, &manifest); err != nil { + if err = json.Unmarshal(data, &manifest); err != nil { return nil, fmt.Errorf("error parsing JSON data: %w", err) } return manifest.Kubernetes.Versions, nil diff --git a/pkg/agent/datamodel/sig_config.go b/pkg/agent/datamodel/sig_config.go index 01e98cb2be6..db2fa35b7dc 100644 --- a/pkg/agent/datamodel/sig_config.go +++ b/pkg/agent/datamodel/sig_config.go @@ -258,7 +258,7 @@ func (d Distro) IsWindowsPIRDistro() bool { // SigImageConfigTemplate represents the SIG image configuration template. // -//nolint:musttag // tags can be added if deemed necessary + type SigImageConfigTemplate struct { ResourceGroup string Gallery string diff --git a/pkg/agent/datamodel/types.go b/pkg/agent/datamodel/types.go index ce403494514..fef58311823 100644 --- a/pkg/agent/datamodel/types.go +++ b/pkg/agent/datamodel/types.go @@ -1621,7 +1621,7 @@ type K8sComponents struct { // GetLatestSigImageConfigRequest describes the input for a GetLatestSigImageConfig HTTP request. // This is mostly a wrapper over existing types so RP doesn't have to manually construct JSON. // -//nolint:musttag // tags can be added if deemed necessary + type GetLatestSigImageConfigRequest struct { SIGConfig SIGConfig Region string @@ -1630,7 +1630,7 @@ type GetLatestSigImageConfigRequest struct { // NodeBootstrappingConfiguration represents configurations for node bootstrapping. // -//nolint:musttag // tags can be added if deemed necessary + type NodeBootstrappingConfiguration struct { ContainerService *ContainerService CloudSpecConfig *AzureEnvironmentSpecConfig @@ -1694,7 +1694,7 @@ const ( // NodeBootstrapping represents the custom data, CSE, and OS image info needed for node bootstrapping. // -//nolint:musttag // tags can be added if deemed necessary + type NodeBootstrapping struct { CustomData string CSE string diff --git a/pkg/agent/utils_test.go b/pkg/agent/utils_test.go index ee6267d1216..137f12241f1 100644 --- a/pkg/agent/utils_test.go +++ b/pkg/agent/utils_test.go @@ -728,6 +728,7 @@ var _ = Describe("Test removeComments", func() { }) +//nolint:lll var _ = Describe("trimEOF should remove the #EOF at the end of a file", func() { It("Should remove #EOF at the end of a file", func() { input := []byte(`"versions":["1.26.6","1.26.10","1.26.12","1.27.3","1.27.7","1.27.9","1.28.1","1.28.3","1.28.5","1.29.0","1.29.2"]},"_template":{"fileName":"","downloadLocation":"","downloadURL":"","versions":[]}}` + "\n#EOF") From 9fb7e245496ec0f80171ace6476fb6bcad65ba77 Mon Sep 17 00:00:00 2001 From: Alison Burgess Date: Fri, 29 Mar 2024 15:54:09 -0700 Subject: [PATCH 05/15] fix formatting --- apiserver/routers.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apiserver/routers.go b/apiserver/routers.go index 8566c038ae6..bed60e8b379 100644 --- a/apiserver/routers.go +++ b/apiserver/routers.go @@ -39,7 +39,7 @@ func (api *APIServer) NewRouter() *mux.Router { Path(RoutePathDistroSIGImageConfig). Name("GetDistroSigImageConfig"). HandlerFunc(api.GetDistroSigImageConfig) - + router. Methods("POST"). Path(RoutePathGetCachedVHDImages). From af40354f5757031194a86e75d068bf2b8551c791 Mon Sep 17 00:00:00 2001 From: Alison Burgess Date: Mon, 1 Apr 2024 13:28:28 -0700 Subject: [PATCH 06/15] rename to k8versions --- apiserver/getcachedvhdimages.go | 10 +++++----- apiserver/routers.go | 6 +++--- pkg/agent/bakerapi.go | 4 ++-- pkg/agent/bakerapi_test.go | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/apiserver/getcachedvhdimages.go b/apiserver/getcachedvhdimages.go index 829b6d034bf..b124c211d05 100644 --- a/apiserver/getcachedvhdimages.go +++ b/apiserver/getcachedvhdimages.go @@ -10,12 +10,12 @@ import ( ) const ( - // RoutePathGetCachedVHDImages the route path to get cached vhd images. - RoutePathGetCachedVHDImages string = "/getcachedvhdimages" + // RoutePathGetCachedK8sVersions the route path to get cached vhd images. + RoutePathGetCachedK8sVersions string = "/getcachedk8sversions" ) -// GetCachedVHDImages endpoint for getting cached VHD images. -func (api *APIServer) GetCachedVHDImages(w http.ResponseWriter, r *http.Request) { +// GetCachedK8sVersions endpoint for getting cached VHD images. +func (api *APIServer) GetCachedK8sVersions(w http.ResponseWriter, r *http.Request) { agentBaker, err := agent.NewAgentBaker() if err != nil { log.Println(err.Error()) @@ -23,7 +23,7 @@ func (api *APIServer) GetCachedVHDImages(w http.ResponseWriter, r *http.Request) return } - images, err := agentBaker.GetCachedVHDImages() + images, err := agentBaker.GetCachedK8sVersions() if err != nil { log.Println(err.Error()) http.Error(w, err.Error(), http.StatusBadRequest) diff --git a/apiserver/routers.go b/apiserver/routers.go index bed60e8b379..fef92f5459f 100644 --- a/apiserver/routers.go +++ b/apiserver/routers.go @@ -42,9 +42,9 @@ func (api *APIServer) NewRouter() *mux.Router { router. Methods("POST"). - Path(RoutePathGetCachedVHDImages). - Name("GetCachedVHDImages"). - HandlerFunc(api.GetCachedVHDImages) + Path(RoutePathGetCachedK8sVersions). + Name("GetCachedK8sVersions"). + HandlerFunc(api.GetCachedK8sVersions) router.Methods("GET").Path("/healthz").Name("healthz").HandlerFunc(healthz) diff --git a/pkg/agent/bakerapi.go b/pkg/agent/bakerapi.go index f438fa6b67a..3d949c01847 100644 --- a/pkg/agent/bakerapi.go +++ b/pkg/agent/bakerapi.go @@ -18,7 +18,7 @@ type AgentBaker interface { GetNodeBootstrapping(ctx context.Context, config *datamodel.NodeBootstrappingConfiguration) (*datamodel.NodeBootstrapping, error) GetLatestSigImageConfig(sigConfig datamodel.SIGConfig, region string, distro datamodel.Distro) (*datamodel.SigImageConfig, error) GetDistroSigImageConfig(sigConfig datamodel.SIGConfig, region string) (map[datamodel.Distro]datamodel.SigImageConfig, error) - GetCachedVHDImages() ([]string, error) + GetCachedK8sVersions() ([]string, error) } func NewAgentBaker() (AgentBaker, error) { @@ -141,7 +141,7 @@ func (agentBaker *agentBakerImpl) GetDistroSigImageConfig( return allDistros, nil } -func (agentBaker *agentBakerImpl) GetCachedVHDImages() ([]string, error) { +func (agentBaker *agentBakerImpl) GetCachedK8sVersions() ([]string, error) { pwd, err := os.Getwd() if err != nil { return nil, fmt.Errorf("error getting current working directory: %w", err) diff --git a/pkg/agent/bakerapi_test.go b/pkg/agent/bakerapi_test.go index fadcb836caf..ce1b3f168ee 100644 --- a/pkg/agent/bakerapi_test.go +++ b/pkg/agent/bakerapi_test.go @@ -253,12 +253,12 @@ var _ = Describe("AgentBaker API implementation tests", func() { }) }) - Context("GetCachedVHDImages", func() { + Context("GetCachedK8sVersions", func() { It("should return the k8s version in manifest.json", func() { agentBaker, err := NewAgentBaker() Expect(err).NotTo(HaveOccurred()) - images, err := agentBaker.GetCachedVHDImages() + images, err := agentBaker.GetCachedK8sVersions() Expect(err).NotTo(HaveOccurred()) cachedVersions := []string{"1.26.6", "1.26.10", "1.26.12", "1.27.3", "1.27.7", "1.27.9", "1.28.1", "1.28.3", "1.28.5", "1.29.0", "1.29.2"} From 9a85d8f593c0a79d83b01305a18378f7b7a1ce51 Mon Sep 17 00:00:00 2001 From: Alison Burgess Date: Mon, 1 Apr 2024 13:30:47 -0700 Subject: [PATCH 07/15] use hardcoded path --- pkg/agent/bakerapi.go | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/pkg/agent/bakerapi.go b/pkg/agent/bakerapi.go index 3d949c01847..9c9f2c298b8 100644 --- a/pkg/agent/bakerapi.go +++ b/pkg/agent/bakerapi.go @@ -8,7 +8,6 @@ import ( "encoding/json" "fmt" "os" - "path/filepath" "github.com/Azure/agentbaker/pkg/agent/datamodel" ) @@ -142,12 +141,7 @@ func (agentBaker *agentBakerImpl) GetDistroSigImageConfig( } func (agentBaker *agentBakerImpl) GetCachedK8sVersions() ([]string, error) { - pwd, err := os.Getwd() - if err != nil { - return nil, fmt.Errorf("error getting current working directory: %w", err) - } - manifestFilePath := filepath.Join(pwd, "../../parts/linux/cloud-init/artifacts/manifest.json") - + manifestFilePath := "../../parts/linux/cloud-init/artifacts/manifest.json" data, err := os.ReadFile(manifestFilePath) if err != nil { return nil, fmt.Errorf("error reading manifest.json file: %w", err) From 91e3bc55984bd1bf61d94d5bac243e978e248a8f Mon Sep 17 00:00:00 2001 From: Alison Burgess Date: Mon, 1 Apr 2024 13:33:02 -0700 Subject: [PATCH 08/15] remove blank lines --- pkg/agent/datamodel/types.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pkg/agent/datamodel/types.go b/pkg/agent/datamodel/types.go index fef58311823..9441108a239 100644 --- a/pkg/agent/datamodel/types.go +++ b/pkg/agent/datamodel/types.go @@ -1620,8 +1620,6 @@ type K8sComponents struct { // GetLatestSigImageConfigRequest describes the input for a GetLatestSigImageConfig HTTP request. // This is mostly a wrapper over existing types so RP doesn't have to manually construct JSON. -// - type GetLatestSigImageConfigRequest struct { SIGConfig SIGConfig Region string @@ -1629,8 +1627,6 @@ type GetLatestSigImageConfigRequest struct { } // NodeBootstrappingConfiguration represents configurations for node bootstrapping. -// - type NodeBootstrappingConfiguration struct { ContainerService *ContainerService CloudSpecConfig *AzureEnvironmentSpecConfig @@ -1693,8 +1689,6 @@ const ( ) // NodeBootstrapping represents the custom data, CSE, and OS image info needed for node bootstrapping. -// - type NodeBootstrapping struct { CustomData string CSE string From 315ee9c3374bb1921cfd44cd5a44014ba92bdf30 Mon Sep 17 00:00:00 2001 From: Alison Burgess Date: Mon, 1 Apr 2024 13:33:34 -0700 Subject: [PATCH 09/15] remove blank lines --- pkg/agent/datamodel/sig_config.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkg/agent/datamodel/sig_config.go b/pkg/agent/datamodel/sig_config.go index 14c1281b404..e6e55cbab13 100644 --- a/pkg/agent/datamodel/sig_config.go +++ b/pkg/agent/datamodel/sig_config.go @@ -269,8 +269,6 @@ func (d Distro) IsWindowsPIRDistro() bool { } // SigImageConfigTemplate represents the SIG image configuration template. -// - type SigImageConfigTemplate struct { ResourceGroup string Gallery string From f87e2d546fbba7d9128b68caee6d7dbd82fad21d Mon Sep 17 00:00:00 2001 From: Alison Burgess Date: Mon, 1 Apr 2024 16:05:21 -0700 Subject: [PATCH 10/15] change up testing --- apiserver/getcachedvhdimages.go | 9 ++------- pkg/agent/bakerapi.go | 19 +++---------------- pkg/agent/bakerapi_test.go | 2 +- pkg/agent/datamodel/helper.go | 11 +++++++++++ pkg/agent/datamodel/helper_test.go | 27 +++++++++++++++++++++++++++ pkg/agent/datamodel/sig_config.go | 30 ++++++++++++++++++++++++++++++ 6 files changed, 74 insertions(+), 24 deletions(-) diff --git a/apiserver/getcachedvhdimages.go b/apiserver/getcachedvhdimages.go index b124c211d05..a0b642ddddf 100644 --- a/apiserver/getcachedvhdimages.go +++ b/apiserver/getcachedvhdimages.go @@ -23,13 +23,8 @@ func (api *APIServer) GetCachedK8sVersions(w http.ResponseWriter, r *http.Reques return } - images, err := agentBaker.GetCachedK8sVersions() - if err != nil { - log.Println(err.Error()) - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - + images := agentBaker.GetCachedK8sVersions() + result, err := json.Marshal(images) if err != nil { log.Println(err.Error()) diff --git a/pkg/agent/bakerapi.go b/pkg/agent/bakerapi.go index 9c9f2c298b8..629a772370a 100644 --- a/pkg/agent/bakerapi.go +++ b/pkg/agent/bakerapi.go @@ -5,9 +5,7 @@ package agent import ( "context" - "encoding/json" "fmt" - "os" "github.com/Azure/agentbaker/pkg/agent/datamodel" ) @@ -17,7 +15,7 @@ type AgentBaker interface { GetNodeBootstrapping(ctx context.Context, config *datamodel.NodeBootstrappingConfiguration) (*datamodel.NodeBootstrapping, error) GetLatestSigImageConfig(sigConfig datamodel.SIGConfig, region string, distro datamodel.Distro) (*datamodel.SigImageConfig, error) GetDistroSigImageConfig(sigConfig datamodel.SIGConfig, region string) (map[datamodel.Distro]datamodel.SigImageConfig, error) - GetCachedK8sVersions() ([]string, error) + GetCachedK8sVersions() []string } func NewAgentBaker() (AgentBaker, error) { @@ -140,17 +138,6 @@ func (agentBaker *agentBakerImpl) GetDistroSigImageConfig( return allDistros, nil } -func (agentBaker *agentBakerImpl) GetCachedK8sVersions() ([]string, error) { - manifestFilePath := "../../parts/linux/cloud-init/artifacts/manifest.json" - data, err := os.ReadFile(manifestFilePath) - if err != nil { - return nil, fmt.Errorf("error reading manifest.json file: %w", err) - } - data = trimEOF(data) - - var manifest Manifest - if err = json.Unmarshal(data, &manifest); err != nil { - return nil, fmt.Errorf("error parsing JSON data: %w", err) - } - return manifest.Kubernetes.Versions, nil +func (agentBaker *agentBakerImpl) GetCachedK8sVersions() []string { + return datamodel.CachedK8sVersions } diff --git a/pkg/agent/bakerapi_test.go b/pkg/agent/bakerapi_test.go index ce1b3f168ee..fbbecc83a38 100644 --- a/pkg/agent/bakerapi_test.go +++ b/pkg/agent/bakerapi_test.go @@ -258,7 +258,7 @@ var _ = Describe("AgentBaker API implementation tests", func() { agentBaker, err := NewAgentBaker() Expect(err).NotTo(HaveOccurred()) - images, err := agentBaker.GetCachedK8sVersions() + images := agentBaker.GetCachedK8sVersions() Expect(err).NotTo(HaveOccurred()) cachedVersions := []string{"1.26.6", "1.26.10", "1.26.12", "1.27.3", "1.27.7", "1.27.9", "1.28.1", "1.28.3", "1.28.5", "1.29.0", "1.29.2"} diff --git a/pkg/agent/datamodel/helper.go b/pkg/agent/datamodel/helper.go index 80637169a58..19a833d6c17 100644 --- a/pkg/agent/datamodel/helper.go +++ b/pkg/agent/datamodel/helper.go @@ -98,3 +98,14 @@ func IndentString(original string, spaces int) string { } return out.String() } + +func trimEOF(data []byte) []byte { + eofIndex := bytes.LastIndex(data, []byte("#EOF")) + if eofIndex != -1 { // #EOF found + newlineIndex := bytes.LastIndex(data[:eofIndex], []byte("\n")) + if newlineIndex != -1 { + return data[:newlineIndex] + } + } + return data +} diff --git a/pkg/agent/datamodel/helper_test.go b/pkg/agent/datamodel/helper_test.go index c03c4b75287..9b0cdbfe735 100644 --- a/pkg/agent/datamodel/helper_test.go +++ b/pkg/agent/datamodel/helper_test.go @@ -346,3 +346,30 @@ func TestIndentString(t *testing.T) { }) } } + + +func TestTrimEOF(t *testing.T) { + tests := []struct { + name string + input []byte + expected string + }{ + { + name: "Should remove #EOF at the end of a file", + input: []byte(`"versions":["1.26.6","1.26.10","1.26.12","1.27.3","1.27.7","1.27.9","1.28.1","1.28.3","1.28.5","1.29.0","1.29.2"]},"_template":{"fileName":"","downloadLocation":"","downloadURL":"","versions":[]}}` + "\n#EOF"), + expected: `"versions":["1.26.6","1.26.10","1.26.12","1.27.3","1.27.7","1.27.9","1.28.1","1.28.3","1.28.5","1.29.0","1.29.2"]},"_template":{"fileName":"","downloadLocation":"","downloadURL":"","versions":[]}}`, + }, + } + + for _, test := range tests { + test := test + t.Run(test.name, func(t *testing.T) { + t.Parallel() + got := trimEOF(test.input) + diff := cmp.Diff(test.expected, string(got)) + if diff != "" { + t.Fatalf(diff) + } + }) + } +} diff --git a/pkg/agent/datamodel/sig_config.go b/pkg/agent/datamodel/sig_config.go index e6e55cbab13..f52d07d2f7a 100644 --- a/pkg/agent/datamodel/sig_config.go +++ b/pkg/agent/datamodel/sig_config.go @@ -4,6 +4,9 @@ import ( _ "embed" "encoding/json" "fmt" + "os" + "path" + "runtime" "strings" ) @@ -12,6 +15,12 @@ const ( AzurePublicCloudSigSubscription string = "109a5e88-712a-48ae-9078-9ca8b3c81345" // AKS VHD ) +func init() { + _, filename, _, _ := runtime.Caller(0) + manifestFilePath := "../../../parts/linux/cloud-init/artifacts/manifest.json" + getCachedK8sVersionFromManifest(path.Join(path.Dir(filename), manifestFilePath)) +} + // SIGAzureEnvironmentSpecConfig is the overall configuration differences in different cloud environments. /* TODO(tonyxu) merge this with AzureEnvironmentSpecConfig from aks-engine(pkg/api/azenvtypes.go) once it's moved into AKS RP. */ @@ -869,3 +878,24 @@ func withSubscription(subscriptionID string) SigImageConfigOpt { c.SubscriptionID = subscriptionID } } + +type Manifest struct { + Kubernetes struct { + Versions []string `json:"versions"` + } `json:"kubernetes"` +} + +var CachedK8sVersions []string + +func getCachedK8sVersionFromManifest(manifestFilePath string) { + data, err := os.ReadFile(manifestFilePath) + if err != nil { + panic(err) + } + data = trimEOF(data) + var manifest Manifest + if err = json.Unmarshal(data, &manifest); err != nil { + panic(err) + } + CachedK8sVersions = manifest.Kubernetes.Versions +} From 233a9378a61719a44e40fdd42826261362b80f9e Mon Sep 17 00:00:00 2001 From: Alison Burgess Date: Mon, 1 Apr 2024 16:09:25 -0700 Subject: [PATCH 11/15] Remove unused util --- pkg/agent/utils.go | 11 ----------- pkg/agent/utils_test.go | 12 +----------- 2 files changed, 1 insertion(+), 22 deletions(-) diff --git a/pkg/agent/utils.go b/pkg/agent/utils.go index 68cedfcf4b3..af54e3f5353 100644 --- a/pkg/agent/utils.go +++ b/pkg/agent/utils.go @@ -644,14 +644,3 @@ func addFeatureGateString(featureGates string, key string, value bool) string { } return strings.Join(pairs, ",") } - -func trimEOF(data []byte) []byte { - eofIndex := bytes.LastIndex(data, []byte("#EOF")) - if eofIndex != -1 { // #EOF found - newlineIndex := bytes.LastIndex(data[:eofIndex], []byte("\n")) - if newlineIndex != -1 { - return data[:newlineIndex] - } - } - return data -} diff --git a/pkg/agent/utils_test.go b/pkg/agent/utils_test.go index 137f12241f1..724e75a813f 100644 --- a/pkg/agent/utils_test.go +++ b/pkg/agent/utils_test.go @@ -726,14 +726,4 @@ var _ = Describe("Test removeComments", func() { Expect(string(result)).To(Equal(expected)) }) -}) - -//nolint:lll -var _ = Describe("trimEOF should remove the #EOF at the end of a file", func() { - It("Should remove #EOF at the end of a file", func() { - input := []byte(`"versions":["1.26.6","1.26.10","1.26.12","1.27.3","1.27.7","1.27.9","1.28.1","1.28.3","1.28.5","1.29.0","1.29.2"]},"_template":{"fileName":"","downloadLocation":"","downloadURL":"","versions":[]}}` + "\n#EOF") - expected := `"versions":["1.26.6","1.26.10","1.26.12","1.27.3","1.27.7","1.27.9","1.28.1","1.28.3","1.28.5","1.29.0","1.29.2"]},"_template":{"fileName":"","downloadLocation":"","downloadURL":"","versions":[]}}` - result := trimEOF(input) - Expect(string(result)).To(Equal(expected)) - }) -}) +}) \ No newline at end of file From 41ff623a92a1f32df908c153bfbed0aeec73d4b0 Mon Sep 17 00:00:00 2001 From: Alison Burgess Date: Mon, 1 Apr 2024 16:10:31 -0700 Subject: [PATCH 12/15] reorder --- pkg/agent/datamodel/sig_config.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/agent/datamodel/sig_config.go b/pkg/agent/datamodel/sig_config.go index f52d07d2f7a..e394ed1684f 100644 --- a/pkg/agent/datamodel/sig_config.go +++ b/pkg/agent/datamodel/sig_config.go @@ -879,14 +879,14 @@ func withSubscription(subscriptionID string) SigImageConfigOpt { } } +var CachedK8sVersions []string + type Manifest struct { Kubernetes struct { Versions []string `json:"versions"` } `json:"kubernetes"` } -var CachedK8sVersions []string - func getCachedK8sVersionFromManifest(manifestFilePath string) { data, err := os.ReadFile(manifestFilePath) if err != nil { From cac2abcd2be41ce840073dc0f1e22d78bc9ae494 Mon Sep 17 00:00:00 2001 From: Alison Burgess Date: Tue, 9 Apr 2024 15:54:30 -0700 Subject: [PATCH 13/15] modify to look at all components --- apiserver/getcachedvhdimages.go | 36 --------- apiserver/routers.go | 6 -- pkg/agent/bakerapi.go | 4 + pkg/agent/bakerapi_test.go | 23 ++++++ pkg/agent/datamodel/sig_config.go | 129 +++++++++++++++++++++++++++++- 5 files changed, 153 insertions(+), 45 deletions(-) delete mode 100644 apiserver/getcachedvhdimages.go diff --git a/apiserver/getcachedvhdimages.go b/apiserver/getcachedvhdimages.go deleted file mode 100644 index a0b642ddddf..00000000000 --- a/apiserver/getcachedvhdimages.go +++ /dev/null @@ -1,36 +0,0 @@ -package apiserver - -import ( - "encoding/json" - "fmt" - "log" - "net/http" - - agent "github.com/Azure/agentbaker/pkg/agent" -) - -const ( - // RoutePathGetCachedK8sVersions the route path to get cached vhd images. - RoutePathGetCachedK8sVersions string = "/getcachedk8sversions" -) - -// GetCachedK8sVersions endpoint for getting cached VHD images. -func (api *APIServer) GetCachedK8sVersions(w http.ResponseWriter, r *http.Request) { - agentBaker, err := agent.NewAgentBaker() - if err != nil { - log.Println(err.Error()) - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - - images := agentBaker.GetCachedK8sVersions() - - result, err := json.Marshal(images) - if err != nil { - log.Println(err.Error()) - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - w.WriteHeader(http.StatusOK) - fmt.Fprint(w, string(result)) -} diff --git a/apiserver/routers.go b/apiserver/routers.go index fef92f5459f..73afb7e22f3 100644 --- a/apiserver/routers.go +++ b/apiserver/routers.go @@ -40,12 +40,6 @@ func (api *APIServer) NewRouter() *mux.Router { Name("GetDistroSigImageConfig"). HandlerFunc(api.GetDistroSigImageConfig) - router. - Methods("POST"). - Path(RoutePathGetCachedK8sVersions). - Name("GetCachedK8sVersions"). - HandlerFunc(api.GetCachedK8sVersions) - router.Methods("GET").Path("/healthz").Name("healthz").HandlerFunc(healthz) // global timeout and panic handlers. diff --git a/pkg/agent/bakerapi.go b/pkg/agent/bakerapi.go index 1d540b4af7b..f12ee25241e 100644 --- a/pkg/agent/bakerapi.go +++ b/pkg/agent/bakerapi.go @@ -106,6 +106,10 @@ func (agentBaker *agentBakerImpl) GetLatestSigImageConfig(sigConfig datamodel.SI sigImageConfig.Version = imageVersion } } + + sigImageConfig.CachedFromManifest = datamodel.CachedFromManifest + sigImageConfig.CachedFromComponsents = datamodel.CachedFromComponsents + return sigImageConfig, nil } diff --git a/pkg/agent/bakerapi_test.go b/pkg/agent/bakerapi_test.go index b89bd7bb907..eadb98d84be 100644 --- a/pkg/agent/bakerapi_test.go +++ b/pkg/agent/bakerapi_test.go @@ -19,6 +19,9 @@ var _ = Describe("AgentBaker API implementation tests", func() { ) BeforeEach(func() { + datamodel.CacheManifest() + datamodel.CacheComponents() + toggles = agenttoggles.New() cs = &datamodel.ContainerService{ @@ -312,6 +315,26 @@ var _ = Describe("AgentBaker API implementation tests", func() { Expect(sigImageConfig.Version).To(Equal("2021.11.06")) }) + It("should return cached VHD data", func() { + agentBaker, err := NewAgentBaker() + Expect(err).NotTo(HaveOccurred()) + agentBaker = agentBaker.WithToggles(toggles) + + sigImageConfig, err := agentBaker.GetLatestSigImageConfig(config.SIGConfig, datamodel.AKSUbuntu1604, &datamodel.EnvironmentInfo{ + SubscriptionID: config.SubscriptionID, + TenantID: config.TenantID, + Region: cs.Location, + }) + Expect(err).NotTo(HaveOccurred()) + + Expect(sigImageConfig.CachedFromManifest["runc"].Installed["default"]).To(Equal("1.1.12")) + Expect(sigImageConfig.CachedFromManifest["containerd"].Pinned["1804"]).To(Equal("1.7.1-1")) + Expect(sigImageConfig.CachedFromManifest["containerd"].Edge).To(Equal("1.7.15-1")) + Expect(sigImageConfig.CachedFromComponsents["pause"].MultiArchVersions[0]).To(Equal("3.6")) + Expect(sigImageConfig.CachedFromComponsents["azure-cns"].PrefetchOptimizations.Version).To(Equal("v1.5.23")) + Expect(sigImageConfig.CachedFromComponsents["azure-cns"].PrefetchOptimizations.Binaries[0]).To(Equal("usr/local/bin/azure-cns")) + }) + It("should return correct value for existing distro when linux node image version override is provided", func() { toggles.Maps = map[string]agenttoggles.MapToggle{ "linux-node-image-version": func(entity *agenttoggles.Entity) map[string]string { diff --git a/pkg/agent/datamodel/sig_config.go b/pkg/agent/datamodel/sig_config.go index db6eb157934..5a27091e3d9 100644 --- a/pkg/agent/datamodel/sig_config.go +++ b/pkg/agent/datamodel/sig_config.go @@ -16,11 +16,22 @@ const ( ) func init() { + CacheManifest() + CacheComponents() +} + +func CacheManifest() { _, filename, _, _ := runtime.Caller(0) manifestFilePath := "../../../parts/linux/cloud-init/artifacts/manifest.json" getCachedK8sVersionFromManifest(path.Join(path.Dir(filename), manifestFilePath)) } +func CacheComponents() { + _, filename, _, _ := runtime.Caller(0) + componentsFilePath := "../../../vhdbuilder/packer/components.json" + getCachedComponentsFromComponents(path.Join(path.Dir(filename), componentsFilePath)) +} + // SIGAzureEnvironmentSpecConfig is the overall configuration differences in different cloud environments. /* TODO(tonyxu) merge this with AzureEnvironmentSpecConfig from aks-engine(pkg/api/azenvtypes.go) once it's moved into AKS RP. */ @@ -292,7 +303,9 @@ type SigImageConfigTemplate struct { // SigImageConfig represents the SIG image configuration. type SigImageConfig struct { SigImageConfigTemplate - SubscriptionID string + SubscriptionID string + CachedFromManifest map[string]ProcessedManifest + CachedFromComponsents map[string]ProcessedComponents } // WithOptions converts a SigImageConfigTemplate to SigImageConfig instance via function opts. @@ -883,14 +896,38 @@ func withSubscription(subscriptionID string) SigImageConfigOpt { } } -var CachedK8sVersions []string +var CachedFromManifest = make(map[string]ProcessedManifest) type Manifest struct { + Containerd struct { + Edge string `json:"edge"` + Versions []string `json:"versions"` + Pinned map[string]string `json:"pinned"` + } `json:"containerd"` + Runc struct { + Versions []string `json:"versions"` + Pinned map[string]string `json:"pinned"` + Installed map[string]string `json:"installed"` + } `json:"runc"` + NvidiaContainerRuntime struct { + Versions []string `json:"versions"` + } `json:"nvidia-container-runtime"` + NvidiaDrivers struct { + Versions []string `json:"versions"` + } `json:"nvidia-drivers"` Kubernetes struct { Versions []string `json:"versions"` } `json:"kubernetes"` } +type ProcessedManifest struct { + Name string + Versions []string + Pinned map[string]string + Edge string + Installed map[string]string +} + func getCachedK8sVersionFromManifest(manifestFilePath string) { data, err := os.ReadFile(manifestFilePath) if err != nil { @@ -901,5 +938,91 @@ func getCachedK8sVersionFromManifest(manifestFilePath string) { if err = json.Unmarshal(data, &manifest); err != nil { panic(err) } - CachedK8sVersions = manifest.Kubernetes.Versions + + CachedFromManifest["kubernetes"] = ProcessedManifest{ + Name: "kubernetes", + Versions: manifest.Kubernetes.Versions, + } + CachedFromManifest["runc"] = ProcessedManifest{ + Name: "runc", + Versions: manifest.Runc.Versions, + Pinned: manifest.Runc.Pinned, + Installed: manifest.Runc.Installed, + } + CachedFromManifest["containerd"] = ProcessedManifest{ + Name: "containerd", + Versions: manifest.Containerd.Versions, + Pinned: manifest.Containerd.Pinned, + Edge: manifest.Containerd.Edge, + } + CachedFromManifest["nvidia-container-runtime"] = ProcessedManifest{ + Name: "nvidia-container-runtime", + Versions: manifest.NvidiaContainerRuntime.Versions, + } + CachedFromManifest["nvidia-drivers"] = ProcessedManifest{ + Name: "nvidia-drivers", + Versions: manifest.NvidiaDrivers.Versions, + } +} + +type Components struct { + ContainerImages []struct { + DownloadURL string `json:"downloadURL"` + Amd64OnlyVersions []string `json:"amd64OnlyVersions"` + MultiArchVersions []string `json:"multiArchVersions"` + PrefetchOptimizations []struct { + Version string `json:"version"` + Binaries []string `json:"binaries"` + } `json:"prefetchOptimizations"` + } `json:"ContainerImages"` +} +type PrefetchOptimizations struct { + Version string + Binaries []string +} + +type ProcessedComponents struct { + Name string + MultiArchVersions []string + Amd64OnlyVersions []string + PrefetchOptimizations PrefetchOptimizations +} + +var CachedFromComponsents = make(map[string]ProcessedComponents) + +func getCachedComponentsFromComponents(componentsFilePath string) { + data, err := os.ReadFile(componentsFilePath) + if err != nil { + panic(err) + } + var components Components + if err = json.Unmarshal(data, &components); err != nil { + panic(err) + } + + for _, image := range components.ContainerImages { + componentName := processDownloadURL(image.DownloadURL) + processed := ProcessedComponents{ + Name: componentName, + MultiArchVersions: image.MultiArchVersions, + Amd64OnlyVersions: image.Amd64OnlyVersions, + } + if len(image.PrefetchOptimizations) > 0 { + processed.PrefetchOptimizations = PrefetchOptimizations{ + Version: image.PrefetchOptimizations[0].Version, + Binaries: image.PrefetchOptimizations[0].Binaries, + } + } + CachedFromComponsents[componentName] = processed + } +} + +func processDownloadURL(downloadURL string) string { + // example URL "downloadURL": "mcr.microsoft.com/oss/kubernetes/autoscaler/addon-resizer:*", + // getting the data between the last / and the last : + parts := strings.Split(downloadURL, "/") + lastPart := parts[len(parts)-1] + component := strings.Split(lastPart, ":") + componentName := component[0] + return componentName } From 1ea70a3c3299de80f41825cd7e1bd2c87f4720ac Mon Sep 17 00:00:00 2001 From: Alison Burgess Date: Tue, 9 Apr 2024 16:01:40 -0700 Subject: [PATCH 14/15] move helper function to helper --- pkg/agent/datamodel/helper.go | 10 ++++++++++ pkg/agent/datamodel/sig_config.go | 10 ---------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pkg/agent/datamodel/helper.go b/pkg/agent/datamodel/helper.go index 19a833d6c17..c2b22ab8165 100644 --- a/pkg/agent/datamodel/helper.go +++ b/pkg/agent/datamodel/helper.go @@ -109,3 +109,13 @@ func trimEOF(data []byte) []byte { } return data } + +func processDownloadURL(downloadURL string) string { + // example URL "downloadURL": "mcr.microsoft.com/oss/kubernetes/autoscaler/addon-resizer:*", + // getting the data between the last / and the last : + parts := strings.Split(downloadURL, "/") + lastPart := parts[len(parts)-1] + component := strings.Split(lastPart, ":") + componentName := component[0] + return componentName +} diff --git a/pkg/agent/datamodel/sig_config.go b/pkg/agent/datamodel/sig_config.go index 5a27091e3d9..ef6d3800df8 100644 --- a/pkg/agent/datamodel/sig_config.go +++ b/pkg/agent/datamodel/sig_config.go @@ -1016,13 +1016,3 @@ func getCachedComponentsFromComponents(componentsFilePath string) { CachedFromComponsents[componentName] = processed } } - -func processDownloadURL(downloadURL string) string { - // example URL "downloadURL": "mcr.microsoft.com/oss/kubernetes/autoscaler/addon-resizer:*", - // getting the data between the last / and the last : - parts := strings.Split(downloadURL, "/") - lastPart := parts[len(parts)-1] - component := strings.Split(lastPart, ":") - componentName := component[0] - return componentName -} From 428fa6291f725892b01f8ec8f9e23e16e35e5ba7 Mon Sep 17 00:00:00 2001 From: Alison Burgess Date: Tue, 9 Apr 2024 16:12:31 -0700 Subject: [PATCH 15/15] linter --- pkg/agent/datamodel/helper_test.go | 5 ++--- pkg/agent/datamodel/sig_config.go | 11 +++++++---- pkg/agent/utils_test.go | 3 +-- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/pkg/agent/datamodel/helper_test.go b/pkg/agent/datamodel/helper_test.go index 9b0cdbfe735..b441d27fb1c 100644 --- a/pkg/agent/datamodel/helper_test.go +++ b/pkg/agent/datamodel/helper_test.go @@ -347,7 +347,6 @@ func TestIndentString(t *testing.T) { } } - func TestTrimEOF(t *testing.T) { tests := []struct { name string @@ -356,8 +355,8 @@ func TestTrimEOF(t *testing.T) { }{ { name: "Should remove #EOF at the end of a file", - input: []byte(`"versions":["1.26.6","1.26.10","1.26.12","1.27.3","1.27.7","1.27.9","1.28.1","1.28.3","1.28.5","1.29.0","1.29.2"]},"_template":{"fileName":"","downloadLocation":"","downloadURL":"","versions":[]}}` + "\n#EOF"), - expected: `"versions":["1.26.6","1.26.10","1.26.12","1.27.3","1.27.7","1.27.9","1.28.1","1.28.3","1.28.5","1.29.0","1.29.2"]},"_template":{"fileName":"","downloadLocation":"","downloadURL":"","versions":[]}}`, + input: []byte(`"versions":["1.26.6","1.26.10","1.26.12","1.27.3","1.27.7","1.27.9","1.28.1","1.28.3","1.28.5","1.29.0","1.29.2"]},"_template":{"fileName":"","downloadLocation":"","downloadURL":"","versions":[]}}` + "\n#EOF"), //nolint:lll + expected: `"versions":["1.26.6","1.26.10","1.26.12","1.27.3","1.27.7","1.27.9","1.28.1","1.28.3","1.28.5","1.29.0","1.29.2"]},"_template":{"fileName":"","downloadLocation":"","downloadURL":"","versions":[]}}`, //nolint:lll }, } diff --git a/pkg/agent/datamodel/sig_config.go b/pkg/agent/datamodel/sig_config.go index ef6d3800df8..872009503f6 100644 --- a/pkg/agent/datamodel/sig_config.go +++ b/pkg/agent/datamodel/sig_config.go @@ -15,6 +15,13 @@ const ( AzurePublicCloudSigSubscription string = "109a5e88-712a-48ae-9078-9ca8b3c81345" // AKS VHD ) +//nolint:gochecknoglobals +var ( + CachedFromComponsents = make(map[string]ProcessedComponents) + CachedFromManifest = make(map[string]ProcessedManifest) +) + +//nolint:gochecknoinits func init() { CacheManifest() CacheComponents() @@ -896,8 +903,6 @@ func withSubscription(subscriptionID string) SigImageConfigOpt { } } -var CachedFromManifest = make(map[string]ProcessedManifest) - type Manifest struct { Containerd struct { Edge string `json:"edge"` @@ -988,8 +993,6 @@ type ProcessedComponents struct { PrefetchOptimizations PrefetchOptimizations } -var CachedFromComponsents = make(map[string]ProcessedComponents) - func getCachedComponentsFromComponents(componentsFilePath string) { data, err := os.ReadFile(componentsFilePath) if err != nil { diff --git a/pkg/agent/utils_test.go b/pkg/agent/utils_test.go index 724e75a813f..832e7bace0a 100644 --- a/pkg/agent/utils_test.go +++ b/pkg/agent/utils_test.go @@ -725,5 +725,4 @@ var _ = Describe("Test removeComments", func() { result := removeComments(input) Expect(string(result)).To(Equal(expected)) }) - -}) \ No newline at end of file +})