diff --git a/bitbucket/data_plugin_config.go b/bitbucket/data_plugin_config.go deleted file mode 100644 index 7a16ecf..0000000 --- a/bitbucket/data_plugin_config.go +++ /dev/null @@ -1,83 +0,0 @@ -package bitbucket - -import ( - "encoding/json" - "fmt" - "io/ioutil" - "net/url" - - "github.com/hashicorp/terraform/helper/schema" -) - -type PluginConfig struct { - ValidLicense bool `json:"validLicense"` - ValuesRaw json.RawMessage `json:"values"` - Values string -} - -func dataSourcePluginConfig() *schema.Resource { - return &schema.Resource{ - Read: dataSourcePluginConfigRead, - - Schema: map[string]*schema.Schema{ - "key": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - }, - "validlicense": { - Type: schema.TypeBool, - Optional: true, - Required: false, - ForceNew: true, - }, - "values": { - Type: schema.TypeString, - Optional: true, - Required: false, - ForceNew: true, - }, - }, - } -} - -func dataSourcePluginConfigRead(d *schema.ResourceData, m interface{}) error { - d.SetId(d.Get("key").(string)) - - pluginConfig, err := readPluginConfig(m, d.Id()) - if err != nil { - return err - } - err = d.Set("validlicense", pluginConfig.ValidLicense) - if err != nil { - return err - } - err = d.Set("values", pluginConfig.Values) - if err != nil { - return err - } - return nil -} - -func readPluginConfig(m interface{}, id string) (PluginConfig, error) { - client := m.(*BitbucketServerProvider).BitbucketClient - resourceURL := fmt.Sprintf("/rest/%s/1.0/config", url.QueryEscape(id)) - - resp, err := client.Get(resourceURL) - if err != nil { - return PluginConfig{}, err - } - var pluginConfig PluginConfig - - body, err := ioutil.ReadAll(resp.Body) - if err != nil { - return PluginConfig{}, err - } - - err = json.Unmarshal(body, &pluginConfig) - if err != nil { - return PluginConfig{}, err - } - pluginConfig.Values = string(pluginConfig.ValuesRaw) - return pluginConfig, nil -} diff --git a/bitbucket/data_plugin_config_test.go b/bitbucket/data_plugin_config_test.go deleted file mode 100644 index 5660bcc..0000000 --- a/bitbucket/data_plugin_config_test.go +++ /dev/null @@ -1,29 +0,0 @@ -package bitbucket - -import ( - "testing" - - "github.com/hashicorp/terraform/helper/resource" -) - -func TestAccBitbucketPluginConfig_basic(t *testing.T) { - config := ` - data "bitbucketserver_plugin_config" "test" { - key = "oidc" - } - ` - - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: config, - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("data.bitbucketserver_plugin_config.test", "id", "oidc"), - resource.TestCheckResourceAttr("data.bitbucketserver_plugin_config.test", "validlicense", "true"), - ), - }, - }, - }) -} diff --git a/bitbucket/provider.go b/bitbucket/provider.go index c8af8c3..9b1d965 100644 --- a/bitbucket/provider.go +++ b/bitbucket/provider.go @@ -38,7 +38,6 @@ func Provider() terraform.ResourceProvider { "bitbucketserver_groups": dataSourceGroups(), "bitbucketserver_group_users": dataSourceGroupUsers(), "bitbucketserver_plugin": dataSourcePlugin(), - "bitbucketserver_plugin_config": dataSourcePluginConfig(), "bitbucketserver_project_hooks": dataSourceProjectHooks(), "bitbucketserver_project_permissions_groups": dataSourceProjectPermissionsGroups(), "bitbucketserver_project_permissions_users": dataSourceProjectPermissionsUsers(), diff --git a/bitbucket/resource_plugin_config.go b/bitbucket/resource_plugin_config.go index 369e760..1f07056 100644 --- a/bitbucket/resource_plugin_config.go +++ b/bitbucket/resource_plugin_config.go @@ -2,12 +2,17 @@ package bitbucket import ( "bytes" - "fmt" - "net/url" + "encoding/json" + "io/ioutil" "github.com/hashicorp/terraform/helper/schema" ) +type PluginConfig struct { + ValuesRaw json.RawMessage `json:"values"` + Values string +} + func resourcePluginConfig() *schema.Resource { return &schema.Resource{ Create: resourcePluginConfigCreateOrUpdate, @@ -19,17 +24,11 @@ func resourcePluginConfig() *schema.Resource { }, Schema: map[string]*schema.Schema{ - "key": { + "config_endpoint": { Type: schema.TypeString, Required: true, ForceNew: true, }, - "validlicense": { - Type: schema.TypeBool, - Default: true, - Optional: true, - ForceNew: false, - }, "values": { Type: schema.TypeString, Required: true, @@ -41,7 +40,7 @@ func resourcePluginConfig() *schema.Resource { func resourcePluginConfigCreateOrUpdate(d *schema.ResourceData, m interface{}) error { client := m.(*BitbucketServerProvider).BitbucketClient - key := d.Get("key").(string) + configEndpoint := d.Get("config_endpoint").(string) values := d.Get("values").(string) config := []byte(values) payload := &bytes.Buffer{} @@ -50,30 +49,25 @@ func resourcePluginConfigCreateOrUpdate(d *schema.ResourceData, m interface{}) e panic(err) } - _, err = client.Put(fmt.Sprintf("/rest/%s/1.0/config", url.QueryEscape(key)), payload) + _, err = client.Put(configEndpoint, payload) if err != nil { return err } - d.SetId(key) + d.SetId(configEndpoint) return resourcePluginConfigRead(d, m) } func resourcePluginConfigRead(d *schema.ResourceData, m interface{}) error { - err := d.Set("key", d.Id()) + err := d.Set("config_endpoint", d.Id()) if err != nil { return err } - key := d.Get("key").(string) + configEndpoint := d.Get("config_endpoint").(string) - pluginConfig, err := readPluginConfig(m, key) - if err != nil { - return err - } - - err = d.Set("validlicense", pluginConfig.ValidLicense) + pluginConfig, err := readPluginConfig(m, configEndpoint) if err != nil { return err } @@ -90,3 +84,24 @@ func resourcePluginConfigDelete(d *schema.ResourceData, m interface{}) error { // Delete is a no-op return nil } + +func readPluginConfig(m interface{}, configEndpoint string) (PluginConfig, error) { + client := m.(*BitbucketServerProvider).BitbucketClient + resp, err := client.Get(configEndpoint) + if err != nil { + return PluginConfig{}, err + } + var pluginConfig PluginConfig + + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return PluginConfig{}, err + } + + err = json.Unmarshal(body, &pluginConfig) + if err != nil { + return PluginConfig{}, err + } + pluginConfig.Values = string(pluginConfig.ValuesRaw) + return pluginConfig, nil +} diff --git a/bitbucket/resource_plugin_config_test.go b/bitbucket/resource_plugin_config_test.go index efc0aa8..734d4bd 100644 --- a/bitbucket/resource_plugin_config_test.go +++ b/bitbucket/resource_plugin_config_test.go @@ -8,10 +8,16 @@ import ( func TestAccBitbucketPluginConfig(t *testing.T) { config := ` - resource "bitbucketserver_plugin_config" "test" { - key = "oidc" - values = "{\"state\":\"OPTIONAL\",\"autoLogin\":\"DISABLED\",\"restAuthSso\":false,\"disableWebSudo\":false,\"issuerUrl\":\"https://example.oktapreview.com/oauth2/1234567890abcdf\",\"authUrl\":\"https://example.oktapreview.com/oauth2/1234567890abcdf/v1/authorize\",\"tokenUrl\":\"https://example.oktapreview.com/oauth2/1234567890abcdf/v1/token\",\"logoutUrl\":\"https://example.oktapreview.com/oauth2/1234567890abcdf/v1/logout\",\"checkSessionIFrameUrl\":\"\",\"jwkSetUrl\":\"https://example.oktapreview.com/oauth2/1234567890abcdf/v1/keys\",\"usernameClaim\":\"preferred_username\",\"clientId\":\"123123123123123123\",\"clientSecret\":\"12312312312312312312312123123123123123123123123\",\"additionalAuthReqParams\":{\"scope\":\"groups\"},\"ssoButtonText\":\"OpenID Connect SSO\",\"redirectUrl\":\"\",\"createUsers\":true,\"createGroups\":false,\"updateUserInfo\":true,\"groupsClaim\":\"groups\",\"updateGroups\":true,\"requireGroups\":false,\"defaultGroups\":[],\"additionalGroups\":[\"stash-users\"]}" - } + resource "bitbucketserver_plugin" "test" { + key = "de.codecentric.atlassian.oidc.bitbucket-oidc-plugin" + version = "1.5.1" + } + + resource "bitbucketserver_plugin_config" "test" { + config_endpoint = "/rest/oidc/1.0/config" + values = "{\"state\":\"OPTIONAL\",\"autoLogin\":\"DISABLED\",\"restAuthSso\":false,\"disableWebSudo\":false,\"issuerUrl\":\"https://example.oktapreview.com/oauth2/1234567890abcdf\",\"authUrl\":\"https://example.oktapreview.com/oauth2/1234567890abcdf/v1/authorize\",\"tokenUrl\":\"https://example.oktapreview.com/oauth2/1234567890abcdf/v1/token\",\"logoutUrl\":\"https://example.oktapreview.com/oauth2/1234567890abcdf/v1/logout\",\"checkSessionIFrameUrl\":\"\",\"jwkSetUrl\":\"https://example.oktapreview.com/oauth2/1234567890abcdf/v1/keys\",\"usernameClaim\":\"preferred_username\",\"clientId\":\"123123123123123123\",\"clientSecret\":\"12312312312312312312312123123123123123123123123\",\"additionalAuthReqParams\":{\"scope\":\"groups\"},\"ssoButtonText\":\"OpenID Connect SSO\",\"redirectUrl\":\"\",\"createUsers\":true,\"createGroups\":false,\"updateUserInfo\":true,\"groupsClaim\":\"groups\",\"updateGroups\":true,\"requireGroups\":false,\"defaultGroups\":[],\"additionalGroups\":[\"stash-users\"]}" + depends_on = [ bitbucketserver_plugin.test ] + } ` resource.Test(t, resource.TestCase{ @@ -21,7 +27,7 @@ func TestAccBitbucketPluginConfig(t *testing.T) { { Config: config, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttr("bitbucketserver_plugin_config.test", "key", "oidc"), + resource.TestCheckResourceAttr("bitbucketserver_plugin_config.test", "config_endpoint", "/rest/oidc/1.0/config"), resource.TestCheckResourceAttr("bitbucketserver_plugin_config.test", "values", "{\"state\":\"OPTIONAL\",\"autoLogin\":\"DISABLED\",\"restAuthSso\":false,\"disableWebSudo\":false,\"issuerUrl\":\"https://example.oktapreview.com/oauth2/1234567890abcdf\",\"authUrl\":\"https://example.oktapreview.com/oauth2/1234567890abcdf/v1/authorize\",\"tokenUrl\":\"https://example.oktapreview.com/oauth2/1234567890abcdf/v1/token\",\"logoutUrl\":\"https://example.oktapreview.com/oauth2/1234567890abcdf/v1/logout\",\"checkSessionIFrameUrl\":\"\",\"jwkSetUrl\":\"https://example.oktapreview.com/oauth2/1234567890abcdf/v1/keys\",\"usernameClaim\":\"preferred_username\",\"clientId\":\"123123123123123123\",\"clientSecret\":\"12312312312312312312312123123123123123123123123\",\"additionalAuthReqParams\":{\"scope\":\"groups\"},\"ssoButtonText\":\"OpenID Connect SSO\",\"redirectUrl\":\"\",\"createUsers\":true,\"createGroups\":false,\"updateUserInfo\":true,\"groupsClaim\":\"groups\",\"updateGroups\":true,\"requireGroups\":false,\"defaultGroups\":[],\"additionalGroups\":[\"stash-users\"]}"), ), },