Vladimir Mihailenco
Vladimir Mihailenco

Reputation: 3382

Chef-solo: deploy: access to release_path

I have following Chef cookbook:

deploy "/home/prj" do
  repo "https://path_to_repo"
  user node.project_owner
  group node.project_owner
  symlink_before_migrate({})
end

How can I access to the provider's release path? In my case in will be: /home/prj/releases/20120506125222/ .

Upvotes: 1

Views: 911

Answers (1)

Holger Just
Holger Just

Reputation: 55718

It depends on where you want to access the release path. "Inside" the resource, i.e. the callbacks, that's easily possible using something iike

deploy "/home/prj" do
  before_migrate do
    gemfile = File.read("#{release_path}/Gemfile")
  end
end

Outside of the resource, you don't have the release_path variable available. You can however use the current symlink which points to the currently deployed version, i.e. the last release:

current_path = "home/prj/current"
release_path = File.readlink(current_path)

Most of the time, you can to things directly in the current_path without having to resort to resolving the symlink target.

That said, you typically don't want to actually do things in there directly. Instead, you are encouraged to generate additional files in the shared directory (i.e. /home/prk/shared) and let chef symlink those files into the release during deployment. That's exactly what symlink_before_migrate is for. That way, you don't need to actually know the release path yourself but can let chef handle that for you.

Upvotes: 2

Related Questions