{"action":"created","comment":{"url":"https://api.github.com/repos/Metaswitch/calico-docker/pulls/comments/35271662","id":35271662,"diff_hunk":"@@ -216,6 +221,211 @@ def test_validate_arguments(self, case, sys_exit_called):\n             self.assertEqual(m_sys_exit.called, sys_exit_called)\n \n \n+    @patch('calico_ctl.node.os', autospec=True)\n+    @patch('calico_ctl.node.check_system', autospec=True)\n+    @patch('calico_ctl.node.get_host_ips', autospec=True)\n+    @patch('calico_ctl.node.warn_if_unknown_ip', autospec=True)\n+    @patch('calico_ctl.node.warn_if_hostname_conflict', autospec=True)\n+    @patch('calico_ctl.node.install_kubernetes', autospec=True)\n+    @patch('calico_ctl.node.client', autospec=True)\n+    @patch('calico_ctl.node.docker_client', autospec=True)\n+    @patch('calico_ctl.node.docker', autospec=True)\n+    @patch('calico_ctl.node._find_or_pull_node_image', autospec=True)\n+    @patch('calico_ctl.node._attach_and_stream', autospec=True)\n+    @patch('sys.exit', autospec=True)\n+    def test_node_start(self, m_sys_exit, m_attach_and_stream,\n+                        m_find_or_pull_node_image, m_docker,\n+                        m_docker_client, m_client, m_install_kube,\n+                        m_warn_if_hostname_conflict, m_warn_if_unknown_ip,\n+                        m_get_host_ips, m_check_system, m_os):\n+        \"\"\"\n+        Test node_start function in calicoctl node command\n+        \"\"\"\n+        # Set up mock objects\n+        m_os.path.exists.return_value = False\n+        ip_1 = '1.1.1.1'\n+        ip_2 = '2.2.2.2'\n+        m_get_host_ips.return_value = [ip_1, ip_2]\n+        m_os.getenv.return_value = '1.1.1.1:80:100'\n+        m_docker.utils.create_host_config.return_value = 'host_config'\n+        container = {'Id':666}\n+        m_docker_client.create_container.return_value = container\n+\n+        # Set up arguments\n+        node_image = 'node_image'\n+        log_dir = './log_dir'\n+        ip = ''\n+        ip6 = 'aa:bb::zz'\n+        as_num = ''\n+        detach = False\n+        kubernetes = True\n+\n+        # Call method under test\n+        node.node_start(\n+            node_image, log_dir, ip, ip6, as_num, detach, kubernetes\n+        )\n+\n+        # Set up variables used in assertion statements\n+        environment = [\n+            \"HOSTNAME=%s\" % node.hostname,\n+            \"IP=%s\" % ip_2,\n+            \"IP6=%s\" % ip6,\n+            \"ETCD_AUTHORITY=1.1.1.1:80\",  # etcd host:port\n+            \"FELIX_ETCDADDR=1.1.1.1:80\",  # etcd host:port\n+        ]\n+        binds = {\n+            \"/proc\":\n+                {\n+                    \"bind\": \"/proc_host\",\n+                    \"ro\": False\n+                },\n+            log_dir:\n+                {\n+                    \"bind\": \"/var/log/calico\",\n+                    \"ro\": False\n+                },\n+            \"/run/docker/plugins\":\n+                {\n+                    \"bind\": \"/usr/share/docker/plugins\",\n+                    \"ro\": False\n+                }\n+        }\n+\n+        # Assert\n+        m_os.path.exists.assert_called_once_with('./log_dir')\n+        m_check_system.assert_called_once_with(fix=False, quit_if_error=False)\n+        m_get_host_ips.assert_called_once_with(4)\n+        m_warn_if_unknown_ip.assert_called_once_with(ip_2, ip6)\n+        m_warn_if_hostname_conflict.assert_called_once_with(ip_2)\n+        m_install_kube.assert_called_once_with(node.KUBERNETES_PLUGIN_DIR)\n+        m_client.get_ip_pools.assert_has_calls([call(4), call(6)])\n+        m_client.ensure_global_config.assert_called_once_with()\n+        m_client.create_host.assert_called_once_with(\n+            node.hostname, ip_2, ip6, as_num\n+        )\n+        m_docker_client.remove_container.assert_called_once_with(\n+            'calico-node', force=True\n+        )\n+        m_os.getenv.assert_called_once_with(\n+            ETCD_AUTHORITY_ENV, ETCD_AUTHORITY_DEFAULT\n+        )\n+        m_sys_exit.assert_called_once_with(1)\n+        m_docker.utils.create_host_config.assert_called_once_with(\n+            privileged=True,\n+            restart_policy={\"Name\":\"Always\"},\n+            network_mode=\"host\",\n+            binds=binds\n+        )\n+        m_find_or_pull_node_image.assert_called_once_with(\n+            'node_image', m_docker_client\n+        )\n+        m_docker_client.create_container.assert_called_once_with(\n+            node_image,\n+            name='calico-node',\n+            detach=True,\n+            environment=environment,\n+            host_config='host_config',\n+            volumes=['/proc_host',\n+                     '/var/log/calico',\n+                     '/usr/share/docker/plugins']\n+        )\n+        m_docker_client.start.assert_called_once_with(container)\n+        m_attach_and_stream.assert_called_once_with(container)\n+\n+\n+    @patch('sys.exit', autospec=True)\n+    @patch('calico_ctl.node.os', autospec=True)\n+    @patch('calico_ctl.node.check_system', autospec=True)\n+    @patch('calico_ctl.node.get_host_ips', autospec=True)\n+    @patch('calico_ctl.node.warn_if_unknown_ip', autospec=True)\n+    @patch('calico_ctl.node.warn_if_hostname_conflict', autospec=True)\n+    @patch('calico_ctl.node.install_kubernetes', autospec=True)\n+    def test_node_start_oserror(self, m_install_kube,\n+                        m_warn_if_hostname_conflict, m_warn_if_unknown_ip,\n+                        m_get_host_ips, m_check_system, m_os, m_sys_exit):\n+        \"\"\"\n+        Test node_start function in calicoctl node command\n+        \"\"\"\n+        # Set up mock objects\n+        m_os.path.exists.return_value = False\n+        m_get_host_ips.return_value = []\n+        m_install_kube.side_effect = OSError\n+\n+        # Set up arguments\n+        node_image = 'node_image'\n+        log_dir = './log_dir'\n+        ip = ''\n+        ip6 = 'aa:bb::zz'\n+        as_num = ''\n+        detach = False\n+        kubernetes = True\n+\n+        # Test expecting OSError exception\n+        self.assertRaises(OSError, node.node_start,\n+                          node_image, log_dir, ip, ip6, as_num, detach, kubernetes)\n+\n+    @patch('sys.exit', autospec=True)\n+    @patch('calico_ctl.node.os', autospec=True)\n+    @patch('calico_ctl.node.check_system', autospec=True)\n+    @patch('calico_ctl.node.get_host_ips', autospec=True)\n+    @patch('calico_ctl.node.warn_if_unknown_ip', autospec=True)\n+    @patch('calico_ctl.node.warn_if_hostname_conflict', autospec=True)\n+    @patch('calico_ctl.node.install_kubernetes', autospec=True)\n+    @patch('calico_ctl.node.client', autospec=True)\n+    @patch('calico_ctl.node.docker_client', autospec=True)\n+    def test_node_start_apierror(self, m_docker_client, m_client, m_install_kube,\n+                        m_warn_if_hostname_conflict, m_warn_if_unknown_ip,\n+                        m_get_host_ips, m_check_system, m_os, m_sys_exit):\n+        \"\"\"\n+        Test node_start function in calicoctl node command\n+        \"\"\"\n+        # Set up mock objects\n+        m_os.path.exists.return_value = False\n+        m_get_host_ips.return_value = []\n+        m_client.get_ip_pools.return_value = []\n+        err = APIError(\"Test error message\", Response())\n+        m_docker_client.remove_container.side_effect = err\n+\n+        # Set up arguments\n+        node_image = 'node_image'\n+        log_dir = './log_dir'\n+        ip = ''\n+        ip6 = 'aa:bb::zz'\n+        as_num = ''\n+        detach = False\n+        kubernetes = True\n+\n+        # Testing expecting APIError exception\n+        self.assertRaises(APIError, node.node_start,\n+                          node_image, log_dir, ip, ip6, as_num, detach, kubernetes)\n+\n+    @patch('calico_ctl.node.client', autospec=True)\n+    @patch('calico_ctl.node.docker_client', autospec=True)\n+    def test_node_stop(self, m_docker_client, m_client):\n+        \"\"\"\n+        Test node_stop function in calicoctl node command\n+        \"\"\"\n+        # Call method under test\n+        node.node_stop(True)\n+\n+        # Assert\n+        m_client.remove_host.assert_called_once_with(node.hostname)\n+        m_docker_client.stop.assert_called_once_with('calico-node')\n+\n+    @patch('calico_ctl.node.client', autospec=True)\n+    @patch('calico_ctl.node.docker_client', autospec=True)\n+    def test_node_stop_error(self, m_docker_client, m_client):","path":"calico_containers/tests/unit/calicoctl_test.py","position":224,"original_position":224,"commit_id":"7ee81ccb695715071a0cf28c33890a224a409d23","original_commit_id":"7ee81ccb695715071a0cf28c33890a224a409d23","user":{"login":"TrimBiggs","id":1302077,"avatar_url":"https://avatars.githubusercontent.com/u/1302077?v=3","gravatar_id":"","url":"https://api.github.com/users/TrimBiggs","html_url":"https://github.com/TrimBiggs","followers_url":"https://api.github.com/users/TrimBiggs/followers","following_url":"https://api.github.com/users/TrimBiggs/following{/other_user}","gists_url":"https://api.github.com/users/TrimBiggs/gists{/gist_id}","starred_url":"https://api.github.com/users/TrimBiggs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/TrimBiggs/subscriptions","organizations_url":"https://api.github.com/users/TrimBiggs/orgs","repos_url":"https://api.github.com/users/TrimBiggs/repos","events_url":"https://api.github.com/users/TrimBiggs/events{/privacy}","received_events_url":"https://api.github.com/users/TrimBiggs/received_events","type":"User","site_admin":false},"body":"This looks good","created_at":"2015-07-22T22:24:09Z","updated_at":"2015-07-22T22:24:09Z","html_url":"https://github.com/Metaswitch/calico-docker/pull/352#discussion_r35271662","pull_request_url":"https://api.github.com/repos/Metaswitch/calico-docker/pulls/352","_links":{"self":{"href":"https://api.github.com/repos/Metaswitch/calico-docker/pulls/comments/35271662"},"html":{"href":"https://github.com/Metaswitch/calico-docker/pull/352#discussion_r35271662"},"pull_request":{"href":"https://api.github.com/repos/Metaswitch/calico-docker/pulls/352"}}},"pull_request":{"url":"https://api.github.com/repos/Metaswitch/calico-docker/pulls/352","id":40508282,"html_url":"https://github.com/Metaswitch/calico-docker/pull/352","diff_url":"https://github.com/Metaswitch/calico-docker/pull/352.diff","patch_url":"https://github.com/Metaswitch/calico-docker/pull/352.patch","issue_url":"https://api.github.com/repos/Metaswitch/calico-docker/issues/352","number":352,"state":"open","locked":false,"title":"Tests for node methods in calico_ctl node","user":{"login":"L-MA","id":9704719,"avatar_url":"https://avatars.githubusercontent.com/u/9704719?v=3","gravatar_id":"","url":"https://api.github.com/users/L-MA","html_url":"https://github.com/L-MA","followers_url":"https://api.github.com/users/L-MA/followers","following_url":"https://api.github.com/users/L-MA/following{/other_user}","gists_url":"https://api.github.com/users/L-MA/gists{/gist_id}","starred_url":"https://api.github.com/users/L-MA/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/L-MA/subscriptions","organizations_url":"https://api.github.com/users/L-MA/orgs","repos_url":"https://api.github.com/users/L-MA/repos","events_url":"https://api.github.com/users/L-MA/events{/privacy}","received_events_url":"https://api.github.com/users/L-MA/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-07-21T21:43:04Z","updated_at":"2015-07-22T22:24:09Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7f8d65efa18501ff87ec8e49e205999f7ea5a88f","assignee":{"login":"TrimBiggs","id":1302077,"avatar_url":"https://avatars.githubusercontent.com/u/1302077?v=3","gravatar_id":"","url":"https://api.github.com/users/TrimBiggs","html_url":"https://github.com/TrimBiggs","followers_url":"https://api.github.com/users/TrimBiggs/followers","following_url":"https://api.github.com/users/TrimBiggs/following{/other_user}","gists_url":"https://api.github.com/users/TrimBiggs/gists{/gist_id}","starred_url":"https://api.github.com/users/TrimBiggs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/TrimBiggs/subscriptions","organizations_url":"https://api.github.com/users/TrimBiggs/orgs","repos_url":"https://api.github.com/users/TrimBiggs/repos","events_url":"https://api.github.com/users/TrimBiggs/events{/privacy}","received_events_url":"https://api.github.com/users/TrimBiggs/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/Metaswitch/calico-docker/pulls/352/commits","review_comments_url":"https://api.github.com/repos/Metaswitch/calico-docker/pulls/352/comments","review_comment_url":"https://api.github.com/repos/Metaswitch/calico-docker/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Metaswitch/calico-docker/issues/352/comments","statuses_url":"https://api.github.com/repos/Metaswitch/calico-docker/statuses/7ee81ccb695715071a0cf28c33890a224a409d23","head":{"label":"L-MA:lma_calicoctl_node_ut","ref":"lma_calicoctl_node_ut","sha":"7ee81ccb695715071a0cf28c33890a224a409d23","user":{"login":"L-MA","id":9704719,"avatar_url":"https://avatars.githubusercontent.com/u/9704719?v=3","gravatar_id":"","url":"https://api.github.com/users/L-MA","html_url":"https://github.com/L-MA","followers_url":"https://api.github.com/users/L-MA/followers","following_url":"https://api.github.com/users/L-MA/following{/other_user}","gists_url":"https://api.github.com/users/L-MA/gists{/gist_id}","starred_url":"https://api.github.com/users/L-MA/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/L-MA/subscriptions","organizations_url":"https://api.github.com/users/L-MA/orgs","repos_url":"https://api.github.com/users/L-MA/repos","events_url":"https://api.github.com/users/L-MA/events{/privacy}","received_events_url":"https://api.github.com/users/L-MA/received_events","type":"User","site_admin":false},"repo":{"id":38708448,"name":"calico-docker","full_name":"L-MA/calico-docker","owner":{"login":"L-MA","id":9704719,"avatar_url":"https://avatars.githubusercontent.com/u/9704719?v=3","gravatar_id":"","url":"https://api.github.com/users/L-MA","html_url":"https://github.com/L-MA","followers_url":"https://api.github.com/users/L-MA/followers","following_url":"https://api.github.com/users/L-MA/following{/other_user}","gists_url":"https://api.github.com/users/L-MA/gists{/gist_id}","starred_url":"https://api.github.com/users/L-MA/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/L-MA/subscriptions","organizations_url":"https://api.github.com/users/L-MA/orgs","repos_url":"https://api.github.com/users/L-MA/repos","events_url":"https://api.github.com/users/L-MA/events{/privacy}","received_events_url":"https://api.github.com/users/L-MA/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/L-MA/calico-docker","description":"Docker version of Project Calico","fork":true,"url":"https://api.github.com/repos/L-MA/calico-docker","forks_url":"https://api.github.com/repos/L-MA/calico-docker/forks","keys_url":"https://api.github.com/repos/L-MA/calico-docker/keys{/key_id}","collaborators_url":"https://api.github.com/repos/L-MA/calico-docker/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/L-MA/calico-docker/teams","hooks_url":"https://api.github.com/repos/L-MA/calico-docker/hooks","issue_events_url":"https://api.github.com/repos/L-MA/calico-docker/issues/events{/number}","events_url":"https://api.github.com/repos/L-MA/calico-docker/events","assignees_url":"https://api.github.com/repos/L-MA/calico-docker/assignees{/user}","branches_url":"https://api.github.com/repos/L-MA/calico-docker/branches{/branch}","tags_url":"https://api.github.com/repos/L-MA/calico-docker/tags","blobs_url":"https://api.github.com/repos/L-MA/calico-docker/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/L-MA/calico-docker/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/L-MA/calico-docker/git/refs{/sha}","trees_url":"https://api.github.com/repos/L-MA/calico-docker/git/trees{/sha}","statuses_url":"https://api.github.com/repos/L-MA/calico-docker/statuses/{sha}","languages_url":"https://api.github.com/repos/L-MA/calico-docker/languages","stargazers_url":"https://api.github.com/repos/L-MA/calico-docker/stargazers","contributors_url":"https://api.github.com/repos/L-MA/calico-docker/contributors","subscribers_url":"https://api.github.com/repos/L-MA/calico-docker/subscribers","subscription_url":"https://api.github.com/repos/L-MA/calico-docker/subscription","commits_url":"https://api.github.com/repos/L-MA/calico-docker/commits{/sha}","git_commits_url":"https://api.github.com/repos/L-MA/calico-docker/git/commits{/sha}","comments_url":"https://api.github.com/repos/L-MA/calico-docker/comments{/number}","issue_comment_url":"https://api.github.com/repos/L-MA/calico-docker/issues/comments{/number}","contents_url":"https://api.github.com/repos/L-MA/calico-docker/contents/{+path}","compare_url":"https://api.github.com/repos/L-MA/calico-docker/compare/{base}...{head}","merges_url":"https://api.github.com/repos/L-MA/calico-docker/merges","archive_url":"https://api.github.com/repos/L-MA/calico-docker/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/L-MA/calico-docker/downloads","issues_url":"https://api.github.com/repos/L-MA/calico-docker/issues{/number}","pulls_url":"https://api.github.com/repos/L-MA/calico-docker/pulls{/number}","milestones_url":"https://api.github.com/repos/L-MA/calico-docker/milestones{/number}","notifications_url":"https://api.github.com/repos/L-MA/calico-docker/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/L-MA/calico-docker/labels{/name}","releases_url":"https://api.github.com/repos/L-MA/calico-docker/releases{/id}","created_at":"2015-07-07T18:57:37Z","updated_at":"2015-07-07T18:57:37Z","pushed_at":"2015-07-22T22:08:13Z","git_url":"git://github.com/L-MA/calico-docker.git","ssh_url":"git@github.com:L-MA/calico-docker.git","clone_url":"https://github.com/L-MA/calico-docker.git","svn_url":"https://github.com/L-MA/calico-docker","homepage":"http://www.projectcalico.org","size":13289,"stargazers_count":0,"watchers_count":0,"language":"Python","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":0,"default_branch":"master"}},"base":{"label":"Metaswitch:master","ref":"master","sha":"d205e738f45f81ddf9c22727e76f7dee4521e55e","user":{"login":"Metaswitch","id":453759,"avatar_url":"https://avatars.githubusercontent.com/u/453759?v=3","gravatar_id":"","url":"https://api.github.com/users/Metaswitch","html_url":"https://github.com/Metaswitch","followers_url":"https://api.github.com/users/Metaswitch/followers","following_url":"https://api.github.com/users/Metaswitch/following{/other_user}","gists_url":"https://api.github.com/users/Metaswitch/gists{/gist_id}","starred_url":"https://api.github.com/users/Metaswitch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Metaswitch/subscriptions","organizations_url":"https://api.github.com/users/Metaswitch/orgs","repos_url":"https://api.github.com/users/Metaswitch/repos","events_url":"https://api.github.com/users/Metaswitch/events{/privacy}","received_events_url":"https://api.github.com/users/Metaswitch/received_events","type":"Organization","site_admin":false},"repo":{"id":29629333,"name":"calico-docker","full_name":"Metaswitch/calico-docker","owner":{"login":"Metaswitch","id":453759,"avatar_url":"https://avatars.githubusercontent.com/u/453759?v=3","gravatar_id":"","url":"https://api.github.com/users/Metaswitch","html_url":"https://github.com/Metaswitch","followers_url":"https://api.github.com/users/Metaswitch/followers","following_url":"https://api.github.com/users/Metaswitch/following{/other_user}","gists_url":"https://api.github.com/users/Metaswitch/gists{/gist_id}","starred_url":"https://api.github.com/users/Metaswitch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Metaswitch/subscriptions","organizations_url":"https://api.github.com/users/Metaswitch/orgs","repos_url":"https://api.github.com/users/Metaswitch/repos","events_url":"https://api.github.com/users/Metaswitch/events{/privacy}","received_events_url":"https://api.github.com/users/Metaswitch/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Metaswitch/calico-docker","description":"Docker version of Project Calico","fork":false,"url":"https://api.github.com/repos/Metaswitch/calico-docker","forks_url":"https://api.github.com/repos/Metaswitch/calico-docker/forks","keys_url":"https://api.github.com/repos/Metaswitch/calico-docker/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Metaswitch/calico-docker/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Metaswitch/calico-docker/teams","hooks_url":"https://api.github.com/repos/Metaswitch/calico-docker/hooks","issue_events_url":"https://api.github.com/repos/Metaswitch/calico-docker/issues/events{/number}","events_url":"https://api.github.com/repos/Metaswitch/calico-docker/events","assignees_url":"https://api.github.com/repos/Metaswitch/calico-docker/assignees{/user}","branches_url":"https://api.github.com/repos/Metaswitch/calico-docker/branches{/branch}","tags_url":"https://api.github.com/repos/Metaswitch/calico-docker/tags","blobs_url":"https://api.github.com/repos/Metaswitch/calico-docker/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Metaswitch/calico-docker/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Metaswitch/calico-docker/git/refs{/sha}","trees_url":"https://api.github.com/repos/Metaswitch/calico-docker/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Metaswitch/calico-docker/statuses/{sha}","languages_url":"https://api.github.com/repos/Metaswitch/calico-docker/languages","stargazers_url":"https://api.github.com/repos/Metaswitch/calico-docker/stargazers","contributors_url":"https://api.github.com/repos/Metaswitch/calico-docker/contributors","subscribers_url":"https://api.github.com/repos/Metaswitch/calico-docker/subscribers","subscription_url":"https://api.github.com/repos/Metaswitch/calico-docker/subscription","commits_url":"https://api.github.com/repos/Metaswitch/calico-docker/commits{/sha}","git_commits_url":"https://api.github.com/repos/Metaswitch/calico-docker/git/commits{/sha}","comments_url":"https://api.github.com/repos/Metaswitch/calico-docker/comments{/number}","issue_comment_url":"https://api.github.com/repos/Metaswitch/calico-docker/issues/comments{/number}","contents_url":"https://api.github.com/repos/Metaswitch/calico-docker/contents/{+path}","compare_url":"https://api.github.com/repos/Metaswitch/calico-docker/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Metaswitch/calico-docker/merges","archive_url":"https://api.github.com/repos/Metaswitch/calico-docker/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Metaswitch/calico-docker/downloads","issues_url":"https://api.github.com/repos/Metaswitch/calico-docker/issues{/number}","pulls_url":"https://api.github.com/repos/Metaswitch/calico-docker/pulls{/number}","milestones_url":"https://api.github.com/repos/Metaswitch/calico-docker/milestones{/number}","notifications_url":"https://api.github.com/repos/Metaswitch/calico-docker/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Metaswitch/calico-docker/labels{/name}","releases_url":"https://api.github.com/repos/Metaswitch/calico-docker/releases{/id}","created_at":"2015-01-21T23:46:47Z","updated_at":"2015-07-22T20:47:45Z","pushed_at":"2015-07-22T22:08:14Z","git_url":"git://github.com/Metaswitch/calico-docker.git","ssh_url":"git@github.com:Metaswitch/calico-docker.git","clone_url":"https://github.com/Metaswitch/calico-docker.git","svn_url":"https://github.com/Metaswitch/calico-docker","homepage":"http://www.projectcalico.org","size":16752,"stargazers_count":101,"watchers_count":101,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":19,"mirror_url":null,"open_issues_count":17,"forks":19,"open_issues":17,"watchers":101,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Metaswitch/calico-docker/pulls/352"},"html":{"href":"https://github.com/Metaswitch/calico-docker/pull/352"},"issue":{"href":"https://api.github.com/repos/Metaswitch/calico-docker/issues/352"},"comments":{"href":"https://api.github.com/repos/Metaswitch/calico-docker/issues/352/comments"},"review_comments":{"href":"https://api.github.com/repos/Metaswitch/calico-docker/pulls/352/comments"},"review_comment":{"href":"https://api.github.com/repos/Metaswitch/calico-docker/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Metaswitch/calico-docker/pulls/352/commits"},"statuses":{"href":"https://api.github.com/repos/Metaswitch/calico-docker/statuses/7ee81ccb695715071a0cf28c33890a224a409d23"}}}}