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 |