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  ```