KubeOS/0009-KubeOS-fix-updating-key-to-kv.patch
Yuhang Wei 1d36b74685 KubeOS:sync code from source master branch
Signed-off-by: Yuhang Wei <weiyuhang3@huawei.com>
2024-02-26 09:54:27 +08:00

152 lines
7.0 KiB
Diff

From dcfb6e0397e649631ec42dcf51c3e98e914f8269 Mon Sep 17 00:00:00 2001
From: Yuhang Wei <weiyuhang3@huawei.com>
Date: Fri, 11 Aug 2023 19:33:56 +0800
Subject: [PATCH 09/17] KubeOS: fix updating key to kv
when configuring kernel boot parameters, it should be able to update
key to kv
Signed-off-by: Yuhang Wei <weiyuhang3@huawei.com>
---
cmd/agent/server/config.go | 37 ++++++++++++++++++++++-----------
cmd/agent/server/config_test.go | 15 +++++++------
2 files changed, 34 insertions(+), 18 deletions(-)
diff --git a/cmd/agent/server/config.go b/cmd/agent/server/config.go
index c474f59..20af267 100644
--- a/cmd/agent/server/config.go
+++ b/cmd/agent/server/config.go
@@ -57,7 +57,7 @@ func (k KernelSysctl) SetConfig(config *agent.SysConfig) error {
}
logrus.Infof("Configured kernel.sysctl %s=%s", key, keyInfo.Value)
} else {
- logrus.Warnf("Failed to parse kernel.sysctl key %s value %s operation %s", key, keyInfo.Value, keyInfo.Operation)
+ logrus.Warnf("Failed to parse kernel.sysctl key: %s value: %s operation: %s", key, keyInfo.Value, keyInfo.Operation)
}
}
return nil
@@ -317,7 +317,7 @@ func createConfigPath(configPath string) error {
if err != nil {
return err
}
- defer f.Close()
+ f.Close()
return nil
}
@@ -335,11 +335,16 @@ func getGrubCfgPath() string {
// handleDeleteKey deletes key if oldValue==newValue and returns "" string. Otherwier, it returns key=oldValue
func handleDeleteKey(config []string, configInfo *agent.KeyInfo) string {
- if len(config) == onlyKey {
- logrus.Infoln("delete configuration ", config[0])
+ key := config[0]
+ if len(config) == onlyKey && configInfo.Value == "" {
+ logrus.Infoln("delete configuration ", key)
return ""
+ } else if len(config) == onlyKey && configInfo.Value != "" {
+ logrus.Warnf("Failed to delete key %s with inconsistent values "+
+ "nil and %s", key, configInfo.Value)
+ return key
}
- key, oldValue := config[0], config[1]
+ oldValue := config[1]
if oldValue != configInfo.Value {
logrus.Warnf("Failed to delete key %s with inconsistent values "+
"%s and %s", key, oldValue, configInfo.Value)
@@ -351,22 +356,30 @@ func handleDeleteKey(config []string, configInfo *agent.KeyInfo) string {
// handleUpdateKey updates key if key is found, otherwise it returns old config.
func handleUpdateKey(config []string, configInfo *agent.KeyInfo, isFound bool) string {
- if len(config) == onlyKey {
- return config[0]
+ key := config[0]
+ if !isFound && len(config) == onlyKey {
+ return key
}
- key, oldValue := config[0], config[1]
- if !isFound {
- return key + "=" + oldValue
+ if !isFound && len(config) == kvPair {
+ return key + "=" + config[1]
}
if configInfo.Operation != "" {
logrus.Warnf("Unknown operation %s, updating key %s with value %s by default",
configInfo.Operation, key, configInfo.Value)
}
+ if len(config) == onlyKey && configInfo.Value == "" {
+ return key
+ }
+ newValue := strings.TrimSpace(configInfo.Value)
+ if len(config) == onlyKey && configInfo.Value != "" {
+ logrus.Infof("update configuration %s=%s", key, newValue)
+ return key + "=" + newValue
+ }
+ oldValue := config[1]
if configInfo.Value == "" {
logrus.Warnf("Failed to update key %s with null value", key)
return key + "=" + oldValue
}
- newValue := strings.TrimSpace(configInfo.Value)
logrus.Infof("update configuration %s=%s", key, newValue)
return key + "=" + newValue
}
@@ -388,7 +401,7 @@ func handleAddKey(m map[string]*agent.KeyInfo, isOnlyKeyValid bool) []string {
}
k, v := strings.TrimSpace(key), strings.TrimSpace(keyInfo.Value)
if keyInfo.Value == "" && isOnlyKeyValid {
- logrus.Infoln("add configuration ", k)
+ logrus.Infoln("add configuration", k)
configs = append(configs, k)
} else if keyInfo.Value == "" {
logrus.Warnf("Failed to add key %s with null value", k)
diff --git a/cmd/agent/server/config_test.go b/cmd/agent/server/config_test.go
index 6424885..08daf99 100644
--- a/cmd/agent/server/config_test.go
+++ b/cmd/agent/server/config_test.go
@@ -262,10 +262,11 @@ menuentry 'B' --class KubeOS --class gnu-linux --class gnu --class os --unrestri
"": {Value: "test"}, // warning, skip, failed to add kv with empty key
"selinux": {Value: "1", Operation: "delete"}, // failed to delete inconsistent kv
"acpi": {Value: "off", Operation: "delete"}, // failed to delete inexistent kv
+ "ro": {Value: "1"}, // update key to kv
},
},
},
- pattern: `(?m)^\s+linux\s+\/boot\/vmlinuz\s+root=UUID=[0-1]\s+ro\s+rootfstype=ext4\s+nomodeset\s+oops=panic\s+softlockup_panic=0\s+nmi_watchdog=1\s+rd\.shell=0\s+selinux=0\s+crashkernel=256M\s+panic=5\s+(debug\spci=nomis|pci=nomis\sdebug)$`,
+ pattern: `(?m)^\s+linux\s+\/boot\/vmlinuz\s+root=UUID=[0-1]\s+ro=1\s+rootfstype=ext4\s+nomodeset\s+oops=panic\s+softlockup_panic=0\s+nmi_watchdog=1\s+rd\.shell=0\s+selinux=0\s+crashkernel=256M\s+panic=5\s+(debug\spci=nomis|pci=nomis\sdebug)$`,
wantErr: false,
},
{
@@ -274,14 +275,15 @@ menuentry 'B' --class KubeOS --class gnu-linux --class gnu --class os --unrestri
args: args{
config: &agent.SysConfig{
Contents: map[string]*agent.KeyInfo{
- "debug": {Operation: "delete"}, // delete key
- "pci": {Value: "nomis", Operation: "delete"}, // delete kv
- "debugpat": {Value: "", Operation: "add"}, // passed key, operation is invalid, default to add key
- "audit": {Value: "1", Operation: "add"}, // passed kv, key is inexistent, operation is invalid, default to add kv
+ "debug": {Operation: "delete"}, // delete key
+ "pci": {Value: "nomis", Operation: "delete"}, // delete kv
+ "debugpat": {Value: "", Operation: "add"}, // passed key, operation is invalid, default to add key
+ "audit": {Value: "1", Operation: "add"}, // passed kv, key is inexistent, operation is invalid, default to add kv
+ "nomodeset": {Value: "1", Operation: "delete"}, // delete key with inconsistent value
},
},
},
- pattern: `(?m)^\s+linux\s+\/boot\/vmlinuz\s+root=UUID=[0-1]\s+ro\s+rootfstype=ext4\s+nomodeset\s+oops=panic\s+softlockup_panic=0\s+nmi_watchdog=1\s+rd\.shell=0\s+selinux=0\s+crashkernel=256M\s+panic=5\s+(debugpat\saudit=1|audit=1\sdebugpat)$`,
+ pattern: `(?m)^\s+linux\s+\/boot\/vmlinuz\s+root=UUID=[0-1]\s+ro=1\s+rootfstype=ext4\s+nomodeset\s+oops=panic\s+softlockup_panic=0\s+nmi_watchdog=1\s+rd\.shell=0\s+selinux=0\s+crashkernel=256M\s+panic=5\s+(debugpat\saudit=1|audit=1\sdebugpat)$`,
wantErr: false,
},
{
@@ -300,6 +302,7 @@ menuentry 'B' --class KubeOS --class gnu-linux --class gnu --class os --unrestri
"": {Value: "test"}, // warning, skip, failed to add kv with empty key
"selinux": {Value: "1", Operation: "delete"},
"acpi": {Value: "off", Operation: "delete"},
+ "ro": {Value: ""},
},
},
},
--
2.39.0