Awesome
Replicated Vendor CLI
This repository provides a Go client and CLI for interacting with the Replicated Vendor API.
CLI
Mac Install
brew install replicatedhq/replicated/cli
Linux Install
curl -o install.sh -sSL https://raw.githubusercontent.com/replicatedhq/replicated/master/install.sh
sudo bash ./install.sh
Getting Started
You can use the replicated CLI command (i.e. $ replicated --help
).
(Pre-requirement) Config the CLI to have access to the Replicated Vendor portal
To use the CLI you need a user API Token to connect. You can create one by clicking on New User API Token
in your
Account Settings.
Then, you can set the following environment variable to avoid passing it as an argument to each command
$ export REPLICATED_API_TOKEN=<Your new User API Token>
Now, let's check an example
We will check all Applications available and the distribution channels:
To list the applications available run replicated app ls
, i.e.:
$ replicated app ls
ID NAME SLUG SCHEDULER
2FOfwth3fHauBqCvsZ1OaBAr7MU test test-rodent kots
2FOvdw6IR0oewVPVCcmH12tSRoL nginx nginx-sheepdog kots
Then, to check the channels run replicated channel ls --app <Your APP SLUG OR ID>
, i.e.:
$ replicated channel ls --app 2FOfwth3fHauBqCvsZ1OaBAr7MU
ID NAME RELEASE VERSION
2FOfwru7Rq1plkqyZFLH6MLR1fk Stable 1 0.0.1
2FOfwu2zcDbqR24BVPSjjnkVwIe Beta 1 0.0.1
2FOfwreTFbmkXtf9bukwh8s1ewb Unstable 1 0.0.1
Notes:
- If you do not export the environment variable above then, you must pass your User API token via the flag
--token <Your new User API Token>
- You can also, set via environment variable your app slug or ID (i.e.
export REPLICATED_APP=<Your APP SLUG OR ID>
). So that, the above command would be simplyreplicated channel ls
.
CI Example
Creating a new release for every tagged build is a common use of the replicated command.
Assume the app's yaml config is checked in at replicated.yaml and you have configured TravisCI or CircleCI with your REPLICATED_APP and REPLICATED_API_TOKEN environment variables.
Then add a release.sh script to your project something like this:
#!/bin/bash
# Create a new release from replicated.yaml and promote the Unstable channel to use it.
# Aborts if version tag is empty.
set -e
VERSION=$1
INSTALL_SCRIPT=https://raw.githubusercontent.com/replicatedhq/replicated/master/install.sh
CHANNEL=Unstable
if [ -z "$VERSION" ]; then
echo "No version; skipping replicated release"
exit
fi
# install replicated
curl -sSL "$INSTALL_SCRIPT" > install.sh
sudo bash ./install.sh
cat replicated.yaml | replicated release create --yaml - --promote Unstable --version "$VERSION"
# Channel ee9d99e87b4a5acc2863f68cb2a0c390 successfully set to release 15
Now you can automate tagged releases in TravisCI or CircleCI:
# .travis.yml
sudo: required
after_success:
- ./release.sh "$TRAVIS_TAG"
# circle.yml
deployment:
tag:
tag: /v.*/
owner: replicatedcom
commands:
- ./release.sh "$CIRCLE_TAG"
Client
package main
import (
"fmt"
"log"
"os"
"github.com/replicatedhq/replicated/pkg/platformclient"
)
func main() {
token := os.Getenv("REPLICATED_API_TOKEN")
appSlugOrID := os.Getenv("REPLICATED_APP")
api := platformclient.New(token)
app, err := api.GetApp(appSlugOrID)
if err != nil {
log.Fatal(err)
}
channels, err := api.ListChannels(app.Id)
if err != nil {
log.Fatal(err)
}
for _, c := range channels {
fmt.Printf("channel %s is on release %d\n", c.Name, c.ReleaseSequence)
}
}
Development
make build
installs the binary to $GOPATH/bin
The models are generated from the API's swagger spec.
Tests
Environment
REPLICATED_API_ORIGIN
may be set to override the API endpointVENDOR_USER_EMAIL
andVENDOR_USER_PASSWORD
should be set to delete apps created for testingREPLICATED_REGISTRY_ORIGIN
may be set to overrride the registry endpoint
Releases
Releases are created on Travis when a tag is pushed. This will also update the docs container.
git tag -a v0.1.0 -m "First release" && git push upstream v0.1.0
Regenerating Client Code
When the swagger definitions change, you can regenerate the Client code from the swagger spec with
make get-spec-prod gen-models
models for the v2 api isn't really working yet, need to find the URL for that OpenAPI spec.
Usage Recipes
Make a new release by editing another
replicated release inspect 130 | sed 1,4d > config.yaml
vim config.yaml
cat config.yaml | replicated release create --yaml -
# SEQUENCE: 131