func changeCluster()

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
}