libexec/aohelper in alpha_omega-1.5.7 vs libexec/aohelper in alpha_omega-1.5.8
- old
+ new
@@ -1,30 +1,121 @@
#!/bin/bash
+set -e
shome="$(cd -P -- "$(dirname -- "$BASH_SOURCE")/.." && pwd -P)"
function ryaml {
- ruby -ryaml -e 'def ps x; unless x.nil?; puts (x.class == String || x.class == Fixnum) ? x : x.to_yaml; end; end; ps ARGV[1..-1].inject(YAML.load(File.read(ARGV[0]))) {|acc, key| acc[acc.class == Array ? key.to_i : key] }' "$@" 2>&-
+ ruby -ryaml -e '
+ def ps x
+ unless x.nil?
+ puts (x.class == String || x.class == Fixnum) ? x : x.to_yaml
+ end
+ end
+
+ ps ARGV[1..-1].inject(YAML.load(File.read(ARGV[0]))) {|acc, key| acc[acc.class == Array ? key.to_i : key] }
+
+ ' "$@" 2>&-
}
+function verify_ruby {
+ local ruby_runner="$*";
+
+ # verify ruby version matches deploy descriptor
+ local ruby_version_platform="$($ruby_runner ruby -e 'puts "#{RUBY_VERSION} #{RUBY_PLATFORM}"' 2>&-)"
+ local version_ruby="${ruby_version_platform%% *}"
+ local platform_ruby="${ruby_version_platform##* }"
+
+ if [[ -n "$app_ruby_version" ]]; then
+ if [[ "$version_ruby" != "$app_ruby_version" ]]; then
+ return 1
+ fi
+ fi
+
+ if [[ -n "$app_ruby_platform" ]]; then
+ if [[ "$platform_ruby" != "$app_ruby_platform" ]]; then
+ return 1
+ fi
+ fi
+
+ if [[ -n "$not_app_ruby_platform" ]]; then
+ if [[ "$platform_ruby" = "$not_app_ruby_platform" ]]; then
+ return 1
+ fi
+ fi
+}
+
+function fatal_ruby {
+ local ruby_loader="$*"
+ : ${ruby_loader:=ruby}
+
+ echo "Expecting $ruby_loader to have:" 1>&2
+ if [[ -n "$app_ruby_version" ]]; then
+ echo " version $app_ruby_version" 1>&2
+ fi
+
+ if [[ -n "$app_ruby_platform" ]]; then
+ echo " platform $app_ruby_platform" 1>&2
+ fi
+
+ if [[ -n "$not_app_ruby_platform" ]]; then
+ echo " not platform $not_app_ruby_platform" 1>&2
+
+ fi
+
+ exit 1
+}
+
function main {
+ # load ruby configuration from deploy descriptor
local app_ruby="$(ryaml $shome/config/deploy.yml app_ruby)"
+ local app_ruby_version="$(ryaml $shome/config/deploy.yml app_ruby_version)"
+ local app_ruby_platform="$(ryaml $shome/config/deploy.yml app_ruby_platform)"
+ local not_app_ruby_platform="$(ryaml $shome/config/deploy.yml not_app_ruby_platform)"
local ruby_loader="$(ryaml $shome/config/deploy.yml ruby_loader)"
local ruby_runner="$ruby_loader $app_ruby"
- PATH="$PATH:/usr/local/rvm/bin:$HOME/.rvm/bin"
+ local chef_path="$(ryaml $shome/config/deploy.yml chef_path)"
+ # if ruby loader is rvm-exec, try to find it
if [[ "$ruby_loader" = "rvm-exec" ]]; then
+ PATH="$PATH:/usr/local/rvm/bin:$HOME/.rvm/bin"
local pth_rvm="$(type -f $ruby_loader 2>&- | awk '{print $3}')"
- if [[ -x "$pth_rvm" ]]; then
+ if [[ ! -x "$pth_rvm" ]]; then
+ # if rvm-exec not found, don't both with ruby version management
+ ruby_runner=""
+ fi
+ fi
+
+ if [[ ! -d "$chef_path" ]]; then
+ # proxied deploy, so relax rvm rquirements, just check current ruby
+ if verify_ruby; then
+ # current ruby is OK
+ ruby_runner=""
true
else
- ruby_runner=""
+ if [[ -n "$ruby_runner" ]]; then
+ # check with configured ruby loader
+ if ! verify_ruby "$ruby_runner"; then
+ # ruby loader is not loading the right ruby
+ fatal_ruby $ruby_runner
+ fi
+ else
+ # no configured ruby loader, current ruby is not loading the right ruby
+ fatal_ruby
+ fi
fi
+ else
+ # in operations environments, must use ruby loader
+ if !verify_ruby "$ruby_runner"; then
+ # ruby loader is not loading the right ruby
+ fatal_ruby $ruby_runner
+ fi
fi
if ! $ruby_runner bundle check 2>&- > /dev/null; then
$ruby_runner bundle install --local --quiet --path vendor/bundle
fi
- $ruby_runner bundle exec ao "${BASH_SOURCE##*/}" "$@"
+
+ # pass deploy command and arguments to ao script in alpha_omega gem
+ echo $ruby_runner bundle exec ao "${BASH_SOURCE##*/}" "$@"
}
main "$@"