/* Copyright (c) Edgeless Systems GmbH SPDX-License-Identifier: AGPL-3.0-only */ package setup import ( "io/fs" "os" "syscall" "github.com/edgelesssys/constellation/v2/internal/cloud/metadata" ) // Mounter is an interface for mount and unmount operations. type Mounter interface { Mount(source string, target string, fstype string, flags uintptr, data string) error Unmount(target string, flags int) error MkdirAll(path string, perm fs.FileMode) error } // DeviceMapper is an interface for device mapping operations. type DeviceMapper interface { DiskUUID() string FormatDisk(passphrase string) error MapDisk(target string, passphrase string) error UnmapDisk(target string) error } // ConfigurationGenerator is an interface for generating systemd-cryptsetup@.service unit files. type ConfigurationGenerator interface { Generate(volumeName, encryptedDevice, keyFile, options string) error } // MetadataAPI is an interface for accessing cloud metadata. type MetadataAPI interface { metadata.InstanceSelfer metadata.InstanceLister } // RecoveryDoer is an interface to perform key recovery operations. // Calls to Do may be blocking, and if successful return a passphrase and measurementSecret. type RecoveryDoer interface { Do(uuid, endpoint string) (passphrase, measurementSecret []byte, err error) } // DiskMounter uses the syscall package to mount disks. type DiskMounter struct{} // Mount performs a mount syscall. func (m DiskMounter) Mount(source string, target string, fstype string, flags uintptr, data string) error { return syscall.Mount(source, target, fstype, flags, data) } // Unmount performs an unmount syscall. func (m DiskMounter) Unmount(target string, flags int) error { return syscall.Unmount(target, flags) } // MkdirAll uses os.MkdirAll to create the directory. func (m DiskMounter) MkdirAll(path string, perm fs.FileMode) error { return os.MkdirAll(path, perm) }