osbuild-composer/SOURCES/1007-Support-using-repository-definitions-with-OCI-variab.patch
2025-05-23 16:21:14 +03:00

85 lines
3.0 KiB
Diff

From c708703503955e78cabbdbca3c02feb432c823ff Mon Sep 17 00:00:00 2001
From: Darren Archibald <darren.archibald@oracle.com>
Date: Wed, 29 Jan 2025 05:09:44 -0800
Subject: [PATCH 7/9] Support using repository definitions with OCI variables.
We can use repository definitions in a format, more similar to generic Oracle repositories
with DNF vars.
Essentially in osbuild-composer log when parsing repos, we at first parse variables, then process
original repo file in memory and replace vars with their values and write modified repo to buffer.
After that we use buffer to actually populate repository data.
If we have failed to read ocidomain, which is the key variable, we fallback to values to generic public repos.
Signed-off-by: Alex Burmashev <alexander.burmashev@oracle.com>
Signed-off-by: Josue David Hernandez Gutierrez <josue.d.hernandez@oracle.com>
---
.../osbuild/images/pkg/rpmmd/repository.go | 42 ++++++++++++++++++-
1 file changed, 41 insertions(+), 1 deletion(-)
diff --git a/vendor/github.com/osbuild/images/pkg/rpmmd/repository.go b/vendor/github.com/osbuild/images/pkg/rpmmd/repository.go
index e897a0a..89af861 100644
--- a/vendor/github.com/osbuild/images/pkg/rpmmd/repository.go
+++ b/vendor/github.com/osbuild/images/pkg/rpmmd/repository.go
@@ -10,6 +10,8 @@ import (
"strings"
"time"
+ "bufio"
+ "bytes"
"github.com/gobwas/glob"
)
@@ -239,9 +241,47 @@ func LoadRepositoriesFromFile(filename string) (map[string][]RepoConfig, error)
func LoadRepositoriesFromReader(r io.Reader) (map[string][]RepoConfig, error) {
var reposMap map[string][]repository
repoConfigs := make(map[string][]RepoConfig)
+ var ocidomain, ociregion, region []byte
- err := json.NewDecoder(r).Decode(&reposMap)
+ var OCIlines []string
+ ocidomain = []byte("oracle.com")
+ ociregion = []byte("")
+ region = []byte("")
+
+ ociregion, err := os.ReadFile("/etc/dnf/vars/ociregion")
+ if err != nil {
+ fmt.Println("Error while reading file: /etc/dnf/vars/ociregion")
+ }
+ region, err = os.ReadFile("/etc/dnf/vars/region")
+ if err != nil {
+ fmt.Println("Error while reading file: /etc/dnf/vars/region")
+ }
+ ocidomain, err = os.ReadFile("/etc/dnf/vars/ocidomain")
+ if err != nil {
+ fmt.Println("Error while reading file: /etc/dnf/vars/ocidomain")
+ }
+ if ocidomain == nil {
+ ocidomain = []byte("oracle.com")
+ ociregion = []byte("")
+ }
+ scanner := bufio.NewScanner(r)
+ OCIreplacer := strings.NewReplacer("$ocidomain", strings.TrimSuffix(string(ocidomain), "\n"), "$ociregion", strings.TrimSuffix(string(ociregion), "\n"), "$region", strings.TrimSuffix(string(region), "\n"))
+ for scanner.Scan() {
+ line := scanner.Text()
+ OCIline := OCIreplacer.Replace(line)
+ OCIlines = append(OCIlines, OCIline)
+ continue
+ }
+ if err := scanner.Err(); err != nil {
+ panic(err)
+ }
+ fOCI := strings.Join(OCIlines, "\n")
+
+ buf := new(bytes.Buffer)
+ fmt.Fprint(buf, fOCI)
+ err = json.NewDecoder(buf).Decode(&reposMap)
if err != nil {
+ fmt.Println("Error parsing the repo")
return nil, err
}
--
2.43.5