func splitDevAddr(id string) (string, int, int, error) {
	parts := strings.Split(id, ":")
	if len(parts) < 3 {
		return "", 0, 0, fmt.Errorf("invalid ID %q", id)
	}
	ct, cbs, dus := parts[0], parts[1], parts[2]
	cb, cbe := strconv.Atoi(cbs)
	du, due := strconv.Atoi(dus)
	var found bool
	for _, v := range subresourceIDControllerTypeAllowedValues {
		if v == ct {
			found = true
		}
	}
	if !found {
		return ct, cb, du, fmt.Errorf("invalid controller type %q found in ID", ct)
	}
	if cbe != nil {
		return ct, cb, du, fmt.Errorf("invalid bus number %q found in ID", cbs)
	}
	if due != nil {
		return ct, cb, du, fmt.Errorf("invalid disk unit number %q found in ID", dus)
	}
	return ct, cb, du, nil
}
func splitDevAddr(id string) (string, int, int, error) {
	parts := strings.Split(id, ":")
	if len(parts) < 3 {
		return "", 0, 0, fmt.Errorf("invalid ID %q", id)
	}
	ct, cbs, dus := parts[0], parts[1], parts[2]
	cb, cbe := strconv.Atoi(cbs)
	du, due := strconv.Atoi(dus)
	var found bool
	for _, v := range subresourceIDControllerTypeAllowedValues {
		if v == ct {
			found = true
		}
	}
	if !found {
		return ct, cb, du, fmt.Errorf("invalid controller type %q found in ID", ct)
	}
	if cbe != nil {
		return ct, cb, du, fmt.Errorf("invalid bus number %q found in ID", cbs)
	}
	if due != nil {
		return ct, cb, du, fmt.Errorf("invalid disk unit number %q found in ID", dus)
	}
	return ct, cb, du, nil
}
func splitDevAddr ( id string ) ( string , int , int , error ) { parts := strings . Split ( id , " " ) if len ( parts ) < 3 { return " " , 0 , 0 , fmt . Errorf ( " " , id ) } ct , cbs , dus := parts [ 0 ] , parts [ 1 ] , parts [ 2 ] cb , cbe := strconv . Atoi ( cbs ) du , due := strconv . Atoi ( dus ) var found bool for _ , v := range subresourceIDControllerTypeAllowedValues { if v == ct { found = true } } if ! found { return ct , cb , du , fmt . Errorf ( " " , ct ) } if cbe != nil { return ct , cb , du , fmt . Errorf ( " " , cbs ) } if due != nil { return ct , cb , du , fmt . Errorf ( " " , dus ) } return ct , cb , du , nil }
// splitDevAddr splits an device addres into its inparticular parts and asserts
// that we have all the correct data.
splitDevAddr splits an device addres into its inparticular parts and asserts that we have all the correct data .