Skip to main content

CLI tool for managing Google Cloud Managed Instance Groups

Project description

migs - Google Cloud MIG CLI Tool

A command-line tool that wraps the gcloud CLI to provide an easier experience for managing Google Cloud Managed Instance Groups.

Features

  • List MIGs in your project
  • Spin up/down VMs with exact custom names (auto-detects gcloud beta)
  • Track your personal VMs
  • Automatic SSH config management for VS Code Remote Explorer
  • Easy file/directory uploads
  • Multi-node cluster support with coordinated naming

Installation

pip install migs

Or to build from source:

git clone https://github.com/keatonelvins/migs.git
cd migs
pip install -e .

Prerequisites

  • Python 3.8+
  • gcloud CLI installed and authenticated (gcloud auth login)
  • SSH keys configured for Google Compute Engine
  • (Optional) gcloud beta component for exact VM naming (gcloud components install beta)

Usage

List all MIGs

migs list

Spin up a VM

# With custom name (auto-detects gcloud beta availability)
migs up my-mig -n my-dev-vm           # Creates VM named "my-dev-vm" if beta available
migs up my-mig -n my-dev-vm -d 2h     # Auto-delete after 2 hours
migs up my-mig -n node -c 3           # Creates "node1", "node2", "node3"

# Without custom name (auto-generated)
migs up my-mig                        # Creates "my-mig-username-timestamp"

# Force stable API (bypass auto-detection)
migs up my-mig -n my-dev-vm --stable  # Use stable API (VM gets random name, mapped locally)

List your VMs

migs vms

Sync VM state

migs sync  # Sync local VM list with GCP state
migs sync --discover  # Also discover and claim untracked VMs

Check VM connectivity

migs check my-dev-vm  # Test SSH connectivity

SSH into a VM

migs ssh my-dev-vm
migs ssh my-dev-vm -- tmux attach  # Pass additional SSH arguments

Run scripts

migs run my-dev-vm ./setup.sh  # Runs in tmux session
migs run my-dev-vm ./deploy.sh --session deploy  # Custom session name
migs run my-dev-vm ./script.sh arg1 arg2  # Pass arguments to script

Environment Variables (.env files)

Both ssh and run commands automatically detect and use .env files from your current directory:

# If .env exists in current directory, it will be uploaded and sourced
migs ssh my-dev-vm  # Variables from .env available in shell
migs run my-dev-vm ./app.sh  # Script runs with .env variables

The .env file is uploaded to /tmp/.env on the VM and sourced using set -a; source /tmp/.env; set +a to export all variables.

If $GITHUB_TOKEN exists in your .env, will also configure the gh cli.

Upload files

migs upload my-dev-vm ./myfile.txt
migs upload my-dev-vm ./mydir/ /home/user/

Download files

migs download my-dev-vm /remote/file.txt
migs download my-dev-vm /remote/dir/ ./local/

Spin down a VM

migs down my-dev-vm

Multi-Node Cluster

# Create 4-node cluster with coordinated names
migs up my-mig --name cluster -c 4    # Creates cluster1, cluster2, cluster3, cluster4

# SSH to specific nodes
migs ssh cluster1
migs ssh cluster2

# Run script on all nodes
migs run cluster1 train.py --all

# Shut down entire cluster
migs down cluster1 --all

SSH Config

The tool automatically updates your ~/.ssh/config file with entries for your VMs, making them accessible in VS Code Remote Explorer.

Release Instructions

  • Test
python3 -m build
twine upload --repository testpypi dist/* # may take a second to index
pip uninstall migs
pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple migs
  • Deploy
twine upload dist/*
git tag v0.1.x
git push origin v0.1.x

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

migs-0.1.4.tar.gz (17.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

migs-0.1.4-py3-none-any.whl (16.8 kB view details)

Uploaded Python 3

File details

Details for the file migs-0.1.4.tar.gz.

File metadata

  • Download URL: migs-0.1.4.tar.gz
  • Upload date:
  • Size: 17.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for migs-0.1.4.tar.gz
Algorithm Hash digest
SHA256 9497746bcf266415d1dff2f0c2f631b954f6bc7b5055310b1e92b66094282adc
MD5 29b14805ac034d78a19ae8fa3d21b72a
BLAKE2b-256 812fbe7ab4eb7778e190bf746b7fc4cf2567c90ecd2afbcdb6d952c29a06ff5a

See more details on using hashes here.

File details

Details for the file migs-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: migs-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 16.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for migs-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 96edb7493f4f266afcc62dea0b6e4c438aa66d2bcf64f242fcad7ead0ec0d0b1
MD5 f0a4472cf3f3fcf3f60ff814049d87d5
BLAKE2b-256 85ce05fc5fdcb152a7794bbf9f9eac7e45dae7092ba206e706deee2b5f2f8c87

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page