{"action":"created","comment":{"url":"https://api.github.com/repos/apache/cloudstack/pulls/comments/178033101","pull_request_review_id":108019427,"id":178033101,"diff_hunk":"@@ -274,6 +279,19 @@ public void start() {\n             }\n         }\n         _shell.updateConnectedHost();\n+\n+        // In case of software based restart, GC to remove old instances\n+        _executor.submit(new Runnable() {","path":"agent/src/com/cloud/agent/Agent.java","position":80,"original_position":80,"commit_id":"1729d7793546a108cb733f8fab14d05e914c2137","original_commit_id":"1729d7793546a108cb733f8fab14d05e914c2137","user":{"login":"rhtyd","id":95203,"avatar_url":"https://avatars0.githubusercontent.com/u/95203?v=4","gravatar_id":"","url":"https://api.github.com/users/rhtyd","html_url":"https://github.com/rhtyd","followers_url":"https://api.github.com/users/rhtyd/followers","following_url":"https://api.github.com/users/rhtyd/following{/other_user}","gists_url":"https://api.github.com/users/rhtyd/gists{/gist_id}","starred_url":"https://api.github.com/users/rhtyd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rhtyd/subscriptions","organizations_url":"https://api.github.com/users/rhtyd/orgs","repos_url":"https://api.github.com/users/rhtyd/repos","events_url":"https://api.github.com/users/rhtyd/events{/privacy}","received_events_url":"https://api.github.com/users/rhtyd/received_events","type":"User","site_admin":false},"body":"Yes @rafaelweingartner, with the feature we've introduced a background thread that will perform software based restart of the agent. Look at the post renewal restart task. With this it will be easier to restart an agent without actually restarting the agent JVM process. This runnable is needed to GC old agent instance, we can remove this as well, but keeping it ensures that old agent is stopped+GC-ed.","created_at":"2018-03-29T11:58:36Z","updated_at":"2018-03-29T11:58:37Z","html_url":"https://github.com/apache/cloudstack/pull/2505#discussion_r178033101","pull_request_url":"https://api.github.com/repos/apache/cloudstack/pulls/2505","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/apache/cloudstack/pulls/comments/178033101"},"html":{"href":"https://github.com/apache/cloudstack/pull/2505#discussion_r178033101"},"pull_request":{"href":"https://api.github.com/repos/apache/cloudstack/pulls/2505"}},"in_reply_to_id":178028132},"pull_request":{"url":"https://api.github.com/repos/apache/cloudstack/pulls/2505","id":176706572,"html_url":"https://github.com/apache/cloudstack/pull/2505","diff_url":"https://github.com/apache/cloudstack/pull/2505.diff","patch_url":"https://github.com/apache/cloudstack/pull/2505.patch","issue_url":"https://api.github.com/repos/apache/cloudstack/issues/2505","number":2505,"state":"open","locked":false,"title":"CLOUDSTACK-10333: Secure Live VM Migration for KVM","user":{"login":"rhtyd","id":95203,"avatar_url":"https://avatars0.githubusercontent.com/u/95203?v=4","gravatar_id":"","url":"https://api.github.com/users/rhtyd","html_url":"https://github.com/rhtyd","followers_url":"https://api.github.com/users/rhtyd/followers","following_url":"https://api.github.com/users/rhtyd/following{/other_user}","gists_url":"https://api.github.com/users/rhtyd/gists{/gist_id}","starred_url":"https://api.github.com/users/rhtyd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rhtyd/subscriptions","organizations_url":"https://api.github.com/users/rhtyd/orgs","repos_url":"https://api.github.com/users/rhtyd/repos","events_url":"https://api.github.com/users/rhtyd/events{/privacy}","received_events_url":"https://api.github.com/users/rhtyd/received_events","type":"User","site_admin":false},"body":"## Description\r\n\r\nThis extends securing of KVM hosts to securing of libvirt on KVM\r\nhost as well for TLS enabled live VM migration. To simplify implementation\r\nsecuring of host implies that both host and libvirtd processes are\r\nsecured with management server's CA plugin issued certificates.\r\n\r\nFS: https://cwiki.apache.org/confluence/display/CLOUDSTACK/Secure+Live+VM+Migration+for+KVM\r\n\r\nBased on whether keystore and certificates files are available at\r\n/etc/cloudstack/agent, the KVM agent determines whether to use TLS or\r\nTCP based uris for live VM migration. It is also enforced that a secured\r\nhost will allow live VM migration to/from other secured host, and an\r\nunsecured hosts will allow live VM migration to/from other unsecured\r\nhost only.\r\n\r\nPost upgrade the KVM agent on startup will expose its security state\r\n(secured detail is sent as true or false) to the managements server that\r\ngets saved in host_details for the host. This host detail can be accesed\r\nvia the listHosts response, and in the UI unsecured KVM hosts will show\r\nup with the host state of ‘unsecured’. Further, a button has been added\r\nthat allows admins to provision/renew certificates to KVM hosts and can\r\nbe used to secure any unsecured KVM host.\r\n\r\nThe `cloudstack-setup-agent` was modified to accept a new flag `-s`\r\nwhich will reconfigure libvirtd with following settings:\r\n\r\n    listen_tcp=0\r\n    listen_tls=1\r\n    tcp_port=\"16509\"\r\n    tls_port=\"16514\"\r\n    auth_tcp=\"none\"\r\n    auth_tls=\"none\"\r\n    key_file = \"/etc/pki/libvirt/private/serverkey.pem\"\r\n    cert_file = \"/etc/pki/libvirt/servercert.pem\"\r\n    ca_file = \"/etc/pki/CA/cacert.pem\"\r\n\r\nFor a connected KVM host agent, when the certificate are\r\nrenewed/provisioned a background task is scheduled that waits until all\r\nof the agent tasks finish after which libvirt process is restarted and\r\nfinally the agent is restarted via AgentShell.\r\n\r\nThere are no API or DB changes.\r\n\r\n## Types of changes\r\n<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: -->\r\n- [ ] Breaking change (fix or feature that would cause existing functionality to change)\r\n- [ ] New feature (non-breaking change which adds functionality)\r\n- [ ] Bug fix (non-breaking change which fixes an issue)\r\n- [x] Enhancement (improves an existing feature and functionality)\r\n- [ ] Cleanup (Code refactoring and cleanup, that may add test cases)\r\n\r\n## Screenshots (if appropriate):\r\n\r\nUnsecured KVM hosts when are Up and connected show up as:\r\n![screenshot from 2018-03-20 19-18-42](https://user-images.githubusercontent.com/95203/37759459-b0f31564-2dd9-11e8-9fc2-9a16259c750e.png)\r\n\r\nButton to secure host, or renew/provision certificate using configured CA plugin;\r\n![screenshot from 2018-03-20 19-18-49](https://user-images.githubusercontent.com/95203/37759461-b1383ba8-2dd9-11e8-8770-d8a07a52e124.png)\r\n![screenshot from 2018-03-20 19-19-00](https://user-images.githubusercontent.com/95203/37759462-b184777a-2dd9-11e8-958e-d06197a5bf69.png)\r\n\r\nError message when VM migration is between secured and unsecured hosts:\r\n![screenshot from 2018-03-20 19-20-48](https://user-images.githubusercontent.com/95203/37759463-b1ca3742-2dd9-11e8-8ec7-1f866ea5d87a.png)\r\n\r\n## How Has This Been Tested?\r\n\r\n- Tested between a pre-upgraded secured KVM host (el7 based) and post-upgrade it secures libvirtd using same certificates.\r\n- Tested tls enabled live vm migration between two secured and unsecured el7 kvm hosts.\r\n\r\n## Checklist:\r\n<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->\r\n<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->\r\n- [x] I have read the [CONTRIBUTING](https://github.com/apache/cloudstack/blob/master/CONTRIBUTING.md) document.\r\n- [x] My code follows the code style of this project.\r\n- [x] My change requires a change to the documentation.\r\n- [x] I have updated the documentation accordingly. PR https://github.com/apache/cloudstack-docs-admin/pull/50, https://github.com/apache/cloudstack-docs-install/pull/36\r\n- [x] I have added tests to cover my changes.\r\n- [x] All new and existing tests passed.\r\n\r\n<!-- The following will kick a packaging job, remove if as applicable -->\r\n@blueorangutan package\r\n","created_at":"2018-03-22T08:36:20Z","updated_at":"2018-03-29T11:58:37Z","closed_at":null,"merged_at":null,"merge_commit_sha":"2fda7db5c0a65637d1f0fecbf3195fe46da04fca","assignee":null,"assignees":[],"requested_reviewers":[{"login":"DaanHoogland","id":2486961,"avatar_url":"https://avatars1.githubusercontent.com/u/2486961?v=4","gravatar_id":"","url":"https://api.github.com/users/DaanHoogland","html_url":"https://github.com/DaanHoogland","followers_url":"https://api.github.com/users/DaanHoogland/followers","following_url":"https://api.github.com/users/DaanHoogland/following{/other_user}","gists_url":"https://api.github.com/users/DaanHoogland/gists{/gist_id}","starred_url":"https://api.github.com/users/DaanHoogland/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DaanHoogland/subscriptions","organizations_url":"https://api.github.com/users/DaanHoogland/orgs","repos_url":"https://api.github.com/users/DaanHoogland/repos","events_url":"https://api.github.com/users/DaanHoogland/events{/privacy}","received_events_url":"https://api.github.com/users/DaanHoogland/received_events","type":"User","site_admin":false},{"login":"nvazquez","id":5295080,"avatar_url":"https://avatars2.githubusercontent.com/u/5295080?v=4","gravatar_id":"","url":"https://api.github.com/users/nvazquez","html_url":"https://github.com/nvazquez","followers_url":"https://api.github.com/users/nvazquez/followers","following_url":"https://api.github.com/users/nvazquez/following{/other_user}","gists_url":"https://api.github.com/users/nvazquez/gists{/gist_id}","starred_url":"https://api.github.com/users/nvazquez/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nvazquez/subscriptions","organizations_url":"https://api.github.com/users/nvazquez/orgs","repos_url":"https://api.github.com/users/nvazquez/repos","events_url":"https://api.github.com/users/nvazquez/events{/privacy}","received_events_url":"https://api.github.com/users/nvazquez/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":37843366,"url":"https://api.github.com/repos/apache/cloudstack/labels/enhancement","name":"enhancement","color":"84b6eb","default":true},{"id":584072971,"url":"https://api.github.com/repos/apache/cloudstack/labels/kvm","name":"kvm","color":"006b75","default":false},{"id":584074312,"url":"https://api.github.com/repos/apache/cloudstack/labels/libvirt","name":"libvirt","color":"bfdadc","default":false},{"id":584074680,"url":"https://api.github.com/repos/apache/cloudstack/labels/security","name":"security","color":"bfdadc","default":false}],"milestone":{"url":"https://api.github.com/repos/apache/cloudstack/milestones/5","html_url":"https://github.com/apache/cloudstack/milestone/5","labels_url":"https://api.github.com/repos/apache/cloudstack/milestones/5/labels","id":3033298,"number":5,"title":"4.11.1.0","description":"Milestone covering PRs for the next 4.11.1.0 release. All PRs using this milestone should send PR against the 4.11 branch.","creator":{"login":"DaanHoogland","id":2486961,"avatar_url":"https://avatars1.githubusercontent.com/u/2486961?v=4","gravatar_id":"","url":"https://api.github.com/users/DaanHoogland","html_url":"https://github.com/DaanHoogland","followers_url":"https://api.github.com/users/DaanHoogland/followers","following_url":"https://api.github.com/users/DaanHoogland/following{/other_user}","gists_url":"https://api.github.com/users/DaanHoogland/gists{/gist_id}","starred_url":"https://api.github.com/users/DaanHoogland/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DaanHoogland/subscriptions","organizations_url":"https://api.github.com/users/DaanHoogland/orgs","repos_url":"https://api.github.com/users/DaanHoogland/repos","events_url":"https://api.github.com/users/DaanHoogland/events{/privacy}","received_events_url":"https://api.github.com/users/DaanHoogland/received_events","type":"User","site_admin":false},"open_issues":7,"closed_issues":38,"state":"open","created_at":"2018-01-13T20:06:17Z","updated_at":"2018-03-28T11:19:09Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/apache/cloudstack/pulls/2505/commits","review_comments_url":"https://api.github.com/repos/apache/cloudstack/pulls/2505/comments","review_comment_url":"https://api.github.com/repos/apache/cloudstack/pulls/comments{/number}","comments_url":"https://api.github.com/repos/apache/cloudstack/issues/2505/comments","statuses_url":"https://api.github.com/repos/apache/cloudstack/statuses/1729d7793546a108cb733f8fab14d05e914c2137","head":{"label":"shapeblue:libvirtd-tls-enable","ref":"libvirtd-tls-enable","sha":"1729d7793546a108cb733f8fab14d05e914c2137","user":{"login":"shapeblue","id":6001764,"avatar_url":"https://avatars1.githubusercontent.com/u/6001764?v=4","gravatar_id":"","url":"https://api.github.com/users/shapeblue","html_url":"https://github.com/shapeblue","followers_url":"https://api.github.com/users/shapeblue/followers","following_url":"https://api.github.com/users/shapeblue/following{/other_user}","gists_url":"https://api.github.com/users/shapeblue/gists{/gist_id}","starred_url":"https://api.github.com/users/shapeblue/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shapeblue/subscriptions","organizations_url":"https://api.github.com/users/shapeblue/orgs","repos_url":"https://api.github.com/users/shapeblue/repos","events_url":"https://api.github.com/users/shapeblue/events{/privacy}","received_events_url":"https://api.github.com/users/shapeblue/received_events","type":"Organization","site_admin":false},"repo":{"id":35481491,"name":"cloudstack","full_name":"shapeblue/cloudstack","owner":{"login":"shapeblue","id":6001764,"avatar_url":"https://avatars1.githubusercontent.com/u/6001764?v=4","gravatar_id":"","url":"https://api.github.com/users/shapeblue","html_url":"https://github.com/shapeblue","followers_url":"https://api.github.com/users/shapeblue/followers","following_url":"https://api.github.com/users/shapeblue/following{/other_user}","gists_url":"https://api.github.com/users/shapeblue/gists{/gist_id}","starred_url":"https://api.github.com/users/shapeblue/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shapeblue/subscriptions","organizations_url":"https://api.github.com/users/shapeblue/orgs","repos_url":"https://api.github.com/users/shapeblue/repos","events_url":"https://api.github.com/users/shapeblue/events{/privacy}","received_events_url":"https://api.github.com/users/shapeblue/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/shapeblue/cloudstack","description":"The upstream repository is at http://github.com/apache/cloudstack. This is ShapeBlue's support/patch branches and Apache CloudStack™ backup","fork":true,"url":"https://api.github.com/repos/shapeblue/cloudstack","forks_url":"https://api.github.com/repos/shapeblue/cloudstack/forks","keys_url":"https://api.github.com/repos/shapeblue/cloudstack/keys{/key_id}","collaborators_url":"https://api.github.com/repos/shapeblue/cloudstack/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/shapeblue/cloudstack/teams","hooks_url":"https://api.github.com/repos/shapeblue/cloudstack/hooks","issue_events_url":"https://api.github.com/repos/shapeblue/cloudstack/issues/events{/number}","events_url":"https://api.github.com/repos/shapeblue/cloudstack/events","assignees_url":"https://api.github.com/repos/shapeblue/cloudstack/assignees{/user}","branches_url":"https://api.github.com/repos/shapeblue/cloudstack/branches{/branch}","tags_url":"https://api.github.com/repos/shapeblue/cloudstack/tags","blobs_url":"https://api.github.com/repos/shapeblue/cloudstack/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/shapeblue/cloudstack/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/shapeblue/cloudstack/git/refs{/sha}","trees_url":"https://api.github.com/repos/shapeblue/cloudstack/git/trees{/sha}","statuses_url":"https://api.github.com/repos/shapeblue/cloudstack/statuses/{sha}","languages_url":"https://api.github.com/repos/shapeblue/cloudstack/languages","stargazers_url":"https://api.github.com/repos/shapeblue/cloudstack/stargazers","contributors_url":"https://api.github.com/repos/shapeblue/cloudstack/contributors","subscribers_url":"https://api.github.com/repos/shapeblue/cloudstack/subscribers","subscription_url":"https://api.github.com/repos/shapeblue/cloudstack/subscription","commits_url":"https://api.github.com/repos/shapeblue/cloudstack/commits{/sha}","git_commits_url":"https://api.github.com/repos/shapeblue/cloudstack/git/commits{/sha}","comments_url":"https://api.github.com/repos/shapeblue/cloudstack/comments{/number}","issue_comment_url":"https://api.github.com/repos/shapeblue/cloudstack/issues/comments{/number}","contents_url":"https://api.github.com/repos/shapeblue/cloudstack/contents/{+path}","compare_url":"https://api.github.com/repos/shapeblue/cloudstack/compare/{base}...{head}","merges_url":"https://api.github.com/repos/shapeblue/cloudstack/merges","archive_url":"https://api.github.com/repos/shapeblue/cloudstack/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/shapeblue/cloudstack/downloads","issues_url":"https://api.github.com/repos/shapeblue/cloudstack/issues{/number}","pulls_url":"https://api.github.com/repos/shapeblue/cloudstack/pulls{/number}","milestones_url":"https://api.github.com/repos/shapeblue/cloudstack/milestones{/number}","notifications_url":"https://api.github.com/repos/shapeblue/cloudstack/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/shapeblue/cloudstack/labels{/name}","releases_url":"https://api.github.com/repos/shapeblue/cloudstack/releases{/id}","deployments_url":"https://api.github.com/repos/shapeblue/cloudstack/deployments","created_at":"2015-05-12T10:22:21Z","updated_at":"2018-03-15T10:23:00Z","pushed_at":"2018-03-29T11:30:27Z","git_url":"git://github.com/shapeblue/cloudstack.git","ssh_url":"git@github.com:shapeblue/cloudstack.git","clone_url":"https://github.com/shapeblue/cloudstack.git","svn_url":"https://github.com/shapeblue/cloudstack","homepage":"http://shapeblue.com/packages","size":535696,"stargazers_count":3,"watchers_count":3,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":2,"open_issues":0,"watchers":3,"default_branch":"master"}},"base":{"label":"apache:4.11","ref":"4.11","sha":"c4cc679c3b34a5f38cc17a01a96e9d69aa370641","user":{"login":"apache","id":47359,"avatar_url":"https://avatars0.githubusercontent.com/u/47359?v=4","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"repo":{"id":9759448,"name":"cloudstack","full_name":"apache/cloudstack","owner":{"login":"apache","id":47359,"avatar_url":"https://avatars0.githubusercontent.com/u/47359?v=4","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/apache/cloudstack","description":"Mirror of Apache Cloudstack","fork":false,"url":"https://api.github.com/repos/apache/cloudstack","forks_url":"https://api.github.com/repos/apache/cloudstack/forks","keys_url":"https://api.github.com/repos/apache/cloudstack/keys{/key_id}","collaborators_url":"https://api.github.com/repos/apache/cloudstack/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/apache/cloudstack/teams","hooks_url":"https://api.github.com/repos/apache/cloudstack/hooks","issue_events_url":"https://api.github.com/repos/apache/cloudstack/issues/events{/number}","events_url":"https://api.github.com/repos/apache/cloudstack/events","assignees_url":"https://api.github.com/repos/apache/cloudstack/assignees{/user}","branches_url":"https://api.github.com/repos/apache/cloudstack/branches{/branch}","tags_url":"https://api.github.com/repos/apache/cloudstack/tags","blobs_url":"https://api.github.com/repos/apache/cloudstack/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/apache/cloudstack/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/apache/cloudstack/git/refs{/sha}","trees_url":"https://api.github.com/repos/apache/cloudstack/git/trees{/sha}","statuses_url":"https://api.github.com/repos/apache/cloudstack/statuses/{sha}","languages_url":"https://api.github.com/repos/apache/cloudstack/languages","stargazers_url":"https://api.github.com/repos/apache/cloudstack/stargazers","contributors_url":"https://api.github.com/repos/apache/cloudstack/contributors","subscribers_url":"https://api.github.com/repos/apache/cloudstack/subscribers","subscription_url":"https://api.github.com/repos/apache/cloudstack/subscription","commits_url":"https://api.github.com/repos/apache/cloudstack/commits{/sha}","git_commits_url":"https://api.github.com/repos/apache/cloudstack/git/commits{/sha}","comments_url":"https://api.github.com/repos/apache/cloudstack/comments{/number}","issue_comment_url":"https://api.github.com/repos/apache/cloudstack/issues/comments{/number}","contents_url":"https://api.github.com/repos/apache/cloudstack/contents/{+path}","compare_url":"https://api.github.com/repos/apache/cloudstack/compare/{base}...{head}","merges_url":"https://api.github.com/repos/apache/cloudstack/merges","archive_url":"https://api.github.com/repos/apache/cloudstack/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/apache/cloudstack/downloads","issues_url":"https://api.github.com/repos/apache/cloudstack/issues{/number}","pulls_url":"https://api.github.com/repos/apache/cloudstack/pulls{/number}","milestones_url":"https://api.github.com/repos/apache/cloudstack/milestones{/number}","notifications_url":"https://api.github.com/repos/apache/cloudstack/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/apache/cloudstack/labels{/name}","releases_url":"https://api.github.com/repos/apache/cloudstack/releases{/id}","deployments_url":"https://api.github.com/repos/apache/cloudstack/deployments","created_at":"2013-04-29T22:27:12Z","updated_at":"2018-03-29T08:07:08Z","pushed_at":"2018-03-29T08:06:51Z","git_url":"git://github.com/apache/cloudstack.git","ssh_url":"git@github.com:apache/cloudstack.git","clone_url":"https://github.com/apache/cloudstack.git","svn_url":"https://github.com/apache/cloudstack","homepage":null,"size":522128,"stargazers_count":551,"watchers_count":551,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":619,"mirror_url":null,"archived":false,"open_issues_count":114,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":619,"open_issues":114,"watchers":551,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/apache/cloudstack/pulls/2505"},"html":{"href":"https://github.com/apache/cloudstack/pull/2505"},"issue":{"href":"https://api.github.com/repos/apache/cloudstack/issues/2505"},"comments":{"href":"https://api.github.com/repos/apache/cloudstack/issues/2505/comments"},"review_comments":{"href":"https://api.github.com/repos/apache/cloudstack/pulls/2505/comments"},"review_comment":{"href":"https://api.github.com/repos/apache/cloudstack/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/apache/cloudstack/pulls/2505/commits"},"statuses":{"href":"https://api.github.com/repos/apache/cloudstack/statuses/1729d7793546a108cb733f8fab14d05e914c2137"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"rhtyd"}}