From 162e01e556d9d92e0833ce470ff6486f645a0d34 Mon Sep 17 00:00:00 2001 From: Michael Dokolin Date: Mon, 20 Nov 2023 18:33:43 +0100 Subject: [PATCH] feat: Add user manager router resource --- .../routeros_user_manager_router/import.sh | 3 + .../routeros_user_manager_router/resource.tf | 5 ++ routeros/provider.go | 1 + routeros/resource_user_manager_router.go | 60 +++++++++++++++++++ 4 files changed, 69 insertions(+) create mode 100644 examples/resources/routeros_user_manager_router/import.sh create mode 100644 examples/resources/routeros_user_manager_router/resource.tf create mode 100644 routeros/resource_user_manager_router.go diff --git a/examples/resources/routeros_user_manager_router/import.sh b/examples/resources/routeros_user_manager_router/import.sh new file mode 100644 index 00000000..deb3346d --- /dev/null +++ b/examples/resources/routeros_user_manager_router/import.sh @@ -0,0 +1,3 @@ +#The ID can be found via API or the terminal +#The command for the terminal is -> :put [/user-manager/router get [print show-ids]] +terraform import routeros_user_manager_router.test '*1' diff --git a/examples/resources/routeros_user_manager_router/resource.tf b/examples/resources/routeros_user_manager_router/resource.tf new file mode 100644 index 00000000..94df679c --- /dev/null +++ b/examples/resources/routeros_user_manager_router/resource.tf @@ -0,0 +1,5 @@ +resource "routeros_user_manager_router" "test" { + address = "127.0.0.1" + name = "test" + shared_secret = "password" +} diff --git a/routeros/provider.go b/routeros/provider.go index 0ca6356f..814f785f 100644 --- a/routeros/provider.go +++ b/routeros/provider.go @@ -197,6 +197,7 @@ func Provider() *schema.Provider { "routeros_user_manager_limitation": ResourceUserManagerLimitation(), "routeros_user_manager_profile": ResourceUserManagerProfile(), "routeros_user_manager_profile_limitation": ResourceUserManagerProfileLimitation(), + "routeros_user_manager_router": ResourceUserManagerRouter(), "routeros_user_manager_settings": ResourceUserManagerSettings(), }, DataSourcesMap: map[string]*schema.Resource{ diff --git a/routeros/resource_user_manager_router.go b/routeros/resource_user_manager_router.go new file mode 100644 index 00000000..f8710175 --- /dev/null +++ b/routeros/resource_user_manager_router.go @@ -0,0 +1,60 @@ +package routeros + +import ( + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" +) + +/* +{ + ".id": "*1", + "address": "127.0.0.1", + "coa-port": "3799", + "disabled": "false", + "name": "test", + "shared-secret": "password" +} +*/ + +// https://help.mikrotik.com/docs/display/ROS/User+Manager#UserManager-Routers +func ResourceUserManagerRouter() *schema.Resource { + resSchema := map[string]*schema.Schema{ + MetaResourcePath: PropResourcePath("/user-manager/router"), + MetaId: PropId(Id), + + "address": { + Type: schema.TypeString, + Required: true, + Description: "IP address of the RADIUS client.", + ValidateFunc: validation.IsIPAddress, + }, + "coa_port": { + Type: schema.TypeInt, + Optional: true, + Default: 3799, + Description: "Port number of CoA (Change of Authorization) communication.", + ValidateFunc: validation.IntBetween(0, 65535), + }, + KeyDisabled: PropDisabledRw, + KeyName: PropName("Unique name of the RADIUS client."), + "shared_secret": { + Type: schema.TypeString, + Optional: true, + Sensitive: true, + Description: "The shared secret to secure communication.", + }, + } + + return &schema.Resource{ + CreateContext: DefaultCreate(resSchema), + ReadContext: DefaultRead(resSchema), + UpdateContext: DefaultUpdate(resSchema), + DeleteContext: DefaultDelete(resSchema), + + Importer: &schema.ResourceImporter{ + StateContext: schema.ImportStatePassthroughContext, + }, + + Schema: resSchema, + } +}