Road Map

Some of the feature ideas below will be implemented in bang. Some may be better suited for a bang-utils project. They’re listed here so they won’t be forgotten along the way.

General Features

  • Allow overriding path to .bangrc via environment variable. This allows external utilities to manage multiple sets of deployer_credentials (e.g. a bangrc per client).

  • Add extension/plugin mechanism. At the moment, the mercurial-style (i.e. using an rc-file for registering extensions) is the most palatable because it does not demand using setuptools, and because it allows the user to manage files how they please.

    • The corollary is that the setuptools-style (i.e. entry points defined in setup.py) mechanism is not desirable.
  • In addition to the plugin mechanism, have some hookable events to make integration easier with existing tools that can’t easily be converted to plugins. E.g.:

    exec_hooks:
      pre_deploy:
      post_success:
      - /bin/echo yay
      post_failure:
      - /bin/echo boo
    
  • Implement --dry-run.

  • Validate stack configuration.

    • Check for any build artifacts in the deployment S3 bucket/other central storage location.
  • Allow absolute paths to playbooks, or a customizable playbook search path.

  • Add playbook parallelization. Allow running multiple playbooks at once. Leave it up to the deployers to sort out inter-playbook dependencies.

  • Integrate with revision control system.

    • Autoincrement stack version in config file.
    • Tag any config scope that defines a source_code attribute.
    • Generate release notes between tags.
  • Autoscale servers.

  • Add --destroy to automate destruction of stacks.

  • Support ansible-playbook runtime options (e.g. vault and tag values).

  • Allow selecting public or private IP addresses for cloud hosts.

Providers

  • AWS

    • Add any deployers that don’t really apply to less featureful public cloud providers. E.g. SQS, ELB, SNS, etc...
    • Create ssh keypairs if specified by the user in their ~/.bangrc.
    • Add DNS updates via Route53 API.
  • Docker/LXC

    • Add Docker and LXC images as base images.
    • Add Docker and LXC containers to Ansible inventories.
    • Use Ansible playbooks to make changes within containers.
  • Rackspace

  • HP Cloud

    • DB Security Groups
  • RightScale

    • Add this as a new provider and enable mixed RightScale+AWS stacks.