bog

OpsUnit Logo

A tool for managing cloud API and configuration management credentials. rbenv for dotfiles.

It is brought to you by the folks at OpsUnit.

Introduction

In a modern operations team it is common to have many different sets of credentials and dotfile configurations. You may have multiple clients, or may split your environments between EC2 accounts. bog allows you to easily work with collections of dotfile configurations and to swap between those sets.

Example

$ bog myclient init --aws --chef    # Configure ~/.bog with stubs for AWS and Chef under profile 'myclient'
$ bog myclient init --aws --prompt  # Configure with AWS stubs and prompt for credentials
Enter your Amazon Secrect Access Key:
...
$ bog myclient                  # Switch to profile 'myclient'
$ knife client list
$ aws s3 ls
...
$ bog personal                  # Switch to another profile
$ bog myclient exec knife environment show  # Execute a command in the context of a profile and revert
...

How it works

bog init myclient --aws --chef will create

.bog
├── current -> profiles/myclient/
├── plugins
└── profiles
    └── myclient
        ├── .aws
        └── .chef

If you passed --prompt then the correctly named configuration files will be present and populated. Otherwise you are free to include whatever you choose.

Within your $HOME directory symlinks to the various directories will be made, pointing towards the appropriate directories under ~/.bog/profiles. bog determines the active profile from the destination of the ~/.bog/current symlink, although repointing that symlink will not cause the directories under $HOME to be repointed unless bog profilename is executed.

bog profilename exec command will swap the dot directories for the profile given into place, execute the command, and then return to the previous state (~/.bog/current is not repointed during this).

Why another dotfile manager

There are plenty out there. bog aims to fit a modern operational workflow and toolset.

Development

The gem and its dependencies are tested against the following ruby versions:

  • 1.9.3
  • 2.0.0
  • 2.1.0