feat: add magic site-to-site VPN setting resource support with unifi_setting_magic_site_to_site_vpn resource (#35)
* feat: add magic site-to-site VPN setting resource support with `unifi_setting_magic_site_to_site_vpn` resource * do not use default * require controller version >=7.4 for magic site to site vpn tests
This commit is contained in:
committed by
GitHub
parent
f815ffef79
commit
a78667e669
@@ -0,0 +1,48 @@
|
|||||||
|
package acctest
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
pt "github.com/filipowm/terraform-provider-unifi/internal/provider/testing"
|
||||||
|
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
|
||||||
|
"github.com/hashicorp/terraform-plugin-testing/plancheck"
|
||||||
|
"sync"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
var settingMagicSiteToSiteVpnLock = &sync.Mutex{}
|
||||||
|
|
||||||
|
func TestAccSettingMagicSiteToSiteVpn(t *testing.T) {
|
||||||
|
AcceptanceTest(t, AcceptanceTestCase{
|
||||||
|
VersionConstraint: ">= 7.4",
|
||||||
|
Lock: settingMagicSiteToSiteVpnLock,
|
||||||
|
Steps: []resource.TestStep{
|
||||||
|
{
|
||||||
|
Config: testAccSettingMagicSiteToSiteVpnConfig(true),
|
||||||
|
Check: resource.ComposeTestCheckFunc(
|
||||||
|
resource.TestCheckResourceAttrSet("unifi_setting_magic_site_to_site_vpn.test", "id"),
|
||||||
|
resource.TestCheckResourceAttr("unifi_setting_magic_site_to_site_vpn.test", "site", "default"),
|
||||||
|
resource.TestCheckResourceAttr("unifi_setting_magic_site_to_site_vpn.test", "enabled", "true"),
|
||||||
|
),
|
||||||
|
ConfigPlanChecks: pt.CheckResourceActions("unifi_setting_magic_site_to_site_vpn.test", plancheck.ResourceActionCreate),
|
||||||
|
},
|
||||||
|
pt.ImportStepWithSite("unifi_setting_magic_site_to_site_vpn.test"),
|
||||||
|
{
|
||||||
|
Config: testAccSettingMagicSiteToSiteVpnConfig(false),
|
||||||
|
Check: resource.ComposeTestCheckFunc(
|
||||||
|
resource.TestCheckResourceAttrSet("unifi_setting_magic_site_to_site_vpn.test", "id"),
|
||||||
|
resource.TestCheckResourceAttr("unifi_setting_magic_site_to_site_vpn.test", "site", "default"),
|
||||||
|
resource.TestCheckResourceAttr("unifi_setting_magic_site_to_site_vpn.test", "enabled", "false"),
|
||||||
|
),
|
||||||
|
ConfigPlanChecks: pt.CheckResourceActions("unifi_setting_magic_site_to_site_vpn.test", plancheck.ResourceActionUpdate),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func testAccSettingMagicSiteToSiteVpnConfig(enabled bool) string {
|
||||||
|
return fmt.Sprintf(`
|
||||||
|
resource "unifi_setting_magic_site_to_site_vpn" "test" {
|
||||||
|
enabled = %t
|
||||||
|
}
|
||||||
|
`, enabled)
|
||||||
|
}
|
||||||
@@ -104,8 +104,8 @@ func (p *unifiProvider) Configure(ctx context.Context, req provider.ConfigureReq
|
|||||||
path.Root("api_url"),
|
path.Root("api_url"),
|
||||||
"Unknown UniFi Controller API URL",
|
"Unknown UniFi Controller API URL",
|
||||||
"The provider cannot create the UniFi Controller API client as there is an unknown configuration value "+
|
"The provider cannot create the UniFi Controller API client as there is an unknown configuration value "+
|
||||||
"for the API endpoint. Either target apply the source of the value first, set the value statically in "+
|
"for the API endpoint. Either target apply the source of the value first, set the value statically in "+
|
||||||
"the configuration, or use the UNIFI_API environment variable.",
|
"the configuration, or use the UNIFI_API environment variable.",
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,6 +177,7 @@ func (p *unifiProvider) Resources(_ context.Context) []func() resource.Resource
|
|||||||
settings.NewAutoSpeedtestResource,
|
settings.NewAutoSpeedtestResource,
|
||||||
settings.NewCountryResource,
|
settings.NewCountryResource,
|
||||||
settings.NewLocaleResource,
|
settings.NewLocaleResource,
|
||||||
|
settings.NewMagicSiteToSiteVpnResource,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,83 @@
|
|||||||
|
package settings
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/filipowm/go-unifi/unifi"
|
||||||
|
"github.com/filipowm/terraform-provider-unifi/internal/provider/base"
|
||||||
|
"github.com/hashicorp/terraform-plugin-framework/diag"
|
||||||
|
"github.com/hashicorp/terraform-plugin-framework/resource"
|
||||||
|
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
|
||||||
|
"github.com/hashicorp/terraform-plugin-framework/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
type magicSiteToSiteVpnModel struct {
|
||||||
|
base.Model
|
||||||
|
Enabled types.Bool `tfsdk:"enabled"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *magicSiteToSiteVpnModel) AsUnifiModel() (interface{}, diag.Diagnostics) {
|
||||||
|
diags := diag.Diagnostics{}
|
||||||
|
|
||||||
|
model := &unifi.SettingMagicSiteToSiteVpn{
|
||||||
|
ID: d.ID.ValueString(),
|
||||||
|
Enabled: d.Enabled.ValueBool(),
|
||||||
|
}
|
||||||
|
|
||||||
|
return model, diags
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *magicSiteToSiteVpnModel) Merge(other interface{}) diag.Diagnostics {
|
||||||
|
diags := diag.Diagnostics{}
|
||||||
|
|
||||||
|
model, ok := other.(*unifi.SettingMagicSiteToSiteVpn)
|
||||||
|
if !ok {
|
||||||
|
diags.AddError("Cannot merge", "Cannot merge type that is not *unifi.SettingMagicSiteToSiteVpn")
|
||||||
|
return diags
|
||||||
|
}
|
||||||
|
|
||||||
|
d.ID = types.StringValue(model.ID)
|
||||||
|
d.Enabled = types.BoolValue(model.Enabled)
|
||||||
|
|
||||||
|
return diags
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
_ base.ResourceModel = &magicSiteToSiteVpnModel{}
|
||||||
|
_ resource.Resource = &magicSiteToSiteVpnResource{}
|
||||||
|
_ resource.ResourceWithConfigure = &magicSiteToSiteVpnResource{}
|
||||||
|
_ resource.ResourceWithImportState = &magicSiteToSiteVpnResource{}
|
||||||
|
)
|
||||||
|
|
||||||
|
type magicSiteToSiteVpnResource struct {
|
||||||
|
*BaseSettingResource[*magicSiteToSiteVpnModel]
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *magicSiteToSiteVpnResource) Schema(_ context.Context, _ resource.SchemaRequest, resp *resource.SchemaResponse) {
|
||||||
|
resp.Schema = schema.Schema{
|
||||||
|
MarkdownDescription: "Manages Magic Site to Site VPN settings for a UniFi site.",
|
||||||
|
Attributes: map[string]schema.Attribute{
|
||||||
|
"id": base.ID(),
|
||||||
|
"site": base.SiteAttribute(),
|
||||||
|
"enabled": schema.BoolAttribute{
|
||||||
|
MarkdownDescription: "Whether the Magic Site to Site VPN is enabled.",
|
||||||
|
Required: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMagicSiteToSiteVpnResource() resource.Resource {
|
||||||
|
r := &magicSiteToSiteVpnResource{}
|
||||||
|
r.BaseSettingResource = NewBaseSettingResource(
|
||||||
|
"unifi_setting_magic_site_to_site_vpn",
|
||||||
|
func() *magicSiteToSiteVpnModel { return &magicSiteToSiteVpnModel{} },
|
||||||
|
func(ctx context.Context, client *base.Client, site string) (interface{}, error) {
|
||||||
|
return client.GetSettingMagicSiteToSiteVpn(ctx, site)
|
||||||
|
},
|
||||||
|
func(ctx context.Context, client *base.Client, site string, body interface{}) (interface{}, error) {
|
||||||
|
return client.UpdateSettingMagicSiteToSiteVpn(ctx, site, body.(*unifi.SettingMagicSiteToSiteVpn))
|
||||||
|
},
|
||||||
|
)
|
||||||
|
return r
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user