152 lines
7.0 KiB
Diff
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
|
|
|