summaryrefslogtreecommitdiffstats
path: root/bin/puppet
blob: cffa891350ad9f7bf705110520657a0ddcaf3b27 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/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 <space separated arguments>"
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