Compare commits

...

22 Commits

Author SHA1 Message Date
Marius Pana 7d85c685fb fixed typo in eval or compose 2018-07-11 16:54:10 +03:00
Marius Pana 90aecbd40d fixed comment/typo 2018-02-12 19:26:25 +02:00
Marius Pana 480eab872d renamed to spearhead-docker 2018-02-12 19:24:34 +02:00
Marius Pana 2741fe5d94 updated for sc 2018-02-12 17:44:56 +02:00
Marius Pana dab09df51d updated readme for sc 2018-02-12 17:19:15 +02:00
Casey Bisson 16b0aca67a
Merge pull request #19 from joyent/fix-18-triton-docker-profile
Fix triton-docker profile
2017-12-07 13:06:59 -08:00
Casey Bisson 4cc524dcb1
Fix triton-docker profile
Per https://github.com/joyent/triton-docker-cli/issues/18
2017-11-17 13:06:40 -08:00
Casey Bisson 031e98e50a Merge pull request #11 from joyent/5-uuid
Don't _require_ CNS be activated
2017-06-03 08:59:48 -07:00
Casey Bisson f265bb9b58 nits 2017-06-03 08:58:09 -07:00
Casey Bisson f320fb4799 don't exit if CNS is disabled 2017-06-02 14:42:16 -07:00
Casey Bisson 63ba8f8204 Merge github.com:joyent/triton-docker-cli into 5-uuid 2017-06-02 14:28:51 -07:00
Casey Bisson dd886215e7 fix nits 2017-06-02 14:28:25 -07:00
Casey Bisson 68ea93a42e Merge pull request #9 from joyent/5-uuid
Inject extra env vars to make CNS usage easier
2017-06-02 14:03:00 -07:00
Casey Bisson 0921d23dec add cns-164 links 2017-06-02 14:01:54 -07:00
Casey Bisson 7ff1b5ba14 clarify what the notes and cautions are about 2017-06-02 13:31:37 -07:00
Casey Bisson 9ee8085ad7 be clear that this only works on TPC
Rename env vars
set -o pipefail
2017-06-02 13:30:01 -07:00
Casey Bisson e4a1385439 refactor
It seemed wise to expose only the CNS variables that were most relevant
2017-06-02 10:17:19 -07:00
Casey Bisson 9d8ed9e18f Merge branch 'master' of github.com:joyent/triton-docker-cli into 5-uuid 2017-06-02 10:00:46 -07:00
Casey Bisson 5e7d5acf4f Merge pull request #8 from joyent/6-sudo
Execute installation in subshell
2017-06-02 09:57:49 -07:00
Casey Bisson dde60bcf92 Merge pull request #7 from joyent/3-quiet
Add option to show profile
2017-06-02 09:57:36 -07:00
Casey Bisson 15c72d38c6 add extra env vars for CNS 2017-06-02 09:46:34 -07:00
Casey Bisson c71f61589e execute in subshell 2017-06-02 08:56:47 -07:00
3 changed files with 182 additions and 121 deletions

View File

