summaryrefslogtreecommitdiff
path: root/bin/chef-solo
diff options
context:
space:
mode:
Diffstat (limited to 'bin/chef-solo')
-rwxr-xr-xbin/chef-solo85
1 files changed, 85 insertions, 0 deletions
diff --git a/bin/chef-solo b/bin/chef-solo
new file mode 100755
index 0000000000..0d49414f5a
--- /dev/null
+++ b/bin/chef-solo
@@ -0,0 +1,85 @@
+#!/usr/bin/ruby
+#
+# ./chef-solo - Build a meal with chef, sans-server!
+#
+# Author:: Adam Jacob (<adam@hjksolutions.com>)
+# Copyright:: Copyright (c) 2008 HJK Solutions, LLC
+# License:: GNU General Public License version 2 or later
+#
+# This program and entire repository is free software; you can
+# redistribute it and/or modify it under the terms of the GNU
+# General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+
+$: << File.join(File.dirname(__FILE__), "..", "lib")
+
+require 'optparse'
+require 'chef'
+require 'rubygems'
+require 'facter'
+require 'yaml'
+
+config = {
+ :config_file => "/etc/chef/config.rb",
+ :log_level => :info,
+ :noop => false
+}
+opts = OptionParser.new do |opts|
+ opts.banner = "Usage: #{$0} [-d DIR|-r FILE] (options)"
+ opts.on("-c CONFIG", "--config CONFIG", "The Chef Config file to use") do |c|
+ config[:config_file] = c
+ end
+ opts.on("-n", "--noop", "Print what you would do, but don't actually do it.") do
+ config[:noop] = true
+ end
+ opts.on_tail("-l LEVEL", "--loglevel LEVEL", "Set the log level (debug, info, warn, error, fatal)") do |l|
+ config[:log_level] = l.to_sym
+ end
+ opts.on_tail("-h", "--help", "Show this message") do
+ puts opts
+ exit
+ end
+end
+opts.parse!(ARGV)
+
+unless File.exists?(config[:config_file]) && File.readable?(config[:config_file])
+ puts "I cannot find or read the config file: #{config[:config_file]}"
+ puts opts
+ exit
+end
+
+# Load our config file
+Chef::Config.from_file(config[:config_file])
+
+# Find out our own hostname.
+node_name = Facter["fqdn"].value
+node_name ||= Facter["hostname"].value
+
+# Grab a Chef::Compile object
+compile = Chef::Compile.new()
+
+# Load our Node, and then add all the Facter facts as attributes
+compile.load_node(node_name)
+Facter.each do |field, value|
+ compile.node[field.to_sym] = value
+end
+
+puts compile.node.to_yaml
+
+compile.load_definitions
+puts compile.definitions.to_yaml
+
+compile.load_recipes
+puts compile.resource_collection.to_yaml
+
+puts compile.to_yaml