Skip to content

Commit 58e0039

Browse files
authored
fix: prevent false diffs in stack file mode and stabilize docker network read
1 parent fd13d90 commit 58e0039

File tree

4 files changed

+38
-10
lines changed

4 files changed

+38
-10
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ See the [LICENSE](https://github.com/portainer/terraform-provider-portainer/blob
365365

366366

367367
## Acknowledgements
368-
- [HashiCorp Terraform](https://www.hashicorp.com/products/terraform)
368+
- HashiCorp Terraform
369369
- [Portainer](https://portainer.io)
370370
- [OpenTofu](https://opentofu.org/)
371371
- [Docker](https://www.docker.com/)

docs/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ This module is 100% Open Source and is distributed under the MIT License.
231231
See the [LICENSE](https://github.com/portainer/terraform-provider-portainer/blob/main/LICENSE) file for more information.
232232

233233
## 🌐 Acknowledgements
234-
- [HashiCorp Terraform](https://www.hashicorp.com/products/terraform)
234+
- HashiCorp Terraform
235235
- [Portainer](https://portainer.io)
236236
- [OpenTofu](https://opentofu.org/)
237237
- [Docker](https://www.docker.com/)

internal/resource_docker_network.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -258,8 +258,18 @@ func resourceDockerNetworkRead(d *schema.ResourceData, meta interface{}) error {
258258
_ = d.Set("internal", result.Internal)
259259
_ = d.Set("attachable", result.Attachable)
260260
_ = d.Set("ingress", result.Ingress)
261-
_ = d.Set("enable_ipv4", result.EnableIPv4)
262-
_ = d.Set("enable_ipv6", result.EnableIPv6)
261+
enableIPv4 := result.EnableIPv4
262+
enableIPv6 := result.EnableIPv6
263+
if !enableIPv4 && !enableIPv6 {
264+
if d.Get("enable_ipv4").(bool) {
265+
enableIPv4 = true
266+
}
267+
if d.Get("enable_ipv6").(bool) {
268+
enableIPv6 = true
269+
}
270+
}
271+
_ = d.Set("enable_ipv4", enableIPv4)
272+
_ = d.Set("enable_ipv6", enableIPv6)
263273
} else {
264274
_ = d.Set("internal", d.Get("internal").(bool))
265275
_ = d.Set("attachable", d.Get("attachable").(bool))

internal/resource_stack.go

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,30 @@ func resourcePortainerStack() *schema.Resource {
6464
Description: "Creation method: 'string', 'file', 'repository', or 'url'",
6565
ForceNew: true,
6666
},
67-
"name": {Type: schema.TypeString, Required: true, ForceNew: true},
68-
"endpoint_id": {Type: schema.TypeInt, Required: true, ForceNew: true},
69-
"swarm_id": {Type: schema.TypeString, Optional: true, ForceNew: true, Computed: true},
70-
"namespace": {Type: schema.TypeString, Optional: true, ForceNew: true},
71-
"stack_file_content": {Type: schema.TypeString, Optional: true},
72-
"stack_file_path": {Type: schema.TypeString, Optional: true},
67+
"name": {Type: schema.TypeString, Required: true, ForceNew: true},
68+
"endpoint_id": {Type: schema.TypeInt, Required: true, ForceNew: true},
69+
"swarm_id": {Type: schema.TypeString, Optional: true, ForceNew: true, Computed: true},
70+
"namespace": {Type: schema.TypeString, Optional: true, ForceNew: true},
71+
"stack_file_content": {
72+
Type: schema.TypeString,
73+
Optional: true,
74+
DiffSuppressFunc: func(k, old, new string, d *schema.ResourceData) bool {
75+
if d.Get("method").(string) != "file" {
76+
return false
77+
}
78+
path, ok := d.GetOk("stack_file_path")
79+
if !ok {
80+
return false
81+
}
82+
content, err := os.ReadFile(path.(string))
83+
if err != nil {
84+
return false
85+
}
86+
current := string(content)
87+
return strings.TrimSpace(old) == strings.TrimSpace(current)
88+
},
89+
},
90+
"stack_file_path": {Type: schema.TypeString, Optional: true},
7391
"additional_files": {
7492
Type: schema.TypeList,
7593
Optional: true,

0 commit comments

Comments
 (0)