Created
January 28, 2016 10:04
-
-
Save fuse/4e96b8667bd352a81cec to your computer and use it in GitHub Desktop.
Extend docker-machine to have a use command
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#compdef docker-machine | |
# ------------------------------------------------------------------------------ | |
# Description | |
# ----------- | |
# | |
# Completion script for Docker Machine (http://docs.docker.com/machine/). | |
# Adapted from boot2docker completion by hhatto (https://github.com/hhatto) | |
# and docker completion by @aeonazaan and @bobmaerten. | |
# | |
# ------------------------------------------------------------------------------ | |
# Authors | |
# ------- | |
# | |
# * ilkka (https://github.com/ilkka) | |
# | |
# ------------------------------------------------------------------------------ | |
# helper function for completing available machines | |
__machines() { | |
declare -a machines_cmd | |
machines_cmd=($(docker-machine ls|tail +2|awk '{print $1":"$3"("$4")"}')) | |
_describe 'machines' machines_cmd | |
} | |
# subcommands | |
local -a _docker_machine_cmds | |
_docker_machine_cmds=( | |
'active:Get or set the active machine' \ | |
'create:Create a machine' \ | |
'config:Print the connection config for machine' \ | |
'inspect:Inspect information about a machine' \ | |
'ip:Get the IP address of a machine' \ | |
'kill:Kill a machine' \ | |
'ls:List machines' \ | |
'restart:Restart a machine' \ | |
'rm:Remove a machine' \ | |
'env:Display the commands to set up the environment for the Docker client' \ | |
'ssh:Log into or run a command on a machine with SSH' \ | |
'start:Start a machine' \ | |
'stop:Stop a machine' \ | |
'upgrade:Upgrade a machine to the latest version of Docker' \ | |
'url:Get the URL of a machine' \ | |
'use:Choose a machine and eval its env' \ | |
'help:Shows a list of commands or help for one command' | |
) | |
# subcommand completion functions | |
__active() { | |
__machines | |
} | |
__help() { | |
_values 'Get help for subcommand' \ | |
'active' \ | |
'create' \ | |
'config' \ | |
'inspect' \ | |
'ip' \ | |
'kill' \ | |
'ls' \ | |
'restart' \ | |
'rm' \ | |
'env' \ | |
'ssh' \ | |
'start' \ | |
'stop' \ | |
'upgrade' \ | |
'url' \ | |
'help' | |
} | |
__create() { | |
_arguments \ | |
'--amazonec2-access-key:AWS Access Key:()' \ | |
'--amazonec2-ami:AWS machine image:()' \ | |
'--amazonec2-instance-type:AWS instance type:()' \ | |
'--amazonec2-region:AWS region:()' \ | |
'--amazonec2-root-size:AWS root disk size (in GB):()' \ | |
'--amazonec2-secret-key:AWS Secret Key:()' \ | |
'--amazonec2-security-group:AWS VPC security group:()' \ | |
'--amazonec2-session-token:AWS Session Token:()' \ | |
'--amazonec2-subnet-id:AWS VPC subnet id:()' \ | |
'--amazonec2-vpc-id:AWS VPC id:()' \ | |
'--amazonec2-zone:AWS zone for instance (i.e. a,b,c,d,e):()' \ | |
'--azure-docker-port:Azure Docker port:()' \ | |
'--azure-image:Azure image name. Default is Ubuntu 14.04 LTS x64:()' \ | |
'--azure-location:Azure location:()' \ | |
'--azure-password:Azure user password:()' \ | |
'--azure-publish-settings-file:Azure publish settings file:()' \ | |
'--azure-size:Azure size:()' \ | |
'--azure-ssh-port:Azure SSH port:()' \ | |
'--azure-subscription-cert:Azure subscription cert:()' \ | |
'--azure-subscription-id:Azure subscription ID:()' \ | |
'--azure-username:Azure username:()' \ | |
'--digitalocean-access-token:Digital Ocean access token:()' \ | |
'--digitalocean-image:Digital Ocean Image:()' \ | |
'--digitalocean-region:Digital Ocean region:()' \ | |
'--digitalocean-size:Digital Ocean size:()' \ | |
'--google-disk-size:GCE Instance Disk Size (in GB):()' \ | |
'--google-machine-type:GCE Machine Type:()' \ | |
'--google-project:GCE Project:()' \ | |
'--google-scopes:GCE Scopes (comma-separated if multiple scopes):()' \ | |
'--google-username:GCE User Name:()' \ | |
'--google-zone:GCE Zone:()' \ | |
'--openstack-auth-url:OpenStack authentication URL:()' \ | |
'--openstack-endpoint-type:OpenStack endpoint type (adminURL, internalURL or publicURL):()' \ | |
'--openstack-flavor-id:OpenStack flavor id to use for the instance:()' \ | |
'--openstack-flavor-name:OpenStack flavor name to use for the instance:()' \ | |
'--openstack-floatingip-pool:OpenStack floating IP pool to get an IP from to assign to the instance:()' \ | |
'--openstack-image-id:OpenStack image id to use for the instance:()' \ | |
'--openstack-image-name:OpenStack image name to use for the instance:()' \ | |
'--openstack-net-id:OpenStack image name to use for the instance:()' \ | |
'--openstack-net-name:OpenStack network name the machine will be connected on:()' \ | |
'--openstack-password:OpenStack password:()' \ | |
'--openstack-region:OpenStack region name:()' \ | |
'--openstack-sec-groups:OpenStack comma separated security groups for the machine:()' \ | |
'--openstack-ssh-port:OpenStack SSH port:()' \ | |
'--openstack-ssh-user:OpenStack SSH user:()' \ | |
'--openstack-tenant-id:OpenStack tenant id:()' \ | |
'--openstack-tenant-name:OpenStack tenant name:()' \ | |
'--openstack-username:OpenStack username:()' \ | |
'--rackspace-api-key:Rackspace API key:()' \ | |
'--rackspace-docker-install:Set if docker have to be installed on the machine:()' \ | |
'--rackspace-endpoint-type:Rackspace endpoint type (adminURL, internalURL or the default publicURL):()' \ | |
'--rackspace-flavor-id:Rackspace flavor ID. Default: General Purpose 1GB:()' \ | |
'--rackspace-image-id:Rackspace image ID. Default: Ubuntu 14.04 LTS (Trusty Tahr) (PVHVM):()' \ | |
'--rackspace-region:Rackspace region name:()' \ | |
'--rackspace-ssh-port:SSH port for the newly booted machine. Set to 22 by default:()' \ | |
'--rackspace-ssh-user:SSH user for the newly booted machine. Set to root by default:()' \ | |
'--rackspace-username:Rackspace account username:()' \ | |
'--softlayer-api-endpoint:softlayer api endpoint to use:()' \ | |
'--softlayer-api-key:softlayer user API key:()' \ | |
"--softlayer-cpu:number of CPUs for the machine:()" \ | |
'--softlayer-disk-size:Disk size for machine, a value of 0 uses the default size on softlayer:()' \ | |
'--softlayer-domain:domain name for machine:()' \ | |
'--softlayer-hostname:hostname for the machine:()' \ | |
'--softlayer-hourly-billing:set hourly billing for machine - on by default:()' \ | |
'--softlayer-image:OS image for machine:()' \ | |
'--softlayer-local-disk:use machine local disk instead of softlayer SAN:()' \ | |
'--softlayer-memory:Memory in MB for machine:()' \ | |
'--softlayer-private-net-only:Use only private networking:()' \ | |
'--softlayer-region:softlayer region for machine:()' \ | |
'--softlayer-user:softlayer user account name:()' \ | |
'--url:URL of host when no driver is selected:()' \ | |
'--virtualbox-boot2docker-url:The URL of the boot2docker image. Defaults to the latest available version:()' \ | |
'--virtualbox-disk-size:Size of disk for host in MB:()' \ | |
'--virtualbox-memory:Size of memory for host in MB:()' \ | |
'--vmwarefusion-boot2docker-url:Fusion URL for boot2docker image:()' \ | |
'--vmwarefusion-disk-size:Fusion size of disk for host VM (in MB):()' \ | |
'--vmwarefusion-memory-size:Fusion size of memory for host VM (in MB):()' \ | |
'--vmwarevcloudair-catalog:vCloud Air Catalog (default is Public Catalog):()' \ | |
'--vmwarevcloudair-catalogitem:vCloud Air Catalog Item (default is Ubuntu Precise):()' \ | |
'--vmwarevcloudair-computeid:vCloud Air Compute ID (if using Dedicated Cloud):()' \ | |
'--vmwarevcloudair-cpu-count:vCloud Air VM Cpu Count (default 1):()' \ | |
'--vmwarevcloudair-docker-port:vCloud Air Docker port:()' \ | |
'--vmwarevcloudair-edgegateway:vCloud Air Org Edge Gateway (Default is <vdcid>):()' \ | |
'--vmwarevcloudair-memory-size:vCloud Air VM Memory Size in MB (default 2048):()' \ | |
'--vmwarevcloudair-orgvdcnetwork:vCloud Air Org VDC Network (Default is <vdcid>-default-routed):()' \ | |
'--vmwarevcloudair-password:vCloud Air password:()' \ | |
'--vmwarevcloudair-provision:vCloud Air Install Docker binaries (default is true):()' \ | |
'--vmwarevcloudair-publicip:vCloud Air Org Public IP to use:()' \ | |
'--vmwarevcloudair-ssh-port:vCloud Air SSH port:()' \ | |
'--vmwarevcloudair-username:vCloud Air username:()' \ | |
'--vmwarevcloudair-vdcid:vCloud Air VDC ID:()' \ | |
'--vmwarevsphere-boot2docker-url:vSphere URL for boot2docker image:()' \ | |
'--vmwarevsphere-compute-ip:vSphere compute host IP where the docker VM will be instantiated:()' \ | |
'--vmwarevsphere-cpu-count:vSphere CPU number for docker VM:()' \ | |
'--vmwarevsphere-datacenter:vSphere datacenter for docker VM:()' \ | |
'--vmwarevsphere-datastore:vSphere datastore for docker VM:()' \ | |
'--vmwarevsphere-disk-size:vSphere size of disk for docker VM (in MB):()' \ | |
'--vmwarevsphere-memory-size:vSphere size of memory for docker VM (in MB):()' \ | |
'--vmwarevsphere-network:vSphere network where the docker VM will be attached:()' \ | |
'--vmwarevsphere-password:vSphere password:()' \ | |
'--vmwarevsphere-pool:vSphere resource pool for docker VM:()' \ | |
'--vmwarevsphere-username:vSphere username:()' \ | |
'--vmwarevsphere-vcenter:vSphere IP/hostname for vCenter:()' \ | |
'--driver:Driver to create machine with.:(amazonec2 azure digitalocean google none openstack rackspace softlayer virtualbox vmwarefusion vmwarevcloudair vmwarevsphere)' \ | |
'--swarm:Configure Machine with Swarm:()' \ | |
'--swarm-master:Configure Machine to be a Swarm master:()' \ | |
'--swarm-discovery:Discovery service to use with Swarm:()' \ | |
'--swarm-host:ip/socket to listen on for Swarm master:()' \ | |
'--swarm-addr:addr to advertise for Swarm (default: detect and use the machine IP):()' | |
} | |
__config() { | |
_arguments \ | |
'--swarm[Display the Swarm config instead of the Docker daemon]' | |
__machines | |
} | |
__inspect() { | |
__machines | |
} | |
__ip() { | |
__machines | |
} | |
__env() { | |
_arguments \ | |
'--unset[Unset variables instead of setting them]' \ | |
'--swarm[Display the Swarm config instead of the Docker daemon]' | |
__machines | |
} | |
__kill() { | |
__machines | |
} | |
__ls() { | |
_arguments \ | |
'--quiet[Enable quiet mode]' | |
} | |
__restart() { | |
__machines | |
} | |
__start() { | |
__machines | |
} | |
__stop() { | |
__machines | |
} | |
__rm() { | |
__machines | |
} | |
__ssh() { | |
__machines | |
} | |
__upgrade() { | |
__machines | |
} | |
__url() { | |
__machines | |
} | |
__use(){ | |
__machines | |
} | |
# common args | |
_arguments \ | |
'--debug[Enable debug mode]' \ | |
'--storage-path[Configures storage path]:_files' \ | |
'--tls-ca-cert[CA to verify remotes against]:_files' \ | |
'--tls-ca-key[Private key to generate certificates]:_files' \ | |
'--tls-client-cert[Client cert to use for TLS]:_files' \ | |
'--tls-client-key[Private key used in client TLS auth]:_files' \ | |
'--help[show help]' \ | |
'--version[print the version]' \ | |
'*:: :->command' | |
# start machines! | |
if (( CURRENT == 1 )); then | |
_describe -t commands 'docker-machine command' _docker_machine_cmds | |
fi | |
local -a _command_args | |
case "$words[1]" in | |
active) | |
__active ;; | |
create) | |
__create ;; | |
config) | |
__config ;; | |
inspect) | |
__inspect ;; | |
ip) | |
__ip ;; | |
kill) | |
__kill ;; | |
ls) | |
__ls ;; | |
restart) | |
__restart ;; | |
rm) | |
__rm ;; | |
env) | |
__env ;; | |
ssh) | |
__ssh ;; | |
start) | |
__start ;; | |
stop) | |
__stop ;; | |
upgrade) | |
__upgrade ;; | |
url) | |
__url ;; | |
use) | |
__use ;; | |
help) | |
__help ;; | |
esac | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
docker-machine() { | |
case $1 in | |
use) | |
eval "$(docker-machine env $2)";; | |
*) | |
command docker-machine "$@";; | |
esac | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment