{"action":"created","comment":{"url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/pulls/comments/49178656","id":49178656,"diff_hunk":"@@ -0,0 +1,151 @@\n+require 'spec_helper'\n+\n+describe 'validate_x509_rsa_key_pair' do\n+\n+  let(:valid_cert) do\n+  <<EOS\n+-----BEGIN CERTIFICATE-----\n+MIIC9jCCAeCgAwIBAgIRAK11n3X7aypJ7FPM8UFyAeowCwYJKoZIhvcNAQELMBIx\n+EDAOBgNVBAoTB0FjbWUgQ28wHhcNMTUxMTIzMjIzOTU4WhcNMTYxMTIyMjIzOTU4\n+WjASMRAwDgYDVQQKEwdBY21lIENvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB\n+CgKCAQEAz9bY/piKahD10AiJSfbI2A8NG5UwRz0r9T/WfvNVdhgrsGFgNQjvpUoZ\n+nNJpQIHBbgMOiXqfATFjJl5FjEkSf7GUHohlGVls9MX2JmVvknzsiitd75H/EJd+\n+N+k915lix8Vqmj8d1CTlbF/8tEjzANI67Vqw5QTuqebO7rkIUvRg6yiRfSo75FK1\n+RinCJyl++kmleBwQZBInQyg95GvJ5JTqMzBs67DeeyzskDhTeTePRYVF2NwL8QzY\n+htvLIBERTNsyU5i7nkxY5ptUwgFUwd93LH4Q19tPqL5C5RZqXxhE51thOOwafm+a\n+W/cRkqYqV+tv+j1jJ3WICyF1JNW0BQIDAQABo0swSTAOBgNVHQ8BAf8EBAMCAKAw\n+EwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADAUBgNVHREEDTALggls\n+b2NhbGhvc3QwCwYJKoZIhvcNAQELA4IBAQAzRo0hpVTrFQZLIXpwvKwZVGvJdCkV\n+P95DTsSk/VTGV+/YtxrRqks++hJZnctm2PbnTsCAoIP3AMx+vicCKiKrxvpsLU8/\n++6cowUbcuGMdSQktwDqbAgEhQlLsETll06w1D/KC+ejOc4+LRn3GQcEyGDtMk/EX\n+IeAvBZHr4/kVXWnfo6kzCLcku1f8yE/yDEFClZe9XV1Lk/s+3YfXVtNnMJJ1giZI\n+QVOe6CkmuQq+4AtIeW8aLkvlfp632jag1F77a1y+L268koKkj0hBMrtcErVQaxmq\n+xym0+soR4Tk4pTIGckeFglrLxkP2JpM/yTwSEAVlmG9vgTliYKyR0uMl\n+-----END CERTIFICATE-----\n+EOS\n+  end\n+\n+  let(:valid_key) do\n+  <<EOS\n+-----BEGIN RSA PRIVATE KEY-----\n+MIIEogIBAAKCAQEAz9bY/piKahD10AiJSfbI2A8NG5UwRz0r9T/WfvNVdhgrsGFg\n+NQjvpUoZnNJpQIHBbgMOiXqfATFjJl5FjEkSf7GUHohlGVls9MX2JmVvknzsiitd\n+75H/EJd+N+k915lix8Vqmj8d1CTlbF/8tEjzANI67Vqw5QTuqebO7rkIUvRg6yiR\n+fSo75FK1RinCJyl++kmleBwQZBInQyg95GvJ5JTqMzBs67DeeyzskDhTeTePRYVF\n+2NwL8QzYhtvLIBERTNsyU5i7nkxY5ptUwgFUwd93LH4Q19tPqL5C5RZqXxhE51th\n+OOwafm+aW/cRkqYqV+tv+j1jJ3WICyF1JNW0BQIDAQABAoIBADAiZ/r+xP+vkd5u\n+O61/lCBFzBlZQecdybJw6HJaVK6XBndA9hESUr4LHUdui6W+51ddKd65IV4bXAUk\n+zCKjQb+FFvLDT/bA+TTvLATUdTSN7hJJ3OWBAHuNOlQklof6JCB0Hi4+89+P8/pX\n+eKUgR/cmuTMDT/iaXdPHeqFbBQyA1ZpQFRjN5LyyJMS/9FkywuNc5wlpsArtc51T\n+gIKENUZCuPhosR+kMFc2iuTNvqZWPhvouSrmhi2O6nSqV+oy0+irlqSpCF2GsCI8\n+72TtLpq94Grrq0BEH5avouV+Lp4k83vO65OKCQKUFQlxz3Xkxm2U3J7KzxqnRtM3\n+/b+cJ/kCgYEA6/yOnaEYhH/7ijhZbPn8RujXZ5VGJXKJqIuaPiHMmHVS5p1j6Bah\n+2PcnqJA2IlLs3UloN+ziAxAIH6KCBiwlQ/uPBNMMaJsIjPNBEy8axjndKhKUpidg\n+R0OJ7RQqMShOJ8akrSfWdPtXC/GBuwCYE//t77GgZaIMO3FcT9EKA48CgYEA4Xcx\n+Fia0Jg9iyAhNmUOXI6hWcGENavMx01+x7XFhbnMjIKTZevFfTnTkrX6HyLXyGtMU\n+gHOn+k4PE/purI4ARrKO8m5wYEKqSIt4dBMTkIXXirfQjXgfjR8E4T/aPe5fOFZo\n+7OYuxLRtzmG1C2sW4txwKAKX1LaWcVx/RLSttSsCgYBbcj8Brk+F6OJcqYFdzXGJ\n+OOlf5mSMVlopyg83THmwCqbZXtw8L6kAHqZrl5airmfDSJLuOQlMDoZXW+3u3mSC\n+d5TwVahVUN57YDgzaumBLyMZDqIz0MZqVy23hTzkV64Rk9R0lR9xrYQJyMhw4sYL\n+2f0mCTsSpzz+O+t9so+i2QKBgEC38gMlwPhb2kMI/x1LZYr6uzUu5qcYf+jowy4h\n+KZKGwkKQj0zXFEB1FV8nvtpCP+irRmtIx6L13SYi8LnfWPzyLE4ynVdES5TfVAgd\n+obQOdzx+XwL8xDHCAaiWp5K3ZeXKB/xYZnxYPlzLdyh76Ond1OPnOqX4c16+6llS\n+c7pZAoGATd9NckT0XtXLEsF3IraDivq8dP6bccX2DNfS8UeEvRRrRwpFpSRrmuGb\n+jbG4yzoIX4RjQfj/z48hwhJB+cKiN9WwcPsFXtHe7v3F6BRwK0JUfrCiXad8/SGZ\n+KAf7Dfqi608zBdnPWHacre2Y35gPHB00nFQOLS6u46aBNSq07YA=\n+-----END RSA PRIVATE KEY-----\n+EOS\n+  end\n+\n+  let(:another_valid_key) do\n+  <<EOS\n+-----BEGIN RSA PRIVATE KEY-----\n+MIIEpAIBAAKCAQEAoISxYJBTPAeAzFnm+lE/ljLlmGal2Xr3vwZKkvJiuKA/m4QJ\n+0ZNdtkBSDOVuG2dXVv6W4sChRtsCdvuVe7bjTYvlU8TWM3VEJDL9l9cRXScxxlKQ\n+Xwb35y1yV35NJfaK/jzm9KcErtQQs1RxvGlWRaohmLM8uQcuhjZfMsSlQoHQD5LX\n+sbPtk82RPyxYc1dj2vsaoi1VvuP2+jv4xLQOmNJY1bT5GTurqiltmxEtWhNNmGg0\n+2wtK00ifqLVO5HNc3gXQCDM2M99Sbmn1YtbrgsU9xMYfcPmvQvb+YoKskyoqck+c\n+HR//hi7vslbxABrny15LBkEfRc4TickphSGYXwIDAQABAoIBAATEzGw8/WwMIQRx\n+K06GeWgh7PZBHm4+m/ud2TtSXiJ0CE+7dXs3cJJIiOd/LW08/bhE6gCkjmYHfaRB\n+Ryicv1X/cPmzIFX5BuQ4a5ZGOmrVDkKBE27vSxAgJoR46RvWnjx9XLMp/xaekDxz\n+psldK8X4DvV1ZbltgDFWji947hvyqUtHdKnkQnc5j7aCIFJf9GMfzaeeDPMaL8WF\n+mVL4iy9EAOjNOHBshZj/OHyU5FbJ8ROwZQlCOiLCdFegftSIXt8EYDnjB3BdsALH\n+N6hquqrD7xDKyRbTD0K7lqxUubuMwTQpi61jZD8TBTXEPyFVAnoMpXkc0Y+np40A\n+YiIsR+kCgYEAyrc4Bh6fb9gt49IXGXOSRZ5i5+TmJho4kzIONrJ7Ndclwx9wzHfh\n+eGBodWaw5CxxQGMf4vEiaZrpAiSFeDffBLR+Wa2TFE5aWkdYkR34maDjO00m4PE1\n+S+YsZoGw7rGmmj+KS4qv2T26FEHtUI+F31RC1FPohLsQ22Jbn1ORipsCgYEAyrYB\n+J2Ncf2DlX1C0GfxyUHQOTNl0V5gpGvpbZ0WmWksumYz2kSGOAJkxuDKd9mKVlAcz\n+czmN+OOetuHTNqds2JJKKJy6hJbgCdd9aho3dId5Xs4oh4YwuFQiG8R/bJZfTlXo\n+99Qr02L7MmDWYLmrR3BA/93UPeorHPtjqSaYU40CgYEAtmGfWwokIglaSDVVqQVs\n+3YwBqmcrla5TpkMLvLRZ2/fktqfL4Xod9iKu+Klajv9ZKTfFkXWno2HHL7FSD/Yc\n+hWwqnV5oDIXuDnlQOse/SeERb+IbD5iUfePpoJQgbrCQlwiB0TNGwOojR2SFMczf\n+Ai4aLlQLx5dSND9K9Y7HS+8CgYEAixlHQ2r4LuQjoTs0ytwi6TgqE+vn3K+qDTwc\n+eoods7oBWRaUn1RCKAD3UClToZ1WfMRQNtIYrOAsqdveXpOWqioAP0wE5TTOuZIo\n+GiWxRgIsc7TNtOmNBv+chCdbNP0emxdyjJUIGb7DFnfCw47EjHnn8Guc13uXaATN\n+B2ZXgoUCgYAGa13P0ggUf5BMJpBd8S08jKRyvZb1CDXcUCuGtk2yEx45ern9U5WY\n+zJ13E5z9MKKO8nkGBqrRfjJa8Xhxk4HKNFuzHEet5lvNE7IKCF4YQRb0ZBhnb/78\n++4ZKjFki1RrWRNSw9TdvrK6qaDKgTtCTtfRVXAYQXUgq7lSFOTtL3A==\n+-----END RSA PRIVATE KEY-----\n+EOS\n+  end\n+\n+  let(:valid_cert_but_indented) do\n+    valid_cert.gsub(/^/, '  ')\n+  end\n+\n+  let(:valid_key_but_indented) do\n+    valid_key.gsub(/^/, '  ')\n+  end\n+\n+  let(:bad_cert) do\n+    'foo'\n+  end\n+\n+  let(:bad_key) do\n+    'bar'\n+  end\n+\n+  context 'function signature validation' do\n+    it { is_expected.not_to eq(nil) }\n+    it { is_expected.to run.with_params().and_raise_error(Puppet::ParseError, /wrong number of arguments/i) }\n+    it { is_expected.to run.with_params(0, 1, 2, 3).and_raise_error(Puppet::ParseError, /wrong number of arguments/i) }\n+  end\n+\n+  context 'valid input' do\n+    describe 'valid certificate and key' do\n+      it { is_expected.to run.with_params(valid_cert, valid_key) }\n+    end\n+  end\n+\n+  context 'bad input' do\n+    describe 'valid but indented certificate, valid key' do\n+      it { is_expected.to run.with_params(valid_cert_but_indented, valid_key).and_raise_error(Puppet::ParseError, /Not a valid x509 certificate/) }\n+    end\n+\n+    describe 'valid certificate, valid but indented key' do\n+      it { is_expected.to run.with_params(valid_cert, valid_key_but_indented).and_raise_error(Puppet::ParseError, /Not a valid RSA key/) }\n+    end\n+\n+    describe 'valid certificate, bad key' do\n+      it { is_expected.to run.with_params(valid_cert, bad_key).and_raise_error(Puppet::ParseError, /Not a valid RSA key/) }\n+    end\n+\n+    describe 'bad certificate, valid key' do\n+      it { is_expected.to run.with_params(bad_cert, valid_key).and_raise_error(Puppet::ParseError, /Not a valid x509 certificate/) }\n+    end\n+\n+    describe 'validate certificate and key; certficate not signed by key' do\n+      it { is_expected.to run.with_params(valid_cert, another_valid_key).and_raise_error(Puppet::ParseError, /Certificate signature does not match supplied key/) }\n+    end\n+\n+    describe 'valid cert and key but arguments in wrong order' do\n+      it { is_expected.to run.with_params(valid_key, valid_cert).and_raise_error(Puppet::ParseError, /Not a valid x509 certificate/) }\n+    end\n+\n+    describe 'non-string arguments' do\n+      it { is_expected.to run.with_params({}, {}).and_raise_error(Puppet::ParseError, /is not a string/) }\n+      it { is_expected.to run.with_params(1, 1).and_raise_error(Puppet::ParseError, /is not a string/) }\n+      it { is_expected.to run.with_params(true, true).and_raise_error(Puppet::ParseError, /is not a string/) }","path":"spec/functions/validate_x509_rsa_key_pair_spec.rb","position":164,"original_position":148,"commit_id":"41f9319bbd96547f9c2226524918e4b748527048","original_commit_id":"ce3b97d39251e4cc451f4fb0927783ddbe9d5f39","user":{"login":"mattbostock","id":4348848,"avatar_url":"https://avatars.githubusercontent.com/u/4348848?v=3","gravatar_id":"","url":"https://api.github.com/users/mattbostock","html_url":"https://github.com/mattbostock","followers_url":"https://api.github.com/users/mattbostock/followers","following_url":"https://api.github.com/users/mattbostock/following{/other_user}","gists_url":"https://api.github.com/users/mattbostock/gists{/gist_id}","starred_url":"https://api.github.com/users/mattbostock/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattbostock/subscriptions","organizations_url":"https://api.github.com/users/mattbostock/orgs","repos_url":"https://api.github.com/users/mattbostock/repos","events_url":"https://api.github.com/users/mattbostock/events{/privacy}","received_events_url":"https://api.github.com/users/mattbostock/received_events","type":"User","site_admin":false},"body":"I've added some more tests to 97320ab.","created_at":"2016-01-08T11:10:19Z","updated_at":"2016-01-08T11:10:19Z","html_url":"https://github.com/puppetlabs/puppetlabs-stdlib/pull/552#discussion_r49178656","pull_request_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/pulls/552","_links":{"self":{"href":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/pulls/comments/49178656"},"html":{"href":"https://github.com/puppetlabs/puppetlabs-stdlib/pull/552#discussion_r49178656"},"pull_request":{"href":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/pulls/552"}}},"pull_request":{"url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/pulls/552","id":51674172,"html_url":"https://github.com/puppetlabs/puppetlabs-stdlib/pull/552","diff_url":"https://github.com/puppetlabs/puppetlabs-stdlib/pull/552.diff","patch_url":"https://github.com/puppetlabs/puppetlabs-stdlib/pull/552.patch","issue_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/issues/552","number":552,"state":"open","locked":false,"title":"Add a function to validate an x509 RSA key pair","user":{"login":"mattbostock","id":4348848,"avatar_url":"https://avatars.githubusercontent.com/u/4348848?v=3","gravatar_id":"","url":"https://api.github.com/users/mattbostock","html_url":"https://github.com/mattbostock","followers_url":"https://api.github.com/users/mattbostock/followers","following_url":"https://api.github.com/users/mattbostock/following{/other_user}","gists_url":"https://api.github.com/users/mattbostock/gists{/gist_id}","starred_url":"https://api.github.com/users/mattbostock/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattbostock/subscriptions","organizations_url":"https://api.github.com/users/mattbostock/orgs","repos_url":"https://api.github.com/users/mattbostock/repos","events_url":"https://api.github.com/users/mattbostock/events{/privacy}","received_events_url":"https://api.github.com/users/mattbostock/received_events","type":"User","site_admin":false},"body":"Add a function to validate an x509 RSA certificate and key pair, as\r\ncommonly used for TLS certificates.\r\n\r\nThe rationale behind this is that we store our TLS certificates and\r\nprivate keys in Hiera YAML files, and poor indentation or formatting in\r\nthe YAML file could cause a valid certificate to be considered invalid.\r\n\r\nWill cause the Puppet run to fail if:\r\n\r\n- an invalid certificate is detected\r\n- an invalid RSA key is detected\r\n- the certificate does not match the key, i.e. the certificate\r\n  has not been signed by the supplied key\r\n\r\nThe test certificates I've used in the spec tests were generated using\r\nthe Go standard library:\r\n\r\n    $ go run $GOROOT/src/crypto/tls/generate_cert.go -host localhost\r\n\r\nExample output:\r\n\r\n    ==> cache-1.router: Error: Not a valid RSA key: Neither PUB key nor PRIV key:: nested asn1 error at /var/govuk/puppet/modules/nginx/manifests/config/ssl.pp:30 on node cache-1.router.dev.gov.uk","created_at":"2015-11-24T15:30:40Z","updated_at":"2016-01-08T11:10:19Z","closed_at":null,"merged_at":null,"merge_commit_sha":"52beefacf7aa6073d7884dcced471cdd5a8f4b51","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/pulls/552/commits","review_comments_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/pulls/552/comments","review_comment_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/pulls/comments{/number}","comments_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/issues/552/comments","statuses_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/statuses/41f9319bbd96547f9c2226524918e4b748527048","head":{"label":"mattbostock:add_x509_rsa_key_pair","ref":"add_x509_rsa_key_pair","sha":"41f9319bbd96547f9c2226524918e4b748527048","user":{"login":"mattbostock","id":4348848,"avatar_url":"https://avatars.githubusercontent.com/u/4348848?v=3","gravatar_id":"","url":"https://api.github.com/users/mattbostock","html_url":"https://github.com/mattbostock","followers_url":"https://api.github.com/users/mattbostock/followers","following_url":"https://api.github.com/users/mattbostock/following{/other_user}","gists_url":"https://api.github.com/users/mattbostock/gists{/gist_id}","starred_url":"https://api.github.com/users/mattbostock/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattbostock/subscriptions","organizations_url":"https://api.github.com/users/mattbostock/orgs","repos_url":"https://api.github.com/users/mattbostock/repos","events_url":"https://api.github.com/users/mattbostock/events{/privacy}","received_events_url":"https://api.github.com/users/mattbostock/received_events","type":"User","site_admin":false},"repo":{"id":46752664,"name":"puppetlabs-stdlib","full_name":"mattbostock/puppetlabs-stdlib","owner":{"login":"mattbostock","id":4348848,"avatar_url":"https://avatars.githubusercontent.com/u/4348848?v=3","gravatar_id":"","url":"https://api.github.com/users/mattbostock","html_url":"https://github.com/mattbostock","followers_url":"https://api.github.com/users/mattbostock/followers","following_url":"https://api.github.com/users/mattbostock/following{/other_user}","gists_url":"https://api.github.com/users/mattbostock/gists{/gist_id}","starred_url":"https://api.github.com/users/mattbostock/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mattbostock/subscriptions","organizations_url":"https://api.github.com/users/mattbostock/orgs","repos_url":"https://api.github.com/users/mattbostock/repos","events_url":"https://api.github.com/users/mattbostock/events{/privacy}","received_events_url":"https://api.github.com/users/mattbostock/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mattbostock/puppetlabs-stdlib","description":"Puppet Labs Standard Library module","fork":true,"url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib","forks_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/forks","keys_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/teams","hooks_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/hooks","issue_events_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/issues/events{/number}","events_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/events","assignees_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/assignees{/user}","branches_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/branches{/branch}","tags_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/tags","blobs_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/git/refs{/sha}","trees_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/statuses/{sha}","languages_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/languages","stargazers_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/stargazers","contributors_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/contributors","subscribers_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/subscribers","subscription_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/subscription","commits_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/commits{/sha}","git_commits_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/git/commits{/sha}","comments_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/comments{/number}","issue_comment_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/issues/comments{/number}","contents_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/contents/{+path}","compare_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/merges","archive_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/downloads","issues_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/issues{/number}","pulls_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/pulls{/number}","milestones_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/milestones{/number}","notifications_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/labels{/name}","releases_url":"https://api.github.com/repos/mattbostock/puppetlabs-stdlib/releases{/id}","created_at":"2015-11-23T22:45:38Z","updated_at":"2015-11-23T22:45:40Z","pushed_at":"2016-01-08T11:09:49Z","git_url":"git://github.com/mattbostock/puppetlabs-stdlib.git","ssh_url":"git@github.com:mattbostock/puppetlabs-stdlib.git","clone_url":"https://github.com/mattbostock/puppetlabs-stdlib.git","svn_url":"https://github.com/mattbostock/puppetlabs-stdlib","homepage":"http://forge.puppetlabs.com/puppetlabs/stdlib","size":1529,"stargazers_count":0,"watchers_count":0,"language":"Ruby","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"puppetlabs:master","ref":"master","sha":"9cce93054aaeafeddf38fa48d22d5f123b94adff","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":1794823,"name":"puppetlabs-stdlib","full_name":"puppetlabs/puppetlabs-stdlib","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/puppetlabs-stdlib","description":"Puppet Labs Standard Library module","fork":false,"url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib","forks_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/forks","keys_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/keys{/key_id}","collaborators_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/teams","hooks_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/hooks","issue_events_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/issues/events{/number}","events_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/events","assignees_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/assignees{/user}","branches_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/branches{/branch}","tags_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/tags","blobs_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/git/refs{/sha}","trees_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/git/trees{/sha}","statuses_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/statuses/{sha}","languages_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/languages","stargazers_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/stargazers","contributors_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/contributors","subscribers_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/subscribers","subscription_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/subscription","commits_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/commits{/sha}","git_commits_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/git/commits{/sha}","comments_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/comments{/number}","issue_comment_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/issues/comments{/number}","contents_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/contents/{+path}","compare_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/compare/{base}...{head}","merges_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/merges","archive_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/downloads","issues_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/issues{/number}","pulls_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/pulls{/number}","milestones_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/milestones{/number}","notifications_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/labels{/name}","releases_url":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/releases{/id}","created_at":"2011-05-24T18:07:16Z","updated_at":"2016-01-04T12:32:02Z","pushed_at":"2016-01-08T11:09:50Z","git_url":"git://github.com/puppetlabs/puppetlabs-stdlib.git","ssh_url":"git@github.com:puppetlabs/puppetlabs-stdlib.git","clone_url":"https://github.com/puppetlabs/puppetlabs-stdlib.git","svn_url":"https://github.com/puppetlabs/puppetlabs-stdlib","homepage":"http://forge.puppetlabs.com/puppetlabs/stdlib","size":3490,"stargazers_count":294,"watchers_count":294,"language":"Ruby","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":464,"mirror_url":null,"open_issues_count":3,"forks":464,"open_issues":3,"watchers":294,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/pulls/552"},"html":{"href":"https://github.com/puppetlabs/puppetlabs-stdlib/pull/552"},"issue":{"href":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/issues/552"},"comments":{"href":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/issues/552/comments"},"review_comments":{"href":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/pulls/552/comments"},"review_comment":{"href":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/pulls/552/commits"},"statuses":{"href":"https://api.github.com/repos/puppetlabs/puppetlabs-stdlib/statuses/41f9319bbd96547f9c2226524918e4b748527048"}}}}