Providers now return ProviderInstance{}
Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
This commit is contained in:
parent
2a6b453fc1
commit
e33b64aacb
14 changed files with 128 additions and 63 deletions
2
go.mod
2
go.mod
|
|
@ -4,7 +4,7 @@ go 1.20
|
|||
|
||||
require (
|
||||
github.com/BurntSushi/toml v1.2.1
|
||||
github.com/cloudbase/garm-provider-common v0.0.0-20230722221640-5f53e8404727
|
||||
github.com/cloudbase/garm-provider-common v0.0.0-20230723124240-9ad9282807e5
|
||||
github.com/go-openapi/errors v0.20.4
|
||||
github.com/go-openapi/runtime v0.26.0
|
||||
github.com/go-openapi/strfmt v0.21.7
|
||||
|
|
|
|||
8
go.sum
8
go.sum
|
|
@ -27,6 +27,8 @@ github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38
|
|||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||
github.com/cloudbase/garm-provider-common v0.0.0-20230722221640-5f53e8404727 h1:/xosrBTRvakPPFBEzfZGruD0TXI5zy0q1ACu/jplbZk=
|
||||
github.com/cloudbase/garm-provider-common v0.0.0-20230722221640-5f53e8404727/go.mod h1:RKzgL0MXkNeGfloQpE2swz/y4LWJr5+2Wd45bSXPB0k=
|
||||
github.com/cloudbase/garm-provider-common v0.0.0-20230723124240-9ad9282807e5 h1:x0Z4i2ep2xos2I/qBkk/b9RNebufpY+l4GwJQaIAQyA=
|
||||
github.com/cloudbase/garm-provider-common v0.0.0-20230723124240-9ad9282807e5/go.mod h1:RKzgL0MXkNeGfloQpE2swz/y4LWJr5+2Wd45bSXPB0k=
|
||||
github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I=
|
||||
github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs=
|
||||
github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA=
|
||||
|
|
@ -48,6 +50,7 @@ github.com/frankban/quicktest v1.7.2/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03D
|
|||
github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y=
|
||||
github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
|
||||
github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps=
|
||||
github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
|
||||
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
|
||||
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
|
|
@ -188,6 +191,8 @@ github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/
|
|||
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
|
||||
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
|
||||
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
|
||||
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
|
||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||
github.com/juju/clock v1.0.3 h1:yJHIsWXeU8j3QcBdiess09SzfiXRRrsjKPn2whnMeds=
|
||||
github.com/juju/clock v1.0.3/go.mod h1:HIBvJ8kiV/n7UHwKuCkdYL4l/MDECztHR2sAvWDxxf0=
|
||||
github.com/juju/errors v1.0.0 h1:yiq7kjCLll1BiaRuNY53MGI0+EQ3rF6GB+wvboZDefM=
|
||||
|
|
@ -248,7 +253,10 @@ github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RR
|
|||
github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
|
||||
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
|
||||
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||
github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6FxaNu/BnU2OAaLF86eTVhP2hjTB6iMvItA=
|
||||
github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||
|
|
|
|||
|
|
@ -31,18 +31,18 @@ func (_m *Provider) AsParams() params.Provider {
|
|||
}
|
||||
|
||||
// CreateInstance provides a mock function with given fields: ctx, bootstrapParams
|
||||
func (_m *Provider) CreateInstance(ctx context.Context, bootstrapParams garm_provider_commonparams.BootstrapInstance) (params.Instance, error) {
|
||||
func (_m *Provider) CreateInstance(ctx context.Context, bootstrapParams garm_provider_commonparams.BootstrapInstance) (garm_provider_commonparams.ProviderInstance, error) {
|
||||
ret := _m.Called(ctx, bootstrapParams)
|
||||
|
||||
var r0 params.Instance
|
||||
var r0 garm_provider_commonparams.ProviderInstance
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(0).(func(context.Context, garm_provider_commonparams.BootstrapInstance) (params.Instance, error)); ok {
|
||||
if rf, ok := ret.Get(0).(func(context.Context, garm_provider_commonparams.BootstrapInstance) (garm_provider_commonparams.ProviderInstance, error)); ok {
|
||||
return rf(ctx, bootstrapParams)
|
||||
}
|
||||
if rf, ok := ret.Get(0).(func(context.Context, garm_provider_commonparams.BootstrapInstance) params.Instance); ok {
|
||||
if rf, ok := ret.Get(0).(func(context.Context, garm_provider_commonparams.BootstrapInstance) garm_provider_commonparams.ProviderInstance); ok {
|
||||
r0 = rf(ctx, bootstrapParams)
|
||||
} else {
|
||||
r0 = ret.Get(0).(params.Instance)
|
||||
r0 = ret.Get(0).(garm_provider_commonparams.ProviderInstance)
|
||||
}
|
||||
|
||||
if rf, ok := ret.Get(1).(func(context.Context, garm_provider_commonparams.BootstrapInstance) error); ok {
|
||||
|
|
@ -69,18 +69,18 @@ func (_m *Provider) DeleteInstance(ctx context.Context, instance string) error {
|
|||
}
|
||||
|
||||
// GetInstance provides a mock function with given fields: ctx, instance
|
||||
func (_m *Provider) GetInstance(ctx context.Context, instance string) (params.Instance, error) {
|
||||
func (_m *Provider) GetInstance(ctx context.Context, instance string) (garm_provider_commonparams.ProviderInstance, error) {
|
||||
ret := _m.Called(ctx, instance)
|
||||
|
||||
var r0 params.Instance
|
||||
var r0 garm_provider_commonparams.ProviderInstance
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(0).(func(context.Context, string) (params.Instance, error)); ok {
|
||||
if rf, ok := ret.Get(0).(func(context.Context, string) (garm_provider_commonparams.ProviderInstance, error)); ok {
|
||||
return rf(ctx, instance)
|
||||
}
|
||||
if rf, ok := ret.Get(0).(func(context.Context, string) params.Instance); ok {
|
||||
if rf, ok := ret.Get(0).(func(context.Context, string) garm_provider_commonparams.ProviderInstance); ok {
|
||||
r0 = rf(ctx, instance)
|
||||
} else {
|
||||
r0 = ret.Get(0).(params.Instance)
|
||||
r0 = ret.Get(0).(garm_provider_commonparams.ProviderInstance)
|
||||
}
|
||||
|
||||
if rf, ok := ret.Get(1).(func(context.Context, string) error); ok {
|
||||
|
|
@ -93,19 +93,19 @@ func (_m *Provider) GetInstance(ctx context.Context, instance string) (params.In
|
|||
}
|
||||
|
||||
// ListInstances provides a mock function with given fields: ctx, poolID
|
||||
func (_m *Provider) ListInstances(ctx context.Context, poolID string) ([]params.Instance, error) {
|
||||
func (_m *Provider) ListInstances(ctx context.Context, poolID string) ([]garm_provider_commonparams.ProviderInstance, error) {
|
||||
ret := _m.Called(ctx, poolID)
|
||||
|
||||
var r0 []params.Instance
|
||||
var r0 []garm_provider_commonparams.ProviderInstance
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(0).(func(context.Context, string) ([]params.Instance, error)); ok {
|
||||
if rf, ok := ret.Get(0).(func(context.Context, string) ([]garm_provider_commonparams.ProviderInstance, error)); ok {
|
||||
return rf(ctx, poolID)
|
||||
}
|
||||
if rf, ok := ret.Get(0).(func(context.Context, string) []params.Instance); ok {
|
||||
if rf, ok := ret.Get(0).(func(context.Context, string) []garm_provider_commonparams.ProviderInstance); ok {
|
||||
r0 = rf(ctx, poolID)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).([]params.Instance)
|
||||
r0 = ret.Get(0).([]garm_provider_commonparams.ProviderInstance)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -24,13 +24,13 @@ import (
|
|||
//go:generate mockery --all
|
||||
type Provider interface {
|
||||
// CreateInstance creates a new compute instance in the provider.
|
||||
CreateInstance(ctx context.Context, bootstrapParams commonParams.BootstrapInstance) (params.Instance, error)
|
||||
CreateInstance(ctx context.Context, bootstrapParams commonParams.BootstrapInstance) (commonParams.ProviderInstance, error)
|
||||
// Delete instance will delete the instance in a provider.
|
||||
DeleteInstance(ctx context.Context, instance string) error
|
||||
// GetInstance will return details about one instance.
|
||||
GetInstance(ctx context.Context, instance string) (params.Instance, error)
|
||||
GetInstance(ctx context.Context, instance string) (commonParams.ProviderInstance, error)
|
||||
// ListInstances will list all instances for a provider.
|
||||
ListInstances(ctx context.Context, poolID string) ([]params.Instance, error)
|
||||
ListInstances(ctx context.Context, poolID string) ([]commonParams.ProviderInstance, error)
|
||||
// RemoveAllInstances will remove all instances created by this provider.
|
||||
RemoveAllInstances(ctx context.Context) error
|
||||
// Stop shuts down the instance.
|
||||
|
|
|
|||
|
|
@ -467,13 +467,13 @@ func (r *basePoolManager) reapTimedOutRunners(runners []*github.Runner) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func instanceInList(instanceName string, instances []params.Instance) (params.Instance, bool) {
|
||||
func instanceInList(instanceName string, instances []commonParams.ProviderInstance) (commonParams.ProviderInstance, bool) {
|
||||
for _, val := range instances {
|
||||
if val.Name == instanceName {
|
||||
return val, true
|
||||
}
|
||||
}
|
||||
return params.Instance{}, false
|
||||
return commonParams.ProviderInstance{}, false
|
||||
}
|
||||
|
||||
// cleanupOrphanedGithubRunners will forcefully remove any github runners that appear
|
||||
|
|
@ -481,7 +481,7 @@ func instanceInList(instanceName string, instances []params.Instance) (params.In
|
|||
// This may happen if someone manually deletes the instance in the provider. We need to
|
||||
// first remove the instance from github, and then from our database.
|
||||
func (r *basePoolManager) cleanupOrphanedGithubRunners(runners []*github.Runner) error {
|
||||
poolInstanceCache := map[string][]params.Instance{}
|
||||
poolInstanceCache := map[string][]commonParams.ProviderInstance{}
|
||||
g, ctx := errgroup.WithContext(r.ctx)
|
||||
for _, runner := range runners {
|
||||
if !r.isManagedRunner(labelsFromRunner(runner)) {
|
||||
|
|
@ -532,7 +532,7 @@ func (r *basePoolManager) cleanupOrphanedGithubRunners(runners []*github.Runner)
|
|||
return fmt.Errorf("unknown provider %s for pool %s", pool.ProviderName, pool.ID)
|
||||
}
|
||||
|
||||
var poolInstances []params.Instance
|
||||
var poolInstances []commonParams.ProviderInstance
|
||||
poolInstances, ok = poolInstanceCache[pool.ID]
|
||||
if !ok {
|
||||
r.log("updating instances cache for pool %s", pool.ID)
|
||||
|
|
@ -911,17 +911,17 @@ func (r *basePoolManager) controllerLabel() string {
|
|||
return fmt.Sprintf("%s%s", controllerLabelPrefix, r.controllerID)
|
||||
}
|
||||
|
||||
func (r *basePoolManager) updateArgsFromProviderInstance(providerInstance params.Instance) params.UpdateInstanceParams {
|
||||
func (r *basePoolManager) updateArgsFromProviderInstance(providerInstance commonParams.ProviderInstance) params.UpdateInstanceParams {
|
||||
return params.UpdateInstanceParams{
|
||||
ProviderID: providerInstance.ProviderID,
|
||||
OSName: providerInstance.OSName,
|
||||
OSVersion: providerInstance.OSVersion,
|
||||
Addresses: providerInstance.Addresses,
|
||||
Status: providerInstance.Status,
|
||||
RunnerStatus: providerInstance.RunnerStatus,
|
||||
ProviderFault: providerInstance.ProviderFault,
|
||||
}
|
||||
}
|
||||
|
||||
func (r *basePoolManager) scaleDownOnePool(ctx context.Context, pool params.Pool) error {
|
||||
r.log("scaling down pool %s", pool.ID)
|
||||
if !pool.Enabled {
|
||||
|
|
|
|||
28
runner/providers/external/external.go
vendored
28
runner/providers/external/external.go
vendored
|
|
@ -67,7 +67,7 @@ func (e *external) validateResult(inst commonParams.ProviderInstance) error {
|
|||
}
|
||||
|
||||
// CreateInstance creates a new compute instance in the provider.
|
||||
func (e *external) CreateInstance(ctx context.Context, bootstrapParams commonParams.BootstrapInstance) (params.Instance, error) {
|
||||
func (e *external) CreateInstance(ctx context.Context, bootstrapParams commonParams.BootstrapInstance) (commonParams.ProviderInstance, error) {
|
||||
asEnv := []string{
|
||||
fmt.Sprintf("GARM_COMMAND=%s", execution.CreateInstanceCommand),
|
||||
fmt.Sprintf("GARM_CONTROLLER_ID=%s", e.controllerID),
|
||||
|
|
@ -77,21 +77,21 @@ func (e *external) CreateInstance(ctx context.Context, bootstrapParams commonPar
|
|||
|
||||
asJs, err := json.Marshal(bootstrapParams)
|
||||
if err != nil {
|
||||
return params.Instance{}, errors.Wrap(err, "serializing bootstrap params")
|
||||
return commonParams.ProviderInstance{}, errors.Wrap(err, "serializing bootstrap params")
|
||||
}
|
||||
|
||||
out, err := garmExec.Exec(ctx, e.execPath, asJs, asEnv)
|
||||
if err != nil {
|
||||
return params.Instance{}, garmErrors.NewProviderError("provider binary %s returned error: %s", e.execPath, err)
|
||||
return commonParams.ProviderInstance{}, garmErrors.NewProviderError("provider binary %s returned error: %s", e.execPath, err)
|
||||
}
|
||||
|
||||
var param commonParams.ProviderInstance
|
||||
if err := json.Unmarshal(out, ¶m); err != nil {
|
||||
return params.Instance{}, garmErrors.NewProviderError("failed to decode response from binary: %s", err)
|
||||
return commonParams.ProviderInstance{}, garmErrors.NewProviderError("failed to decode response from binary: %s", err)
|
||||
}
|
||||
|
||||
if err := e.validateResult(param); err != nil {
|
||||
return params.Instance{}, garmErrors.NewProviderError("failed to validate result: %s", err)
|
||||
return commonParams.ProviderInstance{}, garmErrors.NewProviderError("failed to validate result: %s", err)
|
||||
}
|
||||
|
||||
retAsJs, _ := json.MarshalIndent(param, "", " ")
|
||||
|
|
@ -120,7 +120,7 @@ func (e *external) DeleteInstance(ctx context.Context, instance string) error {
|
|||
}
|
||||
|
||||
// GetInstance will return details about one instance.
|
||||
func (e *external) GetInstance(ctx context.Context, instance string) (params.Instance, error) {
|
||||
func (e *external) GetInstance(ctx context.Context, instance string) (commonParams.ProviderInstance, error) {
|
||||
asEnv := []string{
|
||||
fmt.Sprintf("GARM_COMMAND=%s", execution.GetInstanceCommand),
|
||||
fmt.Sprintf("GARM_CONTROLLER_ID=%s", e.controllerID),
|
||||
|
|
@ -132,23 +132,23 @@ func (e *external) GetInstance(ctx context.Context, instance string) (params.Ins
|
|||
// know when the error is ErrNotFound.
|
||||
out, err := garmExec.Exec(ctx, e.execPath, nil, asEnv)
|
||||
if err != nil {
|
||||
return params.Instance{}, garmErrors.NewProviderError("provider binary %s returned error: %s", e.execPath, err)
|
||||
return commonParams.ProviderInstance{}, garmErrors.NewProviderError("provider binary %s returned error: %s", e.execPath, err)
|
||||
}
|
||||
|
||||
var param commonParams.ProviderInstance
|
||||
if err := json.Unmarshal(out, ¶m); err != nil {
|
||||
return params.Instance{}, garmErrors.NewProviderError("failed to decode response from binary: %s", err)
|
||||
return commonParams.ProviderInstance{}, garmErrors.NewProviderError("failed to decode response from binary: %s", err)
|
||||
}
|
||||
|
||||
if err := e.validateResult(param); err != nil {
|
||||
return params.Instance{}, garmErrors.NewProviderError("failed to validate result: %s", err)
|
||||
return commonParams.ProviderInstance{}, garmErrors.NewProviderError("failed to validate result: %s", err)
|
||||
}
|
||||
|
||||
return providerInstanceToParamsInstance(param), nil
|
||||
}
|
||||
|
||||
// ListInstances will list all instances for a provider.
|
||||
func (e *external) ListInstances(ctx context.Context, poolID string) ([]params.Instance, error) {
|
||||
func (e *external) ListInstances(ctx context.Context, poolID string) ([]commonParams.ProviderInstance, error) {
|
||||
asEnv := []string{
|
||||
fmt.Sprintf("GARM_COMMAND=%s", execution.ListInstancesCommand),
|
||||
fmt.Sprintf("GARM_CONTROLLER_ID=%s", e.controllerID),
|
||||
|
|
@ -158,18 +158,18 @@ func (e *external) ListInstances(ctx context.Context, poolID string) ([]params.I
|
|||
|
||||
out, err := garmExec.Exec(ctx, e.execPath, nil, asEnv)
|
||||
if err != nil {
|
||||
return []params.Instance{}, garmErrors.NewProviderError("provider binary %s returned error: %s", e.execPath, err)
|
||||
return []commonParams.ProviderInstance{}, garmErrors.NewProviderError("provider binary %s returned error: %s", e.execPath, err)
|
||||
}
|
||||
|
||||
var param []commonParams.ProviderInstance
|
||||
if err := json.Unmarshal(out, ¶m); err != nil {
|
||||
return []params.Instance{}, garmErrors.NewProviderError("failed to decode response from binary: %s", err)
|
||||
return []commonParams.ProviderInstance{}, garmErrors.NewProviderError("failed to decode response from binary: %s", err)
|
||||
}
|
||||
|
||||
ret := make([]params.Instance, len(param))
|
||||
ret := make([]commonParams.ProviderInstance, len(param))
|
||||
for idx, inst := range param {
|
||||
if err := e.validateResult(inst); err != nil {
|
||||
return []params.Instance{}, garmErrors.NewProviderError("failed to validate result: %s", err)
|
||||
return []commonParams.ProviderInstance{}, garmErrors.NewProviderError("failed to validate result: %s", err)
|
||||
}
|
||||
ret[idx] = providerInstanceToParamsInstance(inst)
|
||||
}
|
||||
|
|
|
|||
5
runner/providers/external/util.go
vendored
5
runner/providers/external/util.go
vendored
|
|
@ -2,7 +2,6 @@ package external
|
|||
|
||||
import (
|
||||
commonParams "github.com/cloudbase/garm-provider-common/params"
|
||||
"github.com/cloudbase/garm/params"
|
||||
)
|
||||
|
||||
// IsProviderValidStatus checks if the given status is valid for the provider.
|
||||
|
|
@ -21,8 +20,8 @@ func IsValidProviderStatus(status commonParams.InstanceStatus) bool {
|
|||
}
|
||||
}
|
||||
|
||||
func providerInstanceToParamsInstance(inst commonParams.ProviderInstance) params.Instance {
|
||||
return params.Instance{
|
||||
func providerInstanceToParamsInstance(inst commonParams.ProviderInstance) commonParams.ProviderInstance {
|
||||
return commonParams.ProviderInstance{
|
||||
ProviderID: inst.ProviderID,
|
||||
Name: inst.Name,
|
||||
OSName: inst.OSName,
|
||||
|
|
|
|||
|
|
@ -315,40 +315,40 @@ func (l *LXD) launchInstance(createArgs api.InstancesPost) error {
|
|||
}
|
||||
|
||||
// CreateInstance creates a new compute instance in the provider.
|
||||
func (l *LXD) CreateInstance(ctx context.Context, bootstrapParams commonParams.BootstrapInstance) (params.Instance, error) {
|
||||
func (l *LXD) CreateInstance(ctx context.Context, bootstrapParams commonParams.BootstrapInstance) (commonParams.ProviderInstance, error) {
|
||||
extraSpecs, err := parseExtraSpecsFromBootstrapParams(bootstrapParams)
|
||||
if err != nil {
|
||||
return params.Instance{}, errors.Wrap(err, "parsing extra specs")
|
||||
return commonParams.ProviderInstance{}, errors.Wrap(err, "parsing extra specs")
|
||||
}
|
||||
args, err := l.getCreateInstanceArgs(bootstrapParams, extraSpecs)
|
||||
if err != nil {
|
||||
return params.Instance{}, errors.Wrap(err, "fetching create args")
|
||||
return commonParams.ProviderInstance{}, errors.Wrap(err, "fetching create args")
|
||||
}
|
||||
|
||||
if err := l.launchInstance(args); err != nil {
|
||||
return params.Instance{}, errors.Wrap(err, "creating instance")
|
||||
return commonParams.ProviderInstance{}, errors.Wrap(err, "creating instance")
|
||||
}
|
||||
|
||||
ret, err := l.waitInstanceHasIP(ctx, args.Name)
|
||||
if err != nil {
|
||||
return params.Instance{}, errors.Wrap(err, "fetching instance")
|
||||
return commonParams.ProviderInstance{}, errors.Wrap(err, "fetching instance")
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
// GetInstance will return details about one instance.
|
||||
func (l *LXD) GetInstance(ctx context.Context, instanceName string) (params.Instance, error) {
|
||||
func (l *LXD) GetInstance(ctx context.Context, instanceName string) (commonParams.ProviderInstance, error) {
|
||||
cli, err := l.getCLI()
|
||||
if err != nil {
|
||||
return params.Instance{}, errors.Wrap(err, "fetching client")
|
||||
return commonParams.ProviderInstance{}, errors.Wrap(err, "fetching client")
|
||||
}
|
||||
instance, _, err := cli.GetInstanceFull(instanceName)
|
||||
if err != nil {
|
||||
if isNotFoundError(err) {
|
||||
return params.Instance{}, errors.Wrapf(runnerErrors.ErrNotFound, "fetching instance: %q", err)
|
||||
return commonParams.ProviderInstance{}, errors.Wrapf(runnerErrors.ErrNotFound, "fetching instance: %q", err)
|
||||
}
|
||||
return params.Instance{}, errors.Wrap(err, "fetching instance")
|
||||
return commonParams.ProviderInstance{}, errors.Wrap(err, "fetching instance")
|
||||
}
|
||||
|
||||
return lxdInstanceToAPIInstance(instance), nil
|
||||
|
|
@ -420,10 +420,10 @@ type listResponse struct {
|
|||
}
|
||||
|
||||
// ListInstances will list all instances for a provider.
|
||||
func (l *LXD) ListInstances(ctx context.Context, poolID string) ([]params.Instance, error) {
|
||||
func (l *LXD) ListInstances(ctx context.Context, poolID string) ([]commonParams.ProviderInstance, error) {
|
||||
cli, err := l.getCLI()
|
||||
if err != nil {
|
||||
return []params.Instance{}, errors.Wrap(err, "fetching client")
|
||||
return []commonParams.ProviderInstance{}, errors.Wrap(err, "fetching client")
|
||||
}
|
||||
|
||||
result := make(chan listResponse, 1)
|
||||
|
|
@ -445,14 +445,14 @@ func (l *LXD) ListInstances(ctx context.Context, poolID string) ([]params.Instan
|
|||
select {
|
||||
case res := <-result:
|
||||
if res.err != nil {
|
||||
return []params.Instance{}, errors.Wrap(res.err, "fetching instances")
|
||||
return []commonParams.ProviderInstance{}, errors.Wrap(res.err, "fetching instances")
|
||||
}
|
||||
instances = res.instances
|
||||
case <-time.After(time.Second * 60):
|
||||
return []params.Instance{}, errors.Wrap(runnerErrors.ErrTimeout, "fetching instances from provider")
|
||||
return []commonParams.ProviderInstance{}, errors.Wrap(runnerErrors.ErrTimeout, "fetching instances from provider")
|
||||
}
|
||||
|
||||
ret := []params.Instance{}
|
||||
ret := []commonParams.ProviderInstance{}
|
||||
|
||||
for _, instance := range instances {
|
||||
if id, ok := instance.ExpandedConfig[controllerIDKeyName]; ok && id == l.controllerID {
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@ import (
|
|||
|
||||
"github.com/cloudbase/garm-provider-common/util"
|
||||
"github.com/cloudbase/garm/config"
|
||||
"github.com/cloudbase/garm/params"
|
||||
|
||||
"github.com/juju/clock"
|
||||
"github.com/juju/retry"
|
||||
|
|
@ -62,7 +61,7 @@ func isNotFoundError(err error) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
func lxdInstanceToAPIInstance(instance *api.InstanceFull) params.Instance {
|
||||
func lxdInstanceToAPIInstance(instance *api.InstanceFull) commonParams.ProviderInstance {
|
||||
lxdOS, ok := instance.ExpandedConfig["image.os"]
|
||||
if !ok {
|
||||
log.Printf("failed to find OS in instance config")
|
||||
|
|
@ -107,7 +106,7 @@ func lxdInstanceToAPIInstance(instance *api.InstanceFull) params.Instance {
|
|||
log.Printf("failed to find OS architecture")
|
||||
}
|
||||
|
||||
return params.Instance{
|
||||
return commonParams.ProviderInstance{
|
||||
OSArch: instanceArch,
|
||||
ProviderID: instance.Name,
|
||||
Name: instance.Name,
|
||||
|
|
@ -200,8 +199,8 @@ func resolveArchitecture(osArch commonParams.OSArch) (string, error) {
|
|||
|
||||
// waitDeviceActive is a function capable of figuring out when a Equinix Metal
|
||||
// device is active
|
||||
func (l *LXD) waitInstanceHasIP(ctx context.Context, instanceName string) (params.Instance, error) {
|
||||
var p params.Instance
|
||||
func (l *LXD) waitInstanceHasIP(ctx context.Context, instanceName string) (commonParams.ProviderInstance, error) {
|
||||
var p commonParams.ProviderInstance
|
||||
var errIPNotFound error = fmt.Errorf("ip not found")
|
||||
err := retry.Call(retry.CallArgs{
|
||||
Func: func() error {
|
||||
|
|
@ -228,7 +227,7 @@ func (l *LXD) waitInstanceHasIP(ctx context.Context, instanceName string) (param
|
|||
})
|
||||
|
||||
if err != nil && err != errIPNotFound {
|
||||
return params.Instance{}, err
|
||||
return commonParams.ProviderInstance{}, err
|
||||
}
|
||||
|
||||
return p, nil
|
||||
|
|
|
|||
4
vendor/github.com/cloudbase/garm-provider-common/params/params.go
generated
vendored
4
vendor/github.com/cloudbase/garm-provider-common/params/params.go
generated
vendored
|
|
@ -141,4 +141,8 @@ type ProviderInstance struct {
|
|||
|
||||
// Status is the status of the instance inside the provider (eg: running, stopped, etc)
|
||||
Status InstanceStatus `json:"status,omitempty"`
|
||||
|
||||
// ProviderFault holds any error messages captured from the IaaS provider that is
|
||||
// responsible for managing the lifecycle of the runner.
|
||||
ProviderFault []byte `json:"provider_fault,omitempty"`
|
||||
}
|
||||
|
|
|
|||
25
vendor/github.com/cloudbase/garm-provider-common/util/exec/exec.go
generated
vendored
Normal file
25
vendor/github.com/cloudbase/garm-provider-common/util/exec/exec.go
generated
vendored
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
package exec
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"os/exec"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
func Exec(ctx context.Context, providerBin string, stdinData []byte, environ []string) ([]byte, error) {
|
||||
stdout := &bytes.Buffer{}
|
||||
stderr := &bytes.Buffer{}
|
||||
c := exec.CommandContext(ctx, providerBin)
|
||||
c.Env = environ
|
||||
c.Stdin = bytes.NewBuffer(stdinData)
|
||||
c.Stdout = stdout
|
||||
c.Stderr = stderr
|
||||
|
||||
if err := c.Run(); err != nil {
|
||||
return nil, errors.Wrapf(err, "provider binary failed with stdout: %s; stderr: %s", stdout.String(), stderr.String())
|
||||
}
|
||||
|
||||
return stdout.Bytes(), nil
|
||||
}
|
||||
12
vendor/github.com/cloudbase/garm-provider-common/util/exec/exec_nix.go
generated
vendored
Normal file
12
vendor/github.com/cloudbase/garm-provider-common/util/exec/exec_nix.go
generated
vendored
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
//go:build !windows
|
||||
// +build !windows
|
||||
|
||||
package exec
|
||||
|
||||
import (
|
||||
"golang.org/x/sys/unix"
|
||||
)
|
||||
|
||||
func IsExecutable(path string) bool {
|
||||
return unix.Access(path, unix.X_OK) == nil
|
||||
}
|
||||
18
vendor/github.com/cloudbase/garm-provider-common/util/exec/exec_windows.go
generated
vendored
Normal file
18
vendor/github.com/cloudbase/garm-provider-common/util/exec/exec_windows.go
generated
vendored
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
package exec
|
||||
|
||||
import (
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func IsExecutable(path string) bool {
|
||||
pathExt := os.Getenv("PATHEXT")
|
||||
execList := strings.Split(pathExt, ";")
|
||||
for _, ext := range execList {
|
||||
if strings.HasSuffix(path, ext) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
2
vendor/modules.txt
vendored
2
vendor/modules.txt
vendored
|
|
@ -34,7 +34,7 @@ github.com/cespare/xxhash/v2
|
|||
# github.com/chzyer/readline v1.5.1
|
||||
## explicit; go 1.15
|
||||
github.com/chzyer/readline
|
||||
# github.com/cloudbase/garm-provider-common v0.0.0-20230722221640-5f53e8404727
|
||||
# github.com/cloudbase/garm-provider-common v0.0.0-20230723124240-9ad9282807e5
|
||||
## explicit; go 1.20
|
||||
github.com/cloudbase/garm-provider-common/cloudconfig
|
||||
github.com/cloudbase/garm-provider-common/defaults
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue