Move GetRedHatRelease() and GetHostDistroName() to common package
The `distro` package is now used for distro definitions supported by osbuild-composer, not for introspecting the Host system. Move `GetRedHatRelease()` and `GetHostDistroName()` functions to the `common` package.
This commit is contained in:
parent
804d4210df
commit
c7e5e3c9c2
7 changed files with 85 additions and 80 deletions
|
|
@ -10,7 +10,6 @@ import (
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
|
|
||||||
"github.com/osbuild/osbuild-composer/internal/common"
|
"github.com/osbuild/osbuild-composer/internal/common"
|
||||||
"github.com/osbuild/osbuild-composer/internal/distro"
|
|
||||||
"github.com/osbuild/osbuild-composer/internal/upload/koji"
|
"github.com/osbuild/osbuild-composer/internal/upload/koji"
|
||||||
"github.com/osbuild/osbuild-composer/internal/worker"
|
"github.com/osbuild/osbuild-composer/internal/worker"
|
||||||
"github.com/osbuild/osbuild-composer/internal/worker/clienterrors"
|
"github.com/osbuild/osbuild-composer/internal/worker/clienterrors"
|
||||||
|
|
@ -101,7 +100,7 @@ func (impl *OSBuildKojiJobImpl) Run(job worker.Job) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
result.Arch = common.CurrentArch()
|
result.Arch = common.CurrentArch()
|
||||||
result.HostOS, err = distro.GetRedHatRelease()
|
result.HostOS, err = common.GetRedHatRelease()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,7 @@ func WithBootedQemuImage(image string, ns NetNS, f func() error) error {
|
||||||
|
|
||||||
var qemuCmd *exec.Cmd
|
var qemuCmd *exec.Cmd
|
||||||
if common.CurrentArch() == "x86_64" {
|
if common.CurrentArch() == "x86_64" {
|
||||||
hostDistroName, _, _, err := distro.GetHostDistroName()
|
hostDistroName, _, _, err := common.GetHostDistroName()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("cannot determing the current distro: %v", err)
|
return fmt.Errorf("cannot determing the current distro: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
79
internal/common/distro.go
Normal file
79
internal/common/distro.go
Normal file
|
|
@ -0,0 +1,79 @@
|
||||||
|
package common
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetHostDistroName() (string, bool, bool, error) {
|
||||||
|
f, err := os.Open("/etc/os-release")
|
||||||
|
if err != nil {
|
||||||
|
return "", false, false, err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
osrelease, err := readOSRelease(f)
|
||||||
|
if err != nil {
|
||||||
|
return "", false, false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
isStream := osrelease["NAME"] == "CentOS Stream"
|
||||||
|
|
||||||
|
// NOTE: We only consider major releases up until rhel 8.4
|
||||||
|
version := strings.Split(osrelease["VERSION_ID"], ".")
|
||||||
|
name := osrelease["ID"] + "-" + version[0]
|
||||||
|
if osrelease["ID"] == "rhel" && ((version[0] == "8" && version[1] >= "4") || version[0] == "9") {
|
||||||
|
name = name + version[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: We should probably index these things by the full CPE
|
||||||
|
beta := strings.Contains(osrelease["CPE_NAME"], "beta")
|
||||||
|
return name, beta, isStream, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRedHatRelease returns the content of /etc/redhat-release
|
||||||
|
// without the trailing new-line.
|
||||||
|
func GetRedHatRelease() (string, error) {
|
||||||
|
raw, err := ioutil.ReadFile("/etc/redhat-release")
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("cannot read /etc/redhat-release: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
//Remove the trailing new-line.
|
||||||
|
redHatRelease := strings.TrimSpace(string(raw))
|
||||||
|
|
||||||
|
return redHatRelease, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func readOSRelease(r io.Reader) (map[string]string, error) {
|
||||||
|
osrelease := make(map[string]string)
|
||||||
|
scanner := bufio.NewScanner(r)
|
||||||
|
for scanner.Scan() {
|
||||||
|
line := strings.TrimSpace(scanner.Text())
|
||||||
|
if len(line) == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
parts := strings.SplitN(line, "=", 2)
|
||||||
|
if len(parts) != 2 {
|
||||||
|
return nil, errors.New("readOSRelease: invalid input")
|
||||||
|
}
|
||||||
|
|
||||||
|
key := strings.TrimSpace(parts[0])
|
||||||
|
value := strings.TrimSpace(parts[1])
|
||||||
|
if value[0] == '"' {
|
||||||
|
if len(value) < 2 || value[len(value)-1] != '"' {
|
||||||
|
return nil, errors.New("readOSRelease: invalid input")
|
||||||
|
}
|
||||||
|
value = value[1 : len(value)-1]
|
||||||
|
}
|
||||||
|
|
||||||
|
osrelease[key] = value
|
||||||
|
}
|
||||||
|
|
||||||
|
return osrelease, nil
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package distro
|
package common
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
@ -1,14 +1,8 @@
|
||||||
package distro
|
package distro
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/osbuild/osbuild-composer/internal/blueprint"
|
"github.com/osbuild/osbuild-composer/internal/blueprint"
|
||||||
"github.com/osbuild/osbuild-composer/internal/disk"
|
"github.com/osbuild/osbuild-composer/internal/disk"
|
||||||
|
|
@ -186,74 +180,6 @@ func (m Manifest) Version() (string, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetHostDistroName() (string, bool, bool, error) {
|
|
||||||
f, err := os.Open("/etc/os-release")
|
|
||||||
if err != nil {
|
|
||||||
return "", false, false, err
|
|
||||||
}
|
|
||||||
defer f.Close()
|
|
||||||
osrelease, err := readOSRelease(f)
|
|
||||||
if err != nil {
|
|
||||||
return "", false, false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
isStream := osrelease["NAME"] == "CentOS Stream"
|
|
||||||
|
|
||||||
// NOTE: We only consider major releases up until rhel 8.4
|
|
||||||
version := strings.Split(osrelease["VERSION_ID"], ".")
|
|
||||||
name := osrelease["ID"] + "-" + version[0]
|
|
||||||
if osrelease["ID"] == "rhel" && ((version[0] == "8" && version[1] >= "4") || version[0] == "9") {
|
|
||||||
name = name + version[1]
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: We should probably index these things by the full CPE
|
|
||||||
beta := strings.Contains(osrelease["CPE_NAME"], "beta")
|
|
||||||
return name, beta, isStream, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetRedHatRelease returns the content of /etc/redhat-release
|
|
||||||
// without the trailing new-line.
|
|
||||||
func GetRedHatRelease() (string, error) {
|
|
||||||
raw, err := ioutil.ReadFile("/etc/redhat-release")
|
|
||||||
if err != nil {
|
|
||||||
return "", fmt.Errorf("cannot read /etc/redhat-release: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
//Remove the trailing new-line.
|
|
||||||
redHatRelease := strings.TrimSpace(string(raw))
|
|
||||||
|
|
||||||
return redHatRelease, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func readOSRelease(r io.Reader) (map[string]string, error) {
|
|
||||||
osrelease := make(map[string]string)
|
|
||||||
scanner := bufio.NewScanner(r)
|
|
||||||
for scanner.Scan() {
|
|
||||||
line := strings.TrimSpace(scanner.Text())
|
|
||||||
if len(line) == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
parts := strings.SplitN(line, "=", 2)
|
|
||||||
if len(parts) != 2 {
|
|
||||||
return nil, errors.New("readOSRelease: invalid input")
|
|
||||||
}
|
|
||||||
|
|
||||||
key := strings.TrimSpace(parts[0])
|
|
||||||
value := strings.TrimSpace(parts[1])
|
|
||||||
if value[0] == '"' {
|
|
||||||
if len(value) < 2 || value[len(value)-1] != '"' {
|
|
||||||
return nil, errors.New("readOSRelease: invalid input")
|
|
||||||
}
|
|
||||||
value = value[1 : len(value)-1]
|
|
||||||
}
|
|
||||||
|
|
||||||
osrelease[key] = value
|
|
||||||
}
|
|
||||||
|
|
||||||
return osrelease, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fallbacks: When a new method is added to an interface to provide to provide
|
// Fallbacks: When a new method is added to an interface to provide to provide
|
||||||
// information that isn't available for older implementations, the older
|
// information that isn't available for older implementations, the older
|
||||||
// methods should return a fallback/default value by calling the appropriate
|
// methods should return a fallback/default value by calling the appropriate
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/osbuild/osbuild-composer/internal/common"
|
||||||
"github.com/osbuild/osbuild-composer/internal/distro"
|
"github.com/osbuild/osbuild-composer/internal/distro"
|
||||||
"github.com/osbuild/osbuild-composer/internal/distro/fedora"
|
"github.com/osbuild/osbuild-composer/internal/distro/fedora"
|
||||||
"github.com/osbuild/osbuild-composer/internal/distro/rhel8"
|
"github.com/osbuild/osbuild-composer/internal/distro/rhel8"
|
||||||
|
|
@ -69,7 +70,7 @@ func NewDefault() *Registry {
|
||||||
// If there was an error, then the hostDistroName will be an empty string
|
// If there was an error, then the hostDistroName will be an empty string
|
||||||
// and as a result, the hostDistro will have a nil value when calling New().
|
// and as a result, the hostDistro will have a nil value when calling New().
|
||||||
// Getting the host distro later using FromHost() will return nil as well.
|
// Getting the host distro later using FromHost() will return nil as well.
|
||||||
hostDistroName, hostDistroIsBeta, hostDistroIsStream, _ := distro.GetHostDistroName()
|
hostDistroName, hostDistroIsBeta, hostDistroIsStream, _ := common.GetHostDistroName()
|
||||||
|
|
||||||
for _, supportedDistro := range supportedDistros {
|
for _, supportedDistro := range supportedDistros {
|
||||||
distro := supportedDistro.defaultDistro()
|
distro := supportedDistro.defaultDistro()
|
||||||
|
|
|
||||||
|
|
@ -151,7 +151,7 @@ func New(repoPaths []string, stateDir string, solver *dnfjson.BaseSolver, dr *di
|
||||||
logger = log.New(os.Stdout, "", 0)
|
logger = log.New(os.Stdout, "", 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
hostDistroName, _, _, err := distro.GetHostDistroName()
|
hostDistroName, _, _, err := common.GetHostDistroName()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to read host distro information")
|
return nil, fmt.Errorf("failed to read host distro information")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue