X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/c792e4991e1d77620d61efaa2600a93d75227f06..f1b0b5b85b7479156aaaa55c0f2def6ffd7d3a40:/lib/cloud/interfaces.go diff --git a/lib/cloud/interfaces.go b/lib/cloud/interfaces.go index 7410f9d0e0..7c532fda4a 100644 --- a/lib/cloud/interfaces.go +++ b/lib/cloud/interfaces.go @@ -10,7 +10,8 @@ import ( "io" "time" - "git.curoverse.com/arvados.git/sdk/go/arvados" + "git.arvados.org/arvados.git/sdk/go/arvados" + "github.com/prometheus/client_golang/prometheus" "github.com/sirupsen/logrus" "golang.org/x/crypto/ssh" ) @@ -102,6 +103,12 @@ type Instance interface { // Replace tags with the given tags SetTags(InstanceTags) error + // Get recent price history, if available. The InstanceType is + // supplied as an argument so the driver implementation can + // account for AddedScratch cost without requesting the volume + // attachment information from the provider's API. + PriceHistory(arvados.InstanceType) []InstancePrice + // Shut down the node Destroy() error } @@ -141,6 +148,11 @@ type InstanceSet interface { Stop() } +type InstancePrice struct { + StartTime time.Time + Price float64 +} + type InitCommand string // A Driver returns an InstanceSet that uses the given InstanceSetID @@ -180,7 +192,7 @@ type InitCommand string // // type exampleDriver struct {} // -// func (*exampleDriver) InstanceSet(config json.RawMessage, id cloud.InstanceSetID, tags cloud.SharedResourceTags, logger logrus.FieldLogger) (cloud.InstanceSet, error) { +// func (*exampleDriver) InstanceSet(config json.RawMessage, id cloud.InstanceSetID, tags cloud.SharedResourceTags, logger logrus.FieldLogger, reg *prometheus.Registry) (cloud.InstanceSet, error) { // var is exampleInstanceSet // if err := json.Unmarshal(config, &is); err != nil { // return nil, err @@ -188,20 +200,18 @@ type InitCommand string // is.ownID = id // return &is, nil // } -// -// var _ = registerCloudDriver("example", &exampleDriver{}) type Driver interface { - InstanceSet(config json.RawMessage, id InstanceSetID, tags SharedResourceTags, logger logrus.FieldLogger) (InstanceSet, error) + InstanceSet(config json.RawMessage, id InstanceSetID, tags SharedResourceTags, logger logrus.FieldLogger, reg *prometheus.Registry) (InstanceSet, error) } // DriverFunc makes a Driver using the provided function as its // InstanceSet method. This is similar to http.HandlerFunc. -func DriverFunc(fn func(config json.RawMessage, id InstanceSetID, tags SharedResourceTags, logger logrus.FieldLogger) (InstanceSet, error)) Driver { +func DriverFunc(fn func(config json.RawMessage, id InstanceSetID, tags SharedResourceTags, logger logrus.FieldLogger, reg *prometheus.Registry) (InstanceSet, error)) Driver { return driverFunc(fn) } -type driverFunc func(config json.RawMessage, id InstanceSetID, tags SharedResourceTags, logger logrus.FieldLogger) (InstanceSet, error) +type driverFunc func(config json.RawMessage, id InstanceSetID, tags SharedResourceTags, logger logrus.FieldLogger, reg *prometheus.Registry) (InstanceSet, error) -func (df driverFunc) InstanceSet(config json.RawMessage, id InstanceSetID, tags SharedResourceTags, logger logrus.FieldLogger) (InstanceSet, error) { - return df(config, id, tags, logger) +func (df driverFunc) InstanceSet(config json.RawMessage, id InstanceSetID, tags SharedResourceTags, logger logrus.FieldLogger, reg *prometheus.Registry) (InstanceSet, error) { + return df(config, id, tags, logger, reg) }