lib/ridley/resources/node_resource.rb in ridley-1.7.1 vs lib/ridley/resources/node_resource.rb in ridley-2.0.0
- old
+ new
@@ -3,169 +3,15 @@
include Ridley::Logging
set_resource_path "nodes"
represented_by Ridley::NodeObject
- attr_reader :server_url
- attr_reader :validator_path
- attr_reader :validator_client
- attr_reader :encrypted_data_bag_secret
- attr_reader :ssh
- attr_reader :winrm
- attr_reader :chef_version
-
- finalizer :finalize_callback
-
# @param [Celluloid::Registry] connection_registry
- #
- # @option options [String] :server_url
- # URL to the Chef API
- # @option options [Hash] ssh
- # * :user (String) a shell user that will login to each node and perform the bootstrap command on
- # * :password (String) the password for the shell user that will perform the bootstrap
- # * :keys (Array, String) an array of keys (or a single key) to authenticate the ssh user with instead of a password
- # * :timeout (Float) [5.0] timeout value for SSH bootstrap
- # @option options [Hash] :winrm
- # * :user (String) a user that will login to each node and perform the bootstrap command on
- # * :password (String) the password for the user that will perform the bootstrap
- # * :port (Fixnum) the winrm port to connect on the node the bootstrap will be performed on
- # @option options [String] :validator_client
- # @option options [String] :validator_path
- # filepath to the validator used to bootstrap the node
- # @option options [String] :encrypted_data_bag_secret
- # your organizations encrypted data bag secret
- # @option options [String] :chef_version
- # version of Chef to install on the node (default: nil)
def initialize(connection_registry, options = {})
super(connection_registry)
- @server_url = options[:server_url]
- @validator_path = options[:validator_path]
- @validator_client = options[:validator_client]
- @encrypted_data_bag_secret = options[:encrypted_data_bag_secret]
- @ssh = options[:ssh]
- @winrm = options[:winrm]
- @chef_version = options[:chef_version]
- @host_commander = HostCommander.new_link
end
- # @param [String] host
- #
- # @option options [Hash] ssh
- # * :user (String) a shell user that will login to each node and perform the bootstrap command on (required)
- # * :password (String) the password for the shell user that will perform the bootstrap
- # * :keys (Array, String) an array of keys (or a single key) to authenticate the ssh user with instead of a password
- # * :timeout (Float) [5.0] timeout value for SSH bootstrap
- # @option options [Hash] :winrm
- # * :user (String) a user that will login to each node and perform the bootstrap command on (required)
- # * :password (String) the password for the user that will perform the bootstrap
- # * :port (Fixnum) the winrm port to connect on the node the bootstrap will be performed on (5985)
- # @option options [String] :validator_client
- # @option options [String] :validator_path
- # filepath to the validator used to bootstrap the node (required)
- # @option options [String] :bootstrap_proxy
- # URL to a proxy server to bootstrap through (default: nil)
- # @option options [String] :encrypted_data_bag_secret_path
- # filepath on your host machine to your organizations encrypted data bag secret (default: nil)
- # @option options [Hash] :hints
- # a hash of Ohai hints to place on the bootstrapped node (default: Hash.new)
- # @option options [Hash] :attributes
- # a hash of attributes to use in the first Chef run (default: Hash.new)
- # @option options [Array] :run_list
- # an initial run list to bootstrap with (default: Array.new)
- # @option options [String] :chef_version
- # version of Chef to install on the node (default: nil)
- # @option options [String] :environment
- # environment to join the node to (default: '_default')
- # @option options [Boolean] :sudo
- # bootstrap with sudo (default: true)
- # @option options [String] :template
- # bootstrap template to use (default: omnibus)
- #
- # @return [HostConnector::Response]
- def bootstrap(host, options = {})
- options = options.reverse_merge(
- server_url: server_url,
- validator_path: validator_path,
- validator_client: validator_client,
- encrypted_data_bag_secret: encrypted_data_bag_secret,
- ssh: ssh,
- winrm: winrm,
- chef_version: chef_version
- )
-
- host_commander.bootstrap(host, options)
- end
-
- # Executes a Chef run using the best worker available for the given
- # host.
- #
- # @param [String] host
- #
- # @return [HostConnector::Response]
- def chef_run(host)
- host_commander.chef_client(host, ssh: ssh, winrm: winrm)
- rescue Errors::HostConnectionError => ex
- abort(ex)
- end
-
- # Puts a secret on the host using the best worker available for
- # the given host.
- #
- # @param [String] host
- #
- # @return [HostConnector::Response]
- def put_secret(host)
- host_commander.put_secret(host, encrypted_data_bag_secret, ssh: ssh, winrm: winrm)
- end
-
- # Executes an arbitrary ruby script using the best worker available
- # for the given host.
- #
- # @param [String] host
- # @param [Array<String>] command_lines
- #
- # @return [HostConnector::Response]
- def ruby_script(host, command_lines)
- host_commander.ruby_script(host, command_lines, ssh: ssh, winrm: winrm)
- end
-
- # Executes the given command on a node using the best worker
- # available for the given host.
- #
- # @param [String] host
- # @param [String] command
- #
- # @return [HostConnector::Response]
- def run(host, command)
- host_commander.run(host, command, ssh: ssh, winrm: winrm)
- end
- alias_method :execute_command, :run
-
- # Executes the given command on a node using a platform specific
- # command.
- #
- # @param [String] host
- # @param [Hash] commands
- #
- # @example
- # platform_specific_run("host.example.com", linux: "hostname -f", windows: "echo %COMPUTERNAME%")
- #
- # @return [HostConnector::Response]
- def platform_specific_run(host, commands)
- case (type = host_commander.connector_for(host, ssh: ssh, winrm: winrm))
- when HostConnector::SSH
- raise Errors::CommandNotProvided.new(:ssh) unless commands[:ssh] and !commands[:ssh].empty?
- run(host, commands[:ssh])
- when HostConnector::WinRM
- raise Errors::CommandNotProvided.new(:winrm) unless commands[:winrm] and !commands[:winrm].empty?
- run(host, commands[:winrm])
- else
- raise RuntimeError, "#{type.class.to_s} is not a supported connector for #{self.class}##{__method__}"
- end
- end
- alias_method :execute_platform_specific_command, :platform_specific_run
-
# Merges the given data with the the data of the target node on the remote
#
# @param [Ridley::NodeResource, String] target
# node or identifier of the node to merge
#
@@ -183,42 +29,7 @@
abort Errors::ResourceNotFound.new
end
update(node.merge_data(options))
end
-
- # Uninstall Chef from a node
- #
- # @param [String] host
- # the host to perform the action on
- #
- # @option options [Boolena] :skip_chef (false)
- # skip removal of the Chef package and the contents of the installation
- # directory. Setting this to true will only remove any data and configurations
- # generated by running Chef client.
- # @option options [Hash] :ssh
- # * :user (String) a shell user that will login to each node and perform the bootstrap command on
- # * :password (String) the password for the shell user that will perform the bootstrap
- # * :keys (Array, String) an array of key(s) to authenticate the ssh user with instead of a password
- # * :timeout (Float) timeout value for SSH bootstrap (5.0)
- # * :sudo (Boolean) run as sudo (true)
- # @option options [Hash] :winrm
- # * :user (String) a user that will login to each node and perform the bootstrap command on
- # * :password (String) the password for the user that will perform the bootstrap (required)
- # * :port (Fixnum) the winrm port to connect on the node the bootstrap will be performed on (5985)
- #
- # @return [HostConnector::Response]
- def uninstall_chef(host, options = {})
- options = options.reverse_merge(ssh: ssh, winrm: winrm)
- host_commander.uninstall_chef(host, options)
- end
-
- private
-
- # @return [Ridley::HostCommander]
- attr_reader :host_commander
-
- def finalize_callback
- @host_commander.terminate if @host_commander && @host_commander.alive?
- end
end
end