[chef] How to recover from failed builds?


Chronological Thread 
  • From: Steve Bennett < >
  • To:
  • Subject: [chef] How to recover from failed builds?
  • Date: Fri, 13 Jul 2012 13:50:05 +1000

Hi all,
  A bit of a newbie question. I'm using chef solo and vagrant to deploy a django app. I didn't write the recipes, but tweaked them a bit to work on Ubuntu. I've finally got to the point where the app deploys correctly, first time. But one thing I noticed in that process is if the build fails some reason (generally while running buildout), then the "before_symlink" step doesn't get run again.

Not being a Rails developer, I don't really understand the deployment model (ie, directories 'shared', 'release', 'current') that is apparently assumed by Chef and followed implicitly. For example, I don't see an explicit step that creates a symlink 'current' to the release - it just happens. (The documentation http://wiki.opscode.com/display/chef/Deploy+Resource is a bit unclear )

So, I was wondering if someone could suggest changes to make to this script so that it would repeat the 'bash' block if there has not been a successful build. Thanks!

Steve

----
deploy_revision "mytardis" do
  action :deploy
  deploy_to "/opt/mytardis"
  repository node['mytardis']['repo']
  branch node['mytardis']['branch']
  user "mytardis"
  group "mytardis"
  symlink_before_migrate(app_symlinks.merge({
      "data" => "var",
      "log" => "log",
      "buildout.cfg" => "buildout-prod.cfg",
      "settings.py" => "tardis/settings.py"
  }))
  purge_before_symlink([])
  create_dirs_before_symlink([])
  symlinks({})
  before_symlink do
    current_release = release_path

    bash "mytardis_buildout_install" do
      user "mytardis"
      cwd current_release
      code <<-EOH
        export PYTHON_EGG_CACHE=/opt/mytardis/shared/egg-cache
        python setup.py clean
        find . -name '*.py[co]' -delete
        python bootstrap.py
        bin/buildout -c buildout-prod.cfg install
        bin/django syncdb --noinput --migrate 
        bin/django collectstatic -l --noinput 
      EOH
    end
  end
  restart_command do
    current_release = release_path

    bash "mytardis_foreman_install_and_restart" do
      cwd "/opt/mytardis/current"
      code <<-EOH
        foreman export upstart /etc/init -a mytardis -p 3031 -u mytardis -l /var/log/mytardis -t ./foreman
        restart mytardis || start mytardis
      EOH
    end
  end
end
----


  • [chef] How to recover from failed builds?, Steve Bennett, 07/12/2012

Archive powered by MHonArc 2.6.16.

§