func resource_digitalocean_record_retrieve(domain string, id string, client *digitalocean.Client) (*digitalocean.Record, error) {
	record, err := client.RetrieveRecord(domain, id)
	if err != nil {
		return nil, err
	}

	return &record, nil
}
// retrieves an ELB by its ID
func resource_digitalocean_droplet_retrieve(id string, client *digitalocean.Client) (*digitalocean.Droplet, error) {
	// Retrieve the ELB properties for updating the state
	droplet, err := client.RetrieveDroplet(id)

	if err != nil {
		return nil, fmt.Errorf("Error retrieving droplet: %s", err)
	}

	return &droplet, nil
}
// Powers on the droplet and waits for it to be active
func power_on_and_wait(id string, client *digitalocean.Client) error {
	err := client.PowerOn(id)

	if err != nil {
		return err
	}

	// Wait for power on
	_, err = WaitForDropletAttribute(
		id, "active", []string{"off"}, "status", client)

	if err != nil {
		return err
	}

	return nil
}
func new_droplet_state_refresh_func(id string, attribute string, client *digitalocean.Client) resource.StateRefreshFunc {
	return func() (interface{}, string, error) {
		// Retrieve the ELB properties for updating the state
		droplet, err := client.RetrieveDroplet(id)

		if err != nil {
			log.Printf("Error on retrieving droplet when waiting: %s", err)
			return nil, "", err
		}

		// If the droplet is locked, continue waiting. We can
		// only perform actions on unlocked droplets, so it's
		// pointless to look at that status
		if droplet.IsLocked() == "true" {
			log.Println("[DEBUG] Droplet is locked, skipping status check and retrying")
			return nil, "", nil
		}

		// Use our mapping to get back a map of the
		// droplet properties
		resourceMap, err := resource_digitalocean_droplet_update_state(
			&terraform.ResourceState{Attributes: map[string]string{}}, &droplet)

		if err != nil {
			log.Printf("Error creating map from droplet: %s", err)
			return nil, "", err
		}

		// See if we can access our attribute
		if attr, ok := resourceMap.Attributes[attribute]; ok {
			return &droplet, attr, nil
		}

		return nil, "", nil
	}
}