Ryan Scott Brown

I build cloud-based systems for startups and enterprises. My background in operations gives me a unique focus on writing observable, reliable software and automating maintenance work.

I love learning and teaching about Amazon Web Services, automation tools such as Ansible, and the serverless ecosystem. I most often write code in Python, TypeScript, and Rust.

B.S. Applied Networking and Systems Administration, minor in Software Engineering from Rochester Institute of Technology.

    ZSH+Boto Tab Completion for AWS

    zsh is an awesome shell. It has enhanced tab completion features that go way beyond what you probably expect from a shell. If you don’t already use zsh but would like to start, this is a great place to jump in, it has everything you could ever want to know about zsh.

    I use zsh as my main shell, especially for the revision control information in my prompt, appreciatively copied from the grml zshrc, 2700 lines of more than you need in a shell.

    I also use S3 and elbadmin on a more or less daily basis, and often find myself having to run different versions of those commands a bunch of times to drill down to the options I actually want. There’s no built-in way to tab-complete things like S3 buckets or Elastic Load Balancers, so I started work on one.

    Currently, it supports elbadmin completely (except for tab-completing listeners) and lss3 to the extent that it completes available buckets, but not keys within those buckets. It’s available on Github.

    There are pre-reqs to get tab-completion working, but they’re very minimal. First, you need to have boto and zsh both installed.

    $ which zsh
    /usr/bin/which: no zsh in (your $PATH)
    $ yum install zsh
    $ which zsh
    /bin/zsh
    $ pip install boto
    

    Now you need to pull down my tab-completion scripts from Github and put them somewhere zsh knows about. In this case, we’re putting it in the .zsh directory and telling zsh to look there for extra tab-completion scripts.

    $ cd .zsh
    $ git clone git://github.com/ryansb/zsh-boto.git
    $ echo "fpath=($fpath /home/user/.zsh/zsh-boto)
    autoload -uz compinit
    compinit" >> ~/.zshrc
    source ~/.zshrc
    

    Now that that’s done, you can go straight to using it. Try these to start:

    $ lss3 <TAB>
    $ elbadmin <TAB>
    $ elbadmin add <TAB>
    $ elbadmin add myloadbalancer <TAB>
    $ elbadmin add myloadbalancer i-12345
    

    The process of writing it was pretty interesting, as I’d never seriously worked with zsh scripting outside of some basic task automation.

    Design by Sam Lucidi (samlucidi.com)