Skip to content

Commit

Permalink
Merge pull request #49 from infra-monkey/fix/idempotency
Browse files Browse the repository at this point in the history
fix: apply is not idempotent with versions < 5.0.0
  • Loading branch information
RomanButsiy authored Feb 5, 2025
2 parents b447b3e + 3cf8a2c commit a109001
Show file tree
Hide file tree
Showing 8 changed files with 260 additions and 47 deletions.
1 change: 0 additions & 1 deletion docs/resources/dns_zone.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ resource "freeipa_dns_zone" "dns_zone-2" {
- `soa_minimum` (Number) How long should negative responses be cached
- `soa_refresh` (Number) SOA record refresh time
- `soa_retry` (Number) SOA record retry time
- `soa_serial_number` (Number) SOA record serial number
- `ttl` (Number) Time to live for records at zone apex
- `zone_forwarders` (List of String) Per-zone forwarders. A custom port can be specified for each forwarder using a standard format IP_ADDRESS port PORT

Expand Down
20 changes: 14 additions & 6 deletions freeipa/dns_zone_data_source.go
Original file line number Diff line number Diff line change
Expand Up @@ -242,14 +242,22 @@ func (r *dnsZoneDataSource) Read(ctx context.Context, req datasource.ReadRequest
data.AdminEmailAddress = types.StringValue(adminemail.(string))
tflog.Debug(ctx, fmt.Sprintf("[DEBUG] Read freeipa dns zone admin_email_address %s", data.AdminEmailAddress.ValueString()))
}
//if res.Result.Idnssoaserial != nil {
data.SoaSerialNumber = types.Int64Value(int64(*res.Result.Idnssoaserial))
tflog.Debug(ctx, fmt.Sprintf("[DEBUG] Read freeipa dns zone soa_serial_number %d", int(data.SoaSerialNumber.ValueInt64())))
//}
//if res.Result.Idnssoaretry != nil {
if res.Result.Idnssoaserial != nil {
data.SoaSerialNumber = types.Int64Value(int64(*res.Result.Idnssoaserial))
tflog.Debug(ctx, fmt.Sprintf("[DEBUG] Read freeipa dns zone soa_serial_number %d", int(data.SoaSerialNumber.ValueInt64())))
}
data.SoaRefresh = types.Int64Value(int64(res.Result.Idnssoarefresh))
tflog.Debug(ctx, fmt.Sprintf("[DEBUG] Read freeipa dns zone soa_refresh %d", int(data.SoaRefresh.ValueInt64())))

data.SoaRetry = types.Int64Value(int64(res.Result.Idnssoaretry))
tflog.Debug(ctx, fmt.Sprintf("[DEBUG] Read freeipa dns zone soa_retry %d", int(data.SoaRetry.ValueInt64())))
//}

data.SoaExpire = types.Int64Value(int64(res.Result.Idnssoaexpire))
tflog.Debug(ctx, fmt.Sprintf("[DEBUG] Read freeipa dns zone soa_expire %d", int(data.SoaExpire.ValueInt64())))

data.SoaMinimum = types.Int64Value(int64(res.Result.Idnssoaminimum))
tflog.Debug(ctx, fmt.Sprintf("[DEBUG] Read freeipa dns zone soa_minimum %d", int(data.SoaMinimum.ValueInt64())))

if res.Result.Dnsttl != nil {
data.TTL = types.Int64Value(int64(*res.Result.Dnsttl))
tflog.Debug(ctx, fmt.Sprintf("[DEBUG] Read freeipa dns zone ttl %d", int(data.TTL.ValueInt64())))
Expand Down
180 changes: 148 additions & 32 deletions freeipa/dns_zone_resource.go

Large diffs are not rendered by default.

14 changes: 9 additions & 5 deletions freeipa/group_resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
"github.com/hashicorp/terraform-plugin-framework/path"
"github.com/hashicorp/terraform-plugin-framework/resource"
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
"github.com/hashicorp/terraform-plugin-framework/resource/schema/booldefault"
"github.com/hashicorp/terraform-plugin-framework/resource/schema/boolplanmodifier"
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
"github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier"
Expand Down Expand Up @@ -100,17 +101,21 @@ func (r *UserGroupResource) Schema(ctx context.Context, req resource.SchemaReque
"nonposix": schema.BoolAttribute{
MarkdownDescription: "Create as a non-POSIX group",
Optional: true,
Computed: false,
Computed: true,
Default: booldefault.StaticBool(false),
PlanModifiers: []planmodifier.Bool{
boolplanmodifier.RequiresReplace(),
boolplanmodifier.UseStateForUnknown(),
boolplanmodifier.RequiresReplaceIfConfigured(),
},
},
"external": schema.BoolAttribute{
MarkdownDescription: "Allow adding external non-IPA members from trusted domains",
Optional: true,
Computed: false,
Computed: true,
Default: booldefault.StaticBool(false),
PlanModifiers: []planmodifier.Bool{
boolplanmodifier.RequiresReplace(),
boolplanmodifier.UseStateForUnknown(),
boolplanmodifier.RequiresReplaceIfConfigured(),
},
},
"addattr": schema.ListAttribute{
Expand Down Expand Up @@ -224,7 +229,6 @@ func (r *UserGroupResource) Create(ctx context.Context, req resource.CreateReque

func (r *UserGroupResource) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) {
var data UserGroupResourceModel

// Read Terraform prior state data into the model
resp.Diagnostics.Append(req.State.Get(ctx, &data)...)

Expand Down
3 changes: 3 additions & 0 deletions freeipa/hbac_policy_resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"github.com/hashicorp/terraform-plugin-framework/path"
"github.com/hashicorp/terraform-plugin-framework/resource"
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
"github.com/hashicorp/terraform-plugin-framework/resource/schema/booldefault"
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
"github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier"
"github.com/hashicorp/terraform-plugin-framework/types"
Expand Down Expand Up @@ -77,6 +78,8 @@ func (r *HbacPolicyResource) Schema(ctx context.Context, req resource.SchemaRequ
"enabled": schema.BoolAttribute{
MarkdownDescription: "Enable this hbac policy",
Optional: true,
Computed: true,
Default: booldefault.StaticBool(true),
},
"usercategory": schema.StringAttribute{
MarkdownDescription: "User category the hbac policy is applied to (allowed value: all)",
Expand Down
3 changes: 3 additions & 0 deletions freeipa/sudo_rule_resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"github.com/hashicorp/terraform-plugin-framework/path"
"github.com/hashicorp/terraform-plugin-framework/resource"
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
"github.com/hashicorp/terraform-plugin-framework/resource/schema/booldefault"
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
"github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier"
"github.com/hashicorp/terraform-plugin-framework/types"
Expand Down Expand Up @@ -80,6 +81,8 @@ func (r *SudoRuleResource) Schema(ctx context.Context, req resource.SchemaReques
"enabled": schema.BoolAttribute{
MarkdownDescription: "Enable this sudo rule",
Optional: true,
Computed: true,
Default: booldefault.StaticBool(true),
},
"usercategory": schema.StringAttribute{
MarkdownDescription: "User category the sudo rule is applied to (allowed value: all)",
Expand Down
28 changes: 25 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/rework-space-com/terraform-provider-freeipa

go 1.22.0
go 1.22.7

toolchain go1.23.4

Expand All @@ -15,13 +15,23 @@ require (
)

require (
github.com/BurntSushi/toml v1.2.1 // indirect
github.com/Kunde21/markdownfmt/v3 v3.1.0 // indirect
github.com/Masterminds/goutils v1.1.1 // indirect
github.com/Masterminds/semver/v3 v3.2.0 // indirect
github.com/Masterminds/sprig/v3 v3.2.3 // indirect
github.com/ProtonMail/go-crypto v1.1.0-alpha.2 // indirect
github.com/agext/levenshtein v1.2.2 // indirect
github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
github.com/armon/go-radix v1.0.0 // indirect
github.com/bgentry/speakeasy v0.1.0 // indirect
github.com/bmatcuk/doublestar/v4 v4.7.1 // indirect
github.com/cloudflare/circl v1.3.7 // indirect
github.com/fatih/color v1.16.0 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/hashicorp/cli v1.1.6 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-checkpoint v0.5.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
Expand All @@ -37,10 +47,13 @@ require (
github.com/hashicorp/logutils v1.0.0 // indirect
github.com/hashicorp/terraform-exec v0.21.0 // indirect
github.com/hashicorp/terraform-json v0.23.0 // indirect
github.com/hashicorp/terraform-plugin-docs v0.20.1 // indirect
github.com/hashicorp/terraform-plugin-sdk/v2 v2.35.0 // indirect
github.com/hashicorp/terraform-registry-address v0.2.3 // indirect
github.com/hashicorp/terraform-svchost v0.1.1 // indirect
github.com/hashicorp/yamux v0.1.1 // indirect
github.com/huandu/xstrings v1.3.3 // indirect
github.com/imdario/mergo v0.3.15 // indirect
github.com/jcmturner/aescts/v2 v2.0.0 // indirect
github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect
github.com/jcmturner/gofork v1.7.6 // indirect
Expand All @@ -50,27 +63,36 @@ require (
github.com/kr/pretty v0.3.0 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.9 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
github.com/mitchellh/go-wordwrap v1.0.0 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/oklog/run v1.0.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/rogpeppe/go-internal v1.12.0 // indirect
github.com/posener/complete v1.2.3 // indirect
github.com/rogpeppe/go-internal v1.13.1 // indirect
github.com/shopspring/decimal v1.3.1 // indirect
github.com/spf13/cast v1.5.0 // indirect
github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect
github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect
github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
github.com/yuin/goldmark v1.7.7 // indirect
github.com/yuin/goldmark-meta v1.1.0 // indirect
github.com/zclconf/go-cty v1.15.0 // indirect
go.abhg.dev/goldmark/frontmatter v0.2.0 // indirect
golang.org/x/crypto v0.29.0 // indirect
golang.org/x/mod v0.21.0 // indirect
golang.org/x/net v0.28.0 // indirect
golang.org/x/sync v0.9.0 // indirect
golang.org/x/sys v0.27.0 // indirect
golang.org/x/text v0.20.0 // indirect
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect
golang.org/x/tools v0.22.0 // indirect
google.golang.org/appengine v1.6.8 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect
google.golang.org/grpc v1.67.1 // indirect
google.golang.org/protobuf v1.35.1 // indirect
gopkg.in/yaml.v2 v2.3.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
Loading

0 comments on commit a109001

Please sign in to comment.