in metadata/metadata.go [230:330]
func (a *Attributes) UnmarshalJSON(b []byte) error {
var mkbool = func(value bool) *bool {
res := new(bool)
*res = value
return res
}
// Unmarshal to literal JSON types before doing anything else.
type inner struct {
CreatedBy string `json:"created-by"`
BlockProjectKeys string `json:"block-project-ssh-keys"`
Diagnostics string `json:"diagnostics"`
DisableAccountManager string `json:"disable-account-manager"`
DisableAddressManager string `json:"disable-address-manager"`
EnableDiagnostics string `json:"enable-diagnostics"`
EnableOSLogin string `json:"enable-oslogin"`
EnableWindowsSSH string `json:"enable-windows-ssh"`
EnableWSFC string `json:"enable-wsfc"`
OldSSHKeys string `json:"sshKeys"`
SSHKeys string `json:"ssh-keys"`
TwoFactor string `json:"enable-oslogin-2fa"`
SecurityKey string `json:"enable-oslogin-sk"`
RequireCerts string `json:"enable-oslogin-certificates"`
WindowsKeys WindowsKeys `json:"windows-keys"`
WSFCAddresses string `json:"wsfc-addrs"`
WSFCAgentPort string `json:"wsfc-agent-port"`
DisableTelemetry string `json:"disable-guest-telemetry"`
DisableHTTPSMdsSetup string `json:"disable-https-mds-setup"`
HTTPSMDSEnableNativeStore string `json:"enable-https-mds-native-cert-store"`
}
var temp inner
if err := json.Unmarshal(b, &temp); err != nil {
return err
}
a.Diagnostics = temp.Diagnostics
a.WSFCAddresses = temp.WSFCAddresses
a.WSFCAgentPort = temp.WSFCAgentPort
a.WindowsKeys = temp.WindowsKeys
a.CreatedBy = temp.CreatedBy
value, err := strconv.ParseBool(temp.DisableHTTPSMdsSetup)
if err == nil {
a.DisableHTTPSMdsSetup = mkbool(value)
}
value, err = strconv.ParseBool(temp.HTTPSMDSEnableNativeStore)
if err == nil {
a.HTTPSMDSEnableNativeStore = mkbool(value)
}
value, err = strconv.ParseBool(temp.BlockProjectKeys)
if err == nil {
a.BlockProjectKeys = value
}
value, err = strconv.ParseBool(temp.EnableDiagnostics)
if err == nil {
a.EnableDiagnostics = mkbool(value)
}
value, err = strconv.ParseBool(temp.DisableAccountManager)
if err == nil {
a.DisableAccountManager = mkbool(value)
}
value, err = strconv.ParseBool(temp.DisableAddressManager)
if err == nil {
a.DisableAddressManager = mkbool(value)
}
value, err = strconv.ParseBool(temp.EnableOSLogin)
if err == nil {
a.EnableOSLogin = mkbool(value)
}
value, err = strconv.ParseBool(temp.EnableWindowsSSH)
if err == nil {
a.EnableWindowsSSH = mkbool(value)
}
value, err = strconv.ParseBool(temp.EnableWSFC)
if err == nil {
a.EnableWSFC = mkbool(value)
}
value, err = strconv.ParseBool(temp.TwoFactor)
if err == nil {
a.TwoFactor = mkbool(value)
}
value, err = strconv.ParseBool(temp.SecurityKey)
if err == nil {
a.SecurityKey = mkbool(value)
}
value, err = strconv.ParseBool(temp.RequireCerts)
if err == nil {
a.RequireCerts = mkbool(value)
}
value, err = strconv.ParseBool(temp.DisableTelemetry)
if err == nil {
a.DisableTelemetry = value
}
// So SSHKeys will be nil instead of []string{}
if temp.SSHKeys != "" {
a.SSHKeys = strings.Split(temp.SSHKeys, "\n")
}
if temp.OldSSHKeys != "" {
a.BlockProjectKeys = true
a.SSHKeys = append(a.SSHKeys, strings.Split(temp.OldSSHKeys, "\n")...)
}
return nil
}