lib/chef/resource/machine.rb in chef-provisioning-2.0.1 vs lib/chef/resource/machine.rb in chef-provisioning-2.0.2
- old
+ new
@@ -1,128 +1,128 @@
-require 'chef/resource/lwrp_base'
-require 'cheffish'
-require 'chef/provisioning'
-require 'cheffish/merged_config'
-
-class Chef
-class Resource
-class Machine < Chef::Resource::LWRPBase
-
- self.resource_name = 'machine'
-
- def initialize(*args)
- super
- @chef_environment = run_context.cheffish.current_environment
- @chef_server = run_context.cheffish.current_chef_server
- @driver = run_context.chef_provisioning.current_driver
- @machine_options = run_context.chef_provisioning.current_machine_options
- end
-
- actions :allocate, :ready, :setup, :converge, :converge_only, :destroy, :stop
- default_action :converge
-
- # Driver attributes
- attribute :driver
-
- # Machine options
- attribute :machine_options
-
- # This includes attributes from the Cheffish::Node resources - allows us
- # to specify things like `run_list`, `chef_server`, etc.
- Cheffish.node_attributes(self)
-
- # Client keys
- # Options to generate private key (size, type, etc.) when the server doesn't have it
- attribute :private_key_options, :kind_of => Hash
- attribute :allow_overwrite_keys, :kind_of => [TrueClass, FalseClass]
-
- # Optionally pull the public key out to a file
- attribute :public_key_path, :kind_of => String
- attribute :public_key_format, :kind_of => String
-
- # If you really want to force the private key to be a certain key, pass these
- attribute :source_key
- attribute :source_key_path, :kind_of => String
- attribute :source_key_pass_phrase
-
- # Client attributes
- attribute :admin, :kind_of => [TrueClass, FalseClass]
- attribute :validator, :kind_of => [TrueClass, FalseClass]
-
- # Client Ohai hints, allows machine to enable hints
- # e.g. ohai_hints 'ec2' => { 'a' => 'b' } creates file ec2.json with json contents { 'a': 'b' }
- attribute :ohai_hints, :kind_of => Hash
-
- # A string containing extra configuration for the machine
- attribute :chef_config, :kind_of => String
-
- # Allows you to turn convergence off in the :create action by writing "converge false"
- # or force it with "true"
- attribute :converge, :kind_of => [TrueClass, FalseClass]
-
- # A list of files to upload, in the format REMOTE_PATH => LOCAL_PATH|HASH.
- # == Examples
- # files '/remote/path.txt' => '/local/path.txt'
- # files '/remote/path.txt' => { :local_path => '/local/path.txt' }
- # files '/remote/path.txt' => { :content => 'woo' }
- attribute :files, :kind_of => Hash
-
- # The named machine_image to start from. Specify the name of a machine_image
- # object and the default machine_options will be set to use that image.
- # == Examples
- # from_image 'company_base_image'
- attribute :from_image, :kind_of => String
-
- # A single file to upload, in the format REMOTE_PATH, LOCAL_PATH|HASH.
- # This directive may be passed multiple times, and multiple files will be uploaded.
- # == Examples
- # file '/remote/path.txt', '/local/path.txt'
- # file '/remote/path.txt', { :local_path => '/local/path.txt' }
- # file '/remote/path.txt', { :content => 'woo' }
- def file(remote_path, local = nil)
- @files ||= {}
- if remote_path.is_a?(Hash)
- if local
- raise "file(Hash, something) does not make sense. Either pass a hash, or pass a pair, please."
- end
- remote_path.each_pair do |remote, local|
- @files[remote] = local
- end
- elsif remote_path.is_a?(String)
- if !local
- raise "Must pass both a remote path and a local path to file directive"
- end
- @files[remote_path] = local
- else
- raise "file remote_path must be a String, but is a #{remote_path.class}"
- end
- end
-
- def add_machine_options(options)
- @machine_options = Cheffish::MergedConfig.new(options, @machine_options)
- end
-
-
- # This is here because provisioning users will probably want to do things like:
- # machine "foo"
- # action :destroy
- # end
- #
- # @example
- # with_machine_options :bootstrap_options => { ... }
- # machine "foo"
- # converge true
- # end
- #
- # Without this, the first resource's machine options will obliterate the second
- # resource's machine options, and then unexpected (and undesired) things happen.
- def load_prior_resource(*args)
- Chef::Log.debug "Overloading #{self.resource_name} load_prior_resource with NOOP"
- end
-
- # chef client version and omnibus
- # chef-zero boot method?
- # chef-client -z boot method?
- # pushy boot method?
-end
-end
-end
+require 'chef/resource/lwrp_base'
+require 'cheffish'
+require 'chef/provisioning'
+require 'cheffish/merged_config'
+
+class Chef
+class Resource
+class Machine < Chef::Resource::LWRPBase
+
+ self.resource_name = 'machine'
+
+ def initialize(*args)
+ super
+ @chef_environment = run_context.cheffish.current_environment
+ @chef_server = run_context.cheffish.current_chef_server
+ @driver = run_context.chef_provisioning.current_driver
+ @machine_options = run_context.chef_provisioning.current_machine_options
+ end
+
+ actions :allocate, :ready, :setup, :converge, :converge_only, :destroy, :stop
+ default_action :converge
+
+ # Driver attributes
+ attribute :driver
+
+ # Machine options
+ attribute :machine_options
+
+ # This includes attributes from the Cheffish::Node resources - allows us
+ # to specify things like `run_list`, `chef_server`, etc.
+ Cheffish.node_attributes(self)
+
+ # Client keys
+ # Options to generate private key (size, type, etc.) when the server doesn't have it
+ attribute :private_key_options, :kind_of => Hash
+ attribute :allow_overwrite_keys, :kind_of => [TrueClass, FalseClass]
+
+ # Optionally pull the public key out to a file
+ attribute :public_key_path, :kind_of => String
+ attribute :public_key_format, :kind_of => String
+
+ # If you really want to force the private key to be a certain key, pass these
+ attribute :source_key
+ attribute :source_key_path, :kind_of => String
+ attribute :source_key_pass_phrase
+
+ # Client attributes
+ attribute :admin, :kind_of => [TrueClass, FalseClass]
+ attribute :validator, :kind_of => [TrueClass, FalseClass]
+
+ # Client Ohai hints, allows machine to enable hints
+ # e.g. ohai_hints 'ec2' => { 'a' => 'b' } creates file ec2.json with json contents { 'a': 'b' }
+ attribute :ohai_hints, :kind_of => Hash
+
+ # A string containing extra configuration for the machine
+ attribute :chef_config, :kind_of => String
+
+ # Allows you to turn convergence off in the :create action by writing "converge false"
+ # or force it with "true"
+ attribute :converge, :kind_of => [TrueClass, FalseClass]
+
+ # A list of files to upload, in the format REMOTE_PATH => LOCAL_PATH|HASH.
+ # == Examples
+ # files '/remote/path.txt' => '/local/path.txt'
+ # files '/remote/path.txt' => { :local_path => '/local/path.txt' }
+ # files '/remote/path.txt' => { :content => 'woo' }
+ attribute :files, :kind_of => Hash
+
+ # The named machine_image to start from. Specify the name of a machine_image
+ # object and the default machine_options will be set to use that image.
+ # == Examples
+ # from_image 'company_base_image'
+ attribute :from_image, :kind_of => String
+
+ # A single file to upload, in the format REMOTE_PATH, LOCAL_PATH|HASH.
+ # This directive may be passed multiple times, and multiple files will be uploaded.
+ # == Examples
+ # file '/remote/path.txt', '/local/path.txt'
+ # file '/remote/path.txt', { :local_path => '/local/path.txt' }
+ # file '/remote/path.txt', { :content => 'woo' }
+ def file(remote_path, local = nil)
+ @files ||= {}
+ if remote_path.is_a?(Hash)
+ if local
+ raise "file(Hash, something) does not make sense. Either pass a hash, or pass a pair, please."
+ end
+ remote_path.each_pair do |remote, local|
+ @files[remote] = local
+ end
+ elsif remote_path.is_a?(String)
+ if !local
+ raise "Must pass both a remote path and a local path to file directive"
+ end
+ @files[remote_path] = local
+ else
+ raise "file remote_path must be a String, but is a #{remote_path.class}"
+ end
+ end
+
+ def add_machine_options(options)
+ @machine_options = Cheffish::MergedConfig.new(options, @machine_options)
+ end
+
+
+ # This is here because provisioning users will probably want to do things like:
+ # machine "foo"
+ # action :destroy
+ # end
+ #
+ # @example
+ # with_machine_options :bootstrap_options => { ... }
+ # machine "foo"
+ # converge true
+ # end
+ #
+ # Without this, the first resource's machine options will obliterate the second
+ # resource's machine options, and then unexpected (and undesired) things happen.
+ def load_prior_resource(*args)
+ Chef::Log.debug "Overloading #{self.resource_name} load_prior_resource with NOOP"
+ end
+
+ # chef client version and omnibus
+ # chef-zero boot method?
+ # chef-client -z boot method?
+ # pushy boot method?
+end
+end
+end