F5Networks / terraform-provider-bigip

Terraform resources that can configure F5 BIG-IP products
https://registry.terraform.io/providers/F5Networks/bigip/latest/docs
Mozilla Public License 2.0
105 stars 119 forks source link

bigip_ltm_irule missing \r\n when plan/apply. change everytime #891

Open psjolin67 opened 1 year ago

psjolin67 commented 1 year ago

Environment

Summary

Please also include information about the reproducibility and the severity/impact of the issue.

Every time a plan or apply it finds something to change. Tried EOF / EOT and -EOT (as is saids when it display changes) after irule = Running in debug it seams as it have \r\n on the last row in state and are missing that in the new plan/apply.

Steps To Reproduce

Create a irule throug Terraform and apply twice (terraform apply)

Steps to reproduce the behavior:

resource "bigip_ltm_irule" "rule1" { name = "/Common/a01_hsl-http" irule = <<-EOF

test

EOF }

  1. Provide terraform resource config which you are facing trouble along with the output of it.

  2. To get to know more about the issue, provide terraform debug logs

  3. To capture debug logs, export TF_LOG variable with debug ( export TF_LOG= DEBUG ) before runnning terraform apply/plan:

    ----- debug ----- 023-10-26T16:49:42.536+0200 [WARN] Provider "registry.terraform.io/f5networks/bigip" produced an invalid plan for bigip_ltm_irule.rule1, but we are tolerating it because it is using the legacy plugin SDK. The following problems may be the cause of any confusing errors from downstream operations:

    • .irule: planned value cty.StringVal("#test") does not match config value cty.StringVal("#test\r\n") nor prior value cty.StringVal("") 2023-10-26T16:49:42.543+0200 [WARN] Provider "registry.terraform.io/f5networks/bigip" produced an invalid plan for bigip_ltm_virtual_server.httptohttps, but we are tolerating it because it is using the legacy plugin SDK. The following problems may be the cause of any confusing errors from downstream operations:
    • .irules: planned value cty.ListValEmpty(cty.String) for a non-computed attribute
    • .vlans: planned value cty.SetValEmpty(cty.String) for a non-computed attribute
    • .vlans_enabled: planned value cty.False for a non-computed attribute
    • .ip_protocol: planned value cty.StringVal("tcp") for a non-computed attribute
    • .policies: planned value cty.SetValEmpty(cty.String) for a non-computed attribute
    • .state: planned value cty.StringVal("enabled") for a non-computed attribute
    • .pool: planned value cty.StringVal("") for a non-computed attribute
    • .security_log_profiles: planned value cty.ListValEmpty(cty.String) for a non-computed attribute ------- end debug ------
  4. As3/DO json along with the resource config( for AS3/DO resource issues )

Expected Behavior

No change on irule everytime a plan or apply when nothing is updatede/changed on that irule / resorce

Actual Behavior

Please include any applicable error output.

It makes a change even if nothing is changed on the irule/resorce .

psjolin67 commented 1 year ago

work if you read it in as a file.

pgouband commented 1 year ago

Hi @psjolin67,

So this issue can be closed?

psjolin67 commented 1 year ago

You could think that this is a workaround for all things, but sometimes you want to replace the text in the code depending on different conditions. I think it would be good if there was a solution for this problem so you can use the function to create irules without having to use a file. This time I solved it by loading a file, but next time it might not be the best way.

pgouband commented 1 year ago

Hi @psjolin67,

Ok I'll test it and review it to decide if we good forward or not.

pgouband commented 11 months ago

Hi @psjolin67,

I did some test with the following main.tf. Multiple plan and apply without changing anything on the resource and I didn't get any error.

resource "bigip_ltm_irule" "irule1" {
  name = "/Common/irule1"
  irule = <<EOF
when CLIENT_ACCEPTED {
     log local0. "test"
   }
EOF
}

Could you redo the test with version 1.20.1 of the provider?