diff --git a/README.md b/README.md
index 294fade..95fae3c 100644
--- a/README.md
+++ b/README.md
@@ -19,6 +19,4 @@ provider to build your own SimpleMDM infrastructure.Provider's official document
## Know issues
-- API current doesnt support Create and Delete for Device Groups
-- API currently doesnt support update of "name" attribute for Device Groups
-- Custom Profiles/Profiles for Assignment group and Devices can no be updated because of API limitation (they are compared only between plan and state from previous plan), aka adding profile via web will not be considered in next apply.
+-app assignemnt is not exactly working as expected because of missing data from API (changes requested already), currently there will be always diff in app assignement.
\ No newline at end of file
diff --git a/docs/data-sources/customdeclaration.md b/docs/data-sources/customdeclaration.md
new file mode 100644
index 0000000..c2fce0d
--- /dev/null
+++ b/docs/data-sources/customdeclaration.md
@@ -0,0 +1,24 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "simplemdm_customdeclaration Data Source - simplemdm"
+subcategory: ""
+description: |-
+ Custom Declaration data source can be used together with Device(s) or Device Group(s) to set values or in lifecycle management.
+---
+
+# simplemdm_customdeclaration (Data Source)
+
+Custom Declaration data source can be used together with Device(s) or Device Group(s) to set values or in lifecycle management.
+
+
+
+
+## Schema
+
+### Required
+
+- `id` (String) ID of the custom Declaration.
+
+### Read-Only
+
+- `name` (String) Default (global) value of the Attribute.
diff --git a/docs/data-sources/devicegroup.md b/docs/data-sources/devicegroup.md
deleted file mode 100644
index 9c2cc3d..0000000
--- a/docs/data-sources/devicegroup.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-# generated by https://github.com/hashicorp/terraform-plugin-docs
-page_title: "simplemdm_devicegroup Data Source - simplemdm"
-subcategory: ""
-description: |-
- Device Group data source can be used together with Assignment Group(s) to assign group(s) to these objects.
----
-
-# simplemdm_devicegroup (Data Source)
-
-Device Group data source can be used together with Assignment Group(s) to assign group(s) to these objects.
-
-## Example Usage
-
-```terraform
-data "simplemdm_devicegroup" "devicegroup" {
- id = "123456"
-}
-```
-
-
-## Schema
-
-### Required
-
-- `id` (String) ID of a Device Group in SimpleMDM.
-
-### Read-Only
-
-- `name` (String) Device Group name.
diff --git a/docs/index.md b/docs/index.md
index 96a6914..25b55fb 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,7 +1,6 @@
---
# generated by https://github.com/hashicorp/terraform-plugin-docs
page_title: "simplemdm Provider"
-subcategory: ""
description: |-
SimpleMDM terraform provider developed by FreeNow.
---
diff --git a/docs/resources/app.md b/docs/resources/app.md
index 043120c..213aa02 100644
--- a/docs/resources/app.md
+++ b/docs/resources/app.md
@@ -19,6 +19,13 @@ resource "simplemdm_app" "app" {
}
```
+```terraform
+resource "simplemdm_app" "app" {
+ bundle_id = "com.myCompany.MyApp1"
+ deploy_to = "all" // Default to "none" if not added but possible values are "outdated" and "all"
+}
+```
+
## Schema
@@ -37,6 +44,8 @@ resource "simplemdm_app" "app" {
Import is supported using the following syntax:
+The [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import) can be used, for example:
+
```shell
# App can be imported by specifying the app ID.
terraform import simplemdm_app.example 123456
diff --git a/docs/resources/assignmentgroup.md b/docs/resources/assignmentgroup.md
index d7c61b6..5f7e195 100644
--- a/docs/resources/assignmentgroup.md
+++ b/docs/resources/assignmentgroup.md
@@ -3,12 +3,12 @@
page_title: "simplemdm_assignmentgroup Resource - simplemdm"
subcategory: ""
description: |-
- Assignment Group resource is used to manage group, you can assign App(s), Custom Profile(s), Device(s), Device Group(s) and set addition details regarding Assignemtn Group.
+ Assignment Group resource is used to manage group, you can assign App(s), Profile(s), Custom Profile(s), Custom Declaration(s), Device(s) and set addition details regarding Group. In case you dont want to manage device/app assignments use lifecycle. Currently App assignment will always show diff in configuration as API is not providing all needed data (request for API change was already submitted).
---
# simplemdm_assignmentgroup (Resource)
-Assignment Group resource is used to manage group, you can assign App(s), Custom Profile(s), Device(s), Device Group(s) and set addition details regarding Assignemtn Group.
+Assignment Group resource is used to manage group, you can assign App(s), Profile(s), Custom Profile(s), Custom Declaration(s), Device(s) and set addition details regarding Group. In case you dont want to manage device/app assignments use lifecycle. Currently App assignment will always show diff in configuration as API is not providing all needed data (request for API change was already submitted).
## Example Usage
@@ -19,15 +19,15 @@ resource "simplemdm_assignmentgroup" "myfirstgroup" {
//auto deploy true or false, default is true
auto_deploy = true
//group type "standard" or "munki", defaults to standard. If this parameter is changed it will destroy/create whole group
- group_type = "standard"
- install_type = "managed"
- apps = [123456]
profiles = [123456, 987654]
- groups = [135431, 654321]
devices = [135431, 987654]
profiles_sync = false
apps_push = false
apps_update = false
+ attributes = {
+ "testAttribute" = "attributevalue"
+ }
+ apps = [{ app_id = 553192, deployment_type = "munki", install_type = "managed" }]
}
```
@@ -36,29 +36,43 @@ resource "simplemdm_assignmentgroup" "myfirstgroup" {
### Required
-- `name` (String) The name of the Assignment Group.
+- `name` (String) The name of the Group.
### Optional
-- `apps` (Set of String) Optional. List of Apps assigned to this assignment group
-- `apps_push` (Boolean) Optional. Set true if you would like to send push Apps command after assignment group creation or changes. Defaults to false.
-- `apps_update` (Boolean) Optional. Set true if you would like to send update Apps command after assignment group creation or changes. Defaults to false.
-- `auto_deploy` (Boolean) Optional. Whether the Apps should be automatically pushed to device(s) when they join this Assignment Group. Defaults to true
-- `devices` (Set of String) Optional. List of Devices assigned to this Assignment Group
-- `group_type` (String) Optional. Type of assignment group. Must be one of standard (for MDM app/media deployments) or munki for Munki app deployments. Defaults to standard.
-- `groups` (Set of String) Optional. List of Device Groups assigned to this Assignment Group
-- `install_type` (String) Optional. The install type for munki assignment groups. Must be one of managed, self_serve, managed_updates or default_installs. This setting has no effect for non-munki (standard) assignment groups. Defaults to managed.
-- `profiles` (Set of String) Optional. List of Configuration Profiles (both Custom and predefined Profiles) assigned to this assignment group
-- `profiles_sync` (Boolean) Optional. Set true if you would like to send Sync Profiles command after Assignment Group creation or changes. Defaults to false.
+- `app_track_location` (Boolean) Optional. If true, it tracks the location of IOS device when the SimpleMDM mobile app is installed. Defaults to true.
+- `apps` (Attributes List) Optional. List of Apps assigned to this group (see [below for nested schema](#nestedatt--apps))
+- `apps_push` (Boolean) Optional. Installs associated apps to associated devices. A munki catalog refresh or MDM install command will be sent to all associated devices. Defaults to true.
+- `apps_update` (Boolean) Optional. Updates associated apps on associated devices. A munki catalog refresh or MDM install command will be sent to all associated devices. Defaults to true
+- `attributes` (Map of String) Optional. Map of Attributes and values set for this Group
+- `auto_deploy` (Boolean) Optional. Whether the Apps should be automatically pushed to device(s) when they join this Group. Defaults to true
+- `devices` (Set of String) Optional. List of Devices assigned to this Group
+- `priority` (String) Optional. The priority (0 to 20) of the assignment group. Default to 0
+- `profiles` (Set of String) Optional. List of Configuration Profiles (Custom or predefined Profiles and Custom Declarations) assigned to this group
+- `profiles_sync` (Boolean) Optional. Set true if you would like to send Sync Profiles command after Group creation or changes. Defaults to true.
### Read-Only
-- `id` (String) ID of the Assignment Group in SimpleMDM
+- `id` (String) ID of the Group in SimpleMDM
+
+
+### Nested Schema for `apps`
+
+Required:
+
+- `app_id` (String) ID of the Application in SimpleMDM
+
+Optional:
+
+- `deployment_type` (String) Optional. Type of assignment group. Must be one of standard (for MDM app/media deployments) or munki for Munki app deployments. Defaults to standard
+- `install_type` (String) Optional. The install type for munki assignment groups. Must be one of managed, self_serve, default_installs or managed_updates. This setting has no effect for non-munki (standard) assignment groups. Defaults to managed.
## Import
Import is supported using the following syntax:
+The [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import) can be used, for example:
+
```shell
# Assignment group can be imported by specifying the Assigntment group ID.
terraform import simplemdm_assigntmentgroup.example 123456
diff --git a/docs/resources/attribute.md b/docs/resources/attribute.md
index 8d1449b..569c9cb 100644
--- a/docs/resources/attribute.md
+++ b/docs/resources/attribute.md
@@ -38,6 +38,8 @@ resource "simplemdm_attribute" "myattribute" {
Import is supported using the following syntax:
+The [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import) can be used, for example:
+
```shell
# Attribute can be imported by specifying the name of attribute.
terraform import simplemdm_attribute.example myattributename
diff --git a/docs/resources/customdeclaration.md b/docs/resources/customdeclaration.md
new file mode 100644
index 0000000..10813ab
--- /dev/null
+++ b/docs/resources/customdeclaration.md
@@ -0,0 +1,55 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "simplemdm_customdeclaration Resource - simplemdm"
+subcategory: ""
+description: |-
+ Custom Declaration resource can be used to manage Custom Declaration. Can be used together with Device(s) and Group(s) and set addition details regarding Custom Declaration.
+---
+
+# simplemdm_customdeclaration (Resource)
+
+Custom Declaration resource can be used to manage Custom Declaration. Can be used together with Device(s) and Group(s) and set addition details regarding Custom Declaration.
+
+## Example Usage
+
+```terraform
+resource "simplemdm_customdeclaration" "test" {
+ name = "testdeclaration"
+ declaration = jsonencode(jsondecode(file("./testfiles/testdeclaration.json")))
+ userscope = true
+ attributesupport = true
+ escapeattributes = true
+ declaration_type = "com.apple.configuration.safari.bookmarks"
+ activation_predicate = ""
+}
+```
+
+
+## Schema
+
+### Required
+
+- `declaration` (String) Required. Can be string or you can use function 'file' or 'templatefile' to load string from file (see examples folder). Example: declaration = file("./declarations/declaration.json") or declaration = <<-EOT DECLARATION STRING EOT
+- `declaration_type` (String) Required. The type of declaration being defined
+- `name` (String) Required. A name for the declaration. Example: "My First declaration by terraform"
+
+### Optional
+
+- `activation_predicate` (String) Optional. A predicate format string as Apple's Predicate Programming describes. The activation only installs when the predicate evaluates to true or if it is left blank.
+- `attributesupport` (Boolean) Optional. A boolean true or false. When enabled, SimpleMDM will process variables in the uploaded declaration. Defaults to false
+- `escapeattributes` (Boolean) Optional. A boolean true or false. When enabled, SimpleMDM escape the values of the custom variables in the uploaded declaration. Defaults to false
+- `userscope` (Boolean) Optional. A boolean true or false. If false, deploy as a device declaration instead of a user declaration for macOS devices. Defaults to true.
+
+### Read-Only
+
+- `id` (String) ID of a Custom Declaration in SimpleMDM
+
+## Import
+
+Import is supported using the following syntax:
+
+The [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import) can be used, for example:
+
+```shell
+terraform import simplemdm_customdeclaration.example 12345
+```
diff --git a/docs/resources/customprofile.md b/docs/resources/customprofile.md
index 3b17513..30fdf97 100644
--- a/docs/resources/customprofile.md
+++ b/docs/resources/customprofile.md
@@ -23,6 +23,37 @@ resource "simplemdm_customprofile" "myprofile" {
}
```
+```terraform
+resource "simplemdm_customprofile" "myprofile" {
+ name = "My First profiles"
+ mobileconfig = templatefile("./profiles/profile.mobileconfig", { foo = "bar" })
+ userscope = true
+ attributesupport = true
+ escapeattributes = true
+ reinstallafterosupdate = false
+}
+```
+
+```terraform
+resource "simplemdm_customprofile" "myprofile" {
+ name = "My First profiles"
+ mobileconfig = <<-EOT
+
+
+
+
+ PayloadIdentifier
+ .....redacted....
+
+
+EOT
+ userscope = true
+ attributesupport = true
+ escapeattributes = true
+ reinstallafterosupdate = false
+}
+```
+
## Schema
@@ -46,6 +77,8 @@ resource "simplemdm_customprofile" "myprofile" {
Import is supported using the following syntax:
+The [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import) can be used, for example:
+
```shell
# Custom profile can be imported by specifying the custom profile ID.
terraform import simplemdm_customprofile.example 123456
diff --git a/docs/resources/device.md b/docs/resources/device.md
index 62e50c8..5d0cd5f 100644
--- a/docs/resources/device.md
+++ b/docs/resources/device.md
@@ -31,15 +31,14 @@ resource "simplemdm_device" "firstdevice" {
### Required
-- `devicegroup` (String) The ID of Device Group where device will be assigned.
- `name` (String) Required. The SimpleMDM name of the device.
### Optional
-- `attributes` (Map of String) The name of the Assignment Group.
-- `customprofiles` (Set of String) Optional. List of Custom Configuration Profiles assigned to this Device
+- `attributes` (Map of String) Optional. Map of Attributes and values set for this Group
+- `devicegroups` (Set of String) The ID of static Group(s) where device will be assigned.
- `devicename` (String) The Device name (localhost name) of the device.
-- `profiles` (Set of String) Optional. List of Configuration Profiles assigned to this Device
+- `profiles` (Set of String) Optional. List of Configuration Profiles (Custom or predefined Profiles and Custom Declarations) assigned to this device.
### Read-Only
@@ -50,6 +49,8 @@ resource "simplemdm_device" "firstdevice" {
Import is supported using the following syntax:
+The [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import) can be used, for example:
+
```shell
# Device can be imported by specifying the device ID.
terraform import simplemdm_device.example 123456
diff --git a/docs/resources/devicegroup.md b/docs/resources/devicegroup.md
deleted file mode 100644
index 50b1fb4..0000000
--- a/docs/resources/devicegroup.md
+++ /dev/null
@@ -1,50 +0,0 @@
----
-# generated by https://github.com/hashicorp/terraform-plugin-docs
-page_title: "simplemdm_devicegroup Resource - simplemdm"
-subcategory: ""
-description: |-
- Device Group resource can be used to manage Device Group. Can be used together with Custom Profile(s), Attribute(s), Assignment Group(s) or Device Group(s) and set addition details regarding Device Group.
----
-
-# simplemdm_devicegroup (Resource)
-
-Device Group resource can be used to manage Device Group. Can be used together with Custom Profile(s), Attribute(s), Assignment Group(s) or Device Group(s) and set addition details regarding Device Group.
-
-## Example Usage
-
-```terraform
-resource "simplemdm_devicegroup" "testgroup" {
- name = "group2"
- attributes = {
- "myattribute" = "attributevalue"
- }
- profiles = [123456, 654321]
- customprofiles = [456123]
-}
-```
-
-
-## Schema
-
-### Required
-
-- `name` (String) Required. The name of the device group.
-
-### Optional
-
-- `attributes` (Map of String) Optional. Map of Custom Configuration Profiles and values set for this Device Group
-- `customprofiles` (Set of String) Optional. List of Custom Configuration Profiles assigned to this Device Group
-- `profiles` (Set of String) Optional. List of Configuration Profiles assigned to this Device Group
-
-### Read-Only
-
-- `id` (String) ID of a Device Group in SimpleMDM
-
-## Import
-
-Import is supported using the following syntax:
-
-```shell
-# devicegroup can be imported by specifying the numeric identifier.
-terraform import simplemdm_devicegroup.example 123456
-```
diff --git a/docs/resources/script.md b/docs/resources/script.md
index 0a5ac68..f524616 100644
--- a/docs/resources/script.md
+++ b/docs/resources/script.md
@@ -45,6 +45,8 @@ resource "simplemdm_script" "test" {
Import is supported using the following syntax:
+The [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import) can be used, for example:
+
```shell
# devicegroup can be imported by specifying the numeric identifier.
terraform import simplemdm_script.example 123456
diff --git a/docs/resources/scriptjob.md b/docs/resources/scriptjob.md
index fa677bc..33824e0 100644
--- a/docs/resources/scriptjob.md
+++ b/docs/resources/scriptjob.md
@@ -16,7 +16,6 @@ Script resource can be used to manage Scripts Jobs.
resource "simplemdm_scriptjob" "test" {
script_id = "35"
device_ids = ["1", "2", "3"]
- group_ids = ["4", "5"]
assignment_group_ids = ["6", "7"]
custom_attribute = "greeting_attribute"
custom_attribute_regex = "\\n"
@@ -30,7 +29,6 @@ resource "simplemdm_scriptjob" "test" {
- `assignment_group_ids` (Set of String) A comma separated list of assignment group IDs to run the script on. All macOS devices from these assignment groups will be included At least one of `device_ids`, `group_ids`, or `assignment_group_ids` must be provided.
- `device_ids` (Set of String) A comma separated list of device IDs to run the script on. At least one of `device_ids`, `group_ids`, or `assignment_group_ids` must be provided.
-- `group_ids` (Set of String) A comma separated list of group IDs to run the script on. All macOS devices from these groups will be included. At least one of `device_ids`, `group_ids`, or `assignment_group_ids` must be provided.
- `script_id` (String) Required. The ID of the script to be run on the devices
### Optional
@@ -47,6 +45,8 @@ resource "simplemdm_scriptjob" "test" {
Import is supported using the following syntax:
+The [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import) can be used, for example:
+
```shell
# Script Jobs can be imported by specifying the job ID.
terraform import simplemdm_scriptjob.example 123456
diff --git a/examples/data-sources/simplemdm_customdeclaration/data-srouce.tf b/examples/data-sources/simplemdm_customdeclaration/data-srouce.tf
new file mode 100644
index 0000000..403dea7
--- /dev/null
+++ b/examples/data-sources/simplemdm_customdeclaration/data-srouce.tf
@@ -0,0 +1,3 @@
+data "simplemdm_customdeclaration" "test" {
+ id = "123456"
+}
\ No newline at end of file
diff --git a/examples/resources/simplemdm_assignmentgroup/resource.tf b/examples/resources/simplemdm_assignmentgroup/resource.tf
index beafaef..94094b5 100644
--- a/examples/resources/simplemdm_assignmentgroup/resource.tf
+++ b/examples/resources/simplemdm_assignmentgroup/resource.tf
@@ -4,13 +4,13 @@ resource "simplemdm_assignmentgroup" "myfirstgroup" {
//auto deploy true or false, default is true
auto_deploy = true
//group type "standard" or "munki", defaults to standard. If this parameter is changed it will destroy/create whole group
- group_type = "standard"
- install_type = "managed"
- apps = [123456]
profiles = [123456, 987654]
- groups = [135431, 654321]
devices = [135431, 987654]
profiles_sync = false
apps_push = false
apps_update = false
+ attributes = {
+ "testAttribute" = "attributevalue"
+ }
+ apps = [{ app_id = 553192, deployment_type = "munki", install_type = "managed" }]
}
diff --git a/examples/resources/simplemdm_customdeclaration/import.sh b/examples/resources/simplemdm_customdeclaration/import.sh
new file mode 100644
index 0000000..cdbbcb0
--- /dev/null
+++ b/examples/resources/simplemdm_customdeclaration/import.sh
@@ -0,0 +1 @@
+terraform import simplemdm_customdeclaration.example 12345
\ No newline at end of file
diff --git a/examples/resources/simplemdm_customdeclaration/resource.tf b/examples/resources/simplemdm_customdeclaration/resource.tf
new file mode 100644
index 0000000..a0a7996
--- /dev/null
+++ b/examples/resources/simplemdm_customdeclaration/resource.tf
@@ -0,0 +1,9 @@
+resource "simplemdm_customdeclaration" "test" {
+ name = "testdeclaration"
+ declaration = jsonencode(jsondecode(file("./testfiles/testdeclaration.json")))
+ userscope = true
+ attributesupport = true
+ escapeattributes = true
+ declaration_type = "com.apple.configuration.safari.bookmarks"
+ activation_predicate = ""
+}
\ No newline at end of file
diff --git a/examples/resources/simplemdm_devicegroup/import.sh b/examples/resources/simplemdm_devicegroup/import.sh
deleted file mode 100644
index c9286cd..0000000
--- a/examples/resources/simplemdm_devicegroup/import.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-# devicegroup can be imported by specifying the numeric identifier.
-terraform import simplemdm_devicegroup.example 123456
\ No newline at end of file
diff --git a/examples/resources/simplemdm_devicegroup/resource.tf b/examples/resources/simplemdm_devicegroup/resource.tf
deleted file mode 100644
index f46d70c..0000000
--- a/examples/resources/simplemdm_devicegroup/resource.tf
+++ /dev/null
@@ -1,8 +0,0 @@
-resource "simplemdm_devicegroup" "testgroup" {
- name = "group2"
- attributes = {
- "myattribute" = "attributevalue"
- }
- profiles = [123456, 654321]
- customprofiles = [456123]
-}
\ No newline at end of file
diff --git a/examples/resources/simplemdm_scriptjob/resource.tf b/examples/resources/simplemdm_scriptjob/resource.tf
index 04ec135..9953eeb 100644
--- a/examples/resources/simplemdm_scriptjob/resource.tf
+++ b/examples/resources/simplemdm_scriptjob/resource.tf
@@ -1,7 +1,6 @@
resource "simplemdm_scriptjob" "test" {
script_id = "35"
device_ids = ["1", "2", "3"]
- group_ids = ["4", "5"]
assignment_group_ids = ["6", "7"]
custom_attribute = "greeting_attribute"
custom_attribute_regex = "\\n"
diff --git a/go.mod b/go.mod
index 5b18e88..32574be 100644
--- a/go.mod
+++ b/go.mod
@@ -1,16 +1,14 @@
module github.com/DavidKrau/terraform-provider-simplemdm
-go 1.22.7
-
-toolchain go1.23.4
+go 1.24.0
require (
- github.com/DavidKrau/simplemdm-go-client v0.1.10
- github.com/hashicorp/terraform-plugin-framework v1.12.0
- github.com/hashicorp/terraform-plugin-framework-validators v0.13.0
- github.com/hashicorp/terraform-plugin-go v0.24.0
- github.com/hashicorp/terraform-plugin-log v0.9.0
- github.com/hashicorp/terraform-plugin-testing v1.7.0
+ github.com/DavidKrau/simplemdm-go-client v0.2.3
+ github.com/hashicorp/terraform-plugin-framework v1.17.0
+ github.com/hashicorp/terraform-plugin-framework-validators v0.19.0
+ github.com/hashicorp/terraform-plugin-go v0.29.0
+ github.com/hashicorp/terraform-plugin-log v0.10.0
+ github.com/hashicorp/terraform-plugin-testing v1.13.3
)
require (
@@ -19,42 +17,42 @@ require (
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/ProtonMail/go-crypto v1.1.6 // 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.17.0 // indirect
+ github.com/bmatcuk/doublestar/v4 v4.9.1 // indirect
+ github.com/cloudflare/circl v1.6.1 // indirect
+ github.com/fatih/color v1.18.0 // indirect
github.com/golang/protobuf v1.5.4 // indirect
- github.com/google/go-cmp v0.6.0 // indirect
+ github.com/google/go-cmp v0.7.0 // indirect
github.com/google/uuid v1.6.0 // indirect
- github.com/hashicorp/cli v1.1.6 // indirect
+ github.com/hashicorp/cli v1.1.7 // 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
- github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 // indirect
+ github.com/hashicorp/go-cty v1.5.0 // indirect
github.com/hashicorp/go-hclog v1.6.3 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
- github.com/hashicorp/go-plugin v1.6.1 // indirect
+ github.com/hashicorp/go-plugin v1.7.0 // indirect
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
github.com/hashicorp/go-uuid v1.0.3 // indirect
github.com/hashicorp/go-version v1.7.0 // indirect
- github.com/hashicorp/hc-install v0.9.0 // indirect
- github.com/hashicorp/hcl/v2 v2.20.0 // indirect
+ github.com/hashicorp/hc-install v0.9.2 // indirect
+ github.com/hashicorp/hcl/v2 v2.23.0 // indirect
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.33.0 // indirect
- github.com/hashicorp/terraform-registry-address v0.2.3 // indirect
+ github.com/hashicorp/terraform-exec v0.24.0 // indirect
+ github.com/hashicorp/terraform-json v0.27.2 // indirect
+ github.com/hashicorp/terraform-plugin-docs v0.24.0 // indirect
+ github.com/hashicorp/terraform-plugin-sdk/v2 v2.37.0 // indirect
+ github.com/hashicorp/terraform-registry-address v0.4.0 // indirect
github.com/hashicorp/terraform-svchost v0.1.1 // indirect
github.com/hashicorp/yamux v0.1.2 // indirect
github.com/huandu/xstrings v1.3.3 // indirect
github.com/imdario/mergo v0.3.15 // indirect
github.com/kr/pretty v0.3.0 // indirect
- github.com/mattn/go-colorable v0.1.13 // indirect
+ github.com/mattn/go-colorable v0.1.14 // 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
@@ -62,31 +60,30 @@ require (
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.1.0 // indirect
+ github.com/oklog/run v1.2.0 // indirect
github.com/posener/complete v1.2.3 // indirect
- github.com/rogpeppe/go-internal v1.13.1 // indirect
+ github.com/rogpeppe/go-internal v1.14.1 // indirect
github.com/shopspring/decimal v1.3.1 // indirect
github.com/spf13/cast v1.5.0 // indirect
- github.com/stretchr/testify v1.9.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
+ github.com/zclconf/go-cty v1.17.0 // indirect
go.abhg.dev/goldmark/frontmatter v0.2.0 // indirect
- golang.org/x/crypto v0.28.0 // indirect
+ golang.org/x/crypto v0.46.0 // indirect
golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df // indirect
- golang.org/x/mod v0.21.0 // indirect
- golang.org/x/net v0.30.0 // indirect
- golang.org/x/sync v0.9.0 // indirect
- golang.org/x/sys v0.26.0 // indirect
- golang.org/x/text v0.20.0 // indirect
- golang.org/x/tools v0.22.0 // indirect
+ golang.org/x/mod v0.30.0 // indirect
+ golang.org/x/net v0.48.0 // indirect
+ golang.org/x/sync v0.19.0 // indirect
+ golang.org/x/sys v0.39.0 // indirect
+ golang.org/x/text v0.32.0 // indirect
+ golang.org/x/tools v0.39.0 // indirect
google.golang.org/appengine v1.6.8 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53 // indirect
- google.golang.org/grpc v1.67.1 // indirect
- google.golang.org/protobuf v1.35.1 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
+ google.golang.org/grpc v1.77.0 // indirect
+ google.golang.org/protobuf v1.36.10 // indirect
gopkg.in/yaml.v2 v2.3.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/go.sum b/go.sum
index a6d6f1d..476d194 100644
--- a/go.sum
+++ b/go.sum
@@ -2,12 +2,12 @@ dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak=
github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
-github.com/DavidKrau/simplemdm-go-client v0.1.8 h1:HgWRtD0XqvnQ+VkSnKYykbjwGz4V89LfCupYB9C2mYY=
-github.com/DavidKrau/simplemdm-go-client v0.1.8/go.mod h1:tIrL/8ckUf4o2nmW9KCK91uDO3477WV+MEP77QYD0R0=
-github.com/DavidKrau/simplemdm-go-client v0.1.9 h1:Kf7XLWV/GfbyUkG+yjlJfAN2zj8YlVoRIDNuDg1qM10=
-github.com/DavidKrau/simplemdm-go-client v0.1.9/go.mod h1:tIrL/8ckUf4o2nmW9KCK91uDO3477WV+MEP77QYD0R0=
-github.com/DavidKrau/simplemdm-go-client v0.1.10 h1:k8vFIPoNy8tED5OUuzQNsXfGTXlJmJ9u3RAebU1eq48=
-github.com/DavidKrau/simplemdm-go-client v0.1.10/go.mod h1:tIrL/8ckUf4o2nmW9KCK91uDO3477WV+MEP77QYD0R0=
+github.com/DavidKrau/simplemdm-go-client v0.2.1 h1:R/SKgDUsGoJjoXaq+mEjguPwwJWCq/PWn6Z/diCX1dA=
+github.com/DavidKrau/simplemdm-go-client v0.2.1/go.mod h1:tIrL/8ckUf4o2nmW9KCK91uDO3477WV+MEP77QYD0R0=
+github.com/DavidKrau/simplemdm-go-client v0.2.2 h1:gmtIqYvXi7aBrpiJfWBHMwHJiNKP0E84TyKOSgwOeiA=
+github.com/DavidKrau/simplemdm-go-client v0.2.2/go.mod h1:tIrL/8ckUf4o2nmW9KCK91uDO3477WV+MEP77QYD0R0=
+github.com/DavidKrau/simplemdm-go-client v0.2.3 h1:x+eCD14uBfKck9SSw0H5WGxLHoeVHKaa2wpHpcZZ0h8=
+github.com/DavidKrau/simplemdm-go-client v0.2.3/go.mod h1:tIrL/8ckUf4o2nmW9KCK91uDO3477WV+MEP77QYD0R0=
github.com/Kunde21/markdownfmt/v3 v3.1.0 h1:KiZu9LKs+wFFBQKhrZJrFZwtLnCCWJahL+S+E/3VnM0=
github.com/Kunde21/markdownfmt/v3 v3.1.0/go.mod h1:tPXN1RTyOzJwhfHoon9wUr4HGYmWgVxSQN6VBJDkrVc=
github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
@@ -16,10 +16,10 @@ github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7Y
github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=
github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA=
github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM=
-github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
-github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
-github.com/ProtonMail/go-crypto v1.1.0-alpha.2 h1:bkyFVUP+ROOARdgCiJzNQo2V2kiB97LyUpzH9P6Hrlg=
-github.com/ProtonMail/go-crypto v1.1.0-alpha.2/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
+github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
+github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
+github.com/ProtonMail/go-crypto v1.1.6 h1:ZcV+Ropw6Qn0AX9brlQLAUXfqLBc7Bl+f/DmNxpLfdw=
+github.com/ProtonMail/go-crypto v1.1.6/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
github.com/agext/levenshtein v1.2.2 h1:0S/Yg6LYmFJ5stwQeRp6EeOcCbj7xiqQSdNelsXvaqE=
github.com/agext/levenshtein v1.2.2/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJEynmyUenKwP++x/+DdGV/Ec=
@@ -29,33 +29,38 @@ github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI=
github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY=
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
-github.com/bmatcuk/doublestar/v4 v4.7.1 h1:fdDeAqgT47acgwd9bd9HxJRDmc9UAmPpc+2m0CXv75Q=
-github.com/bmatcuk/doublestar/v4 v4.7.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
-github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA=
-github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8=
-github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU=
-github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA=
+github.com/bmatcuk/doublestar/v4 v4.9.1 h1:X8jg9rRZmJd4yRy7ZeNDRnM+T3ZfHv15JiBJ/avrEXE=
+github.com/bmatcuk/doublestar/v4 v4.9.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
+github.com/bufbuild/protocompile v0.14.1 h1:iA73zAf/fyljNjQKwYzUHD6AD4R8KMasmwa/FBatYVw=
+github.com/bufbuild/protocompile v0.14.1/go.mod h1:ppVdAIhbr2H8asPk6k4pY7t9zB1OU5DoEw9xY/FUi1c=
+github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0=
+github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg=
-github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
+github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s=
+github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
-github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4=
-github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI=
+github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
+github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
-github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU=
-github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow=
-github.com/go-git/go-git/v5 v5.12.0 h1:7Md+ndsjrzZxbddRDZjF14qK+NN56sy6wkqaVrjZtys=
-github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXYjuz9i5OEY=
+github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM=
+github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU=
+github.com/go-git/go-git/v5 v5.14.0 h1:/MD3lCrGjCen5WfEAzKg00MJJffKhC8gzS80ycmCi60=
+github.com/go-git/go-git/v5 v5.14.0/go.mod h1:Z5Xhoia5PcWA3NF8vRLURn9E5FRhSl7dGj9ItW3Wk5k=
+github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
+github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
+github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68=
github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=
+github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
@@ -63,13 +68,13 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
+github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/hashicorp/cli v1.1.6 h1:CMOV+/LJfL1tXCOKrgAX0uRKnzjj/mpmqNXloRSy2K8=
-github.com/hashicorp/cli v1.1.6/go.mod h1:MPon5QYlgjjo0BSoAiN0ESeT5fRzDjVRp+uioJ0piz4=
+github.com/hashicorp/cli v1.1.7 h1:/fZJ+hNdwfTSfsxMBa9WWMlfjUZbX8/LnUxgAd7lCVU=
+github.com/hashicorp/cli v1.1.7/go.mod h1:e6Mfpga9OCT1vqzFuoGZiiF/KaG9CbUfO5s3ghU3YgU=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
@@ -78,15 +83,15 @@ github.com/hashicorp/go-checkpoint v0.5.0/go.mod h1:7nfLNL10NsxqO4iWuW6tWW0HjZuD
github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
-github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 h1:1/D3zfFHttUKaCaGKZ/dR2roBXv0vKbSCnssIldfQdI=
-github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320/go.mod h1:EiZBMaudVLy8fmjf9Npq1dq9RalhveqZG5w/yz3mHWs=
+github.com/hashicorp/go-cty v1.5.0 h1:EkQ/v+dDNUqnuVpmS5fPqyY71NXVgT5gf32+57xY8g0=
+github.com/hashicorp/go-cty v1.5.0/go.mod h1:lFUCG5kd8exDobgSfyj4ONE/dc822kiYMguVKdHGMLM=
github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
-github.com/hashicorp/go-plugin v1.6.1 h1:P7MR2UP6gNKGPp+y7EZw2kOiq4IR9WiqLvp0XOsVdwI=
-github.com/hashicorp/go-plugin v1.6.1/go.mod h1:XPHFku2tFo3o3QKFgSYo+cghcUhw1NA1hZyMK0PWAw0=
+github.com/hashicorp/go-plugin v1.7.0 h1:YghfQH/0QmPNc/AZMTFE3ac8fipZyZECHdDPshfk+mA=
+github.com/hashicorp/go-plugin v1.7.0/go.mod h1:BExt6KEaIYx804z8k4gRzRLEvxKVb+kn0NMcihqOqb8=
github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU=
github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk=
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
@@ -94,36 +99,34 @@ github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/C
github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY=
github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
-github.com/hashicorp/hc-install v0.7.0 h1:Uu9edVqjKQxxuD28mR5TikkKDd/p55S8vzPC1659aBk=
-github.com/hashicorp/hc-install v0.7.0/go.mod h1:ELmmzZlGnEcqoUMKUuykHaPCIR1sYLYX+KSggWSKZuA=
-github.com/hashicorp/hc-install v0.9.0 h1:2dIk8LcvANwtv3QZLckxcjyF5w8KVtiMxu6G6eLhghE=
-github.com/hashicorp/hc-install v0.9.0/go.mod h1:+6vOP+mf3tuGgMApVYtmsnDoKWMDcFXeTxCACYZ8SFg=
-github.com/hashicorp/hcl/v2 v2.20.0 h1:l++cRs/5jQOiKVvqXZm/P1ZEfVXJmvLS9WSVxkaeTb4=
-github.com/hashicorp/hcl/v2 v2.20.0/go.mod h1:WmcD/Ym72MDOOx5F62Ly+leloeu6H7m0pG7VBiU6pQk=
+github.com/hashicorp/hc-install v0.9.2 h1:v80EtNX4fCVHqzL9Lg/2xkp62bbvQMnvPQ0G+OmtO24=
+github.com/hashicorp/hc-install v0.9.2/go.mod h1:XUqBQNnuT4RsxoxiM9ZaUk0NX8hi2h+Lb6/c0OZnC/I=
+github.com/hashicorp/hcl/v2 v2.23.0 h1:Fphj1/gCylPxHutVSEOf2fBOh1VE4AuLV7+kbJf3qos=
+github.com/hashicorp/hcl/v2 v2.23.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA=
github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y=
github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
-github.com/hashicorp/terraform-exec v0.21.0 h1:uNkLAe95ey5Uux6KJdua6+cv8asgILFVWkd/RG0D2XQ=
-github.com/hashicorp/terraform-exec v0.21.0/go.mod h1:1PPeMYou+KDUSSeRE9szMZ/oHf4fYUmB923Wzbq1ICg=
-github.com/hashicorp/terraform-json v0.22.1 h1:xft84GZR0QzjPVWs4lRUwvTcPnegqlyS7orfb5Ltvec=
-github.com/hashicorp/terraform-json v0.22.1/go.mod h1:JbWSQCLFSXFFhg42T7l9iJwdGXBYV8fmmD6o/ML4p3A=
-github.com/hashicorp/terraform-json v0.23.0 h1:sniCkExU4iKtTADReHzACkk8fnpQXrdD2xoR+lppBkI=
-github.com/hashicorp/terraform-json v0.23.0/go.mod h1:MHdXbBAbSg0GvzuWazEGKAn/cyNfIB7mN6y7KJN6y2c=
-github.com/hashicorp/terraform-plugin-docs v0.20.1 h1:Fq7E/HrU8kuZu3hNliZGwloFWSYfWEOWnylFhYQIoys=
-github.com/hashicorp/terraform-plugin-docs v0.20.1/go.mod h1:Yz6HoK7/EgzSrHPB9J/lWFzwl9/xep2OPnc5jaJDV90=
-github.com/hashicorp/terraform-plugin-framework v1.12.0 h1:7HKaueHPaikX5/7cbC1r9d1m12iYHY+FlNZEGxQ42CQ=
-github.com/hashicorp/terraform-plugin-framework v1.12.0/go.mod h1:N/IOQ2uYjW60Jp39Cp3mw7I/OpC/GfZ0385R0YibmkE=
-github.com/hashicorp/terraform-plugin-framework-validators v0.13.0 h1:bxZfGo9DIUoLLtHMElsu+zwqI4IsMZQBRRy4iLzZJ8E=
-github.com/hashicorp/terraform-plugin-framework-validators v0.13.0/go.mod h1:wGeI02gEhj9nPANU62F2jCaHjXulejm/X+af4PdZaNo=
-github.com/hashicorp/terraform-plugin-go v0.24.0 h1:2WpHhginCdVhFIrWHxDEg6RBn3YaWzR2o6qUeIEat2U=
-github.com/hashicorp/terraform-plugin-go v0.24.0/go.mod h1:tUQ53lAsOyYSckFGEefGC5C8BAaO0ENqzFd3bQeuYQg=
-github.com/hashicorp/terraform-plugin-log v0.9.0 h1:i7hOA+vdAItN1/7UrfBqBwvYPQ9TFvymaRGZED3FCV0=
-github.com/hashicorp/terraform-plugin-log v0.9.0/go.mod h1:rKL8egZQ/eXSyDqzLUuwUYLVdlYeamldAHSxjUFADow=
-github.com/hashicorp/terraform-plugin-sdk/v2 v2.33.0 h1:qHprzXy/As0rxedphECBEQAh3R4yp6pKksKHcqZx5G8=
-github.com/hashicorp/terraform-plugin-sdk/v2 v2.33.0/go.mod h1:H+8tjs9TjV2w57QFVSMBQacf8k/E1XwLXGCARgViC6A=
-github.com/hashicorp/terraform-plugin-testing v1.7.0 h1:I6aeCyZ30z4NiI3tzyDoO6fS7YxP5xSL1ceOon3gTe8=
-github.com/hashicorp/terraform-plugin-testing v1.7.0/go.mod h1:sbAreCleJNOCz+y5vVHV8EJkIWZKi/t4ndKiUjM9vao=
-github.com/hashicorp/terraform-registry-address v0.2.3 h1:2TAiKJ1A3MAkZlH1YI/aTVcLZRu7JseiXNRHbOAyoTI=
-github.com/hashicorp/terraform-registry-address v0.2.3/go.mod h1:lFHA76T8jfQteVfT7caREqguFrW3c4MFSPhZB7HHgUM=
+github.com/hashicorp/terraform-exec v0.24.0 h1:mL0xlk9H5g2bn0pPF6JQZk5YlByqSqrO5VoaNtAf8OE=
+github.com/hashicorp/terraform-exec v0.24.0/go.mod h1:lluc/rDYfAhYdslLJQg3J0oDqo88oGQAdHR+wDqFvo4=
+github.com/hashicorp/terraform-json v0.27.2 h1:BwGuzM6iUPqf9JYM/Z4AF1OJ5VVJEEzoKST/tRDBJKU=
+github.com/hashicorp/terraform-json v0.27.2/go.mod h1:GzPLJ1PLdUG5xL6xn1OXWIjteQRT2CNT9o/6A9mi9hE=
+github.com/hashicorp/terraform-plugin-docs v0.24.0 h1:YNZYd+8cpYclQyXbl1EEngbld8w7/LPOm99GD5nikIU=
+github.com/hashicorp/terraform-plugin-docs v0.24.0/go.mod h1:YLg+7LEwVmRuJc0EuCw0SPLxuQXw5mW8iJ5ml/kvi+o=
+github.com/hashicorp/terraform-plugin-framework v1.16.1 h1:1+zwFm3MEqd/0K3YBB2v9u9DtyYHyEuhVOfeIXbteWA=
+github.com/hashicorp/terraform-plugin-framework v1.16.1/go.mod h1:0xFOxLy5lRzDTayc4dzK/FakIgBhNf/lC4499R9cV4Y=
+github.com/hashicorp/terraform-plugin-framework v1.17.0 h1:JdX50CFrYcYFY31gkmitAEAzLKoBgsK+iaJjDC8OexY=
+github.com/hashicorp/terraform-plugin-framework v1.17.0/go.mod h1:4OUXKdHNosX+ys6rLgVlgklfxN3WHR5VHSOABeS/BM0=
+github.com/hashicorp/terraform-plugin-framework-validators v0.19.0 h1:Zz3iGgzxe/1XBkooZCewS0nJAaCFPFPHdNJd8FgE4Ow=
+github.com/hashicorp/terraform-plugin-framework-validators v0.19.0/go.mod h1:GBKTNGbGVJohU03dZ7U8wHqc2zYnMUawgCN+gC0itLc=
+github.com/hashicorp/terraform-plugin-go v0.29.0 h1:1nXKl/nSpaYIUBU1IG/EsDOX0vv+9JxAltQyDMpq5mU=
+github.com/hashicorp/terraform-plugin-go v0.29.0/go.mod h1:vYZbIyvxyy0FWSmDHChCqKvI40cFTDGSb3D8D70i9GM=
+github.com/hashicorp/terraform-plugin-log v0.10.0 h1:eu2kW6/QBVdN4P3Ju2WiB2W3ObjkAsyfBsL3Wh1fj3g=
+github.com/hashicorp/terraform-plugin-log v0.10.0/go.mod h1:/9RR5Cv2aAbrqcTSdNmY1NRHP4E3ekrXRGjqORpXyB0=
+github.com/hashicorp/terraform-plugin-sdk/v2 v2.37.0 h1:NFPMacTrY/IdcIcnUB+7hsore1ZaRWU9cnB6jFoBnIM=
+github.com/hashicorp/terraform-plugin-sdk/v2 v2.37.0/go.mod h1:QYmYnLfsosrxjCnGY1p9c7Zj6n9thnEE+7RObeYs3fA=
+github.com/hashicorp/terraform-plugin-testing v1.13.3 h1:QLi/khB8Z0a5L54AfPrHukFpnwsGL8cwwswj4RZduCo=
+github.com/hashicorp/terraform-plugin-testing v1.13.3/go.mod h1:WHQ9FDdiLoneey2/QHpGM/6SAYf4A7AZazVg7230pLE=
+github.com/hashicorp/terraform-registry-address v0.4.0 h1:S1yCGomj30Sao4l5BMPjTGZmCNzuv7/GDTDX99E9gTk=
+github.com/hashicorp/terraform-registry-address v0.4.0/go.mod h1:LRS1Ay0+mAiRkUyltGT+UHWkIqTFvigGn/LbMshfflE=
github.com/hashicorp/terraform-svchost v0.1.1 h1:EZZimZ1GxdqFRinZ1tpJwVxxt49xc/S52uzrw4x0jKQ=
github.com/hashicorp/terraform-svchost v0.1.1/go.mod h1:mNsjQfZyf/Jhz35v6/0LWcv26+X7JPS+buii2c9/ctc=
github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8=
@@ -135,8 +138,8 @@ github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM=
github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
-github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c=
-github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo=
+github.com/jhump/protoreflect v1.17.0 h1:qOEr613fac2lOuTgWN4tPAtLL7fUSbuJL5X5XumQh94=
+github.com/jhump/protoreflect v1.17.0/go.mod h1:h9+vUUL38jiBzck8ck+6G/aeMX8Z4QUY/NiJPwPNi+8=
github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
@@ -146,15 +149,12 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
-github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
-github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
-github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
+github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
+github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
-github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
@@ -171,26 +171,25 @@ github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RR
github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
-github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA=
-github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU=
-github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4=
-github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/oklog/run v1.2.0 h1:O8x3yXwah4A73hJdlrwo/2X6J62gE5qTMusH0dvz60E=
+github.com/oklog/run v1.2.0/go.mod h1:mgDbKRSwPhJfesJ4PntqFUbKQRZ50NgmZTSPlFA0YFk=
+github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4=
+github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo=
github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s=
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
-github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
-github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
-github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
-github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
+github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
+github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8=
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
-github.com/skeema/knownhosts v1.2.2 h1:Iug2P4fLmDw9f41PB6thxUkNUkJzB5i+1/exaj40L3A=
-github.com/skeema/knownhosts v1.2.2/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo=
+github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8=
+github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY=
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
@@ -199,8 +198,8 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
-github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
-github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
+github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI=
github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
@@ -215,38 +214,54 @@ github.com/yuin/goldmark v1.7.7 h1:5m9rrB1sW3JUMToKFQfb+FGt1U7r57IHu5GrYrG2nqU=
github.com/yuin/goldmark v1.7.7/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E=
github.com/yuin/goldmark-meta v1.1.0 h1:pWw+JLHGZe8Rk0EGsMVssiNb/AaPMHfSRszZeUeiOUc=
github.com/yuin/goldmark-meta v1.1.0/go.mod h1:U4spWENafuA7Zyg+Lj5RqK/MF+ovMYtBvXi1lBb2VP0=
-github.com/zclconf/go-cty v1.14.4 h1:uXXczd9QDGsgu0i/QFR/hzI5NYCHLf6NQw/atrbnhq8=
-github.com/zclconf/go-cty v1.14.4/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE=
-github.com/zclconf/go-cty v1.15.0 h1:tTCRWxsexYUmtt/wVxgDClUe+uQusuI443uL6e+5sXQ=
-github.com/zclconf/go-cty v1.15.0/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE=
+github.com/zclconf/go-cty v1.17.0 h1:seZvECve6XX4tmnvRzWtJNHdscMtYEx5R7bnnVyd/d0=
+github.com/zclconf/go-cty v1.17.0/go.mod h1:wqFzcImaLTI6A5HfsRwB0nj5n0MRZFwmey8YoFPPs3U=
+github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 h1:4r45xpDWB6ZMSMNJFMOjqrGHynW3DIBuR2H9j0ug+Mo=
+github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940/go.mod h1:CmBdvvj3nqzfzJ6nTCIwDTPZ56aVGvDrmztiO5g3qrM=
go.abhg.dev/goldmark/frontmatter v0.2.0 h1:P8kPG0YkL12+aYk2yU3xHv4tcXzeVnN+gU0tJ5JnxRw=
go.abhg.dev/goldmark/frontmatter v0.2.0/go.mod h1:XqrEkZuM57djk7zrlRUB02x8I5J0px76YjkOzhB4YlU=
+go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
+go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
+go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
+go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
+go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
+go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
+go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
+go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
+go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
+go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
+go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
+go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
-golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw=
-golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U=
+golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU=
+golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc=
+golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU=
+golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0=
golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df h1:UA2aFVmmsIlefxMk29Dp2juaUSth8Pyn3Tq5Y5mJGME=
golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
-golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
-golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
-golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
+golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk=
+golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
-golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4=
-golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
+golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=
+golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
-golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ=
-golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
+golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -257,44 +272,48 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
-golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
+golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM=
-golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
-golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug=
-golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
+golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU=
+golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=
-golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
-golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA=
-golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
+golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ=
+golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
+gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53 h1:X58yt85/IXCx0Y3ZwN6sEIKZzQtDEYaBWrDvErdXrRE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20241015192408-796eee8c2d53/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI=
-google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E=
-google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20251124214823-79d6a2a48846 h1:Wgl1rcDNThT+Zn47YyCXOXyX/COgMTIdhJ717F0l4xk=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20251124214823-79d6a2a48846/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
+google.golang.org/grpc v1.77.0 h1:wVVY6/8cGA6vvffn+wWK5ToddbgdU3d8MNENr4evgXM=
+google.golang.org/grpc v1.77.0/go.mod h1:z0BY1iVj0q8E1uSQCjL9cppRj+gnZjzDnzV0dHhrNig=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
-google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
+google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
+google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
diff --git a/provider/app_resource_test.go b/provider/app_resource_test.go
index 71c01f3..2bfd826 100644
--- a/provider/app_resource_test.go
+++ b/provider/app_resource_test.go
@@ -14,13 +14,13 @@ func TestAccAppResourceWithAppStoreIdAttr(t *testing.T) {
{
Config: providerConfig + `
resource "simplemdm_app" "testapp" {
- app_store_id = "1477376905"
+ app_store_id = "357852748"
deploy_to = "outdated"
}
`,
Check: resource.ComposeAggregateTestCheckFunc(
// Verify attributes
- resource.TestCheckResourceAttr("simplemdm_app.testapp", "app_store_id", "1477376905"),
+ resource.TestCheckResourceAttr("simplemdm_app.testapp", "app_store_id", "357852748"),
// Verify dynamic values have any value set in the state.
resource.TestCheckResourceAttrSet("simplemdm_app.testapp", "id"),
diff --git a/provider/assignmentGroup_resource.go b/provider/assignmentGroup_resource.go
index adfa776..ed45691 100644
--- a/provider/assignmentGroup_resource.go
+++ b/provider/assignmentGroup_resource.go
@@ -28,18 +28,24 @@ var (
// assignment_groupResourceModel maps the resource schema data.
type assignment_groupResourceModel struct {
- Name types.String `tfsdk:"name"`
- AutoDeploy types.Bool `tfsdk:"auto_deploy"`
- GroupType types.String `tfsdk:"group_type"`
- InstallType types.String `tfsdk:"install_type"`
- ID types.String `tfsdk:"id"`
- Apps types.Set `tfsdk:"apps"`
- AppsUpdate types.Bool `tfsdk:"apps_update"`
- AppsPush types.Bool `tfsdk:"apps_push"`
- Profiles types.Set `tfsdk:"profiles"`
- ProfilesSync types.Bool `tfsdk:"profiles_sync"`
- Groups types.Set `tfsdk:"groups"`
- Devices types.Set `tfsdk:"devices"`
+ Name types.String `tfsdk:"name"`
+ AutoDeploy types.Bool `tfsdk:"auto_deploy"`
+ ID types.String `tfsdk:"id"`
+ Apps []appModel `tfsdk:"apps"`
+ AppsUpdate types.Bool `tfsdk:"apps_update"`
+ AppsPush types.Bool `tfsdk:"apps_push"`
+ Profiles types.Set `tfsdk:"profiles"`
+ ProfilesSync types.Bool `tfsdk:"profiles_sync"`
+ Devices types.Set `tfsdk:"devices"`
+ Attributes types.Map `tfsdk:"attributes"`
+ Priority types.String `tfsdk:"priority"`
+ AppTrackLocation types.Bool `tfsdk:"app_track_location"`
+}
+
+type appModel struct {
+ AppID types.String `tfsdk:"app_id"`
+ DeploymnetType types.String `tfsdk:"deployment_type"`
+ InstallType types.String `tfsdk:"install_type"`
}
// AssignmentGroupResource is a helper function to simplify the provider implementation.
@@ -69,86 +75,109 @@ func (r *assignment_groupResource) Metadata(_ context.Context, req resource.Meta
// Schema defines the schema for the resource.
func (r *assignment_groupResource) Schema(_ context.Context, _ resource.SchemaRequest, resp *resource.SchemaResponse) {
resp.Schema = schema.Schema{
- Description: "Assignment Group resource is used to manage group, you can assign App(s), Custom Profile(s), Device(s), Device Group(s) and set addition details regarding Assignemtn Group.",
+ Description: "Assignment Group resource is used to manage group, you can assign App(s), Profile(s), Custom Profile(s), Custom Declaration(s), Device(s) and set addition details regarding Group. In case you dont want to manage device/app assignments use lifecycle. Currently App assignment will always show diff in configuration as API is not providing all needed data (request for API change was already submitted).",
Attributes: map[string]schema.Attribute{
"name": schema.StringAttribute{
Required: true,
Optional: false,
- Description: "The name of the Assignment Group.",
+ Description: "The name of the Group.",
},
"id": schema.StringAttribute{
Computed: true,
PlanModifiers: []planmodifier.String{
stringplanmodifier.UseStateForUnknown(),
},
- Description: "ID of the Assignment Group in SimpleMDM",
+ Description: "ID of the Group in SimpleMDM",
},
"auto_deploy": schema.BoolAttribute{
Optional: true,
Computed: true,
Default: booldefault.StaticBool(true),
- Description: "Optional. Whether the Apps should be automatically pushed to device(s) when they join this Assignment Group. Defaults to true",
+ Description: "Optional. Whether the Apps should be automatically pushed to device(s) when they join this Group. Defaults to true",
},
- "group_type": schema.StringAttribute{
- Optional: true,
- Computed: true,
- Default: stringdefault.StaticString("standard"),
- Validators: []validator.String{
- // Validate string value must be "standard" or "munki"
- stringvalidator.OneOf("standard", "munki"),
- },
- PlanModifiers: []planmodifier.String{
- stringplanmodifier.RequiresReplace(),
- },
- Description: "Optional. Type of assignment group. Must be one of standard (for MDM app/media deployments) or munki for Munki app deployments. Defaults to standard.",
+ "app_track_location": schema.BoolAttribute{
+ Optional: true,
+ Computed: true,
+ Default: booldefault.StaticBool(true),
+ Description: "Optional. If true, it tracks the location of IOS device when the SimpleMDM mobile app is installed. Defaults to true.",
},
- "install_type": schema.StringAttribute{
+ "apps": schema.ListNestedAttribute{
Optional: true,
- Computed: true,
- Default: stringdefault.StaticString("managed"),
- Validators: []validator.String{
- // Validate string value must be "managed", "self_serve" or "munki"
- stringvalidator.OneOf([]string{"managed", "self_serve", "managed_updates", "default_installs"}...),
+ NestedObject: schema.NestedAttributeObject{
+ Attributes: map[string]schema.Attribute{
+ "app_id": schema.StringAttribute{
+ Required: true,
+ Description: "ID of the Application in SimpleMDM",
+ },
+ "deployment_type": schema.StringAttribute{
+ Optional: true,
+ Computed: true,
+ Description: "Optional. Type of assignment group. Must be one of standard (for MDM app/media deployments) or munki for Munki app deployments. Defaults to standard",
+ Default: stringdefault.StaticString("standard"),
+ PlanModifiers: []planmodifier.String{
+ stringplanmodifier.UseStateForUnknown(),
+ },
+ Validators: []validator.String{
+ stringvalidator.OneOf("standard", "munki"),
+ },
+ },
+ "install_type": schema.StringAttribute{
+ Optional: true,
+ Computed: true,
+ Description: "Optional. The install type for munki assignment groups. Must be one of managed, self_serve, default_installs or managed_updates. This setting has no effect for non-munki (standard) assignment groups. Defaults to managed.",
+ Default: stringdefault.StaticString("managed"),
+ PlanModifiers: []planmodifier.String{
+ stringplanmodifier.UseStateForUnknown(),
+ },
+ Validators: []validator.String{
+ stringvalidator.OneOf("managed", "self_serve", "default_installs", "managed_updates"),
+ },
+ },
+ },
},
- Description: "Optional. The install type for munki assignment groups. Must be one of managed, self_serve, managed_updates or default_installs. This setting has no effect for non-munki (standard) assignment groups. Defaults to managed.",
- },
- "apps": schema.SetAttribute{
- ElementType: types.StringType,
- Optional: true,
- Description: "Optional. List of Apps assigned to this assignment group",
+ Description: "Optional. List of Apps assigned to this group",
},
"apps_update": schema.BoolAttribute{
Optional: true,
Computed: true,
- Default: booldefault.StaticBool(false),
- Description: "Optional. Set true if you would like to send update Apps command after assignment group creation or changes. Defaults to false.",
+ Default: booldefault.StaticBool(true),
+ Description: "Optional. Updates associated apps on associated devices. A munki catalog refresh or MDM install command will be sent to all associated devices. Defaults to true",
},
"apps_push": schema.BoolAttribute{
Optional: true,
Computed: true,
- Default: booldefault.StaticBool(false),
- Description: "Optional. Set true if you would like to send push Apps command after assignment group creation or changes. Defaults to false.",
+ Default: booldefault.StaticBool(true),
+ Description: "Optional. Installs associated apps to associated devices. A munki catalog refresh or MDM install command will be sent to all associated devices. Defaults to true.",
},
"profiles": schema.SetAttribute{
ElementType: types.StringType,
Optional: true,
- Description: "Optional. List of Configuration Profiles (both Custom and predefined Profiles) assigned to this assignment group",
+ Description: "Optional. List of Configuration Profiles (Custom or predefined Profiles and Custom Declarations) assigned to this group",
},
"profiles_sync": schema.BoolAttribute{
Optional: true,
Computed: true,
- Default: booldefault.StaticBool(false),
- Description: "Optional. Set true if you would like to send Sync Profiles command after Assignment Group creation or changes. Defaults to false.",
+ Default: booldefault.StaticBool(true),
+ Description: "Optional. Set true if you would like to send Sync Profiles command after Group creation or changes. Defaults to true.",
},
- "groups": schema.SetAttribute{
+ "devices": schema.SetAttribute{
ElementType: types.StringType,
Optional: true,
- Description: "Optional. List of Device Groups assigned to this Assignment Group",
+ Description: "Optional. List of Devices assigned to this Group",
},
- "devices": schema.SetAttribute{
+ "attributes": schema.MapAttribute{
ElementType: types.StringType,
Optional: true,
- Description: "Optional. List of Devices assigned to this Assignment Group",
+ Description: "Optional. Map of Attributes and values set for this Group",
+ },
+ "priority": schema.StringAttribute{
+ Optional: true,
+ Description: "Optional. The priority (0 to 20) of the assignment group. Default to 0",
+ Default: stringdefault.StaticString("0"),
+ Computed: true,
+ Validators: []validator.String{
+ stringvalidator.OneOf("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20"),
+ },
},
},
}
@@ -171,7 +200,7 @@ func (r *assignment_groupResource) Create(ctx context.Context, req resource.Crea
}
// Generate API request body from plan
- assignmentgroup, err := r.client.AssignmentGroupCreate(plan.Name.ValueString(), plan.AutoDeploy.ValueBool(), plan.GroupType.ValueString(), plan.InstallType.ValueString())
+ assignmentgroup, err := r.client.AssignmentGroupCreate(plan.Name.ValueString(), plan.AutoDeploy.ValueBool(), plan.Priority.ValueString(), plan.AppTrackLocation.ValueBool())
if err != nil {
resp.Diagnostics.AddError(
"Error creating assignment group",
@@ -182,37 +211,36 @@ func (r *assignment_groupResource) Create(ctx context.Context, req resource.Crea
plan.ID = types.StringValue(strconv.Itoa(assignmentgroup.Data.ID))
- // Assign all apps in plan
- for _, appId := range plan.Apps.Elements() {
- err := r.client.AssignmentGroupAssignObject(plan.ID.ValueString(), strings.Replace(appId.String(), "\"", "", 2), "apps")
+ //setting attributes
+ for attribute, value := range plan.Attributes.Elements() {
+ err := r.client.AttributeSetAttributeForDeviceGroup(plan.ID.ValueString(), attribute, strings.Replace(value.String(), "\"", "", 2))
if err != nil {
resp.Diagnostics.AddError(
- "Error updating assignment group app assignment",
- "Could not update assignment group app assignment, unexpected error: "+err.Error(),
+ "Error updating device group attribute",
+ "Could not set attribute value for device group, unexpected error: "+err.Error(),
)
return
}
}
- // Assign all profiles in plan
- for _, profileId := range plan.Profiles.Elements() {
- err := r.client.AssignmentGroupAssignObject(plan.ID.ValueString(), strings.Replace(profileId.String(), "\"", "", 2), "profiles")
+ for _, app := range plan.Apps {
+ err := r.client.AssignmentGroupAssignApp(plan.ID.ValueString(), app.AppID.ValueString(), app.DeploymnetType.ValueString(), app.InstallType.ValueString())
if err != nil {
resp.Diagnostics.AddError(
- "Error updating assignment group profile assignment",
- "Could not update assignment group profile assignment, unexpected error: "+err.Error(),
+ "Error updating device group apps",
+ "Could not assing app to device group, unexpected error: "+err.Error(),
)
return
}
}
- //assign all groups in plan
- for _, groupId := range plan.Groups.Elements() {
- err := r.client.AssignmentGroupAssignObject(plan.ID.ValueString(), strings.Replace(groupId.String(), "\"", "", 2), "device_groups")
+ // Assign all profiles in plan
+ for _, profileId := range plan.Profiles.Elements() {
+ err := r.client.AssignmentGroupAssignObject(plan.ID.ValueString(), strings.Replace(profileId.String(), "\"", "", 2), "profiles")
if err != nil {
resp.Diagnostics.AddError(
- "Error updating assignment group device group assignment",
- "Could not update assignment group device group, unexpected error: "+err.Error(),
+ "Error updating assignment group profile assignment",
+ "Could not update assignment group profile assignment, unexpected error: "+err.Error(),
)
return
}
@@ -319,36 +347,78 @@ func (r *assignment_groupResource) Read(ctx context.Context, req resource.ReadRe
return
}
- //read apps and put them to slice
- appsPresent := false
- appsElements := []attr.Value{}
- for _, appAssigned := range assignmentGroup.Data.Relationships.Apps.Data {
- appsElements = append(appsElements, types.StringValue(strconv.Itoa(appAssigned.ID)))
- appsPresent = true
+ //load attributes for given group
+ attributes, err := r.client.AttributeGetAttributesForGroup(state.ID.ValueString())
+ if err != nil {
+ resp.Diagnostics.AddError(
+ "Error Reading SimpleMDM device group attributes",
+ "Could not read SimpleMDM device group attributes"+state.ID.ValueString()+": "+err.Error(),
+ )
+ return
+ }
+
+ //adding attributes to the map
+ attributePresent := false
+ attributesElements := map[string]attr.Value{}
+ for _, attribute := range attributes.Data {
+ if attribute.Attributes.Source == "group" {
+ attributesElements[attribute.ID] = types.StringValue(attribute.Attributes.Value)
+ attributePresent = true
+ }
}
- //if there are apps return them to state
- if appsPresent {
- appsSetValue, _ := types.SetValue(types.StringType, appsElements)
- state.Apps = appsSetValue
+ if attributePresent {
+ attributesSetValue, _ := types.MapValue(types.StringType, attributesElements)
+ state.Attributes = attributesSetValue
} else {
- appsSetValue := types.SetNull(types.StringType)
- state.Apps = appsSetValue
+ attributesSetValue := types.MapNull(types.StringType)
+ state.Attributes = attributesSetValue
}
- //read all groups and put them to slice
- groupsPresent := false
- groupsElements := []attr.Value{}
- for _, groupAssigned := range assignmentGroup.Data.Relationships.DeviceGroups.Data {
- groupsElements = append(groupsElements, types.StringValue(strconv.Itoa(groupAssigned.ID)))
- groupsPresent = true
+ // Load all profiles in SimpleMDM
+ profiles, err := r.client.ProfileGetAll()
+ if err != nil {
+ resp.Diagnostics.AddError(
+ "Error Reading SimpleMDM profiles",
+ "Could not read SimpleMDM profiles: "+err.Error(),
+ )
+ return
}
- //if there are groups return them to state
- if groupsPresent {
- groupsSetValue, _ := types.SetValue(types.StringType, groupsElements)
- state.Groups = groupsSetValue
+
+ //read apps and add them to state
+ if len(assignmentGroup.Data.Relationships.Apps.Data) >= 1 {
+ state.Apps = []appModel{}
+ for _, app := range assignmentGroup.Data.Relationships.Apps.Data {
+ state.Apps = append(state.Apps, appModel{
+ AppID: types.StringValue(strconv.Itoa(app.ID)),
+ DeploymnetType: types.StringValue(app.DeploymnetType),
+ InstallType: types.StringValue(app.InstallType),
+ })
+ }
} else {
- groupsSetValue := types.SetNull(types.StringType)
- state.Groups = groupsSetValue
+ state.Apps = nil
+ }
+ //read all profiles and put them to slice
+ profilesPresent := false
+ profilesElements := []attr.Value{}
+
+ for _, profile := range profiles.Data {
+ for _, group := range profile.Relationships.DeviceGroups.Groups.Data {
+ if strconv.Itoa(group.ID) == state.ID.ValueString() {
+ profilesElements = append(profilesElements, types.StringValue(strconv.Itoa(profile.ID)))
+ profilesPresent = true
+
+ }
+ }
+
+ }
+
+ //if there are profile or custom profiles return them to state
+ if profilesPresent {
+ profilesSetValue, _ := types.SetValue(types.StringType, profilesElements)
+ state.Profiles = profilesSetValue
+ } else {
+ profilesSetValue := types.SetNull(types.StringType)
+ state.Profiles = profilesSetValue
}
//read all devices and put them to slice
@@ -367,36 +437,11 @@ func (r *assignment_groupResource) Read(ctx context.Context, req resource.ReadRe
state.Devices = devicesSetValue
}
- resp.Diagnostics.AddWarning(
- "Notice about profiles:",
- "API limitations is currently not allowing terraform provider to get state of the profiles assigned to assigment group."+
- " This is not issue as long as you are using only terraform provider to manage profiles for assigment group."+
- " This will be implemented properly once API will have correct responses and we will be able to load profiles for assignment group via API.",
- )
-
- // //read all profiles and put them to slice
- // profilesPresent := false
- // profilesElements := []attr.Value{}
- // for _, profileAssigned := range assignmentGroup.Data.Relationships.DeviceGroups.Data { //<