blob: d8537846ebf5ef325ae08c45636ff75d42261491 [file] [edit]
// Copyright (c) The OpenTofu Authors
// SPDX-License-Identifier: MPL-2.0
// Copyright (c) 2023 HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package main
import (
"context"
"fmt"
"github.com/opentofu/opentofu/internal/getmodules"
"github.com/opentofu/opentofu/internal/oci"
)
func remoteModulePackageFetcher(ctx context.Context, getOCICredsPolicy oci.OCICredsPolicyBuilder) *getmodules.PackageFetcher {
// TODO: Pass in a real getmodules.PackageFetcherEnvironment here,
// which knows how to make use of the OCI authentication policy.
return getmodules.NewPackageFetcher(ctx, &modulePackageFetcherEnvironment{
getOCICredsPolicy: getOCICredsPolicy,
})
}
type modulePackageFetcherEnvironment struct {
getOCICredsPolicy oci.OCICredsPolicyBuilder
}
// OCIRepositoryStore implements getmodules.PackageFetcherEnvironment.
func (m *modulePackageFetcherEnvironment) OCIRepositoryStore(ctx context.Context, registryDomainName string, repositoryPath string) (getmodules.OCIRepositoryStore, error) {
// We intentionally delay the finalization of the credentials policy until
// just before we need it because most OpenTofu commands don't install
// module packages at all, and even those that do only need to do this if
// using the "oci" source type, so we can avoid doing this work at all
// most of the time.
credsPolicy, err := m.getOCICredsPolicy(ctx)
if err != nil {
// This deals with only a small number of errors that we can't catch during CLI config validation
return nil, fmt.Errorf("invalid credentials configuration for OCI registries: %w", err)
}
return oci.GetOCIRepositoryStore(ctx, registryDomainName, repositoryPath, credsPolicy)
}