github.com/emc-advanced-dev/unik@v0.0.0-20190717152701-a58d3e8e33b7/docs/providers/README.md (about) 1 # Providers 2 **Providers** conform to the interface: 3 ```go 4 type Provider interface { 5 GetConfig() ProviderConfig 6 //Images 7 Stage(params types.StageImageParams) (*types.Image, error) 8 ListImages() ([]*types.Image, error) 9 GetImage(nameOrIdPrefix string) (*types.Image, error) 10 DeleteImage(id string, force bool) error 11 //Instances 12 RunInstance(params types.RunInstanceParams) (*types.Instance, error) 13 ListInstances() ([]*types.Instance, error) 14 GetInstance(nameOrIdPrefix string) (*types.Instance, error) 15 DeleteInstance(id string, force bool) error 16 StartInstance(id string) error 17 StopInstance(id string) error 18 GetInstanceLogs(id string) (string, error) 19 //Volumes 20 CreateVolume(params types.CreateVolumeParams) (*types.Volume, error) 21 ListVolumes() ([]*types.Volume, error) 22 GetVolume(nameOrIdPrefix string) (*types.Volume, error) 23 DeleteVolume(id string, force bool) error 24 AttachVolume(id, instanceId, mntPoint string) error 25 DetachVolume(id string) error 26 //Hub 27 PullImage(params types.PullImagePararms) error 28 PushImage(params types.PushImagePararms) error 29 } 30 ``` 31 32 **Providers** handle the long-term management of UniK's principal object types: 33 * Images 34 * Instances 35 * Volumes 36 37 Providers typically store some type of state, which may include a JSON representation of the existing state, as well as disk image files. UniK's default providers currently store their respective states in `~/.unik/`. 38 39 Providers perform API calls talk to the hypervisor / cloud provider / infrastructure where the images are hosted and instances are run. 40 41 To add an implemented provider to the Daemon, see the Unik API Server constructor function `func NewUnikDaemon(config config.DaemonConfig) (*UnikDaemon, error)` in [`daemon.go`](../../pkg/daemon/daemon.go) 42 43 Your change should look something like this: 44 ```go 45 func NewUnikDaemon(config config.DaemonConfig) (*UnikDaemon, error) { 46 _providers := make(providers.Providers) 47 //... 48 for _, awsConfig := range config.Providers.Aws { 49 logrus.Infof("Bootstrapping provider %s with config %v", aws_provider, awsConfig) 50 p := aws.NewAwsProvier(awsConfig) 51 s, err := state.BasicStateFromFile(aws.AwsStateFile) 52 if err != nil { 53 logrus.WithError(err).Warnf("failed to read aws state file at %s, creating blank aws state", aws.AwsStateFile()) 54 s = state.NewBasicState(aws.AwsStateFile) 55 } 56 p = p.WithState(s) 57 _providers[aws_provider] = p 58 break 59 } 60 //... 61 //Add your provider here, like so: 62 /* 63 myConfig := myprovider.GetMyConfig() 64 myProvider, err := myprovider.NewProvider() 65 if err != nil { 66 //handle err 67 } 68 _providers["my_provider_name"] = myProvider 69 */ 70 //... 71 d := &UnikDaemon{ 72 server: lxmartini.QuietMartini(), 73 providers: _providers, 74 compilers: _compilers, 75 } 76 return d, nil 77 } 78 ```