@ -1,47 +1,45 @@
# Triton Docker CLI helper
# Spearhead Docker CLI helper
This script installs known good, tested versions of the Docker (now Moby) and Docker Compose CLI tools for use with Triton.
This script will install compatible Docker versions for use with the Spearhead Cloud.
Additionally, this script will automatically configure those tools for use with Triton when you use them, making it easy to switch between Docker on your laptop and Docker on Triton.
Your existing Docker will not be affected and you can conveniently switch between your own Docker and the Spearhead Cloud docker tools.
### Compatibility and requirements
This is designed and tested for Linux and MacOS X.
This code also requires [the Triton CLI tools](https://docs.joyent.com/public-cloud/api-access/cloudapi) and [a Triton account](https://docs.joyent.com/public-cloud/getting-started) on either Triton public cloud (Joyent public cloud) or in a private cloud powered by Triton.
Use of this software also requires [a Triton profile configured in the Triton CLI tool](https://docs.joyent.com/public-cloud/api-access/cloudapi#configuration).
This code requires [Spearhead Cloud CLI tool](https://code.spearhead.cloud/Spearhead/node-spearhead) and [a Spearhead Cloud account](https://docs.spearhead.cloud/start/).
### Installation
In a terminal window, run the following command:
```bash
sudo curl -o /usr/local/bin/triton-docker https://raw.githubusercontent.com/joyent/triton-docker-cli/master/triton-docker && chmod +x /usr/local/bin/triton-docker && ln -Fs /usr/local/bin/triton-docker /usr/local/bin/triton-compose && ln -Fs /usr/local/bin/triton-docker /usr/local/bin/triton-docker-install
sudo bash -c 'curl -o /usr/local/bin/spearhead-docker https://code.spearhead.cloud/Spearhead/spearhead-docker-cli/raw/branch/master/spearhead-docker && chmod +x /usr/local/bin/spearhead-docker && ln -Fs /usr/local/bin/spearhead-docker /usr/local/bin/spearhead-compose && ln -Fs /usr/local/bin/spearhead-docker /usr/local/bin/spearheadn-docker-install'
```
That command will copy the `triton-docker` shell script from this repo, and link it as `triton-compose` and `triton-docker-install`.
That command will copy the `spearhead-docker` shell script from this repo, and link it as `spearhead-compose` and `spearhead-docker-install`.
To complete the installation, run `sudo triton-docker-install` to install the platform-specific versions of the Docker (now Moby) and Docker Compose CLI tools. These versions will not replace any existing Docker or Docker Compose versions you may have installed.
To complete the installation, run `sudo spearhead-docker-install` to install the platform-specific versions of the Docker (now Moby) and Docker Compose CLI tools. These versions will not replace any existing Docker or Docker Compose versions you may have installed.
### Usage
Once installed, use `triton-docker` and `triton-compose` in place of `docker` and `docker-compose` when interacting with the Triton Elastic Docker Host.
Once installed, use `spearhead-docker` and `spearhead-compose` in place of `docker` and `docker-compose` when interacting with the Spearhead Cloud.
Start a Docker container running Nginx container on Triton:
Start a Docker container running Nginx container on Spearhead Cloud:
```bash
$ triton-docker run -d -p 80 --name webserver nginx
Executing in 'us-sw-1' (default; use `triton profile set <profile name>` to change) at 03:11:11 PM
d5cae48b0072610ecc67f6aecb3115f9fadff59b2151694a963084dad40e5d85
$ spearhead-docker run -d -p 80 --name webserver nginx
Executing in 'ro-1' (default; use `spearhead profile set <profile name>` to change) at 05:02:41 AM
x5gso83h9365831psn43h7qwuc3115f9fitff59b2151694a963043sue94k2f73
$
```
Start [all the containers to run WordPress](https://github.com/autopilotpattern/wordpress) via Docker Compose on Triton:
Start [all the containers to run WordPress](https://github.com/autopilotpattern/wordpress) via Docker Compose on Spearhead Cloud:
```bash
$ triton-compose up -d
Executing in 'us-sw-1' (default; use `triton profile set <profile name>` to change) at 03:15:56 PM
$ spearhead-compose up -d
Executing in 'ro-1' (default; use `spearhead profile set <profile name>` to change) at 03:15:56 PM
Creating wp_wordpress_1
Creating wp_nginx_1
Creating wp_nfs_1
@ -58,9 +56,23 @@ More about:
- [Docker Compose on Triton](https://www.joyent.com/blog/using-docker-compose)
- [Optimizing your Docker operations for Triton](https://www.joyent.com/blog/optimizing-docker-on-triton)
### Triton Container Name Service helpers
This will also set some helpful environment variables for using [Triton Container Name Service (CNS)](https://docs.joyent.com/public-cloud/network/cns):
- `SC_CNS_SEARCH_DOMAIN_PUBLIC`
- `SC_CNS_SEARCH_DOMAIN_PRIVATE`
Those vars will be automatically set with values appropriate for use in Spearhead Public Cloud:
```
SC_CNS_SEARCH_DOMAIN_PRIVATE=a42e7881-89d2-459e-bc0b-e9af0bca409a.us-east-3.cns.spearhead.cloud
SC_CNS_SEARCH_DOMAIN_PUBLIC=a42e7881-89d2-459e-bc0b-e9af0bca409a.us-east-3.spearhead.cloud
```
### Components
In addition to the shell script in this repo, this script will install:
- [Docker (now Moby) 1.12.6](https://github.com/moby/moby/releases/tag/v1.12.6)
- [Moby 1.12.6](https://github.com/moby/moby/releases/tag/v1.12.6)
- [Docker Compose 1.9.0](https://github.com/docker/compose/releases/tag/1.9.0)

152
spearhead-docker Executable file
View File

@ -0,0 +1,152 @@
#!/bin/bash
set -e -o pipefail
triton_docker_version=1.12.6
triton_compose_version=1.9.0
# Check if triton is installed and executable
function checkTritonInstalled () {
command -v spearhead >/dev/null 2>&1 || { echo >&2 "Spearhead CLI tools do not appear to be installed. Please install before continuing."; exit 1; }
}
# Check if curl is installed and executable
function checkCurlInstalled () {
command -v curl >/dev/null 2>&1 || { echo >&2 "curl is required to complete this installation. Please install before continuing."; exit 1; }
}
# Check if the Docker binary (named spearhead-docker-helper)
# and Docker Compose (named spearhead-compose-helper) are installed and executable
function checkDockerInstalled () {
if
[ ! -f /usr/local/bin/spearhead-docker-helper ] ||
[ ! -x /usr/local/bin/spearhead-docker-helper ] ||
[ "${triton_docker_version}," != "$(/usr/local/bin/spearhead-docker-helper -v | awk '{print $3}')" ] ||
[ ! -f /usr/local/bin/spearhead-compose-helper ] ||
[ ! -x /usr/local/bin/spearhead-compose-helper ] ||
[ "${triton_compose_version}," != "$(/usr/local/bin/spearhead-compose-helper -v | awk '{print $3}')" ]
then
echo 'Additional or updated components are required.'
echo 'Please run `sudo spearhead-docker-install` to continue.'
echo
exit 1
fi
}
# Install architecture-specific Docker and Docker Compose binaries
function install () {
echo "Spearhead Cloud needs to install additional components for Docker and Docker Compose interactions."
echo "This installation will only happen once."
# Check if curl is installed and executable
checkCurlInstalled
# Install the specific version of Docker for Triton
rm -Rf /tmp/spearhead-docker /usr/local/bin/spearhead-docker-helper
mkdir -p /tmp/spearhead-docker
curl https://get.docker.com/builds/"$(uname -a | awk '{ print $1 }')"/x86_64/docker-${triton_docker_version}.tgz | tar zxvf - -C /tmp/spearhead-docker
mv /tmp/spearhead-docker/docker/docker /usr/local/bin/spearhead-docker-helper
rm -Rf /tmp/spearhead-docker
chmod +x /usr/local/bin/spearhead-docker-helper
echo "The spearhead-docker-helper is now installed."
echo
# Install the specific version of Docker Compose for Triton
curl -Lo /usr/local/bin/spearhead-compose-helper https://github.com/docker/compose/releases/download/${triton_compose_version}/docker-compose-"$(uname -a | awk '{ print $1 }')"-x86_64
chmod +x /usr/local/bin/spearhead-compose-helper
echo "The spearhead-compose-helper is now installed."
echo
}
# Emit the current Triton profile and time
function currentProfile () {
if [ -n "$SC_PROFILE" ]
then
local profile_source='via env var; use `eval "$(spearhead env <profile name>)"` to change'
else
local profile_source='default; use `spearhead profile set <profile name>` to change'
fi
# Get and the user's account information and CloudAPI URL for parsing later
local triton_account="$(spearhead account get)"
echo "Executing in '$(spearhead profile get | awk 'NR == 1 {print $2}')' (${profile_source})"
# Check if CNS is enabled, require it
if [ ! "true" == "$(echo "${triton_account}" | awk -F": " '/^triton_cns_enabled:/{print $2}')" ]
then
echo
tput rev # reverse
tput bold # bold
echo 'Warning! Triton CNS is not enabled.'
tput sgr0 # clear
echo
echo 'Please run the following to activate:'
echo ' spearhead account update triton_cns_enabled=true'
echo
fi
}
# Set env vars to make using CNS easier
function cnsEnvVars () {
# If the CNS env vars are already set, don't bother continuing
if [ -n "$SC_CNS_SEARCH_DOMAIN_PUBLIC" ] && [ -n "$SC_CNS_SEARCH_DOMAIN_PRIVATE" ]
then
return
fi
# Get and the user's account information and CloudAPI URL for parsing later
local triton_account="$(spearhead account get)"
local triton_url="$(spearhead profile get | awk -F"/" '/url:/{print $3}')"
#Do not continue if the target is not a Spearhead Cloud data center
if [ ! ".api.joyent.com" == "${triton_url: -15}" ] || [ ! ".api.spearhead.cloud" == "${triton_url: -15}" ]
then
return
fi
# Get the user's UUID
local triton_account_uuid="$(echo "${triton_account}" | awk -F": " '/^id:/{print $2}')"
# Get current data center name
# Note: this makes assumptions that work in our public cloud, but might not work elsewhere
# Further note: set TRITON_CNS_SUFFIX_PUBLIC and TRITON_CNS_SUFFIX_PRIVATE to work around this
local triton_dc="$(echo "${triton_url}" | awk -F'.' '{print $1}')"
# Set the CNS base for public and private names
# Note, this also makes assumptions that only work in our public cloud
export SC_CNS_SEARCH_DOMAIN_PUBLIC="${triton_account_uuid}.${triton_dc}.spearhead.cloud"
export SC_CNS_SEARCH_DOMAIN_PRIVATE="${triton_account_uuid}.${triton_dc}.cns.spearhead.cloud"
}
function checkAll () {
checkTritonInstalled &&
checkDockerInstalled
}
if [ "profile" == "$1" ]
then
currentProfile
exit 1
fi
case "$(basename $0)" in
spearhead-docker)
checkAll &&
eval "$(spearhead env)" &&
cnsEnvVars &&
exec /usr/local/bin/spearhead-docker-helper $@
;;
spearhead-compose)
checkAll &&
eval "$(spearhead env)" &&
export COMPOSE_HTTP_TIMEOUT=750 &&
cnsEnvVars &&
exec /usr/local/bin/spearhead-compose-helper $@
;;
spearhead-docker-install)
install
;;
esac

View File

@ -1,103 +0,0 @@
#!/bin/bash
set -e
triton_docker_version=1.12.6
triton_compose_version=1.9.0
# Check if triton is installed and executable
function checkTritonInstalled () {
command -v triton >/dev/null 2>&1 || { echo >&2 "Triton CLI tools do not appear to be installed. Please install before continuing."; exit 1; }
}
# Check if curl is installed and executable
function checkCurlInstalled () {
command -v curl >/dev/null 2>&1 || { echo >&2 "curl is required to complete this installation. Please install before continuing."; exit 1; }
}
# Emit the current Triton profile and time
function currentProfile () {
if [ -n "$TRITON_PROFILE" ]
then
local profile_source='via env var; use `eval "$(triton env <profile name>)"` to change'
else
local profile_source='default; use `triton profile set <profile name>` to change'
fi
echo "Executing in '$(triton profile get | awk 'NR == 1 {print $2}')' (${profile_source})"
}
# Check if the Docker binary (named triton-docker-helper)
# and Docker Compose (named triton-compose-helper) are installed and executable
function checkDockerInstalled () {
if
[ ! -f /usr/local/bin/triton-docker-helper ] ||
[ ! -x /usr/local/bin/triton-docker-helper ] ||
[ "${triton_docker_version}," != "$(/usr/local/bin/triton-docker-helper -v | awk '{print $3}')" ] ||
[ ! -f /usr/local/bin/triton-compose-helper ] ||
[ ! -x /usr/local/bin/triton-compose-helper ] ||
[ "${triton_compose_version}," != "$(/usr/local/bin/triton-compose-helper -v | awk '{print $3}')" ]
then
echo 'Additional or updated components are required.'
echo 'Please run `sudo triton-docker-install` to continue.'
echo
exit 1
fi
}
# Install architecture-specific Docker and Docker Compose binaries
function install () {
echo "Triton needs to install additional components for Docker and Docker Compose interactions."
echo "This installation will only happen once."
# Check if curl is installed and executable
checkCurlInstalled
# Install the specific version of Docker for Triton
rm -Rf /tmp/triton-docker /usr/local/bin/triton-docker-helper
mkdir -p /tmp/triton-docker
curl https://get.docker.com/builds/"$(uname -a | awk '{ print $1 }')"/x86_64/docker-${triton_docker_version}.tgz | tar zxvf - -C /tmp/triton-docker
mv /tmp/triton-docker/docker/docker /usr/local/bin/triton-docker-helper
rm -Rf /tmp/triton-docker
chmod +x /usr/local/bin/triton-docker-helper
echo "The triton-docker-helper is now installed."
echo
# Install the specific version of Docker Compose for Triton
curl -Lo /usr/local/bin/triton-compose-helper https://github.com/docker/compose/releases/download/${triton_compose_version}/docker-compose-"$(uname -a | awk '{ print $1 }')"-x86_64
chmod +x /usr/local/bin/triton-compose-helper
echo "The triton-compose-helper is now installed."
echo
}
# Run all checks
function checkAll () {
checkTritonInstalled &&
checkDockerInstalled
}
# Special case handling if the sub-command is `profile`
if [ "profile" == "$1" ]
then
currentProfile
exit 1
fi
# Change behavior based on the calling name of this executable
case "$(basename $0)" in
triton-docker)
checkAll &&
eval "$(triton env)" &&
exec /usr/local/bin/triton-docker-helper $@
;;
triton-compose)
checkAll &&
eval "$(triton env)" &&
export COMPOSE_HTTP_TIMEOUT=750 &&
exec /usr/local/bin/triton-compose-helper $@
;;
triton-docker-install)
install
;;
esac