lib/capistrano/chef.rb in capistrano-chef-0.1.0 vs lib/capistrano/chef.rb in capistrano-chef-1.0.0
- old
+ new
@@ -1,83 +1,10 @@
-require 'capistrano'
require 'chef/knife'
-require 'chef/data_bag_item'
require 'chef/search/query'
+require 'capistrano/dsl/chef'
-module Capistrano::Chef
- # Set up chef configuration
- def self.configure_chef
- knife = Chef::Knife.new
- # If you don't do this it gets thrown into debug mode
- Chef::Config[:verbosity] = 1 # :info
- knife.configure_chef
- end
+knife = Chef::Knife.new
+# If you don't do this it gets thrown into debug mode
+knife.configure_chef
- # Do a search on the Chef server and return an attary of the requested
- # matching attributes
- def self.search_chef_nodes(query = '*:*', arg = :ipaddress, limit = 1000)
- search_proc = \
- case arg
- when Proc
- arg
- when Hash
- iface, family = arg.keys.first.to_s, arg.values.first.to_s
- Proc.new do |n|
- addresses = n["network"]["interfaces"][iface]["addresses"]
- addresses.select{|address, data| data["family"] == family }.to_a.first.first
- end
- when Symbol, String
- Proc.new{|n| n[arg.to_s]}
- else
- raise ArgumentError, 'Search arguments must be Proc, Hash, Symbol, String.'
- end
- Chef::Search::Query.new.search(:node, query, 'X_CHEF_id_CHEF_X asc', 0, limit)[0].compact.map(&search_proc)
- end
+self.extend Capistrano::DSL::Chef
- def self.get_data_bag_item(id, data_bag = :apps)
- Chef::DataBagItem.load(data_bag, id).raw_data
- end
-
- def self.get_encrypted_data_bag_item(id, data_bag = :apps, secret = nil)
- Chef::EncryptedDataBagItem.load(data_bag, id, secret).to_hash
- end
-
- # Load into Capistrano
- def self.load_into(configuration)
- self.configure_chef
- configuration.set :capistrano_chef, self
- configuration.load do
- def chef_role(name, query = '*:*', options = {})
- options = {:attribute => :ipaddress, :limit => 1000}.merge(options)
- # Don't do the lookup if HOSTS is used.
- # Allows deployment from knifeless machine
- # to specific hosts (ie. developent, staging)
- unless ENV['HOSTS']
- hosts = capistrano_chef.search_chef_nodes(query, options.delete(:attribute), options.delete(:limit)) + [options]
- if name.is_a?(Array)
- name.each { |n| role n, *hosts }
- else
- role name, *hosts
- end
- end
- end
-
- def set_from_data_bag(data_bag = :apps)
- raise ':application must be set' if fetch(:application).nil?
- capistrano_chef.get_data_bag_item(application, data_bag).each do |k, v|
- set k, v
- end
- end
-
- def set_from_encrypted_data_bag(data_bag = :apps, secret = nil)
- raise ':application must be set' if fetch(:application).nil?
- capistrano_chef.get_encrypted_data_bag_item(application, data_bag, secret).each do |k, v|
- set k, v
- end
- end
- end
- end
-end
-
-if Capistrano::Configuration.instance
- Capistrano::Chef.load_into(Capistrano::Configuration.instance)
-end