Add debug entry point for delve

This commit is contained in:
Paul Tyng
2020-10-16 21:07:39 -04:00
parent a521ca89d6
commit 640cfdc5ec
4 changed files with 90 additions and 61 deletions

View File

@@ -28,10 +28,10 @@ func TestAccDataUserGroup_multiple_providers(t *testing.T) {
PreCheck: func() { preCheck(t) }, PreCheck: func() { preCheck(t) },
ProviderFactories: map[string]func() (*schema.Provider, error){ ProviderFactories: map[string]func() (*schema.Provider, error){
"unifi2": func() (*schema.Provider, error) { "unifi2": func() (*schema.Provider, error) {
return New(), nil return New("acctest")(), nil
}, },
"unifi3": func() (*schema.Provider, error) { "unifi3": func() (*schema.Provider, error) {
return New(), nil return New("acctest")(), nil
}, },
}, },
// TODO: CheckDestroy: , // TODO: CheckDestroy: ,

View File

@@ -21,68 +21,70 @@ func init() {
} }
} }
func New() *schema.Provider { func New(version string) func() *schema.Provider {
p := &schema.Provider{ return func() *schema.Provider {
Schema: map[string]*schema.Schema{ p := &schema.Provider{
"username": { Schema: map[string]*schema.Schema{
Description: "Local user name for the Unifi controller API. Can be specified with the `UNIFI_USERNAME` " + "username": {
"environment variable.", Description: "Local user name for the Unifi controller API. Can be specified with the `UNIFI_USERNAME` " +
Type: schema.TypeString, "environment variable.",
Required: true, Type: schema.TypeString,
DefaultFunc: schema.EnvDefaultFunc("UNIFI_USERNAME", ""), Required: true,
}, DefaultFunc: schema.EnvDefaultFunc("UNIFI_USERNAME", ""),
"password": { },
Description: "Password for the user accessing the API. Can be specified with the `UNIFI_PASSWORD` " + "password": {
"environment variable.", Description: "Password for the user accessing the API. Can be specified with the `UNIFI_PASSWORD` " +
Type: schema.TypeString, "environment variable.",
Required: true, Type: schema.TypeString,
DefaultFunc: schema.EnvDefaultFunc("UNIFI_PASSWORD", ""), Required: true,
}, DefaultFunc: schema.EnvDefaultFunc("UNIFI_PASSWORD", ""),
"api_url": { },
Description: "URL of the controller API. Can be specified with the `UNIFI_API` environment variable. " + "api_url": {
"You should **NOT** supply the path (`/api`), the SDK will discover the appropriate paths. This is" + Description: "URL of the controller API. Can be specified with the `UNIFI_API` environment variable. " +
"to support UDM Pro style API paths as well as more standard controller paths.", "You should **NOT** supply the path (`/api`), the SDK will discover the appropriate paths. This is" +
"to support UDM Pro style API paths as well as more standard controller paths.",
Type: schema.TypeString, Type: schema.TypeString,
Required: true, Required: true,
DefaultFunc: schema.EnvDefaultFunc("UNIFI_API", ""), DefaultFunc: schema.EnvDefaultFunc("UNIFI_API", ""),
},
"site": {
Description: "The site in the Unifi controller this provider will manage. Can be specified with " +
"the `UNIFI_SITE` environment variable. Default: `default`",
Type: schema.TypeString,
Required: true,
DefaultFunc: schema.EnvDefaultFunc("UNIFI_SITE", "default"),
},
"allow_insecure": {
Description: "Skip verification of TLS certificates of API requests. You may need to set this to `true` " +
"if you are using your local API without setting up a signed certificate. Can be specified with the " +
"`UNIFI_INSECURE` environment variable.",
Type: schema.TypeBool,
Optional: true,
DefaultFunc: schema.EnvDefaultFunc("UNIFI_INSECURE", false),
},
}, },
"site": { DataSourcesMap: map[string]*schema.Resource{
Description: "The site in the Unifi controller this provider will manage. Can be specified with " + "unifi_radius_profile": dataRADIUSProfile(),
"the `UNIFI_SITE` environment variable. Default: `default`", "unifi_user_group": dataUserGroup(),
Type: schema.TypeString, "unifi_wlan_group": dataWLANGroup(),
Required: true,
DefaultFunc: schema.EnvDefaultFunc("UNIFI_SITE", "default"),
}, },
"allow_insecure": { ResourcesMap: map[string]*schema.Resource{
Description: "Skip verification of TLS certificates of API requests. You may need to set this to `true` " + "unifi_firewall_group": resourceFirewallGroup(),
"if you are using your local API without setting up a signed certificate. Can be specified with the " + "unifi_firewall_rule": resourceFirewallRule(),
"`UNIFI_INSECURE` environment variable.", "unifi_network": resourceNetwork(),
Type: schema.TypeBool, "unifi_port_forward": resourcePortForward(),
Optional: true, "unifi_user_group": resourceUserGroup(),
DefaultFunc: schema.EnvDefaultFunc("UNIFI_INSECURE", false), "unifi_user": resourceUser(),
"unifi_wlan": resourceWLAN(),
}, },
}, }
DataSourcesMap: map[string]*schema.Resource{ p.ConfigureFunc = configure(version, p)
"unifi_radius_profile": dataRADIUSProfile(), return p
"unifi_user_group": dataUserGroup(),
"unifi_wlan_group": dataWLANGroup(),
},
ResourcesMap: map[string]*schema.Resource{
"unifi_firewall_group": resourceFirewallGroup(),
"unifi_firewall_rule": resourceFirewallRule(),
"unifi_network": resourceNetwork(),
"unifi_port_forward": resourcePortForward(),
"unifi_user_group": resourceUserGroup(),
"unifi_user": resourceUser(),
"unifi_wlan": resourceWLAN(),
},
} }
p.ConfigureFunc = configure(p)
return p
} }
func configure(p *schema.Provider) schema.ConfigureFunc { func configure(version string, p *schema.Provider) schema.ConfigureFunc {
return func(d *schema.ResourceData) (interface{}, error) { return func(d *schema.ResourceData) (interface{}, error) {
user := d.Get("username").(string) user := d.Get("username").(string)
pass := d.Get("password").(string) pass := d.Get("password").(string)

View File

@@ -12,7 +12,7 @@ import (
var providerFactories = map[string]func() (*schema.Provider, error){ var providerFactories = map[string]func() (*schema.Provider, error){
"unifi": func() (*schema.Provider, error) { "unifi": func() (*schema.Provider, error) {
return New(), nil return New("acctest")(), nil
}, },
} }

33
main.go
View File

@@ -1,13 +1,40 @@
package main // import "github.com/paultyng/terraform-provider-unifi" package main // import "github.com/paultyng/terraform-provider-unifi"
import ( import (
"context"
"flag"
"log"
"github.com/hashicorp/terraform-plugin-sdk/v2/plugin" "github.com/hashicorp/terraform-plugin-sdk/v2/plugin"
"github.com/paultyng/terraform-provider-unifi/internal/provider" "github.com/paultyng/terraform-provider-unifi/internal/provider"
) )
var (
// these will be set by the goreleaser configuration
// to appropriate values for the compiled binary
version string = "dev"
// goreleaser can also pass the specific commit if you want
// commit string = ""
)
func main() { func main() {
plugin.Serve(&plugin.ServeOpts{ var debugMode bool
ProviderFunc: provider.New,
}) flag.BoolVar(&debugMode, "debug", false, "set to true to run the provider with support for debuggers like delve")
flag.Parse()
opts := &plugin.ServeOpts{ProviderFunc: provider.New(version)}
if debugMode {
// TODO: update this string with the full name of your provider as used in your configs
err := plugin.Debug(context.Background(), "registry.terraform.io/hashicorp/scaffolding", opts)
if err != nil {
log.Fatal(err.Error())
}
return
}
plugin.Serve(opts)
} }