[lxc-devel] [distrobuilder/master] managers: Add luet pms
geaaru on Github
lxc-bot at linuxcontainers.org
Sun Aug 9 08:36:25 UTC 2020
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 400 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200809/d247eeba/attachment.bin>
-------------- next part --------------
From 944814569f40e1b43a26e738a58fa54cf2b3cd0d Mon Sep 17 00:00:00 2001
From: Daniele Rondina <geaaru at sabayonlinux.org>
Date: Mon, 23 Dec 2019 17:21:28 +0100
Subject: [PATCH] managers: Add luet pms
Signed-off-by: Daniele Rondina <geaaru at sabayonlinux.org>
---
managers/luet.go | 85 ++++++++++++++++++++++++++++++++++++++++++++
managers/manager.go | 2 ++
shared/definition.go | 1 +
3 files changed, 88 insertions(+)
create mode 100644 managers/luet.go
diff --git a/managers/luet.go b/managers/luet.go
new file mode 100644
index 0000000..bda6c0f
--- /dev/null
+++ b/managers/luet.go
@@ -0,0 +1,85 @@
+package managers
+
+import (
+ "fmt"
+ "os"
+ "path/filepath"
+ "strings"
+
+ lxd "github.com/lxc/lxd/shared"
+
+ "github.com/lxc/distrobuilder/shared"
+)
+
+func luetRepoCaller(repo shared.DefinitionPackagesRepository) error {
+ var targetFile string
+
+ if repo.Name == "" {
+ return fmt.Errorf("Invalid repository name")
+ }
+
+ if repo.URL == "" {
+ return fmt.Errorf("Invalid repository url")
+ }
+
+ if strings.HasSuffix(repo.Name, ".yml") {
+ targetFile = filepath.Join("/etc/luet/repos.conf.d", repo.Name)
+ } else {
+ targetFile = filepath.Join("/etc/luet/repos.conf.d", repo.Name + ".yml")
+ }
+
+ if !lxd.PathExists(filepath.Dir(targetFile)) {
+ err := os.MkdirAll(filepath.Dir(targetFile), 0755)
+ if err != nil {
+ return err
+ }
+ }
+
+ f, err := os.OpenFile(targetFile, os.O_CREATE|os.O_WRONLY, 0644)
+ if err != nil {
+ return err
+ }
+ defer f.Close()
+
+ // NOTE: repo.URL is not an URL but the content of the file.
+ _, err = f.WriteString(repo.URL)
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
+
+// NewLuet create a new Manager instance
+func NewLuet() *Manager {
+ return &Manager{
+ commands: ManagerCommands{
+ clean: "luet",
+ install: "luet",
+ refresh: "luet",
+ remove: "luet",
+ update: "luet",
+ },
+ flags: ManagerFlags{
+ global: []string{},
+ clean: []string{
+ "cleanup",
+ },
+ install: []string{
+ "install",
+ },
+ refresh: []string{
+ "repo", "update",
+ },
+ remove: []string{
+ "uninstall",
+ },
+ update: []string{
+ "upgrade",
+ },
+ },
+ RepoHandler: func(repoAction shared.DefinitionPackagesRepository) error {
+ return luetRepoCaller(repoAction)
+ },
+ }
+}
diff --git a/managers/manager.go b/managers/manager.go
index 274ea72..675d2f3 100644
--- a/managers/manager.go
+++ b/managers/manager.go
@@ -58,6 +58,8 @@ func Get(name string) *Manager {
return NewYum()
case "equo":
return NewEquo()
+ case "luet":
+ return NewLuet()
case "zypper":
return NewZypper()
}
diff --git a/shared/definition.go b/shared/definition.go
index 7fd341c..5512cfe 100644
--- a/shared/definition.go
+++ b/shared/definition.go
@@ -354,6 +354,7 @@ func (d *Definition) Validate() error {
"equo",
"xbps",
"zypper",
+ "luet",
}
if !shared.StringInSlice(strings.TrimSpace(d.Packages.Manager), validManagers) {
return fmt.Errorf("packages.manager must be one of %v", validManagers)
More information about the lxc-devel
mailing list