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
The traditional form, where you manually switch profiles:
$ bog myclient init --aws # Configure ~/.bog with a stub for AWS under profile 'myclient'
Enter your Amazon Secret Access Key:
...
$ bog myclient # Switch to profile 'myclient'
$ knife client list
$ aws s3 ls
...
$ bog personal # Switch to another profile
...
$ bog # Show the current profile
personal
...
$ bog -l # List available profiles - * indicates current profile
myclient
personal*
With roaming profiles enabled:
$ bog personal default # Set default profile
$ source ~/.bog/bog.sh # Source shell helpers
$ cd ~/src/project
$ echo "myclient" > .bog-profile
$ bog # Profile set by dotfile
myclient
$ cd ..
$ bog # Profile set from default
personal # without dotfile present
$ bog someprofile
$ bog # Setting profile ignored
personal # with roaming profiles
One-off commands
$ bog myclient exec aws s3 ls # Exec command as myclient, then
$ bog myclient exec knife client list # switch back to previous profile
...
How it works
bog init myclient
will create
.bog
├── bog.sh
├── current -> /home/me/.bog/profiles/myclient
├── default
└── profiles
└── myclient
bog
will never touch your ~/.aws
and similar directories. You will need to:
- populate
~/.bog/profiles/myclient/
with dotfiles and directories for that profile. - symlink the directory the tool would look for:
ln -s ~/.bog/current/.aws ~/.aws
When profiles are switched the ~/.bog/current
symlink is repointed.
Roaming profiles
By sourcing ~/.bog/bog.sh
into your shell environment and placing a file called .bog-profile
into one or more directories you can take advantage of roaming profiles. In short, when bog
detects such a file it'll automatically change your current profile to that given in the dotfile. This enables you to easily work with per-project profiles, for example.
It does this by recursing up from the current directory until it either finds a .bog-profile
file or fails and continues with the default profile. You should be aware of the implications therefore of nested directories and of the implications for concurrency when running commands under bog
in multiple terminals.
It also expects you to have a default profile configured for when a dotfile cannot be found. You can do this by executing bog PROFILE default
.
Be aware that using roaming profiles is mutally exclusive to using bog PROFILE
to set your profile. IT WILL BE IGNORED. Your current profile will be determined either from the presence of a dotfile or from your default.
You should be sure to source ~/.bog/bog.sh
after anything else that might hook into $PROMPT_COMMAND
, such as chruby, rvm, or liquidprompt.
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
- 2.1
- 2.2
- 2.3.1