Make box metadata implement vagrant-plugin-sdk box metadata

This commit is contained in:
sophia 2022-03-16 17:24:59 -05:00 committed by Paul Hinze
parent 3e641fbe6b
commit 8b586fceb3
No known key found for this signature in database
GPG Key ID: B69DEDF2D55501C0
2 changed files with 34 additions and 11 deletions

View File

@ -315,7 +315,7 @@ func (b *Box) Machines(index core.TargetIndex) (machines []core.Machine, err err
return
}
func (b *Box) Metadata() (metadata core.BoxMetadataMap, err error) {
func (b *Box) Metadata() (metadata core.BoxMetadata, err error) {
meta, err := b.loadMetadata()
if err != nil {
return nil, err

View File

@ -5,6 +5,7 @@ import (
"reflect"
"github.com/hashicorp/go-version"
"github.com/hashicorp/vagrant-plugin-sdk/core"
"github.com/mitchellh/mapstructure"
)
@ -68,9 +69,9 @@ func (b *BoxVersion) ListProviders() ([]string, error) {
}
type BoxMetadata struct {
Name string
Description string
Versions []*BoxVersion
name string
description string
versions []*BoxVersion
}
func LoadBoxMetadata(data []byte) (*BoxMetadata, error) {
@ -82,13 +83,17 @@ func LoadBoxMetadata(data []byte) (*BoxMetadata, error) {
return &result, mapstructure.Decode(metadata, &result)
}
func (b *BoxMetadata) Version(ver string, providerOpts *BoxVersionProvider) (v *BoxVersion, err error) {
func (b *BoxMetadata) Name() string {
return b.name
}
func (b *BoxMetadata) Version(ver string, providerOpts *core.BoxProvider) (v *core.BoxVersion, err error) {
matchesProvider := false
inputVersion, err := version.NewConstraint(ver)
if err != nil {
return nil, err
}
for _, boxVer := range b.Versions {
for _, boxVer := range b.versions {
boxVersion, err := version.NewVersion(boxVer.Version)
if err != nil {
return nil, err
@ -99,25 +104,33 @@ func (b *BoxMetadata) Version(ver string, providerOpts *BoxVersionProvider) (v *
matchesProvider = true
} else {
for _, p := range boxVer.Providers {
if p.Matches(providerOpts) {
boxVersionProvider := &BoxVersionProvider{
Name: providerOpts.Name, Url: providerOpts.Url, Checksum: providerOpts.Checksum,
ChecksumType: providerOpts.ChecksumType,
}
if p.Matches(boxVersionProvider) {
matchesProvider = true
}
}
}
if matchesProvider {
return boxVer, nil
var coreBoxVersion *core.BoxVersion
mapstructure.Decode(boxVer, &coreBoxVersion)
return coreBoxVersion, nil
}
}
}
return
}
func (b *BoxMetadata) ListVersions(providerOpts ...*BoxVersionProvider) ([]string, error) {
func (b *BoxMetadata) ListVersions(providerOpts ...*core.BoxProvider) ([]string, error) {
v := []string{}
for _, version := range b.Versions {
for _, version := range b.versions {
if providerOpts != nil {
var boxVersionProvider []*BoxVersionProvider
mapstructure.Decode(providerOpts, &boxVersionProvider)
for _, p := range version.Providers {
if p.MatchesAny(providerOpts...) {
if p.MatchesAny(boxVersionProvider...) {
v = append(v, version.Version)
}
}
@ -127,3 +140,13 @@ func (b *BoxMetadata) ListVersions(providerOpts ...*BoxVersionProvider) ([]strin
}
return v, nil
}
func (b *BoxMetadata) Provider(version string, name string) (provider *core.BoxProvider, err error) {
return
}
func (b *BoxMetadata) ListProviders(version string) (providers []string, err error) {
return
}
var _ core.BoxMetadata = (*BoxMetadata)(nil)