Class: ChefApply::TargetResolver
- Inherits:
-
Object
- Object
- ChefApply::TargetResolver
- Defined in:
- lib/chef_apply/target_resolver.rb
Defined Under Namespace
Classes: InvalidRange, TooManyRanges, TooManyTargets, UnsupportedProtocol
Constant Summary collapse
- MAX_EXPANDED_TARGETS =
24
Instance Method Summary collapse
- #config_for_target(url) ⇒ Object
- #expand_targets(target) ⇒ Object
-
#initialize(target, default_protocol, conn_options) ⇒ TargetResolver
constructor
A new instance of TargetResolver.
-
#make_credentials(inline_user, inline_password) ⇒ Object
Merge the inline user/pass with the default user/pass, giving precedence to inline.
- #prefix_from_target(target) ⇒ Object
-
#targets ⇒ Object
Returns the list of targets as an array of TargetHost instances, them to account for ranges embedded in the target name.
Constructor Details
#initialize(target, default_protocol, conn_options) ⇒ TargetResolver
Returns a new instance of TargetResolver.
25 26 27 28 29 30 31 32 |
# File 'lib/chef_apply/target_resolver.rb', line 25 def initialize(target, default_protocol, ) @default_proto = default_protocol @unparsed_target = target @split_targets = @unparsed_target.split(",") @conn_options = .dup @default_password = @conn_options.delete(:password) @default_user = @conn_options.delete(:user) end |
Instance Method Details
#config_for_target(url) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/chef_apply/target_resolver.rb', line 49 def config_for_target(url) prefix, target = prefix_from_target(url) inline_password = nil inline_user = nil host = target # Default greedy-scan of the regex means that # $2 will resolve to content after the final "@" # URL credentials will take precedence over the default :user # in @conn_opts if target =~ /(.*)@(.*)/ inline_credentials = $1 host = $2 # We'll use a non-greedy match to grab everything up to the first ':' # as username if there is no :, credentials is just the username if inline_credentials =~ /(.+?):(.*)/ inline_user = $1 inline_password = $2 else inline_user = inline_credentials end end user, password = make_credentials(inline_user, inline_password) { url: "#{prefix}#{host}", user: user, password: password } end |
#expand_targets(target) ⇒ Object
103 104 105 106 |
# File 'lib/chef_apply/target_resolver.rb', line 103 def (target) @current_target = target # Hold onto this for error reporting do_parse([target.downcase]) end |
#make_credentials(inline_user, inline_password) ⇒ Object
Merge the inline user/pass with the default user/pass, giving precedence to inline.
79 80 81 82 83 84 85 |
# File 'lib/chef_apply/target_resolver.rb', line 79 def make_credentials(inline_user, inline_password) user = inline_user || @default_user user = nil if user && user.empty? password = (inline_password || @default_password) password = nil if password && password.empty? [user, password] end |
#prefix_from_target(target) ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/chef_apply/target_resolver.rb', line 87 def prefix_from_target(target) if target =~ %r{^(.+?)://(.*)} # We'll store the existing prefix to avoid it interfering # with the check further below. if ChefApply::Config::SUPPORTED_PROTOCOLS.include? $1.downcase prefix = "#{$1}://" target = $2 else raise UnsupportedProtocol.new($1) end else prefix = "#{@default_proto}://" end [prefix, target] end |
#targets ⇒ Object
Returns the list of targets as an array of TargetHost instances, them to account for ranges embedded in the target name.
36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/chef_apply/target_resolver.rb', line 36 def targets return @targets unless @targets.nil? = [] @split_targets.each do |target| = ( | (target)) end @targets = .map do |url| config = @conn_options.merge(config_for_target(url)) TargetHost.new(config.delete(:url), config) end end |