mirror of
https://github.com/hashicorp/terraform.git
synced 2026-02-03 20:50:59 -05:00
43 lines
1.3 KiB
Go
43 lines
1.3 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
package pluginshared
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/url"
|
|
|
|
svchost "github.com/hashicorp/terraform-svchost"
|
|
)
|
|
|
|
// StacksBinaryManager downloads, caches, and returns information about the
|
|
// terraform-stacksplugin binary downloaded from the specified backend.
|
|
type StacksBinaryManager struct {
|
|
BinaryManager
|
|
}
|
|
|
|
// NewStacksBinaryManager initializes a new BinaryManager to broker data between the
|
|
// specified directory location containing stacksplugin package data and a
|
|
// HCP Terraform backend URL.
|
|
func NewStacksBinaryManager(ctx context.Context, stacksPluginDataDir, overridePath string, serviceURL *url.URL, goos, arch string) (*StacksBinaryManager, error) {
|
|
client, err := NewStacksPluginClient(ctx, serviceURL)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("could not initialize stacksplugin version manager: %w", err)
|
|
}
|
|
|
|
// read from the data dir to find the cached stacksplugin binary location
|
|
|
|
return &StacksBinaryManager{
|
|
BinaryManager{
|
|
pluginDataDir: stacksPluginDataDir,
|
|
overridePath: overridePath,
|
|
host: svchost.Hostname(serviceURL.Host),
|
|
client: client,
|
|
binaryName: "tfstacks",
|
|
pluginName: "stacksplugin",
|
|
goos: goos,
|
|
arch: arch,
|
|
ctx: ctx,
|
|
}}, nil
|
|
}
|