TODO next

  • Move dotfiles into separate repo (managed by user)
  • stubs :required_options should be tested
  • replace subtle window manager with dwm
  • reorg packages into folders by category

EC2 support

  • Encrypt keys/passwords etc

  • Handle unknown tasks and display a proper error message (at the moment we get an obscure undefined method on NilClass)

  • Support missing environment (e.g. source repo machine)

  • machines dryrun/build with no machine name should list the machines available

  • DRY up per user config by creating a "common" user config that all users pull default config from

  • DRY up further by having default templates in the same way that packages default to built-in ones (In other words remove as much as possible from evmachines)

  • Complement this by providing a command to view packages and templates

  • Move dotfiles to a repo so they can be managed across projects

  • Handle apt-get error 110 and retry

  • Move packages into a separate gem

  • Move template into a separate gem

  • Remove questions API (once passwords are encrypted we just ask for encryption password, similar to pw)

Cloud

  • Use EC2 IP address for connecting to database servers
  • Create elastic IP address for web servers

  • Assign private/public keys

  • Create security groups - check they exist and modify or create as required Use roles to assign security groups

    • everything gets the ssh group (open port 22)
    • app role gets the web group (open port 80, 443)

EC2 - Look at assigning and freeing elastic IP addresses

  • machines.machine.address = an elastic IP address
  • machnies.machine.ec2.instance_id = the ec2 id
  • Set $conf.machines_changed when creating a new instance
  • Set up minimal Ubuntu on EC2
  • Must allow multiple dev machines to access cloud (so multiple SSH keys must be assigned)

Package and Task Tasks

  • Any methods other than append that cannot be repeatedly run?
  • Display additional install notes for a particular package (at the end of installation) - e.g. printer setup requires Windows share to be setup
  • CODE/DOC: Describe difference between package and task or merge packages with tasks if possible
  • BUG: Report error if task is nested
  • Define packages as a group of tasks?

Misc Tasks

  • Remove percentage from progress once command has completed
  • DOC: How webapps environment specific settings override default settings and how to set your own
  • DOC: All config files
  • DOC: Why we use ~/.profile (with links)
  • On initial SSH connection to machine, test we have an Internet connection. Fail if not.
  • Add the check that was run to CHECK_FAILED/CHECK_PASSED
  • Output progress to log/_progress.log
  • Rename output log to log/_output.log
  • DOC: machines desc - Should display a detailed description of the package
  • machines list - Display a list of machines to build (or maybe machines build/dryrun with no machinename)
  • ?? base package may not be needed on DB installs
  • ?? Default path for Nginx install is /usr/local - Is it installed correctly for non-default paths?
  • ?? I have a new webapp - How can I add it to a server that has already been installed?
  • BUG: Uploads throw exception if local file is missing - Get upload to check file existence when adding to queue
  • BUG: CTRL+C doesn't quite exit cleanly
  • Check $conf.db_server is picked up and used to write database.yml on qa/staging/production

  • Allow $conf.webapps[app].path to be overridden from webapps.yml

  • ?? Does webapps.yml structure get preserved? (e.g. when modifying keys and resaving)

  • Can more files be ERB templates? Standardise. Need examples (can't remember what they were)

  • webapps has gaps in testing (e.g. ssl)

  • BUG: escape $$ in passwords

  • turn off debug output by default

  • DOC: webapps.yml loaded into $conf

  • MySQL root pass is not set properly

  • Recommended practice for overwritting project with new template. Use Git

  • Set cron to sensible times /etc/crontab [DEV]

  • Need a way to see optional tasks that are not run as part of full build

  • Would set :variable_name, value be better than $conf.variable = value?

  • Need a better DSL to handle $conf and also paths File.join is so verbose For exmaple, instead of: File.join($conf.appsroot, 'subfolder') How about: path :appsroot, 'subfolder'

  • rvm ruby@gemset --rvmrc to generate passenger compatible .rvmrc

  • passenger_nginx was installed with rvmsudo. Need to test it still works with just sudo