func scaleDownInstance()

in infrastructure/alloydb-scale-function/go-sample/alloydbscale.go [167:230]


func scaleDownInstance(ctx context.Context, project, location, cluster, instance string) error {
	// Scale down the instance
	fmt.Println("Starting scaling down")
	client, err := google.DefaultClient(ctx, "https://www.googleapis.com/auth/cloud-platform")
	if err != nil {
		log.Fatal(err)
	}
	instancesURL := apiURL + "/" + "projects/" + project + "/locations/" + location + "/clusters/" + cluster + "/instances/" + instance
	fmt.Println(instancesURL)
	instancesReq, err := http.NewRequest("GET", instancesURL, nil)
	if err != nil {
		log.Fatal(err)
	}
	resp, err := client.Do(instancesReq)
	if err != nil {

		log.Fatal(err)
	}
	fmt.Println(resp.Status)

	instanceBody, err := io.ReadAll(resp.Body)
	if err != nil {
		log.Fatal(err)
	}

	var instance_json Instance
	err = json.Unmarshal(instanceBody, &instance_json)
	if err != nil {
		log.Println(err)
	}

	fmt.Println(instance_json.MachineConfig.CpuCount)

	// Halve the CPU count if it's greater than 2.
	if instance_json.MachineConfig.CpuCount > 2 {
		var instance_patch Instance_patch
		instance_patch.MachineConfig.CpuCount = instance_json.MachineConfig.CpuCount / 2
		instance_patch.InstanceType = instance_json.InstanceType

		fmt.Println(instance_patch.MachineConfig.CpuCount)
		instance_payload, err := json.Marshal(instance_patch)
		if err != nil {
			log.Fatal(err)
		}

		fmt.Println(instance_patch)
		fmt.Println(string(instance_payload))

		instancesURL = apiURL + "/" + "projects/" + project + "/locations/" + location + "/clusters/" + cluster + "/instances/" + instance + "?updateMask=machineConfig.cpuCount"
		fmt.Println(instancesURL)
		instancesReq, err = http.NewRequest("PATCH", instancesURL, bytes.NewBuffer(instance_payload))
		if err != nil {
			log.Fatal(err)
		}

		resp, err = client.Do(instancesReq)
		if err != nil {

			log.Fatal(err)
		}
		fmt.Println(resp)
	}
	return nil
}