{"action":"created","comment":{"url":"https://api.github.com/repos/puppetlabs/puppet/pulls/comments/47950736","id":47950736,"diff_hunk":"@@ -1,153 +1,128 @@\n-# Looks up data defined using Data Binding, and Data Providers using different strategies. The lookup searches in\n-# Data Bindings first (if configured; typically Hiera), then in the environments data provider (if any), and last in\n-# the module's data provider (if any) of the module the call to lookup originates from. Thus, the global Data Binding\n-# has higher priority than data provided in the environment, which has higher priority than data provided in a module,\n-#\n-# The lookup function can be called in one of these ways:\n-#\n-#     lookup(name)\n-#     lookup(name, value_type)\n-#     lookup(name, value_type, merge)\n-#     lookup(name, value_type, merge, default_value)\n-#     lookup(options_hash)\n-#     lookup(name, options_hash)\n-#\n-# The function may optionally be called with a code block / lambda with the following signature:\n-#\n-#     lookup(...) |$name| { ... }\n-#\n-# The block, if present, is mutually exclusive to the `default_value` and will be called with the `name` used in the\n-# lookup when no value is found. The value produced by the block then becomes the value produced by the lookup.\n-#\n-# The meaning of the parameters or content of the options hash is:\n-#\n-# * `name` - The name or array of names to lookup (first found is returned)\n-# * `value_type` - The type to assert. Defaults to 'Data' See 'Type Specification' below.\n-# * `default_value` - The default value if there was no value found (must comply with the data type)\n-# * `override` - a hash with map from names to values that are used instead of the underlying bindings. If the name\n-#   is found here it wins. Defaults to an empty hash.\n-# * `default_values_hash` - a hash with map from names to values that are used as a last resort to obtain a value.\n-#   Defaults to an empty hash.\n-# * `merge` - A string of type Enum[unique, hash, merge] or a hash with the key 'strategy' set to that string. See\n-#   'Merge Strategies' below.\n-#\n-# It is not permitted to pass the `name` as both a parameter and in the options hash.\n-#\n-# The search will proceed as follows:\n-# 1. For each name given in the `name` array (or once, if it's just one name):\n-#   - If a matching key is found in the `override` hash, it's value is immediately type checked and returned\n-#   - Search and optionally merge Data Binding, environment data providers, and module data providers\n-#   - Type check and return the value if a matching key is found\n-# 2. For each name given in the `name` array (or once, if it's just one name):\n-#   - Type check and return the value if a matching key is found in the `default_values_hash`\n-# 3. Type check and return either the given `default_value` or the result of calling the code block if either exist\n-# 4. Raise an error indicating that no matching value was found\n-#\n-# *Merge Strategies*\n-#\n-# The default behavior of the lookup is to return the first value that is found for the given `name`. The optional\n-# `merge` parameter will change this so that a lookup makes an attempt to find values in all three sources (the Data\n-# Binder, the environment, and the module scope) and then merge these values according to the given strategy. This\n-# does not apply to values found in the 'override' hash. Such values are returned immediately without merging.\n-# Note that `merge` is passed on to allow the underlying provider to return a merged result\n-#\n-# The valid strategies are:\n-#  - 'hash' Performs a simple hash-merge by overwriting keys of lower lookup priority. Merged values must be of Hash type\n-#  - 'unique' Appends everything to an array containing no nested arrays and where all duplicates have been removed. Can\n-#    append values of Scalar or Array[Scalar] type\n-#  - 'deep' Performs a deep merge on values of Array and Hash type. See documentation for the DeepMerge gem's deep_merge\n-#    operation for details and options.\n-#\n-# The 'deep' strategy can use additional options to control its behavior. Options can be passed as top level\n-# keys in the `merge` parameter when it is a given as a hash. Recognized options are:\n-#  - 'knockout_prefix' Set to string value to signify prefix which deletes elements from existing element. Defaults is _undef_\n-#  - 'sort_merged_arrays' Set to _true_ to sort all arrays that are merged together. Default is _false_\n-#  - 'unpack_arrays' Set to string value used as a deliminator to join all array values and then split them again. Default is _undef_\n-#  - 'merge_hash_arrays' Set to _true_ to merge hashes within arrays. Default is _false_\n-#\n-# *Type Specification*\n-#\n-# The type specification is a type in the Puppet Type System, e.g.:\n-#   * `Integer`, an integral value with optional range e.g.:\n-#     * `Integer[0, default]` - 0 or positive\n-#     * `Integer[default, -1]` - negative,\n-#     * `Integer[1,100]` - value between 1 and 100 inclusive\n-#   * `String`- any string\n-#   * `Float` - floating point number (same signature as for Integer for `Integer` ranges)\n-#   * `Boolean` - true of false (strict)\n-#   * `Array` - an array (of Data by default), or parameterized as `Array[<element_type>]`, where\n-#     `<element_type>` is the expected type of elements\n-#   * `Hash`,  - a hash (of default `Literal` keys and `Data` values), or parameterized as\n-#     `Hash[<value_type>]`, `Hash[<key_type>, <value_type>]`, where `<key_type>`, and\n-#     `<value_type>` are the types of the keys and values respectively\n-#     (key is `Literal` by default).\n-#   * `Data` - abstract type representing any `Literal` (including _undef_), `Array[Data]`, or `Hash[Literal, Data]`\n-#   * `Pattern[<p1>, <p2>, ..., <pn>]` - an enumeration of valid patterns (one or more) where\n-#      a pattern is a regular expression string or regular expression,\n-#      e.g. `Pattern['.com$', '.net$']`, `Pattern[/[a-z]+[0-9]+/]`\n-#   * `Enum[<s1>, <s2>, ..., <sn>]`, - an enumeration of exact string values (one or more)\n-#      e.g. `Enum[blue, red, green]`.\n-#   * `Variant[<t1>, <t2>,...<tn>]` - matches one of the listed types (at least one must be given)\n-#     e.g. `Variant[Integer[8000,8999], Integer[20000, 99999]]` to accept a value in either range\n-#   * `Regexp`- a regular expression (i.e. the result is a regular expression, not a string\n-#      matching a regular expression).\n-#\n-# For more options and details about types, see the Puppet Language Reference\n-#\n-# *Handling of undef*\n-#\n-# When no match is found for the given `name` when searching all sources, (including the `override`and\n-# `default_values_hash`), then the value used is either the `default_value` or the value produced by the given block.\n-# If neither is provided, then the lookup will always raise an error. Note that this only applies when there's no\n-# match for the given `name`. It does not happen when a value is found and that value happens to be _undef_.\n-#\n-# *Validation of returned value*\n-#\n-# The produced value is subject to type validation using the `value_type` (if given) and an error is raised unless\n-# the resulting value is of correct type.\n-#\n-# *Examples*\n-#\n-# When called with one argument; **the name**, it\n-# returns the bound value with the given name after having  asserted it has the default datatype `Data`:\n-#\n-#     lookup('the_name')\n-#\n-# When called with two arguments; **the name**, and **the expected type**, it\n-# returns the bound value with the given name after having asserted it has the given data\n-# type ('String' in the example):\n-#\n-#     lookup('the_name', String)\n-#\n-# When called with four arguments, **the name**, the **expected type**, the **merge** strategy, and a\n-# **default value**, it returns the bound value with the given name, or the default after having asserted the value\n-# has the given data type:\n-#\n-#     lookup('the_name', String, undef, 'Fred')\n-#     lookup('the_name', Array[String], 'unique', [Fred])\n-#\n-# Using a lambda to provide a default value by calling a function:\n-#\n-#     lookup('the_size', Integer[1,100]) |$name| {\n-#       obtain_size_default()\n-#     }\n-#\n-# There are two ways to make lookup return undef when no matching key was found instead of raising an error.\n-# Either call it with four arguments (the `merge` argument must be present even when using the default strategy\n-# to ensure that the four argument variant is used):\n-#\n-#      $are_you_there = lookup('peekaboo', Optional[String], undef, undef)\n-#\n-# or call it using an options hash:\n-#\n-#      $are_you_there = lookup('peekaboo', { 'default_value' => undef })\n-#      $are_you_there = lookup({ 'name' => 'peekaboo', 'default_value' => undef })\n-#\n-# or with a block that produces an undef value:\n-#\n-#      $are_you_there = lookup('peekaboo', Optional[String]) |$name| { undef }\n-#\n-# - Since 4.0.0\n+# Uses the Puppet lookup system to retrieve a value for a given key. By default,\n+# this returns the first value found (and fails compilation if no values are\n+# available), but you can configure it to merge multiple values into one, fail\n+# gracefully, and more.\n+#\n+# When looking up a key, Puppet will search up to three tiers of data, in the\n+# following order:\n+#\n+# 1. Hiera.\n+# 2. The current environment's data provider.\n+# 3. The indicated module's data provider, if the key is of the form\n+#    `<MODULE NAME>::something`.\n+#\n+# #### Arguments\n+#\n+# You must provide the name of a key to look up, and can optionally provide other\n+# arguments. You can combine these arguments in the following ways:\n+#\n+# * `lookup( <NAME>, [<VALUE TYPE>], [<MERGE BEHAVIOR>], [<DEFAULT VALUE>] )`\n+# * `lookup( [<NAME>], <OPTIONS HASH> )`\n+# * `lookup( as above ) |$key| { # lambda should return a default value }`\n+#\n+# Arguments in `[square brackets]` are optional.\n+#\n+# The arguments accepted by `lookup` are as follows:\n+#\n+# 1. `<NAME>` (string or array) --- The name of the key to look up.\n+#     * This can also be an array of keys. If Puppet doesn't find anything for the\n+#     first key, it will try again with the subsequent ones, only resorting to a\n+#     default value if none of them succeed.\n+# 2. `<VALUE TYPE>` (data type) --- A\n+# [data type](http://docs.puppetlabs.com/puppet/latest/reference/lang_data_type.html)\n+# that must match the retrieved value; if not, the lookup (and catalog\n+# compilation) will fail. Defaults to `Data` (accepts any normal value).\n+# 3. `<MERGE BEHAVIOR>` (string or hash; see **\"Merge Behaviors\"** below) ---\n+# Whether (and how) to combine multiple values. If present, this overrides any\n+# merge behavior specified in the data sources. Defaults to no value; Puppet will\n+# use merge behavior from the data sources if present, and will otherwise do a\n+# first-found lookup.\n+# 4. `<DEFAULT VALUE>` (any normal value) --- If present, `lookup` returns this\n+# when it can't find a normal value. Default values are never merged with found\n+# values. Like a normal value, the default must match the value type. Defaults to\n+# no value; if Puppet can't find a normal value, the lookup (and compilation) will\n+# fail.\n+# 5. `<OPTIONS HASH>` (hash) --- Alternate way to set the arguments above, plus\n+# some less-common extra options. If you pass an options hash, you can't combine\n+# it with any regular arguments (except `<NAME>`). An options hash can have the\n+# following keys:\n+#     * `'name'` --- Same as `<NAME>` (argument 1). You can pass this as an\n+#     argument or in the hash, but not both.\n+#     * `'value_type'` --- Same as `<VALUE TYPE>` (argument 2).\n+#     * `'merge'` --- Same as `<MERGE BEHAVIOR>` (argument 3).\n+#     * `'default_value'` --- Same as `<DEFAULT VALUE>` (argument 4).\n+#     * `'default_values_hash'` (hash) --- A hash of lookup keys and default\n+#     values. If Puppet can't find a normal value, it will check this hash for the\n+#     requested key before giving up. You can combine this with `default_value` or\n+#     a lambda, which will be used if the key isn't present in this hash. Defaults\n+#     to an empty hash.\n+#     * `'override'` (hash) --- A hash of lookup keys and override values. Puppet\n+#     will check for the requested key in the overrides hash _first;_ if found, it\n+#     returns that value as the _final_ value, ignoring merge behavior. Defaults\n+#     to an empty hash.\n+#\n+# Finally, `lookup` can take a lambda, which should accept a single parameter.\n+# This is yet another way to set a default value for the lookup; if no results are\n+# found, Puppet will pass the requested key to the lambda and use its result as\n+# the default value.\n+#\n+# #### Merge Behaviors\n+#\n+# Puppet lookup uses a hierarchy of data sources, and a given key might have\n+# values in multiple sources. By default, Puppet returns the first value it finds,\n+# but it can also continue searching and merge all the values together.\n+#\n+# **Note:** Data sources can use the special `lookup_options` metadata key to\n+# request a specific merge behavior for a key. The `lookup` function will use that\n+# requested behavior unless you explicitly specify one.\n+#\n+# The valid merge behaviors are:\n+#\n+# * `'first'` --- Returns the first value found, with no merging. Puppet lookup's\n+# default behavior.\n+# * `'unique'` (AKA \"array merge\") --- Combines any number of arrays and scalar","path":"lib/puppet/functions/lookup.rb","position":233,"original_position":233,"commit_id":"4b22e0d6107ab0af4647b23e0441fb165ab1f27e","original_commit_id":"4b22e0d6107ab0af4647b23e0441fb165ab1f27e","user":{"login":"gguillotte","id":1296917,"avatar_url":"https://avatars.githubusercontent.com/u/1296917?v=3","gravatar_id":"","url":"https://api.github.com/users/gguillotte","html_url":"https://github.com/gguillotte","followers_url":"https://api.github.com/users/gguillotte/followers","following_url":"https://api.github.com/users/gguillotte/following{/other_user}","gists_url":"https://api.github.com/users/gguillotte/gists{/gist_id}","starred_url":"https://api.github.com/users/gguillotte/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gguillotte/subscriptions","organizations_url":"https://api.github.com/users/gguillotte/orgs","repos_url":"https://api.github.com/users/gguillotte/repos","events_url":"https://api.github.com/users/gguillotte/events{/privacy}","received_events_url":"https://api.github.com/users/gguillotte/received_events","type":"User","site_admin":false},"body":"\"AKA\" seems awkward here. Can we note that it's an array merge in the description?","created_at":"2015-12-17T19:38:39Z","updated_at":"2015-12-17T19:38:39Z","html_url":"https://github.com/puppetlabs/puppet/pull/4455#discussion_r47950736","pull_request_url":"https://api.github.com/repos/puppetlabs/puppet/pulls/4455","_links":{"self":{"href":"https://api.github.com/repos/puppetlabs/puppet/pulls/comments/47950736"},"html":{"href":"https://github.com/puppetlabs/puppet/pull/4455#discussion_r47950736"},"pull_request":{"href":"https://api.github.com/repos/puppetlabs/puppet/pulls/4455"}}},"pull_request":{"url":"https://api.github.com/repos/puppetlabs/puppet/pulls/4455","id":51213677,"html_url":"https://github.com/puppetlabs/puppet/pull/4455","diff_url":"https://github.com/puppetlabs/puppet/pull/4455.diff","patch_url":"https://github.com/puppetlabs/puppet/pull/4455.patch","issue_url":"https://api.github.com/repos/puppetlabs/puppet/issues/4455","number":4455,"state":"open","locked":false,"title":"(docs) Rewrite description of the lookup function","user":{"login":"nfagerlund","id":484309,"avatar_url":"https://avatars.githubusercontent.com/u/484309?v=3","gravatar_id":"","url":"https://api.github.com/users/nfagerlund","html_url":"https://github.com/nfagerlund","followers_url":"https://api.github.com/users/nfagerlund/followers","following_url":"https://api.github.com/users/nfagerlund/following{/other_user}","gists_url":"https://api.github.com/users/nfagerlund/gists{/gist_id}","starred_url":"https://api.github.com/users/nfagerlund/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nfagerlund/subscriptions","organizations_url":"https://api.github.com/users/nfagerlund/orgs","repos_url":"https://api.github.com/users/nfagerlund/repos","events_url":"https://api.github.com/users/nfagerlund/events{/privacy}","received_events_url":"https://api.github.com/users/nfagerlund/received_events","type":"User","site_admin":false},"body":"When this is merged, please resolve DOC-2225.","created_at":"2015-11-19T12:02:44Z","updated_at":"2015-12-17T19:38:39Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e92c90acd85cd618dd51310a8e0070f0139ea026","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/puppetlabs/puppet/pulls/4455/commits","review_comments_url":"https://api.github.com/repos/puppetlabs/puppet/pulls/4455/comments","review_comment_url":"https://api.github.com/repos/puppetlabs/puppet/pulls/comments{/number}","comments_url":"https://api.github.com/repos/puppetlabs/puppet/issues/4455/comments","statuses_url":"https://api.github.com/repos/puppetlabs/puppet/statuses/4b22e0d6107ab0af4647b23e0441fb165ab1f27e","head":{"label":"nfagerlund:nov2015_lookup_function","ref":"nov2015_lookup_function","sha":"4b22e0d6107ab0af4647b23e0441fb165ab1f27e","user":{"login":"nfagerlund","id":484309,"avatar_url":"https://avatars.githubusercontent.com/u/484309?v=3","gravatar_id":"","url":"https://api.github.com/users/nfagerlund","html_url":"https://github.com/nfagerlund","followers_url":"https://api.github.com/users/nfagerlund/followers","following_url":"https://api.github.com/users/nfagerlund/following{/other_user}","gists_url":"https://api.github.com/users/nfagerlund/gists{/gist_id}","starred_url":"https://api.github.com/users/nfagerlund/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nfagerlund/subscriptions","organizations_url":"https://api.github.com/users/nfagerlund/orgs","repos_url":"https://api.github.com/users/nfagerlund/repos","events_url":"https://api.github.com/users/nfagerlund/events{/privacy}","received_events_url":"https://api.github.com/users/nfagerlund/received_events","type":"User","site_admin":false},"repo":{"id":1247122,"name":"puppet","full_name":"nfagerlund/puppet","owner":{"login":"nfagerlund","id":484309,"avatar_url":"https://avatars.githubusercontent.com/u/484309?v=3","gravatar_id":"","url":"https://api.github.com/users/nfagerlund","html_url":"https://github.com/nfagerlund","followers_url":"https://api.github.com/users/nfagerlund/followers","following_url":"https://api.github.com/users/nfagerlund/following{/other_user}","gists_url":"https://api.github.com/users/nfagerlund/gists{/gist_id}","starred_url":"https://api.github.com/users/nfagerlund/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nfagerlund/subscriptions","organizations_url":"https://api.github.com/users/nfagerlund/orgs","repos_url":"https://api.github.com/users/nfagerlund/repos","events_url":"https://api.github.com/users/nfagerlund/events{/privacy}","received_events_url":"https://api.github.com/users/nfagerlund/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/nfagerlund/puppet","description":"Server automation framework and application","fork":true,"url":"https://api.github.com/repos/nfagerlund/puppet","forks_url":"https://api.github.com/repos/nfagerlund/puppet/forks","keys_url":"https://api.github.com/repos/nfagerlund/puppet/keys{/key_id}","collaborators_url":"https://api.github.com/repos/nfagerlund/puppet/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/nfagerlund/puppet/teams","hooks_url":"https://api.github.com/repos/nfagerlund/puppet/hooks","issue_events_url":"https://api.github.com/repos/nfagerlund/puppet/issues/events{/number}","events_url":"https://api.github.com/repos/nfagerlund/puppet/events","assignees_url":"https://api.github.com/repos/nfagerlund/puppet/assignees{/user}","branches_url":"https://api.github.com/repos/nfagerlund/puppet/branches{/branch}","tags_url":"https://api.github.com/repos/nfagerlund/puppet/tags","blobs_url":"https://api.github.com/repos/nfagerlund/puppet/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/nfagerlund/puppet/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/nfagerlund/puppet/git/refs{/sha}","trees_url":"https://api.github.com/repos/nfagerlund/puppet/git/trees{/sha}","statuses_url":"https://api.github.com/repos/nfagerlund/puppet/statuses/{sha}","languages_url":"https://api.github.com/repos/nfagerlund/puppet/languages","stargazers_url":"https://api.github.com/repos/nfagerlund/puppet/stargazers","contributors_url":"https://api.github.com/repos/nfagerlund/puppet/contributors","subscribers_url":"https://api.github.com/repos/nfagerlund/puppet/subscribers","subscription_url":"https://api.github.com/repos/nfagerlund/puppet/subscription","commits_url":"https://api.github.com/repos/nfagerlund/puppet/commits{/sha}","git_commits_url":"https://api.github.com/repos/nfagerlund/puppet/git/commits{/sha}","comments_url":"https://api.github.com/repos/nfagerlund/puppet/comments{/number}","issue_comment_url":"https://api.github.com/repos/nfagerlund/puppet/issues/comments{/number}","contents_url":"https://api.github.com/repos/nfagerlund/puppet/contents/{+path}","compare_url":"https://api.github.com/repos/nfagerlund/puppet/compare/{base}...{head}","merges_url":"https://api.github.com/repos/nfagerlund/puppet/merges","archive_url":"https://api.github.com/repos/nfagerlund/puppet/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/nfagerlund/puppet/downloads","issues_url":"https://api.github.com/repos/nfagerlund/puppet/issues{/number}","pulls_url":"https://api.github.com/repos/nfagerlund/puppet/pulls{/number}","milestones_url":"https://api.github.com/repos/nfagerlund/puppet/milestones{/number}","notifications_url":"https://api.github.com/repos/nfagerlund/puppet/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/nfagerlund/puppet/labels{/name}","releases_url":"https://api.github.com/repos/nfagerlund/puppet/releases{/id}","created_at":"2011-01-12T18:43:23Z","updated_at":"2014-06-23T17:53:40Z","pushed_at":"2015-12-17T19:10:45Z","git_url":"git://github.com/nfagerlund/puppet.git","ssh_url":"git@github.com:nfagerlund/puppet.git","clone_url":"https://github.com/nfagerlund/puppet.git","svn_url":"https://github.com/nfagerlund/puppet","homepage":"http://www.puppetlabs.com/puppet/introduction/","size":48413,"stargazers_count":1,"watchers_count":1,"language":"Ruby","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"puppetlabs:stable","ref":"stable","sha":"0de60618bdb103bb85ffb5c1996807442d65187c","user":{"login":"puppetlabs","id":234268,"avatar_url":"https://avatars.githubusercontent.com/u/234268?v=3","gravatar_id":"","url":"https://api.github.com/users/puppetlabs","html_url":"https://github.com/puppetlabs","followers_url":"https://api.github.com/users/puppetlabs/followers","following_url":"https://api.github.com/users/puppetlabs/following{/other_user}","gists_url":"https://api.github.com/users/puppetlabs/gists{/gist_id}","starred_url":"https://api.github.com/users/puppetlabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/puppetlabs/subscriptions","organizations_url":"https://api.github.com/users/puppetlabs/orgs","repos_url":"https://api.github.com/users/puppetlabs/repos","events_url":"https://api.github.com/users/puppetlabs/events{/privacy}","received_events_url":"https://api.github.com/users/puppetlabs/received_events","type":"Organization","site_admin":false},"repo":{"id":910744,"name":"puppet","full_name":"puppetlabs/puppet","owner":{"login":"puppetlabs","id":234268,"avatar_url":"https://avatars.githubusercontent.com/u/234268?v=3","gravatar_id":"","url":"https://api.github.com/users/puppetlabs","html_url":"https://github.com/puppetlabs","followers_url":"https://api.github.com/users/puppetlabs/followers","following_url":"https://api.github.com/users/puppetlabs/following{/other_user}","gists_url":"https://api.github.com/users/puppetlabs/gists{/gist_id}","starred_url":"https://api.github.com/users/puppetlabs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/puppetlabs/subscriptions","organizations_url":"https://api.github.com/users/puppetlabs/orgs","repos_url":"https://api.github.com/users/puppetlabs/repos","events_url":"https://api.github.com/users/puppetlabs/events{/privacy}","received_events_url":"https://api.github.com/users/puppetlabs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/puppetlabs/puppet","description":"Server automation framework and application","fork":false,"url":"https://api.github.com/repos/puppetlabs/puppet","forks_url":"https://api.github.com/repos/puppetlabs/puppet/forks","keys_url":"https://api.github.com/repos/puppetlabs/puppet/keys{/key_id}","collaborators_url":"https://api.github.com/repos/puppetlabs/puppet/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/puppetlabs/puppet/teams","hooks_url":"https://api.github.com/repos/puppetlabs/puppet/hooks","issue_events_url":"https://api.github.com/repos/puppetlabs/puppet/issues/events{/number}","events_url":"https://api.github.com/repos/puppetlabs/puppet/events","assignees_url":"https://api.github.com/repos/puppetlabs/puppet/assignees{/user}","branches_url":"https://api.github.com/repos/puppetlabs/puppet/branches{/branch}","tags_url":"https://api.github.com/repos/puppetlabs/puppet/tags","blobs_url":"https://api.github.com/repos/puppetlabs/puppet/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/puppetlabs/puppet/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/puppetlabs/puppet/git/refs{/sha}","trees_url":"https://api.github.com/repos/puppetlabs/puppet/git/trees{/sha}","statuses_url":"https://api.github.com/repos/puppetlabs/puppet/statuses/{sha}","languages_url":"https://api.github.com/repos/puppetlabs/puppet/languages","stargazers_url":"https://api.github.com/repos/puppetlabs/puppet/stargazers","contributors_url":"https://api.github.com/repos/puppetlabs/puppet/contributors","subscribers_url":"https://api.github.com/repos/puppetlabs/puppet/subscribers","subscription_url":"https://api.github.com/repos/puppetlabs/puppet/subscription","commits_url":"https://api.github.com/repos/puppetlabs/puppet/commits{/sha}","git_commits_url":"https://api.github.com/repos/puppetlabs/puppet/git/commits{/sha}","comments_url":"https://api.github.com/repos/puppetlabs/puppet/comments{/number}","issue_comment_url":"https://api.github.com/repos/puppetlabs/puppet/issues/comments{/number}","contents_url":"https://api.github.com/repos/puppetlabs/puppet/contents/{+path}","compare_url":"https://api.github.com/repos/puppetlabs/puppet/compare/{base}...{head}","merges_url":"https://api.github.com/repos/puppetlabs/puppet/merges","archive_url":"https://api.github.com/repos/puppetlabs/puppet/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/puppetlabs/puppet/downloads","issues_url":"https://api.github.com/repos/puppetlabs/puppet/issues{/number}","pulls_url":"https://api.github.com/repos/puppetlabs/puppet/pulls{/number}","milestones_url":"https://api.github.com/repos/puppetlabs/puppet/milestones{/number}","notifications_url":"https://api.github.com/repos/puppetlabs/puppet/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/puppetlabs/puppet/labels{/name}","releases_url":"https://api.github.com/repos/puppetlabs/puppet/releases{/id}","created_at":"2010-09-14T19:26:44Z","updated_at":"2015-12-16T17:00:29Z","pushed_at":"2015-12-17T19:10:46Z","git_url":"git://github.com/puppetlabs/puppet.git","ssh_url":"git@github.com:puppetlabs/puppet.git","clone_url":"https://github.com/puppetlabs/puppet.git","svn_url":"https://github.com/puppetlabs/puppet","homepage":"https://puppetlabs.com/puppet/what-is-puppet","size":78695,"stargazers_count":3701,"watchers_count":3701,"language":"Ruby","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1540,"mirror_url":null,"open_issues_count":29,"forks":1540,"open_issues":29,"watchers":3701,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/puppetlabs/puppet/pulls/4455"},"html":{"href":"https://github.com/puppetlabs/puppet/pull/4455"},"issue":{"href":"https://api.github.com/repos/puppetlabs/puppet/issues/4455"},"comments":{"href":"https://api.github.com/repos/puppetlabs/puppet/issues/4455/comments"},"review_comments":{"href":"https://api.github.com/repos/puppetlabs/puppet/pulls/4455/comments"},"review_comment":{"href":"https://api.github.com/repos/puppetlabs/puppet/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/puppetlabs/puppet/pulls/4455/commits"},"statuses":{"href":"https://api.github.com/repos/puppetlabs/puppet/statuses/4b22e0d6107ab0af4647b23e0441fb165ab1f27e"}}}}