class Aws::SharedConfig

def resolve_source_profile(profile, opts = {})

def resolve_source_profile(profile, opts = {})
  if opts[:visited_profiles] && opts[:visited_profiles].include?(profile)
    raise Errors::SourceProfileCircularReferenceError
  end
  opts[:visited_profiles].add(profile) if opts[:visited_profiles]
  profile_config = @parsed_credentials[profile]
  if @config_enabled
    profile_config ||= @parsed_config[profile]
  end
  if (creds = credentials(profile: profile))
    creds # static credentials
  elsif profile_config && profile_config['source_profile']
    opts.delete(:source_profile)
    assume_role_credentials_from_config(opts.merge(profile: profile))
  elsif (provider = assume_role_web_identity_credentials_from_config(opts.merge(profile: profile)))
    provider.credentials if provider.credentials.set?
  elsif (provider = assume_role_process_credentials_from_config(profile))
    provider.credentials if provider.credentials.set?
  elsif (provider = sso_credentials_from_config(profile: profile))
    provider.credentials if provider.credentials.set?
  end
end