hecate(vault): parse status JSON with kubectl preamble
This commit is contained in:
parent
58a7947223
commit
c2a3a8244d
@ -724,12 +724,18 @@ func parseVaultSealed(raw string) (bool, error) {
|
|||||||
if trimmed == "" {
|
if trimmed == "" {
|
||||||
return false, fmt.Errorf("empty vault status output")
|
return false, fmt.Errorf("empty vault status output")
|
||||||
}
|
}
|
||||||
|
start := strings.Index(trimmed, "{")
|
||||||
|
end := strings.LastIndex(trimmed, "}")
|
||||||
|
if start < 0 || end < 0 || end < start {
|
||||||
|
return false, fmt.Errorf("vault status payload missing JSON object")
|
||||||
|
}
|
||||||
|
payload := trimmed[start : end+1]
|
||||||
|
|
||||||
type vaultStatus struct {
|
type vaultStatus struct {
|
||||||
Sealed bool `json:"sealed"`
|
Sealed bool `json:"sealed"`
|
||||||
}
|
}
|
||||||
var st vaultStatus
|
var st vaultStatus
|
||||||
if err := json.Unmarshal([]byte(trimmed), &st); err != nil {
|
if err := json.Unmarshal([]byte(payload), &st); err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
return st.Sealed, nil
|
return st.Sealed, nil
|
||||||
|
|||||||
@ -25,3 +25,14 @@ func TestParseVaultSealedRejectsEmpty(t *testing.T) {
|
|||||||
t.Fatalf("expected parse error for empty status payload")
|
t.Fatalf("expected parse error for empty status payload")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestParseVaultSealedWithKubectlPreamble(t *testing.T) {
|
||||||
|
raw := "Defaulted container \"vault\" out of: vault, setup-config (init)\n{\"sealed\":true,\"initialized\":true}\n"
|
||||||
|
sealed, err := parseVaultSealed(raw)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("parse with preamble: %v", err)
|
||||||
|
}
|
||||||
|
if !sealed {
|
||||||
|
t.Fatalf("expected sealed=true from payload with preamble")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user