mirror of
https://github.com/ysoftdevs/terraform-provider-bitbucketserver.git
synced 2026-03-17 23:13:47 +01:00
159 lines
4.0 KiB
Go
159 lines
4.0 KiB
Go
package bitbucket
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/sha256"
|
|
"encoding/json"
|
|
"fmt"
|
|
"github.com/hashicorp/terraform/helper/schema"
|
|
"io/ioutil"
|
|
)
|
|
|
|
type License struct {
|
|
License string `json:"license,omitempty"`
|
|
}
|
|
|
|
type LicenseResponse struct {
|
|
License string `json:"license,omitempty"`
|
|
CreationDate jsonTime `json:"creationDate,omitempty"`
|
|
PurchaseDate jsonTime `json:"purchaseDate,omitempty"`
|
|
ExpiryDate jsonTime `json:"expiryDate,omitempty"`
|
|
MaintenanceExpiryDate jsonTime `json:"maintenanceExpiryDate,omitempty"`
|
|
GracePeriodEndDate jsonTime `json:"gracePeriodEndDate,omitempty"`
|
|
MaximumNumberOfUsers int `json:"maximumNumberOfUsers,omitempty"`
|
|
UnlimitedUsers bool `json:"unlimitedNumberOfUsers,omitempty"`
|
|
ServerId string `json:"serverId,omitempty"`
|
|
SupportEntitlementNumber string `json:"supportEntitlementNumber,omitempty"`
|
|
}
|
|
|
|
func resourceAdminLicense() *schema.Resource {
|
|
return &schema.Resource{
|
|
Create: resourceAdminLicenseCreate,
|
|
Update: resourceAdminLicenseUpdate,
|
|
Read: resourceAdminLicenseRead,
|
|
Delete: resourceAdminLicenseDelete,
|
|
Importer: &schema.ResourceImporter{
|
|
State: schema.ImportStatePassthrough,
|
|
},
|
|
|
|
Schema: map[string]*schema.Schema{
|
|
"license": {
|
|
Type: schema.TypeString,
|
|
Required: true,
|
|
Sensitive: true,
|
|
},
|
|
"creation_date": {
|
|
Type: schema.TypeString,
|
|
Computed: true,
|
|
},
|
|
"purchase_date": {
|
|
Type: schema.TypeString,
|
|
Computed: true,
|
|
},
|
|
"expiry_date": {
|
|
Type: schema.TypeString,
|
|
Computed: true,
|
|
},
|
|
"maintenance_expiry_date": {
|
|
Type: schema.TypeString,
|
|
Computed: true,
|
|
},
|
|
"grace_period_end_date": {
|
|
Type: schema.TypeString,
|
|
Computed: true,
|
|
},
|
|
"maximum_users": {
|
|
Type: schema.TypeInt,
|
|
Computed: true,
|
|
},
|
|
"unlimited_users": {
|
|
Type: schema.TypeBool,
|
|
Computed: true,
|
|
},
|
|
"server_id": {
|
|
Type: schema.TypeString,
|
|
Computed: true,
|
|
},
|
|
"support_entitlement_number": {
|
|
Type: schema.TypeString,
|
|
Computed: true,
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func newLicenseFromResource(d *schema.ResourceData) *License {
|
|
license := &License{
|
|
License: d.Get("license").(string),
|
|
}
|
|
|
|
return license
|
|
}
|
|
|
|
func resourceAdminLicenseUpdate(d *schema.ResourceData, m interface{}) error {
|
|
client := m.(*BitbucketClient)
|
|
license := newLicenseFromResource(d)
|
|
|
|
bytedata, err := json.Marshal(license)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = client.Post("/rest/api/1.0/admin/license", bytes.NewBuffer(bytedata))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
d.SetId(fmt.Sprintf("%x", sha256.Sum256([]byte(license.License))))
|
|
return resourceAdminLicenseRead(d, m)
|
|
}
|
|
|
|
func resourceAdminLicenseCreate(d *schema.ResourceData, m interface{}) error {
|
|
return resourceAdminLicenseUpdate(d, m)
|
|
}
|
|
|
|
func resourceAdminLicenseRead(d *schema.ResourceData, m interface{}) error {
|
|
|
|
client := m.(*BitbucketClient)
|
|
req, err := client.Get("/rest/api/1.0/admin/license")
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if req.StatusCode == 200 {
|
|
|
|
var license LicenseResponse
|
|
|
|
body, readerr := ioutil.ReadAll(req.Body)
|
|
if readerr != nil {
|
|
return readerr
|
|
}
|
|
|
|
decodeerr := json.Unmarshal(body, &license)
|
|
if decodeerr != nil {
|
|
return decodeerr
|
|
}
|
|
|
|
d.Set("license", license.License)
|
|
d.Set("creation_date", license.CreationDate.String())
|
|
d.Set("purchase_date", license.PurchaseDate.String())
|
|
d.Set("expiry_date", license.ExpiryDate.String())
|
|
d.Set("maintenance_expiry_date", license.MaintenanceExpiryDate.String())
|
|
d.Set("grace_period_end_date", license.GracePeriodEndDate.String())
|
|
d.Set("maximum_users", license.MaximumNumberOfUsers)
|
|
d.Set("unlimited_users", license.UnlimitedUsers)
|
|
d.Set("server_id", license.ServerId)
|
|
d.Set("support_entitlement_number", license.SupportEntitlementNumber)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func resourceAdminLicenseDelete(d *schema.ResourceData, m interface{}) error {
|
|
client := m.(*BitbucketClient)
|
|
_, err := client.Delete("/rest/api/1.0/admin/mail-server")
|
|
return err
|
|
}
|