mirror of
https://github.com/weaveworks/scope.git
synced 2026-07-18 21:09:38 +00:00
b990f48 Merge pull request #42 from kinvolk/lorenzo/fix-git-diff 224a145 Check if SHA1 exists before calling `git diff` 1c3000d Add auto_apply config for wcloud 0ebf5c0 Fix wcloud -serivice4fe078aMerge pull request #39 from weaveworks/fix-wrong-subtree-use3f4934dRemove generate_latest_map48beb60Sync changes done directly in scope/tools45dcdd5Merge pull request #37 from weaveworks/fix-mflag-missingb895344Use mflag package from weaveworks fork until we find a better solutione030008Merge pull request #36 from weaveworks/wcloud-service-flags9cbab40Add wcloud Makefileef55901Review feedback, and build wcloud in circle.3fe92f5Add wcloud deploy --service flag3527b56Merge pull request #34 from weaveworks/repo-branch92cd0b8[wcloud] Add support for repo_branch option9f760abAllow wcloud users to override username38037f8Merge pull request #33 from weaveworks/wcloud-templates7acfbd7Propagate the local usernamee6876d1Add template fields to wcloud config.f1bb537Merge pull request #30 from weaveworks/mike/shell-lint/dont-error-if-emptye60f5dfMerge pull request #31 from weaveworks/mike/fix-shell-lint-errorse8e2b69integrations: Fix a shellcheck linter errora781575shell-lint: Don't fail if no shell scripts founddb5efc0Merge pull request #28 from weaveworks/mike/add-image-tag5312c40Import image-tag script into build tools so it can be shared7e850f8Fix logs pathdda9785Update deploy apif2f4e5bFix the wcloud client3925eb6Merge pull request #27 from weaveworks/wcloud-events77355b9Lintd9a1c6cAdd wcloud events, update flags and error nicely when there is no config git-subtree-dir: tools git-subtree-split: b990f488bdc7909b62d9245bc4b4caf58f5ae7ea
151 lines
3.6 KiB
Go
151 lines
3.6 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"io/ioutil"
|
|
"net/http"
|
|
)
|
|
|
|
// Client for the deployment service
|
|
type Client struct {
|
|
token string
|
|
baseURL string
|
|
}
|
|
|
|
// NewClient makes a new Client
|
|
func NewClient(token, baseURL string) Client {
|
|
return Client{
|
|
token: token,
|
|
baseURL: baseURL,
|
|
}
|
|
}
|
|
|
|
func (c Client) newRequest(method, path string, body io.Reader) (*http.Request, error) {
|
|
req, err := http.NewRequest(method, c.baseURL+path, body)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
req.Header.Add("Authorization", fmt.Sprintf("Scope-Probe token=%s", c.token))
|
|
return req, nil
|
|
}
|
|
|
|
// Deploy notifies the deployment service about a new deployment
|
|
func (c Client) Deploy(deployment Deployment) error {
|
|
var buf bytes.Buffer
|
|
if err := json.NewEncoder(&buf).Encode(deployment); err != nil {
|
|
return err
|
|
}
|
|
req, err := c.newRequest("POST", "/api/deploy/deploy", &buf)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
res, err := http.DefaultClient.Do(req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if res.StatusCode != 204 {
|
|
return fmt.Errorf("Error making request: %s", res.Status)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetDeployments returns a list of deployments
|
|
func (c Client) GetDeployments(from, through int64) ([]Deployment, error) {
|
|
req, err := c.newRequest("GET", fmt.Sprintf("/api/deploy/deploy?from=%d&through=%d", from, through), nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
res, err := http.DefaultClient.Do(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if res.StatusCode != 200 {
|
|
return nil, fmt.Errorf("Error making request: %s", res.Status)
|
|
}
|
|
var response struct {
|
|
Deployments []Deployment `json:"deployments"`
|
|
}
|
|
if err := json.NewDecoder(res.Body).Decode(&response); err != nil {
|
|
return nil, err
|
|
}
|
|
return response.Deployments, nil
|
|
}
|
|
|
|
// GetEvents returns the raw events.
|
|
func (c Client) GetEvents(from, through int64) ([]byte, error) {
|
|
req, err := c.newRequest("GET", fmt.Sprintf("/api/deploy/event?from=%d&through=%d", from, through), nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
res, err := http.DefaultClient.Do(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if res.StatusCode != 200 {
|
|
return nil, fmt.Errorf("Error making request: %s", res.Status)
|
|
}
|
|
return ioutil.ReadAll(res.Body)
|
|
}
|
|
|
|
// GetConfig returns the current Config
|
|
func (c Client) GetConfig() (*Config, error) {
|
|
req, err := c.newRequest("GET", "/api/config/deploy", nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
res, err := http.DefaultClient.Do(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if res.StatusCode == 404 {
|
|
return nil, fmt.Errorf("No configuration uploaded yet.")
|
|
}
|
|
if res.StatusCode != 200 {
|
|
return nil, fmt.Errorf("Error making request: %s", res.Status)
|
|
}
|
|
var config Config
|
|
if err := json.NewDecoder(res.Body).Decode(&config); err != nil {
|
|
return nil, err
|
|
}
|
|
return &config, nil
|
|
}
|
|
|
|
// SetConfig sets the current Config
|
|
func (c Client) SetConfig(config *Config) error {
|
|
var buf bytes.Buffer
|
|
if err := json.NewEncoder(&buf).Encode(config); err != nil {
|
|
return err
|
|
}
|
|
req, err := c.newRequest("POST", "/api/config/deploy", &buf)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
res, err := http.DefaultClient.Do(req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if res.StatusCode != 204 {
|
|
return fmt.Errorf("Error making request: %s", res.Status)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetLogs returns the logs for a given deployment.
|
|
func (c Client) GetLogs(deployID string) ([]byte, error) {
|
|
req, err := c.newRequest("GET", fmt.Sprintf("/api/deploy/deploy/%s/log", deployID), nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
res, err := http.DefaultClient.Do(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if res.StatusCode != 200 {
|
|
return nil, fmt.Errorf("Error making request: %s", res.Status)
|
|
}
|
|
return ioutil.ReadAll(res.Body)
|
|
}
|