Proper unmarshal.

This commit is contained in:
Jan Mußler 2021-02-22 23:34:11 +01:00
parent 6893d0f874
commit 620521d2a8
1 changed files with 9 additions and 22 deletions

View File

@ -3,7 +3,6 @@ package patroni
import ( import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"net" "net"
@ -132,12 +131,18 @@ func (p *Patroni) SetPostgresParameters(server *v1.Pod, parameters map[string]st
return p.httpPostOrPatch(http.MethodPatch, apiURLString+configPath, buf) return p.httpPostOrPatch(http.MethodPatch, apiURLString+configPath, buf)
} }
// MemberDataPatroni child element
type MemberDataPatroni struct {
Version string
Scope string
}
// MemberData Patroni member data from Patroni API // MemberData Patroni member data from Patroni API
type MemberData struct { type MemberData struct {
State string State string
Role string Role string
ServerVersion int ServerVersion int
Scope string Patroni MemberDataPatroni
PatroniVersion string PatroniVersion string
} }
@ -159,29 +164,11 @@ func (p *Patroni) GetMemberData(server *v1.Pod) (MemberData, error) {
return MemberData{}, fmt.Errorf("could not read response: %v", err) return MemberData{}, fmt.Errorf("could not read response: %v", err)
} }
data := make(map[string]interface{}) data := MemberData{}
err = json.Unmarshal(body, &data) err = json.Unmarshal(body, &data)
if err != nil { if err != nil {
return MemberData{}, err return MemberData{}, err
} }
memberData := MemberData{} return data, nil
r := false
ok := true
memberData.State, r = data["state"].(string)
ok = ok && r
memberData.ServerVersion, r = data["server_version"].(int)
ok = ok && r
memberData.Role, r = data["role"].(string)
ok = ok && r
memberData.Role, r = data["scope"].(string)
ok = ok && r
if !ok {
return MemberData{}, errors.New("Patroni member data could not be read")
}
return memberData, nil
} }