62 lines
1002 B
Go
62 lines
1002 B
Go
package osimage
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
"sync"
|
|
|
|
monov1alpha1 "example.com/monok8s/pkg/apis/monok8s/v1alpha1"
|
|
)
|
|
|
|
var (
|
|
bootStateOnce sync.Once
|
|
bootState map[string]string
|
|
bootStateErr error
|
|
)
|
|
|
|
func PercentOf(done, total int64) int64 {
|
|
if total <= 0 {
|
|
return 0
|
|
}
|
|
p := (done * 100) / total
|
|
if p < 0 {
|
|
return 0
|
|
}
|
|
if p > 100 {
|
|
return 100
|
|
}
|
|
return p
|
|
}
|
|
|
|
func ReadBootState() (map[string]string, error) {
|
|
bootStateOnce.Do(func() {
|
|
data, err := os.ReadFile(monov1alpha1.BootStateFile)
|
|
if err != nil {
|
|
bootStateErr = err
|
|
return
|
|
}
|
|
|
|
out := make(map[string]string)
|
|
|
|
for _, line := range strings.Split(string(data), "\n") {
|
|
line = strings.TrimSpace(line)
|
|
if line == "" || strings.HasPrefix(line, "#") {
|
|
continue
|
|
}
|
|
|
|
k, v, ok := strings.Cut(line, "=")
|
|
if !ok {
|
|
bootStateErr = fmt.Errorf("invalid line: %q", line)
|
|
return
|
|
}
|
|
|
|
out[strings.TrimSpace(k)] = strings.TrimSpace(v)
|
|
}
|
|
|
|
bootState = out
|
|
})
|
|
|
|
return bootState, bootStateErr
|
|
}
|