#!/usr/bin/env ruby appdir = File.join('puppet', 'application') absolute_appdir = $:.collect { |x| File.join(x,'puppet','application') }.detect{ |x| File.directory?(x) } builtins = Dir[File.join(absolute_appdir, '*.rb')].map{|fn| File.basename(fn, '.rb')} usage = "Usage: puppet command " available = "Available commands are: #{builtins.sort.join(', ')}" command_name = ARGV.empty? || ARGV.first[/^-/] || ARGV.first =~ /\.pp/ || ARGV.first =~ /\.rb/ ? nil : ARGV.shift # subcommand? if command_name.nil? # It's old-style puppet, executing something command_name = "main" end if command_name.nil? # main puts usage, available elsif builtins.include?(command_name) #subcommand require File.join(appdir, command_name) Puppet::Application[command_name].run else abort "Error: Unknown command #{command_name}.\n#{usage}\n#{available}" end