From 8e065af93ef43e1eb040aaef8af03bfb400a04dc Mon Sep 17 00:00:00 2001 From: Gabriel Adrian Samfira Date: Fri, 12 Jan 2024 00:12:39 +0000 Subject: [PATCH] Enable Windows userdata This change enables Windows pools in the LXD provider. Signed-off-by: Gabriel Adrian Samfira --- go.mod | 2 +- go.sum | 6 ++---- provider/lxd.go | 48 ++++++------------------------------------------ 3 files changed, 9 insertions(+), 47 deletions(-) diff --git a/go.mod b/go.mod index 8a551ce..c18cb94 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.21.5 require ( github.com/BurntSushi/toml v1.2.1 github.com/canonical/lxd v0.0.0-20231214113525-e676fc63c50a - github.com/cloudbase/garm-provider-common v0.1.1 + github.com/cloudbase/garm-provider-common v0.1.2-0.20240111235646-a9efac12b060 github.com/juju/clock v1.0.3 github.com/juju/retry v1.0.0 github.com/pkg/errors v0.9.1 diff --git a/go.sum b/go.sum index 3de2ac3..98e1c22 100644 --- a/go.sum +++ b/go.sum @@ -6,10 +6,8 @@ github.com/canonical/lxd v0.0.0-20231214113525-e676fc63c50a h1:Tfo/MzXK5GeG7gzSH github.com/canonical/lxd v0.0.0-20231214113525-e676fc63c50a/go.mod h1:UxfHGKFoRjgu1NUA9EFiR++dKvyAiT0h9HT0ffMlzjc= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudbase/garm-provider-common v0.1.0 h1:gc2n8nsLjt7G3InAfqZ+75iZjSIUkIx86d6/DFA2+jc= -github.com/cloudbase/garm-provider-common v0.1.0/go.mod h1:igxJRT3OlykERYc6ssdRQXcb+BCaeSfnucg6I0OSoDc= -github.com/cloudbase/garm-provider-common v0.1.1 h1:9SbkEevpycI/P3J7jEmjJf6VzdrxAIHkLppnjqaKAWU= -github.com/cloudbase/garm-provider-common v0.1.1/go.mod h1:igxJRT3OlykERYc6ssdRQXcb+BCaeSfnucg6I0OSoDc= +github.com/cloudbase/garm-provider-common v0.1.2-0.20240111235646-a9efac12b060 h1:R1x91MisDJq61uioMULPycnQo6P4HWFyR3Pa9ePz8c4= +github.com/cloudbase/garm-provider-common v0.1.2-0.20240111235646-a9efac12b060/go.mod h1:igxJRT3OlykERYc6ssdRQXcb+BCaeSfnucg6I0OSoDc= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/provider/lxd.go b/provider/lxd.go index d375a05..465eae3 100644 --- a/provider/lxd.go +++ b/provider/lxd.go @@ -21,6 +21,7 @@ import ( "github.com/cloudbase/garm-provider-common/cloudconfig" commonParams "github.com/cloudbase/garm-provider-common/params" + "github.com/cloudbase/garm-provider-common/util" ) var _ execution.ExternalProvider = &LXD{} @@ -43,19 +44,6 @@ const ( ) var ( - // lxdToGithubArchMap translates LXD architectures to Github tools architectures. - // TODO: move this in a separate package. This will most likely be used - // by any other provider. - lxdToGithubArchMap map[string]string = map[string]string{ - "x86_64": "x64", - "amd64": "x64", - "armv7l": "arm", - "aarch64": "arm64", - "x64": "x64", - "arm": "arm", - "arm64": "arm64", - } - configToLXDArchMap map[commonParams.OSArch]string = map[commonParams.OSArch]string{ commonParams.Amd64: "x86_64", commonParams.Arm64: "aarch64", @@ -162,34 +150,6 @@ func (l *LXD) getProfiles(ctx context.Context, flavor string) ([]string, error) return ret, nil } -func (l *LXD) getTools(tools []commonParams.RunnerApplicationDownload, osType commonParams.OSType, architecture string) (commonParams.RunnerApplicationDownload, error) { - // Validate image OS. Linux only for now. - switch osType { - case commonParams.Linux: - default: - return commonParams.RunnerApplicationDownload{}, fmt.Errorf("this provider does not support OS type: %s", osType) - } - - // Find tools for OS/Arch. - for _, tool := range tools { - if tool.GetOS() == "" || tool.GetArchitecture() == "" { - continue - } - - // fmt.Println(*tool.Architecture, *tool.OS) - // fmt.Printf("image arch: %s --> osType: %s\n", image.Architecture, string(osType)) - if tool.GetArchitecture() == architecture && tool.GetOS() == string(osType) { - return tool, nil - } - - arch, ok := lxdToGithubArchMap[architecture] - if ok && arch == tool.GetArchitecture() && tool.GetOS() == string(osType) { - return tool, nil - } - } - return commonParams.RunnerApplicationDownload{}, fmt.Errorf("failed to find tools for OS %s and arch %s", osType, architecture) -} - // sadly, the security.secureboot flag is a string encoded boolean. func (l *LXD) secureBootEnabled() string { if l.cfg.SecureBoot { @@ -218,7 +178,7 @@ func (l *LXD) getCreateInstanceArgs(ctx context.Context, bootstrapParams commonP return api.InstancesPost{}, errors.Wrap(err, "getting instance source") } - tools, err := l.getTools(bootstrapParams.Tools, bootstrapParams.OSType, arch) + tools, err := util.GetTools(bootstrapParams.OSType, bootstrapParams.OSArch, bootstrapParams.Tools) if err != nil { return api.InstancesPost{}, errors.Wrap(err, "getting tools") } @@ -231,6 +191,10 @@ func (l *LXD) getCreateInstanceArgs(ctx context.Context, bootstrapParams commonP return api.InstancesPost{}, errors.Wrap(err, "generating cloud-config") } + if bootstrapParams.OSType == commonParams.Windows { + cloudCfg = fmt.Sprintf("#ps1_sysnative\n%s", cloudCfg) + } + configMap := map[string]string{ "user.user-data": cloudCfg, osTypeKeyName: string(bootstrapParams.OSType),