From c610974208babd2bc5029b037a66046f015a4bb7 Mon Sep 17 00:00:00 2001 From: Renan DelValle Date: Fri, 12 Aug 2016 12:48:42 -0700 Subject: [PATCH] Moved Realis to be an interface for future testing classes. Removed AddURI API as AddURIs is able to do the same thing --- docs/getting-started.md | 2 +- docs/leveraging-the-library.md | 2 +- examples/client.go | 2 +- job.go | 17 ++++++----------- realis.go | 35 ++++++++++++++++++++++------------ 5 files changed, 32 insertions(+), 26 deletions(-) diff --git a/docs/getting-started.md b/docs/getting-started.md index b4063a2..9ae5804 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -243,7 +243,7 @@ job = realis.NewJob(). InstanceCount(1). AddPorts(1). AddLabel("fileName", "sample-app/docker-compose.yml"). - AddURI("https://github.com/mesos/docker-compose-executor/releases/download/0.1.0/sample-app.tar.gz", true, true) + AddURIs(true, true, "https://github.com/mesos/docker-compose-executor/releases/download/0.1.0/sample-app.tar.gz") ``` Using a vagrant setup as an example, we can run the following command to create a compose job: diff --git a/docs/leveraging-the-library.md b/docs/leveraging-the-library.md index cc74b59..ea47629 100644 --- a/docs/leveraging-the-library.md +++ b/docs/leveraging-the-library.md @@ -28,7 +28,7 @@ job = realis.NewJob(). InstanceCount(1). AddPorts(1). AddLabel("fileName", "sample-app/docker-compose.yml"). - AddURI("https://github.com/mesos/docker-compose-executor/releases/download/0.1.0/sample-app.tar.gz", true, true) + AddURIs(true, true, "https://github.com/mesos/docker-compose-executor/releases/download/0.1.0/sample-app.tar.gz") ``` * Use client to send a job to Aurora: diff --git a/examples/client.go b/examples/client.go index e57c95f..a99403b 100644 --- a/examples/client.go +++ b/examples/client.go @@ -82,7 +82,7 @@ func main() { InstanceCount(1). AddPorts(1). AddLabel("fileName", "sample-app/docker-compose.yml"). - AddURI("https://github.com/mesos/docker-compose-executor/releases/download/0.1.0/sample-app.tar.gz", true, true) + AddURIs(true, true, "https://github.com/mesos/docker-compose-executor/releases/download/0.1.0/sample-app.tar.gz") break default: fmt.Println("Only thermos and compose are supported for now") diff --git a/job.go b/job.go index f9492ea..a15fbf2 100644 --- a/job.go +++ b/job.go @@ -139,22 +139,18 @@ func (a *Job) JobKey() *aurora.JobKey { return a.jobConfig.Key } -// Add URI to fetch using the mesos fetcher. Scheduler must have --enable_mesos_fetcher flag -// enabled. -func (a *Job) AddURI(value string, extract bool, cache bool) *Job { - a.jobConfig.TaskConfig.MesosFetcherUris[&aurora.MesosFetcherURI{value, &extract, &cache}] = true - return a -} - -// Add a list of URIs with the same extract and cache configuration. +// Add a list of URIs with the same extract and cache configuration. Scheduler must have +// --enable_mesos_fetcher flag enabled. Currently there is no duplicate detection. func (a *Job) AddURIs(extract bool, cache bool, values ...string) *Job { for _, value := range values { - a.jobConfig.TaskConfig.MesosFetcherUris[&aurora.MesosFetcherURI{value, &extract, &cache}] = true + a.jobConfig. + TaskConfig. + MesosFetcherUris[&aurora.MesosFetcherURI{value, &extract, &cache}] = true } return a } -// Adds a Mesos label to the job. Note that as of Aurora 0.15.0, Aurora will add the +// Adds a Mesos label to the job. Note that Aurora will add the // prefix "org.apache.aurora.metadata." to the beginning of each key. func (a *Job) AddLabel(key string, value string) *Job { a.jobConfig.TaskConfig.Metadata[&aurora.Metadata{key, value}] = true @@ -172,7 +168,6 @@ func (a *Job) AddNamedPorts(names ...string) *Job { return a } - // Adds a request for a number of ports to the job configuration. The names chosen for these ports // will be org.apache.aurora.portX, where X is the current port count for the job configuration // starting at 0. These are random ports as it's not currently possible to request diff --git a/realis.go b/realis.go index 8159bd9..712bdc0 100644 --- a/realis.go +++ b/realis.go @@ -27,7 +27,18 @@ import ( "time" ) -type Realis struct { +type Realis interface { + AbortJobUpdate(key *aurora.JobKey, updateId string, message string) (*aurora.Response, error) + AddInstances(instKey *aurora.InstanceKey, count int32) (*aurora.Response, error) + CreateJob(auroraJob *Job) (*aurora.Response, error) + KillJob(key *aurora.JobKey) (*aurora.Response, error) + KillInstance(key *aurora.JobKey, instanceId int32) (*aurora.Response, error) + RestartJob(key *aurora.JobKey) (*aurora.Response, error) + StartJobUpdate(updateJob *UpdateJob, message string) (*aurora.Response, error) + Close() +} + +type realisClient struct { client *aurora.AuroraSchedulerManagerClient } @@ -37,14 +48,14 @@ type RealisConfig struct { } // Create a new Client with a default transport layer -func NewClient(config RealisConfig) *Realis { +func NewClient(config RealisConfig) Realis { httpTrans := (config.transport).(*thrift.THttpClient) httpTrans.SetHeader("User-Agent", "GoRealis v0.1") protocolFactory := thrift.NewTJSONProtocolFactory() - return &Realis{client: aurora.NewAuroraSchedulerManagerClientFactory(config.transport, protocolFactory)} + return realisClient{client: aurora.NewAuroraSchedulerManagerClientFactory(config.transport, protocolFactory)} } // Create a default configuration of the transport layer, requires a URL to test connection with. @@ -84,12 +95,12 @@ func basicAuth(username, password string) string { } // Releases resources associated with the realis client. -func (r *Realis) Close() { +func (r realisClient) Close() { r.client.Transport.Close() } // Uses predefined set of states to retrieve a set of active jobs in Apache Aurora. -func (r *Realis) getActiveInstanceIds(key *aurora.JobKey) (map[int32]bool, error) { +func (r realisClient) getActiveInstanceIds(key *aurora.JobKey) (map[int32]bool, error) { taskQ := &aurora.TaskQuery{Role: key.Role, Environment: key.Environment, JobName: key.Name, @@ -111,7 +122,7 @@ func (r *Realis) getActiveInstanceIds(key *aurora.JobKey) (map[int32]bool, error } // Kill a specific instance of a job. -func (r *Realis) KillInstance(key *aurora.JobKey, instanceId int32) (*aurora.Response, error) { +func (r realisClient) KillInstance(key *aurora.JobKey, instanceId int32) (*aurora.Response, error) { instanceIds := make(map[int32]bool) instanceIds[instanceId] = true @@ -126,7 +137,7 @@ func (r *Realis) KillInstance(key *aurora.JobKey, instanceId int32) (*aurora.Res } // Sends a kill message to the scheduler for all active tasks under a job. -func (r *Realis) KillJob(key *aurora.JobKey) (*aurora.Response, error) { +func (r realisClient) KillJob(key *aurora.JobKey) (*aurora.Response, error) { instanceIds, err := r.getActiveInstanceIds(key) if err != nil { @@ -147,7 +158,7 @@ func (r *Realis) KillJob(key *aurora.JobKey) (*aurora.Response, error) { } // Sends a create job message to the scheduler with a specific job configuration. -func (r *Realis) CreateJob(auroraJob *Job) (*aurora.Response, error) { +func (r realisClient) CreateJob(auroraJob *Job) (*aurora.Response, error) { response, err := r.client.CreateJob(auroraJob.jobConfig) if err != nil { @@ -158,7 +169,7 @@ func (r *Realis) CreateJob(auroraJob *Job) (*aurora.Response, error) { } // Restarts all active tasks under a job configuration. -func (r *Realis) RestartJob(key *aurora.JobKey) (*aurora.Response, error) { +func (r realisClient) RestartJob(key *aurora.JobKey) (*aurora.Response, error) { instanceIds, err := r.getActiveInstanceIds(key) if err != nil { @@ -179,7 +190,7 @@ func (r *Realis) RestartJob(key *aurora.JobKey) (*aurora.Response, error) { } // Update all tasks under a job configuration. Currently there's no support for canary deployments. -func (r *Realis) StartJobUpdate(updateJob *UpdateJob, message string) (*aurora.Response, error) { +func (r realisClient) StartJobUpdate(updateJob *UpdateJob, message string) (*aurora.Response, error) { response, err := r.client.StartJobUpdate(updateJob.req, message) @@ -191,7 +202,7 @@ func (r *Realis) StartJobUpdate(updateJob *UpdateJob, message string) (*aurora.R } // Abort Job Update on Aurora. Requires the updateId which can be obtained on the Aurora web UI. -func (r *Realis) AbortJobUpdate( +func (r realisClient) AbortJobUpdate( key *aurora.JobKey, updateId string, message string) (*aurora.Response, error) { @@ -207,7 +218,7 @@ func (r *Realis) AbortJobUpdate( // Scale up the number of instances under a job configuration using the configuration for specific // instance to scale up. -func (r *Realis) AddInstances(instKey *aurora.InstanceKey, count int32) (*aurora.Response, error) { +func (r realisClient) AddInstances(instKey *aurora.InstanceKey, count int32) (*aurora.Response, error) { response, err := r.client.AddInstances(instKey, count)