fix: user ip in user datasource is populated with localDnsRecord (#57)
* fix: user `ip` in user datasource is populated with `localDnsRecord` * add test
This commit is contained in:
committed by
GitHub
parent
e9600c6e06
commit
ff14bd365f
@@ -3,7 +3,9 @@ package acctest
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/apparentlymart/go-cidr/cidr"
|
||||
"github.com/hashicorp/terraform-plugin-testing/helper/acctest"
|
||||
"net"
|
||||
"testing"
|
||||
|
||||
"github.com/filipowm/go-unifi/unifi"
|
||||
@@ -30,7 +32,63 @@ func TestAccDataUser_default(t *testing.T) {
|
||||
Steps: []resource.TestStep{
|
||||
{
|
||||
Config: testAccDataUserConfig_default(mac),
|
||||
Check: resource.ComposeTestCheckFunc(),
|
||||
Check: resource.ComposeTestCheckFunc(
|
||||
resource.TestCheckResourceAttrSet("data.unifi_user.test", "id"),
|
||||
resource.TestCheckResourceAttr("data.unifi_user.test", "mac", mac),
|
||||
resource.TestCheckResourceAttr("data.unifi_user.test", "name", name),
|
||||
),
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func TestAccDataUser_localDnsRecord(t *testing.T) {
|
||||
mac, unallocateTestMac := pt.AllocateTestMac(t)
|
||||
defer unallocateTestMac()
|
||||
name := acctest.RandomWithPrefix("tfacc")
|
||||
ctx := context.Background()
|
||||
n, err := testClient.ListNetwork(ctx, "default")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if len(n) == 0 {
|
||||
t.Fatal("no networks found, but default should exist")
|
||||
}
|
||||
_, subnet, err := net.ParseCIDR(n[0].IPSubnet)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
ip, err := cidr.Host(subnet, 1)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
AcceptanceTest(t, AcceptanceTestCase{
|
||||
VersionConstraint: ">= 7.3",
|
||||
PreCheck: func() {
|
||||
_, err = testClient.CreateUser(ctx, "default", &unifi.User{
|
||||
MAC: mac,
|
||||
Name: name,
|
||||
UseFixedIP: true,
|
||||
NetworkID: n[0].ID,
|
||||
FixedIP: ip.String(),
|
||||
LocalDNSRecord: "myuser.example.com",
|
||||
LocalDNSRecordEnabled: true,
|
||||
Note: name,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
},
|
||||
Steps: []resource.TestStep{
|
||||
{
|
||||
Config: testAccDataUserConfig_default(mac),
|
||||
Check: resource.ComposeTestCheckFunc(
|
||||
resource.TestCheckResourceAttrSet("data.unifi_user.test", "id"),
|
||||
resource.TestCheckResourceAttr("data.unifi_user.test", "mac", mac),
|
||||
resource.TestCheckResourceAttr("data.unifi_user.test", "name", name),
|
||||
resource.TestCheckResourceAttr("data.unifi_user.test", "local_dns_record", "myuser.example.com"),
|
||||
resource.TestCheckResourceAttr("data.unifi_user.test", "fixed_ip", ip.String()),
|
||||
),
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
@@ -66,7 +66,7 @@ var (
|
||||
dnsDataSourceFilterErrorRegex = regexp.MustCompile(`[filter.name,filter.record]`)
|
||||
)
|
||||
|
||||
func TestDNSRecordDataSource_failWithoutFilter(t *testing.T) {
|
||||
func TestDNSRecordDataSource_errorWithoutFilter(t *testing.T) {
|
||||
AcceptanceTest(t, AcceptanceTestCase{
|
||||
MinVersion: base.ControllerVersionDnsRecords,
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ func DataUser() *schema.Resource {
|
||||
Computed: true,
|
||||
},
|
||||
"fixed_ip": {
|
||||
Description: "fixed IPv4 address set for this user.",
|
||||
Description: "Fixed IPv4 address set for this user.",
|
||||
Type: schema.TypeString,
|
||||
Computed: true,
|
||||
},
|
||||
@@ -123,18 +123,18 @@ func dataUserRead(ctx context.Context, d *schema.ResourceData, meta interface{})
|
||||
localDnsRecord = resp.LocalDNSRecord
|
||||
}
|
||||
d.SetId(resp.ID)
|
||||
d.Set("site", site)
|
||||
d.Set("mac", resp.MAC)
|
||||
d.Set("name", resp.Name)
|
||||
d.Set("user_group_id", resp.UserGroupID)
|
||||
d.Set("note", resp.Note)
|
||||
d.Set("fixed_ip", fixedIP)
|
||||
d.Set("network_id", resp.NetworkID)
|
||||
d.Set("blocked", resp.Blocked)
|
||||
d.Set("dev_id_override", resp.DevIdOverride)
|
||||
d.Set("fixed_ip", fixedIP)
|
||||
d.Set("hostname", resp.Hostname)
|
||||
d.Set("ip", resp.IP)
|
||||
d.Set("ip", localDnsRecord)
|
||||
d.Set("local_dns_record", localDnsRecord)
|
||||
d.Set("mac", resp.MAC)
|
||||
d.Set("name", resp.Name)
|
||||
d.Set("network_id", resp.NetworkID)
|
||||
d.Set("note", resp.Note)
|
||||
d.Set("site", site)
|
||||
d.Set("user_group_id", resp.UserGroupID)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -12,6 +12,8 @@ import (
|
||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
|
||||
)
|
||||
|
||||
// TODO add validation: api.err.LocalDnsRecordRequiresFixedIp
|
||||
// TODO require v7.3+ for local dns record
|
||||
func ResourceUser() *schema.Resource {
|
||||
return &schema.Resource{
|
||||
Description: "The `unifi_user` resource manages network clients in the UniFi controller, which are identified by their unique MAC addresses.\n\n" +
|
||||
|
||||
Reference in New Issue
Block a user