101 lines
2.4 KiB
Go
101 lines
2.4 KiB
Go
|
package artifactory
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
|
||
|
"github.com/hashicorp/terraform/backend"
|
||
|
"github.com/hashicorp/terraform/helper/schema"
|
||
|
"github.com/hashicorp/terraform/state"
|
||
|
"github.com/hashicorp/terraform/state/remote"
|
||
|
artifactory "github.com/lusis/go-artifactory/src/artifactory.v401"
|
||
|
)
|
||
|
|
||
|
func New() backend.Backend {
|
||
|
s := &schema.Backend{
|
||
|
Schema: map[string]*schema.Schema{
|
||
|
"username": &schema.Schema{
|
||
|
Type: schema.TypeString,
|
||
|
Required: true,
|
||
|
DefaultFunc: schema.EnvDefaultFunc("ARTIFACTORY_USERNAME", nil),
|
||
|
Description: "Username",
|
||
|
},
|
||
|
"password": &schema.Schema{
|
||
|
Type: schema.TypeString,
|
||
|
Required: true,
|
||
|
DefaultFunc: schema.EnvDefaultFunc("ARTIFACTORY_PASSWORD", nil),
|
||
|
Description: "Password",
|
||
|
},
|
||
|
"url": &schema.Schema{
|
||
|
Type: schema.TypeString,
|
||
|
Required: true,
|
||
|
DefaultFunc: schema.EnvDefaultFunc("ARTIFACTORY_URL", nil),
|
||
|
Description: "Artfactory base URL",
|
||
|
},
|
||
|
"repo": &schema.Schema{
|
||
|
Type: schema.TypeString,
|
||
|
Required: true,
|
||
|
Description: "The repository name",
|
||
|
},
|
||
|
"subpath": &schema.Schema{
|
||
|
Type: schema.TypeString,
|
||
|
Required: true,
|
||
|
Description: "Path within the repository",
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
b := &Backend{Backend: s}
|
||
|
b.Backend.ConfigureFunc = b.configure
|
||
|
return b
|
||
|
}
|
||
|
|
||
|
type Backend struct {
|
||
|
*schema.Backend
|
||
|
|
||
|
client *ArtifactoryClient
|
||
|
}
|
||
|
|
||
|
func (b *Backend) configure(ctx context.Context) error {
|
||
|
data := schema.FromContextBackendConfig(ctx)
|
||
|
|
||
|
userName := data.Get("username").(string)
|
||
|
password := data.Get("password").(string)
|
||
|
url := data.Get("url").(string)
|
||
|
repo := data.Get("repo").(string)
|
||
|
subpath := data.Get("subpath").(string)
|
||
|
|
||
|
clientConf := &artifactory.ClientConfig{
|
||
|
BaseURL: url,
|
||
|
Username: userName,
|
||
|
Password: password,
|
||
|
}
|
||
|
nativeClient := artifactory.NewClient(clientConf)
|
||
|
|
||
|
b.client = &ArtifactoryClient{
|
||
|
nativeClient: &nativeClient,
|
||
|
userName: userName,
|
||
|
password: password,
|
||
|
url: url,
|
||
|
repo: repo,
|
||
|
subpath: subpath,
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (b *Backend) States() ([]string, error) {
|
||
|
return nil, backend.ErrNamedStatesNotSupported
|
||
|
}
|
||
|
|
||
|
func (b *Backend) DeleteState(string) error {
|
||
|
return backend.ErrNamedStatesNotSupported
|
||
|
}
|
||
|
|
||
|
func (b *Backend) State(name string) (state.State, error) {
|
||
|
if name != backend.DefaultStateName {
|
||
|
return nil, backend.ErrNamedStatesNotSupported
|
||
|
}
|
||
|
return &remote.State{
|
||
|
Client: b.client,
|
||
|
}, nil
|
||
|
}
|