Method: Puppet::Forge#search

Defined in:
lib/puppet/forge.rb

#search(term) ⇒ Array

Return a list of module metadata hashes that match the search query. This return value is used by the module_tool face install search, and displayed to on the console.

Example return value:

[

{
  "author"      => "puppetlabs",
  "name"        => "bacula",
  "tag_list"    => ["backup", "bacula"],
  "releases"    => [{"version"=>"0.0.1"}, {"version"=>"0.0.2"}],
  "full_name"   => "puppetlabs/bacula",
  "version"     => "0.0.2",
  "project_url" => "https://github.com/puppetlabs/puppetlabs-bacula",
  "desc"        => "bacula"
}

]

Parameters:

  • term (String)

    search term

Returns:

  • (Array)

    modules found

Raises:



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/puppet/forge.rb', line 57

def search(term)
  matches = []
  uri = "/v3/modules?query=#{term}"
  if Puppet[:module_groups]
    uri += "&module_groups=#{Puppet[:module_groups].tr('+', ' ')}"
  end

  while uri
    # make_http_request URI encodes parameters
    response = make_http_request(uri)

    if response.code == 200
      result = Puppet::Util::Json.load(response.body)
      uri = decode_uri(result['pagination']['next'])
      matches.concat result['results']
    else
      raise ResponseError.new(:uri => response.url, :response => response)
    end
  end

  matches.each do |mod|
    mod['author'] = mod['owner']['username']
    mod['tag_list'] = mod['current_release']['tags']
    mod['full_name'] = "#{mod['author']}/#{mod['name']}"
    mod['version'] = mod['current_release']['version']
    mod['project_url'] = mod['homepage_url']
    mod['desc'] = mod['current_release']['metadata']['summary'] || ''
  end
end