diff --git a/go.mod b/go.mod index 73125ea7..4a990ab2 100644 --- a/go.mod +++ b/go.mod @@ -10,8 +10,7 @@ require ( github.com/hashicorp/terraform-plugin-sdk/v2 v2.34.0 github.com/stretchr/testify v1.9.0 github.com/tailscale/hujson v0.0.0-20221223112325-20486734a56a - github.com/tailscale/tailscale-client-go v1.17.1-0.20240729175651-90a1e935cc19 - github.com/tailscale/tailscale-client-go/v2 v2.0.0-20240821114300-27aa0bfb4219 + github.com/tailscale/tailscale-client-go/v2 v2.0.0-20240826162147-08f128738726 golang.org/x/tools v0.24.0 tailscale.com v1.72.0 ) diff --git a/go.sum b/go.sum index a17be927..cb4e8849 100644 --- a/go.sum +++ b/go.sum @@ -188,14 +188,8 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tailscale/hujson v0.0.0-20221223112325-20486734a56a h1:SJy1Pu0eH1C29XwJucQo73FrleVK6t4kYz4NVhp34Yw= github.com/tailscale/hujson v0.0.0-20221223112325-20486734a56a/go.mod h1:DFSS3NAGHthKo1gTlmEcSBiZrRJXi28rLNd/1udP1c8= -github.com/tailscale/tailscale-client-go v1.17.1-0.20240729175651-90a1e935cc19 h1:fRLv1yZH1ueL1cnpLhOnOymoBfMCIviCn0e0VkAjkK4= -github.com/tailscale/tailscale-client-go v1.17.1-0.20240729175651-90a1e935cc19/go.mod h1:jbwJyHniK3nyLttwcDTXnfdDQEnADvc4VMOP8hZWnR0= -github.com/tailscale/tailscale-client-go/v2 v2.0.0-20240819223802-3a9fb56052db h1:sckiiaymnxDtxozA8jGc2cAU1X/0vEmKULvAP8fTS1o= -github.com/tailscale/tailscale-client-go/v2 v2.0.0-20240819223802-3a9fb56052db/go.mod h1:i/MSgQ71kdyh1Wdp50XxrIgtsyO4uZ2SZSPd83lGKHM= -github.com/tailscale/tailscale-client-go/v2 v2.0.0-20240820184537-d8366c1105f5 h1:4KAE8ArCbcmTWCn1jMnhos+G4jMhGAJt76rVAWIO6D4= -github.com/tailscale/tailscale-client-go/v2 v2.0.0-20240820184537-d8366c1105f5/go.mod h1:i/MSgQ71kdyh1Wdp50XxrIgtsyO4uZ2SZSPd83lGKHM= -github.com/tailscale/tailscale-client-go/v2 v2.0.0-20240821114300-27aa0bfb4219 h1:j51CReIxNS/7ZrFmn5zm5IYoIBg8Or8BL6G3jFC/ZgY= -github.com/tailscale/tailscale-client-go/v2 v2.0.0-20240821114300-27aa0bfb4219/go.mod h1:i/MSgQ71kdyh1Wdp50XxrIgtsyO4uZ2SZSPd83lGKHM= +github.com/tailscale/tailscale-client-go/v2 v2.0.0-20240826162147-08f128738726 h1:LmzY47aAgi6MhlBe8iar0Syp1gODiChMK2UGWplRjG0= +github.com/tailscale/tailscale-client-go/v2 v2.0.0-20240826162147-08f128738726/go.mod h1:i/MSgQ71kdyh1Wdp50XxrIgtsyO4uZ2SZSPd83lGKHM= 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= diff --git a/tailscale/data_source_acl.go b/tailscale/data_source_acl.go index b30e9cab..121492ef 100644 --- a/tailscale/data_source_acl.go +++ b/tailscale/data_source_acl.go @@ -7,6 +7,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/tailscale/hujson" + tsclient "github.com/tailscale/tailscale-client-go/v2" ) func dataSourceACL() *schema.Resource { @@ -29,7 +30,7 @@ func dataSourceACL() *schema.Resource { } func dataSourceACLRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) acl, err := client.PolicyFile().Raw(ctx) if err != nil { diff --git a/tailscale/data_source_acl_test.go b/tailscale/data_source_acl_test.go index 4a490ce1..a31e05e3 100644 --- a/tailscale/data_source_acl_test.go +++ b/tailscale/data_source_acl_test.go @@ -9,6 +9,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" "github.com/tailscale/hujson" + tsclient "github.com/tailscale/tailscale-client-go/v2" ) func TestAccTailscaleACL(t *testing.T) { @@ -21,7 +22,7 @@ func TestAccTailscaleACL(t *testing.T) { { Config: `data "tailscale_acl" "acl" {}`, Check: func(s *terraform.State) error { - client := testAccProvider.Meta().(*Clients).V2 + client := testAccProvider.Meta().(*tsclient.Client) acl, err := client.PolicyFile().Raw(context.Background()) if err != nil { return fmt.Errorf("unable to get ACL: %s", err) diff --git a/tailscale/data_source_device.go b/tailscale/data_source_device.go index 4eaee9a4..1c3ef69d 100644 --- a/tailscale/data_source_device.go +++ b/tailscale/data_source_device.go @@ -71,7 +71,7 @@ func dataSourceDevice() *schema.Resource { } func dataSourceDeviceRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) var filter func(d tsclient.Device) bool var filterDesc string diff --git a/tailscale/data_source_devices.go b/tailscale/data_source_devices.go index 5516fbc7..d6a1007d 100644 --- a/tailscale/data_source_devices.go +++ b/tailscale/data_source_devices.go @@ -6,6 +6,8 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + + tsclient "github.com/tailscale/tailscale-client-go/v2" ) func dataSourceDevices() *schema.Resource { @@ -68,7 +70,7 @@ func dataSourceDevices() *schema.Resource { } func dataSourceDevicesRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) devices, err := client.Devices().List(ctx) if err != nil { diff --git a/tailscale/data_source_user.go b/tailscale/data_source_user.go index eda28112..5dca015d 100644 --- a/tailscale/data_source_user.go +++ b/tailscale/data_source_user.go @@ -83,7 +83,7 @@ func dataSourceUser() *schema.Resource { } func dataSourceUserRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) id, hasID := d.Get("id").(string) if !hasID { diff --git a/tailscale/data_source_users.go b/tailscale/data_source_users.go index ade77031..21118ca4 100644 --- a/tailscale/data_source_users.go +++ b/tailscale/data_source_users.go @@ -57,7 +57,7 @@ func dataSourceUsers() *schema.Resource { } func dataSourceUsersRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) var userType *tsclient.UserType if _userType, ok := d.Get("type").(string); ok { diff --git a/tailscale/data_source_users_test.go b/tailscale/data_source_users_test.go index 623d0aed..3660e1f9 100644 --- a/tailscale/data_source_users_test.go +++ b/tailscale/data_source_users_test.go @@ -8,6 +8,8 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + tsclient "github.com/tailscale/tailscale-client-go/v2" ) func TestAccTailscaleUsers(t *testing.T) { @@ -25,7 +27,7 @@ func TestAccTailscaleUsers(t *testing.T) { { Config: `data "tailscale_users" "all_users" {}`, Check: func(s *terraform.State) error { - client := testAccProvider.Meta().(*Clients).V2 + client := testAccProvider.Meta().(*tsclient.Client) users, err := client.Users().List(context.Background(), nil, nil) if err != nil { return fmt.Errorf("unable to list users: %s", err) @@ -95,7 +97,7 @@ func TestAccTailscaleUsers(t *testing.T) { { Config: userDataSources.String(), Check: func(s *terraform.State) error { - client := testAccProvider.Meta().(*Clients).V2 + client := testAccProvider.Meta().(*tsclient.Client) users, err := client.Users().List(context.Background(), nil, nil) if err != nil { return fmt.Errorf("unable to list users: %s", err) diff --git a/tailscale/datasource_devices_test.go b/tailscale/datasource_devices_test.go index 067cfc5c..8160e4c1 100644 --- a/tailscale/datasource_devices_test.go +++ b/tailscale/datasource_devices_test.go @@ -8,6 +8,8 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + tsclient "github.com/tailscale/tailscale-client-go/v2" ) func TestAccTailscaleDevices(t *testing.T) { @@ -29,7 +31,7 @@ func TestAccTailscaleDevices(t *testing.T) { { Config: `data "tailscale_devices" "all_devices" {}`, Check: func(s *terraform.State) error { - client := testAccProvider.Meta().(*Clients).V2 + client := testAccProvider.Meta().(*tsclient.Client) devices, err := client.Devices().List(context.Background()) if err != nil { return fmt.Errorf("unable to list devices: %s", err) @@ -103,7 +105,7 @@ func TestAccTailscaleDevices(t *testing.T) { { Config: devicesDataSources.String(), Check: func(s *terraform.State) error { - client := testAccProvider.Meta().(*Clients).V2 + client := testAccProvider.Meta().(*tsclient.Client) devices, err := client.Devices().List(context.Background()) if err != nil { return fmt.Errorf("unable to list devices: %s", err) diff --git a/tailscale/provider.go b/tailscale/provider.go index 67b0481e..98a98650 100644 --- a/tailscale/provider.go +++ b/tailscale/provider.go @@ -14,7 +14,6 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - tsclientv1 "github.com/tailscale/tailscale-client-go/tailscale" tsclient "github.com/tailscale/tailscale-client-go/v2" ) @@ -23,12 +22,6 @@ var providerVersion = "dev" type ProviderOption func(p *schema.Provider) -// Clients contains both v1 and v2 Tailscale Clients -type Clients struct { - V1 *tsclientv1.Client - V2 *tsclient.Client -} - // Provider returns the *schema.Provider instance that implements the terraform provider. func Provider(options ...ProviderOption) *schema.Provider { // Support both sets of OAuth Env vars for backwards compatibility @@ -160,45 +153,24 @@ func providerConfigure(_ context.Context, provider *schema.Provider, d *schema.R oauthScopes[i] = scope.(string) } - client, err := tsclientv1.NewClient( - "", - tailnet, - tsclientv1.WithBaseURL(baseURL), - tsclientv1.WithUserAgent(userAgent), - tsclientv1.WithOAuthClientCredentials(oauthClientID, oauthClientSecret, oauthScopes), - ) - if err != nil { - return nil, diagnosticsError(err, "failed to initialise client") - } - - clientV2 := &tsclient.Client{ + client := &tsclient.Client{ BaseURL: parsedBaseURL, UserAgent: userAgent, Tailnet: tailnet, } - clientV2.UseOAuth(oauthClientID, oauthClientSecret, oauthScopes) - - return &Clients{client, clientV2}, nil - } + client.UseOAuth(oauthClientID, oauthClientSecret, oauthScopes) - client, err := tsclientv1.NewClient( - apiKey, - tailnet, - tsclientv1.WithBaseURL(baseURL), - tsclientv1.WithUserAgent(userAgent), - ) - if err != nil { - return nil, diagnosticsError(err, "failed to initialise client") + return client, nil } - clientV2 := &tsclient.Client{ + client := &tsclient.Client{ BaseURL: parsedBaseURL, UserAgent: userAgent, APIKey: apiKey, Tailnet: tailnet, } - return &Clients{client, clientV2}, nil + return client, nil } func diagnosticsError(err error, message string, args ...interface{}) diag.Diagnostics { @@ -215,7 +187,7 @@ func diagnosticsError(err error, message string, args ...interface{}) diag.Diagn }, } - if details := tsclientv1.ErrorData(err); len(details) > 0 { + if details := tsclient.ErrorData(err); len(details) > 0 { for _, dt := range details { for _, e := range dt.Errors { diags = append(diags, diag.Diagnostic{ diff --git a/tailscale/provider_test.go b/tailscale/provider_test.go index 0694ad15..451429ec 100644 --- a/tailscale/provider_test.go +++ b/tailscale/provider_test.go @@ -16,7 +16,7 @@ import ( tsclient "github.com/tailscale/tailscale-client-go/v2" ) -var testClients *Clients +var testClient *tsclient.Client var testServer *TestServer var testAccProvider = Provider() @@ -70,13 +70,13 @@ func TestProvider_Implemented(t *testing.T) { func testProviderFactories(t *testing.T) map[string]func() (*schema.Provider, error) { t.Helper() - testClients, testServer = NewTestHarness(t) + testClient, testServer = NewTestHarness(t) return map[string]func() (*schema.Provider, error){ "tailscale": func() (*schema.Provider, error) { return Provider(func(p *schema.Provider) { // Set up a test harness for the provider p.ConfigureContextFunc = func(ctx context.Context, data *schema.ResourceData) (interface{}, diag.Diagnostics) { - return testClients, nil + return testClient, nil } // Don't require any of the global configuration @@ -139,7 +139,7 @@ func checkResourceRemoteProperties(resourceName string, check func(client *tscli return fmt.Errorf("resource has no ID set") } - client := testAccProvider.Meta().(*Clients).V2 + client := testAccProvider.Meta().(*tsclient.Client) return check(client, rs) } } @@ -155,7 +155,7 @@ func checkResourceDestroyed(resourceName string, check func(client *tsclient.Cli return fmt.Errorf("resource has no ID set") } - client := testAccProvider.Meta().(*Clients).V2 + client := testAccProvider.Meta().(*tsclient.Client) return check(client, rs) } } diff --git a/tailscale/resource_acl.go b/tailscale/resource_acl.go index 00d44ae7..81505f77 100644 --- a/tailscale/resource_acl.go +++ b/tailscale/resource_acl.go @@ -10,6 +10,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/tailscale/hujson" + tsclient "github.com/tailscale/tailscale-client-go/v2" ) const resourceACLDescription = `The acl resource allows you to configure a Tailscale ACL. See https://tailscale.com/kb/1018/acls for more information. Note that this resource will completely overwrite existing ACL contents for a given tailnet. @@ -33,7 +34,7 @@ func resourceACL() *schema.Resource { StateContext: schema.ImportStatePassthroughContext, }, CustomizeDiff: func(ctx context.Context, rd *schema.ResourceDiff, m interface{}) error { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) //if the acl is only known after apply, then acl will be an empty string and validation will fail if rd.Get("acl").(string) == "" { @@ -95,7 +96,7 @@ func resourceACL() *schema.Resource { } func resourceACLRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) acl, err := client.PolicyFile().Raw(ctx) if err != nil { return diagnosticsError(err, "Failed to fetch ACL") @@ -108,7 +109,7 @@ func resourceACLRead(ctx context.Context, d *schema.ResourceData, m interface{}) } func resourceACLCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) acl := d.Get("acl").(string) // Setting the `ts-default` ETag will make this operation succeed only if @@ -134,7 +135,7 @@ func resourceACLCreate(ctx context.Context, d *schema.ResourceData, m interface{ } func resourceACLUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) if !d.HasChange("acl") { return nil diff --git a/tailscale/resource_contacts.go b/tailscale/resource_contacts.go index 91efbbba..88638412 100644 --- a/tailscale/resource_contacts.go +++ b/tailscale/resource_contacts.go @@ -75,7 +75,7 @@ func resourceContacts() *schema.Resource { } func resourceContactsCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) if diagErr := updateContact(ctx, client, d, tsclient.ContactAccount); diagErr != nil { return diagErr @@ -94,7 +94,7 @@ func resourceContactsCreate(ctx context.Context, d *schema.ResourceData, m inter } func resourceContactsRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) contacts, err := client.Contacts().Get(ctx) if err != nil { @@ -117,7 +117,7 @@ func resourceContactsRead(ctx context.Context, d *schema.ResourceData, m interfa } func resourceContactsUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) if d.HasChange("account") { if diagErr := updateContact(ctx, client, d, tsclient.ContactAccount); diagErr != nil { diff --git a/tailscale/resource_device_authorization.go b/tailscale/resource_device_authorization.go index 7b8badbc..276bfff9 100644 --- a/tailscale/resource_device_authorization.go +++ b/tailscale/resource_device_authorization.go @@ -5,6 +5,8 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + + tsclient "github.com/tailscale/tailscale-client-go/v2" ) func resourceDeviceAuthorization() *schema.Resource { @@ -33,7 +35,7 @@ func resourceDeviceAuthorization() *schema.Resource { } func resourceDeviceAuthorizationRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) deviceID := d.Id() device, err := client.Devices().Get(ctx, deviceID) @@ -48,7 +50,7 @@ func resourceDeviceAuthorizationRead(ctx context.Context, d *schema.ResourceData } func resourceDeviceAuthorizationCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) deviceID := d.Get("device_id").(string) authorized := d.Get("authorized").(bool) @@ -63,7 +65,7 @@ func resourceDeviceAuthorizationCreate(ctx context.Context, d *schema.ResourceDa } func resourceDeviceAuthorizationUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) deviceID := d.Get("device_id").(string) device, err := client.Devices().Get(ctx, deviceID) diff --git a/tailscale/resource_device_key.go b/tailscale/resource_device_key.go index 314d1b77..c0df56e0 100644 --- a/tailscale/resource_device_key.go +++ b/tailscale/resource_device_key.go @@ -32,7 +32,7 @@ func resourceDeviceKey() *schema.Resource { } func resourceDeviceKeyCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) deviceID := d.Get("device_id").(string) keyExpiryDisabled := d.Get("key_expiry_disabled").(bool) @@ -50,7 +50,7 @@ func resourceDeviceKeyCreate(ctx context.Context, d *schema.ResourceData, m inte } func resourceDeviceKeyDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) deviceID := d.Get("device_id").(string) key := tsclient.DeviceKey{} @@ -63,7 +63,7 @@ func resourceDeviceKeyDelete(ctx context.Context, d *schema.ResourceData, m inte } func resourceDeviceKeyRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) deviceID := d.Get("device_id").(string) device, err := client.Devices().Get(ctx, deviceID) @@ -79,7 +79,7 @@ func resourceDeviceKeyRead(ctx context.Context, d *schema.ResourceData, m interf } func resourceDeviceKeyUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) deviceID := d.Get("device_id").(string) keyExpiryDisabled := d.Get("key_expiry_disabled").(bool) diff --git a/tailscale/resource_device_subnet_routes.go b/tailscale/resource_device_subnet_routes.go index 89fe8de9..39aaede2 100644 --- a/tailscale/resource_device_subnet_routes.go +++ b/tailscale/resource_device_subnet_routes.go @@ -5,6 +5,8 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + + tsclient "github.com/tailscale/tailscale-client-go/v2" ) func resourceDeviceSubnetRoutes() *schema.Resource { @@ -33,7 +35,7 @@ func resourceDeviceSubnetRoutes() *schema.Resource { } func resourceDeviceSubnetRoutesRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) deviceID := d.Get("device_id").(string) routes, err := client.Devices().SubnetRoutes(ctx, deviceID) @@ -49,7 +51,7 @@ func resourceDeviceSubnetRoutesRead(ctx context.Context, d *schema.ResourceData, } func resourceDeviceSubnetRoutesCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) deviceID := d.Get("device_id").(string) routes := d.Get("routes").(*schema.Set).List() @@ -67,7 +69,7 @@ func resourceDeviceSubnetRoutesCreate(ctx context.Context, d *schema.ResourceDat } func resourceDeviceSubnetRoutesUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) deviceID := d.Get("device_id").(string) routes := d.Get("routes").(*schema.Set).List() @@ -84,7 +86,7 @@ func resourceDeviceSubnetRoutesUpdate(ctx context.Context, d *schema.ResourceDat } func resourceDeviceSubnetRoutesDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) deviceID := d.Get("device_id").(string) if err := client.Devices().SetSubnetRoutes(ctx, deviceID, []string{}); err != nil { diff --git a/tailscale/resource_device_tags.go b/tailscale/resource_device_tags.go index 59bd7e72..96034abf 100644 --- a/tailscale/resource_device_tags.go +++ b/tailscale/resource_device_tags.go @@ -5,6 +5,8 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + + tsclient "github.com/tailscale/tailscale-client-go/v2" ) func resourceDeviceTags() *schema.Resource { @@ -44,7 +46,7 @@ func resourceDeviceTags() *schema.Resource { } func resourceDeviceTagsRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) deviceID := d.Get("device_id").(string) device, err := client.Devices().Get(ctx, deviceID) @@ -58,7 +60,7 @@ func resourceDeviceTagsRead(ctx context.Context, d *schema.ResourceData, m inter } func resourceDeviceTagsSet(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) deviceID := d.Get("device_id").(string) set := d.Get("tags").(*schema.Set) @@ -76,7 +78,7 @@ func resourceDeviceTagsSet(ctx context.Context, d *schema.ResourceData, m interf } func resourceDeviceTagsDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) deviceID := d.Get("device_id").(string) if err := client.Devices().SetTags(ctx, deviceID, []string{}); err != nil { diff --git a/tailscale/resource_device_tags_test.go b/tailscale/resource_device_tags_test.go index 1dd2e663..e5804caf 100644 --- a/tailscale/resource_device_tags_test.go +++ b/tailscale/resource_device_tags_test.go @@ -67,7 +67,7 @@ func TestAccTailscaleDeviceTags(t *testing.T) { { PreConfig: func() { // Set up ACLs to allow the required tags - client := testAccProvider.Meta().(*Clients).V2 + client := testAccProvider.Meta().(*tsclient.Client) err := client.PolicyFile().Set(context.Background(), ` { "tagOwners": { diff --git a/tailscale/resource_dns_nameservers.go b/tailscale/resource_dns_nameservers.go index c1c69f8b..895c4870 100644 --- a/tailscale/resource_dns_nameservers.go +++ b/tailscale/resource_dns_nameservers.go @@ -5,6 +5,8 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + + tsclient "github.com/tailscale/tailscale-client-go/v2" ) func resourceDNSNameservers() *schema.Resource { @@ -29,7 +31,7 @@ func resourceDNSNameservers() *schema.Resource { } func resourceDNSNameserversRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) servers, err := client.DNS().Nameservers(ctx) if err != nil { return diagnosticsError(err, "Failed to fetch dns nameservers") @@ -43,7 +45,7 @@ func resourceDNSNameserversRead(ctx context.Context, d *schema.ResourceData, m i } func resourceDNSNameserversCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) nameservers := d.Get("nameservers").([]interface{}) servers := make([]string, len(nameservers)) @@ -64,7 +66,7 @@ func resourceDNSNameserversUpdate(ctx context.Context, d *schema.ResourceData, m return resourceDNSNameserversRead(ctx, d, m) } - client := m.(*Clients).V2 + client := m.(*tsclient.Client) nameservers := d.Get("nameservers").([]interface{}) servers := make([]string, len(nameservers)) @@ -80,7 +82,7 @@ func resourceDNSNameserversUpdate(ctx context.Context, d *schema.ResourceData, m } func resourceDNSNameserversDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) if err := client.DNS().SetNameservers(ctx, []string{}); err != nil { return diagnosticsError(err, "Failed to set dns nameservers") diff --git a/tailscale/resource_dns_preferences.go b/tailscale/resource_dns_preferences.go index b42282cf..1c83aab5 100644 --- a/tailscale/resource_dns_preferences.go +++ b/tailscale/resource_dns_preferences.go @@ -30,7 +30,7 @@ func resourceDNSPreferences() *schema.Resource { } func resourceDNSPreferencesRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) preferences, err := client.DNS().Preferences(ctx) if err != nil { @@ -45,7 +45,7 @@ func resourceDNSPreferencesRead(ctx context.Context, d *schema.ResourceData, m i } func resourceDNSPreferencesCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) magicDNS := d.Get("magic_dns").(bool) preferences := tsclient.DNSPreferences{ MagicDNS: magicDNS, @@ -64,7 +64,7 @@ func resourceDNSPreferencesUpdate(ctx context.Context, d *schema.ResourceData, m return resourceDNSPreferencesRead(ctx, d, m) } - client := m.(*Clients).V2 + client := m.(*tsclient.Client) magicDNS := d.Get("magic_dns").(bool) preferences := tsclient.DNSPreferences{ @@ -79,7 +79,7 @@ func resourceDNSPreferencesUpdate(ctx context.Context, d *schema.ResourceData, m } func resourceDNSPreferencesDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) if err := client.DNS().SetPreferences(ctx, tsclient.DNSPreferences{}); err != nil { return diagnosticsError(err, "Failed to set dns preferences") diff --git a/tailscale/resource_dns_search_paths.go b/tailscale/resource_dns_search_paths.go index 83ddc4bd..ea99224c 100644 --- a/tailscale/resource_dns_search_paths.go +++ b/tailscale/resource_dns_search_paths.go @@ -5,6 +5,8 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + + tsclient "github.com/tailscale/tailscale-client-go/v2" ) func resourceDNSSearchPaths() *schema.Resource { @@ -28,7 +30,7 @@ func resourceDNSSearchPaths() *schema.Resource { } func resourceDNSSearchPathsRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) paths, err := client.DNS().SearchPaths(ctx) if err != nil { return diagnosticsError(err, "Failed to fetch dns search paths") @@ -42,7 +44,7 @@ func resourceDNSSearchPathsRead(ctx context.Context, d *schema.ResourceData, m i } func resourceDNSSearchPathsCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) paths := d.Get("search_paths").([]interface{}) searchPaths := make([]string, len(paths)) @@ -63,7 +65,7 @@ func resourceDNSSearchPathsUpdate(ctx context.Context, d *schema.ResourceData, m return resourceDNSSearchPathsRead(ctx, d, m) } - client := m.(*Clients).V2 + client := m.(*tsclient.Client) paths := d.Get("search_paths").([]interface{}) searchPaths := make([]string, len(paths)) @@ -79,7 +81,7 @@ func resourceDNSSearchPathsUpdate(ctx context.Context, d *schema.ResourceData, m } func resourceDNSSearchPathsDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) if err := client.DNS().SetSearchPaths(ctx, []string{}); err != nil { return diagnosticsError(err, "Failed to fetch set search paths") diff --git a/tailscale/resource_dns_split_nameservers.go b/tailscale/resource_dns_split_nameservers.go index 4b782322..b45db084 100644 --- a/tailscale/resource_dns_split_nameservers.go +++ b/tailscale/resource_dns_split_nameservers.go @@ -39,7 +39,7 @@ func resourceDNSSplitNameservers() *schema.Resource { } func resourceSplitDNSNameserversRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) splitDNS, err := client.DNS().SplitDNS(ctx) if err != nil { return diagnosticsError(err, "Failed to fetch split DNS configs") @@ -61,7 +61,7 @@ func resourceSplitDNSNameserversRead(ctx context.Context, d *schema.ResourceData } func resourceSplitDNSNameserversCreateOrUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) nameserversSet := d.Get("nameservers").(*schema.Set) domain := d.Get("domain").(string) @@ -84,7 +84,7 @@ func resourceSplitDNSNameserversCreateOrUpdate(ctx context.Context, d *schema.Re } func resourceSplitDNSNameserversDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) domain := d.Get("domain").(string) req := make(tsclient.SplitDNSRequest) diff --git a/tailscale/resource_logstream_configuration.go b/tailscale/resource_logstream_configuration.go index af1e9830..06e1d090 100644 --- a/tailscale/resource_logstream_configuration.go +++ b/tailscale/resource_logstream_configuration.go @@ -68,7 +68,7 @@ func resourceLogstreamConfiguration() *schema.Resource { } func resourceLogstreamConfigurationCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) logType := d.Get("log_type").(string) destinationType := d.Get("destination_type").(string) @@ -92,7 +92,7 @@ func resourceLogstreamConfigurationCreate(ctx context.Context, d *schema.Resourc } func resourceLogstreamConfigurationRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) logstream, err := client.Logging().LogstreamConfiguration(ctx, tsclient.LogType(d.Id())) if err != nil { @@ -124,7 +124,7 @@ func resourceLogstreamUpdate(ctx context.Context, d *schema.ResourceData, m inte } func resourceLogstreamDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) err := client.Logging().DeleteLogstreamConfiguration(ctx, tsclient.LogType(d.Id())) if err != nil { diff --git a/tailscale/resource_posture_integration.go b/tailscale/resource_posture_integration.go index 38e5b2fa..6ca6e2e8 100644 --- a/tailscale/resource_posture_integration.go +++ b/tailscale/resource_posture_integration.go @@ -60,7 +60,7 @@ func resourcePostureIntegration() *schema.Resource { } func resourcePostureIntegrationRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) integration, err := client.DevicePosture().GetIntegration(ctx, d.Id()) if err != nil { @@ -87,7 +87,7 @@ func resourcePostureIntegrationUpdateFromRemote(d *schema.ResourceData, integrat } func resourcePostureIntegrationCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) integration, err := client.DevicePosture().CreateIntegration( ctx, @@ -108,7 +108,7 @@ func resourcePostureIntegrationCreate(ctx context.Context, d *schema.ResourceDat } func resourcePostureIntegrationUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) integration, err := client.DevicePosture().UpdateIntegration( ctx, @@ -127,7 +127,7 @@ func resourcePostureIntegrationUpdate(ctx context.Context, d *schema.ResourceDat } func resourcePostureIntegrationDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) err := client.DevicePosture().DeleteIntegration(ctx, d.Id()) if err != nil { diff --git a/tailscale/resource_tailnet_key.go b/tailscale/resource_tailnet_key.go index 5b35f06b..11561412 100644 --- a/tailscale/resource_tailnet_key.go +++ b/tailscale/resource_tailnet_key.go @@ -104,7 +104,7 @@ func resourceTailnetKey() *schema.Resource { } func resourceTailnetKeyCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) reusable := d.Get("reusable").(bool) ephemeral := d.Get("ephemeral").(bool) preauthorized := d.Get("preauthorized").(bool) @@ -156,7 +156,7 @@ func resourceTailnetKeyCreate(ctx context.Context, d *schema.ResourceData, m int } func resourceTailnetKeyDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) err := client.Keys().Delete(ctx, d.Id()) switch { @@ -198,7 +198,7 @@ func resourceTailnetKeyDiff(ctx context.Context, d *schema.ResourceDiff, m inter return nil } - client := m.(*Clients).V2 + client := m.(*tsclient.Client) key, err := client.Keys().Get(ctx, d.Id()) if tsclient.IsNotFound(err) || (err == nil && key.Invalid) { d.ForceNew("recreate_if_invalid") @@ -209,7 +209,7 @@ func resourceTailnetKeyDiff(ctx context.Context, d *schema.ResourceDiff, m inter func resourceTailnetKeyRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { recreateIfInvalid := shouldRecreateIfInvalid(d.Get("reusable").(bool), d.Get("recreate_if_invalid").(string)) - client := m.(*Clients).V2 + client := m.(*tsclient.Client) key, err := client.Keys().Get(ctx, d.Id()) switch { diff --git a/tailscale/resource_tailnet_key_test.go b/tailscale/resource_tailnet_key_test.go index 9b00b6db..f3060c3d 100644 --- a/tailscale/resource_tailnet_key_test.go +++ b/tailscale/resource_tailnet_key_test.go @@ -239,7 +239,7 @@ func TestAccTailscaleTailnetKey(t *testing.T) { { PreConfig: func() { // Set up ACLs to allow the required tags - client := testAccProvider.Meta().(*Clients).V2 + client := testAccProvider.Meta().(*tsclient.Client) err := client.PolicyFile().Set(context.Background(), ` { "tagOwners": { diff --git a/tailscale/resource_tailnet_settings.go b/tailscale/resource_tailnet_settings.go index 8f5a0cab..0c8a832b 100644 --- a/tailscale/resource_tailnet_settings.go +++ b/tailscale/resource_tailnet_settings.go @@ -74,7 +74,7 @@ func resourceTailnetSettings() *schema.Resource { } func resourceTailnetSettingsRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) settings, err := client.TailnetSettings().Get(ctx) if err != nil { @@ -126,7 +126,7 @@ func resourceTailnetSettingsDoUpdate(ctx context.Context, d *schema.ResourceData PostureIdentityCollectionOn: optional[bool](d, "posture_identity_collection_on"), } - client := m.(*Clients).V2 + client := m.(*tsclient.Client) if err := client.TailnetSettings().Update(ctx, settings); err != nil { return diagnosticsError(err, "Failed to update tailnet settings") } diff --git a/tailscale/resource_webhook.go b/tailscale/resource_webhook.go index 5c96f290..f5c00d1e 100644 --- a/tailscale/resource_webhook.go +++ b/tailscale/resource_webhook.go @@ -83,7 +83,7 @@ func resourceWebhook() *schema.Resource { } func resourceWebhookCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) endpointURL := d.Get("endpoint_url").(string) providerType := tsclient.WebhookProviderType(d.Get("provider_type").(string)) @@ -113,7 +113,7 @@ func resourceWebhookCreate(ctx context.Context, d *schema.ResourceData, m interf } func resourceWebhookRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) webhook, err := client.Webhooks().Get(ctx, d.Id()) if err != nil { @@ -144,7 +144,7 @@ func resourceWebhookUpdate(ctx context.Context, d *schema.ResourceData, m interf return resourceWebhookRead(ctx, d, m) } - client := m.(*Clients).V2 + client := m.(*tsclient.Client) subscriptions := d.Get("subscriptions").(*schema.Set).List() var requestSubscriptions []tsclient.WebhookSubscriptionType @@ -161,7 +161,7 @@ func resourceWebhookUpdate(ctx context.Context, d *schema.ResourceData, m interf } func resourceWebhookDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { - client := m.(*Clients).V2 + client := m.(*tsclient.Client) err := client.Webhooks().Delete(ctx, d.Id()) if err != nil { diff --git a/tailscale/tailscale_test.go b/tailscale/tailscale_test.go index a348f67e..181f7895 100644 --- a/tailscale/tailscale_test.go +++ b/tailscale/tailscale_test.go @@ -13,7 +13,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - tsclientv1 "github.com/tailscale/tailscale-client-go/tailscale" tsclient "github.com/tailscale/tailscale-client-go/v2" ) @@ -28,7 +27,7 @@ type TestServer struct { ResponseBody interface{} } -func NewTestHarness(t *testing.T) (*Clients, *TestServer) { +func NewTestHarness(t *testing.T) (*tsclient.Client, *TestServer) { t.Helper() testServer := &TestServer{ @@ -55,20 +54,15 @@ func NewTestHarness(t *testing.T) (*Clients, *TestServer) { }) baseURL := fmt.Sprintf("http://localhost:%v", listener.Addr().(*net.TCPAddr).Port) - client, err := tsclientv1.NewClient("not-a-real-key", "example.com", tsclientv1.WithBaseURL(baseURL)) - if err != nil { - assert.FailNow(t, "Client initialization failed", err.Error()) - } - parsedBaseURL, err := url.Parse(baseURL) require.NoError(t, err) - clientV2 := &tsclient.Client{ + client := &tsclient.Client{ BaseURL: parsedBaseURL, APIKey: "not-a-real-key", Tailnet: "example.com", } - return &Clients{client, clientV2}, testServer + return client, testServer } func (t *TestServer) ServeHTTP(w http.ResponseWriter, r *http.Request) {