alicein

package module
v0.0.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 20, 2020 License: Apache-2.0 Imports: 9 Imported by: 0

README

alice-in -- Alice in VIRTUAL Land

PkgGoDev

This library is for treating virtual environment. This library can handle the following environments:

  • WSL2
  • Docker

For example,

  • From host Windows, you can get environment variables in WSL and exec command in WSL
  • From guest WSL Linux, you can get environment variables in Windows and exec command in Host Windows.

Basic Usage

Environment Detection
  • alicein.IsInWSL(): Detect current Linux environment is on WSL
  • alicein.IsWSLInstalled(): Detect current Windows environment has WSL
  • alicein.IsInDocker(): Detect current environment is in Docker

Path conversion

  • ConvertToHostPath(path string) string

It returns host style path if current env is in WSL. Otherwise, return input path as is. Docker doesn't support this.

  • ConvertToGuestPath(path string) string

It returns guest style path. Otherwise, return input path as is. Docker doesn't support this.

Get Environment

  • alicein.NativeEnvironment() Environment: It is as same as using os package directly
  • alicein.WSLGuestEnvironment() Environment: On Windows and WSL is installed, it returns interface to handle WSL. Otherwise, it returns native environment.
  • alicein.WSLHostEnvironment() Environment: On Linux in WSL, it returns interface to handle Host Windows. Otherwise, it returns native environment.
  • alicein.DetectedEnvironment() Environment: It returns one of Naitve/WSLHost/WSLGuest environment based on parent process.
  • alicein.DockerEnvironment(target) Environment: Detect current environment is in Docker. If target prefixed "image:", it means image name. Otherwise, it means running container name.

Environment

Environment interface wraps os / os/exec packages. Docker environment only support Exec().

Exec(ctx context.Context, command string, args ...string) *exec.Cmd

It execs commands in current environment. In Windows's WSL host environment, exec via "wsl" command wrapper. In Docker, exec via "docker exec".

Open(file string)

It opens file by associated program. On Windows, "start" is used. And "open" is used on mac, and "xdg-open" is used on other environment.

UserHomeDir() (string, error)

It returns in virtual environment. Otherwise it returns standard os.UserHomeDir()

UserConfigDir() (string, error)

It returns in virtual environment. Otherwise it returns standard os.UserConfigDir()

UserCacheDir() (string, error)

It returns in virtual environment. Otherwise it returns standard os.UserCacheDir()

Environ() map[string]string

It returns environment variables in virtual environment. Otherwise it returns os.Environment

Sample execution (Linux application inside WSL)

$ go run testdata/detect/main.go 
🐋 alicein.IsInDocker(): false
田  aliciein.IsInWSL(): true
🐧  WSL Guest: alicein.WSLGuest()
   🐧 UserHomeDir(): /home/shibu
   🐧 UserConfigDir(): /home/shibu/.config
   🐧 UserCacheDir(): /home/shibu/.cache
   田 Exec(context.Background(), "calc")

田  WSL Host: alicein.WSLHost()
   田 UserHomeDir(): C:\Users\yoshi
   田 UserConfigDir(): C:\Users\yoshi\AppData\Roaming
   田 UserCacheDir(): C:\Users\yoshi\AppData\Local

Path conversion between 🐧 ⇔ 田
🐧 alicein.ConvertToGuestPath(`/usr/bin/yes`): /usr/bin/yes
🐧 alicein.ConvertToGuestPath(`C:\windows\system32`): /mnt/c/windows/system32
田 alicein.ConvertToHostPath(`/usr/bin/echo`): \\wsl$\Ubuntu-20.04\usr\bin\echo
田 alicein.ConvertToHostPath(`C:\windows\system32`): C:\\windows\\system32

License

Apache 2

Contributors

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrNotImplemented indicates this method is not implemented yet
	ErrNotImplemented = errors.New("not implemented")
)

Functions

func ConvertToGuestPath

func ConvertToGuestPath(path string) string

ConvertToGuestPath returns guest style path. Otherwise, return input path as is. Docker doesn't support this.

func ConvertToHostPath

func ConvertToHostPath(path string) string

ConvertToHostPath returns host style path if current env is in WSL. Otherwise, return input path as is. Docker doesn't support this.

func IsInDocker

func IsInDocker() bool

IsInDocker returns current process works

func IsInWSL

func IsInWSL() bool

IsInWSL returns current environment is in WSL or not

func IsWSLInstalled

func IsWSLInstalled() bool

IsWSLInstalled returns current environment has WSL guest/host

Types

type EnvType

type EnvType int

EnvType is type of environment. DetectEnv() returns this

const (
	// NativeEnv means current env equals to GOOS
	NativeEnv EnvType = iota + 1
	// WSLEnv means WSL guest environment
	WSLEnv
	// HostEnv means Host Windows environemnt
	HostEnv
	// DockerEnv means Docker environemnt
	DockerEnv
)

func DetectEnvType

func DetectEnvType() (EnvType, error)

DetectEnvType returns detected parent environment type

This function check's parent process and return result

func (EnvType) String

func (e EnvType) String() string

type Environment

type Environment interface {
	// Exec execs commands in current environment.
	// In Windows's WSL host environment, exec via "wsl" command wrapper.
	// In Docker, exec via "docker exec".
	Exec(ctx context.Context, command string, args ...string) *exec.Cmd

	// Open opens file by associated program.
	// On Windows, "start" is used. And "open" is used on mac,
	// and "xdg-open" is used on other environment.
	Open(file string)

	// UserHomeDir returns in virtual environment.
	// Otherwise it returns standard os.UserHomeDir()
	UserHomeDir() (string, error)

	// UserConfigDir returns in virtual environment.
	// Otherwise it returns standard os.UserConfigDir()
	UserConfigDir() (string, error)

	// UserCacheDir returns in virtual environment.
	// Otherwise it returns standard os.UserCacheDir()
	UserCacheDir() (string, error)

	// Environ returns environment variables in virtual environment.
	// Otherwise it returns os.Environment
	Environ() map[string]string

	// Type returns current environment type
	Type() EnvType
}

Environment is an interface that returns information or exec commands

func DetectedEnvironment

func DetectedEnvironment() Environment

DetectedEnvironment returns environment of parent

func DockerEnvironment added in v0.0.2

func DockerEnvironment(target string) Environment

DockerEnvironment returns Docker environment.

This environment only support Exec

func NativeEnvironment

func NativeEnvironment() Environment

NativeEnvironment returns environment to access current environment

func WSLGuestEnvironment

func WSLGuestEnvironment() Environment

WSLGuestEnvironment returns environment to access Guest(Linux) environment

func WSLHostEnvironment

func WSLHostEnvironment() Environment

WSLHostEnvironment returns environment to access Host(Windows) environment

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL