in pkg/seata/synchronizers.go [37:96]
func changeCluster(s *seatav1alpha1.SeataServer, i int32, username string, password string) error {
client := http.Client{}
host := fmt.Sprintf("%s-%d.%s.%s.svc.cluster.local:%d", s.Name, i, s.Spec.ServiceName, s.Namespace, s.Spec.Ports.ConsolePort)
values := map[string]string{"username": username, "password": password}
jsonValue, _ := json.Marshal(values)
loginUrl := fmt.Sprintf("http://%s/api/v1/auth/login", host)
rsp, err := client.Post(loginUrl, "application/json", bytes.NewBuffer(jsonValue))
if err != nil {
return err
}
defer rsp.Body.Close()
d := &rspData{}
var tokenStr string
if rsp.StatusCode != http.StatusOK {
return errors.New("login failed")
}
body, err := io.ReadAll(rsp.Body)
if err != nil {
return err
}
if err = json.Unmarshal(body, &d); err != nil {
return err
}
if !d.Success {
return errors.New(d.Message)
}
tokenStr = d.Data
targetUrl := fmt.Sprintf("http://%s/metadata/v1/changeCluster?raftClusterStr=%s",
host, url.QueryEscape(utils.ConcatRaftServerAddress(s)))
req, _ := http.NewRequest("POST", targetUrl, nil)
req.Header.Set("Authorization", tokenStr)
rsp, err = client.Do(req)
if err != nil {
return err
}
defer rsp.Body.Close()
d = &rspData{}
if rsp.StatusCode != http.StatusOK {
return errors.New("failed to changeCluster")
}
body, err = io.ReadAll(rsp.Body)
if err != nil {
return err
}
if err = json.Unmarshal(body, &d); err != nil {
return err
}
if !d.Success {
return errors.New(d.Message)
}
return nil
}