scottwinkler/terraform-provider-shell

Question: What's the best way to force terraform plan to fail on read error?

Opened this issue · 0 comments

Hey!

I have been trying to understand why I get a plan to recreate my resources, whenever my Read script fails.
And as far as I understand it, the reason is that the error inside resourceShellScriptRead is not being returned:

func resourceShellScriptRead(d *schema.ResourceData, meta interface{}) error {
	err := read(d, meta, []Action{ActionRead})
	if err != nil {
		_ = d.Set("read_error", err.Error())
	} else {
		_ = d.Set("read_error", "")
	}

	// Error could be caused by bugs in the script.
	// Give user chance to fix the script or continue to recreate the resource
	return nil
}

It's being used in resourceShellScriptCustomizeDiff:

	if v, _ := d.GetChange("read_error"); v != nil {
		if e, _ := v.(string); e != "" {
			_ = d.ForceNew("read_error") // read error, force recreation
			return
		}
	}

It would be very helpful to me that my CI failed on an error of my Read script during a terraform plan.
I believe there's no way this can happen at the moment. I'd need to add an optional parameter to the provider letting you define if you want to fail on read_error or not. Do you see any other option here?