forked from DataDog/nikos
-
Notifications
You must be signed in to change notification settings - Fork 0
/
amazonlinux.go
52 lines (42 loc) · 1.12 KB
/
amazonlinux.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package rpm
import (
"bufio"
"fmt"
"os"
"regexp"
"github.com/jeffweiss/nikos/rpm/dnfv2"
"github.com/jeffweiss/nikos/types"
)
func NewAmazonLinux2022Backend(target *types.Target, reposDir string, logger types.Logger) (*RedHatBackend, error) {
releaseVer, err := extractReleaseVersionFromImageID()
if err != nil {
return nil, fmt.Errorf("failed to extract release version: %w", err)
}
b, err := dnfv2.NewBackend(releaseVer, reposDir)
if err != nil {
return nil, err
}
return &RedHatBackend{
target: target,
logger: logger,
dnfBackend: b,
}, nil
}
var imageFilePattern = regexp.MustCompile(`image_file="al2022-\w+-(2022.0.\d{8}).*"`)
func extractReleaseVersionFromImageID() (string, error) {
imageIDPath := types.HostEtc("image-id")
f, err := os.Open(imageIDPath)
if err != nil {
return "", err
}
liner := bufio.NewScanner(f)
for liner.Scan() {
if submatches := imageFilePattern.FindStringSubmatch(liner.Text()); submatches != nil {
return submatches[1], nil
}
}
if err := liner.Err(); err != nil {
return "", err
}
return "", fmt.Errorf("image_file entry not found in %s", imageIDPath)
}