MetadataProvider is implemented by each platform in a platform specific manner. It can process metadata stored in ChaincodeDeploymentSpec in different formats. The common format is targz. Currently users expect the metadata to be presented as tar file entries (directly extracted from chaincode stored in targz format). In future, we would like provide better abstraction by extending the interface
type MetadataProvider interface { GetMetadataAsTarEntries() ([]byte, error) }
type PackageWriter interface { Write(name string, payload []byte, tw *tar.Writer) error }
type PackageWriterWrapper func(name string, payload []byte, tw *tar.Writer) error
func (pw PackageWriterWrapper) Write(name string, payload []byte, tw *tar.Writer) error
Interface for validating the specification and and writing the package for the given platform
type Platform interface { Name() string ValidatePath(path string) error ValidateCodePackage(code []byte) error GetDeploymentPayload(path string) ([]byte, error) GenerateDockerfile() (string, error) GenerateDockerBuild(path string, code []byte, tw *tar.Writer) error GetMetadataProvider(code []byte) MetadataProvider }
type Registry struct { Platforms map[string]Platform PackageWriter PackageWriter }
func NewRegistry(platformTypes ...Platform) *Registry
func (r *Registry) GenerateDockerBuild(ccType, path, name, version string, codePackage []byte) (io.Reader, error)
func (r *Registry) GenerateDockerfile(ccType, name, version string) (string, error)
func (r *Registry) GetDeploymentPayload(ccType, path string) ([]byte, error)
func (r *Registry) GetMetadataProvider(ccType string, codePackage []byte) (MetadataProvider, error)
func (r *Registry) StreamDockerBuild(ccType, path string, codePackage []byte, inputFiles map[string][]byte, tw *tar.Writer) error
func (r *Registry) ValidateDeploymentSpec(ccType string, codePackage []byte) error
func (r *Registry) ValidateSpec(ccType, path string) error