{"action":"created","comment":{"url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/pulls/comments/28102489","id":28102489,"diff_hunk":"@@ -0,0 +1,317 @@\n+/*\n+ * Licensed to the Apache Software Foundation (ASF) under one or more\n+ * contributor license agreements.  See the NOTICE file distributed with\n+ * this work for additional information regarding copyright ownership.\n+ * The ASF licenses this file to You under the Apache License, Version 2.0\n+ * (the \"License\"); you may not use this file except in compliance with\n+ * the License.  You may obtain a copy of the License at\n+ *\n+ *     http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+package org.jclouds.openstack.heat.v1.features;\n+\n+import com.squareup.okhttp.mockwebserver.MockResponse;\n+import com.squareup.okhttp.mockwebserver.MockWebServer;\n+import org.jclouds.openstack.heat.v1.HeatApi;\n+import org.jclouds.openstack.heat.v1.domain.Stack;\n+import org.jclouds.openstack.heat.v1.domain.StackResource;\n+import org.jclouds.openstack.heat.v1.internal.BaseHeatApiMockTest;\n+import org.jclouds.openstack.heat.v1.options.CreateStackOptions;\n+import org.jclouds.openstack.heat.v1.options.UpdateStackOptions;\n+import org.testng.annotations.Test;\n+\n+import java.io.IOException;\n+import java.lang.reflect.Method;\n+import java.util.HashMap;\n+import java.util.List;\n+import java.util.Map;\n+\n+import static org.assertj.core.api.Assertions.assertThat;\n+import static org.testng.Assert.assertEquals;\n+import static org.testng.Assert.assertTrue;\n+\n+/**\n+ * Tests annotation parsing of {@code StackApi}\n+ */\n+@Test(groups = \"unit\", testName = \"StackApiMockTest\")\n+public class StackApiMockTest extends BaseHeatApiMockTest {\n+\n+   public static final String TEST_STACK_NAME = \"testStack\";\n+   public static final String TEST_STACK_ID = \"testStack\";\n+   public static final String RESOURCES_TEST_NAME = \"testResources\";\n+   public static final String TEST_STACK_RESOURCE_NAME = \"cinder_volume\";\n+\n+\n+   public void testGetAutoStack() throws Exception {\n+      MockWebServer server = mockOpenStackServer();\n+      server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource(\"/access.json\"))));\n+      server.enqueue(addCommonHeaders(\n+            new MockResponse().setResponseCode(200).setBody(stringFromResource(\"/stack_get_response.json\"))));\n+\n+      try {\n+         HeatApi heatApi = api(server.getUrl(\"/\").toString(), \"openstack-heat\", overrides);\n+         StackApi api = heatApi.getStackApi(\"RegionOne\");\n+\n+         Stack stack = api.get(\"simple_stack\", \"3095aefc-09fb-4bc7-b1f0-f21a304e864c\");\n+         System.out.println(stack);\n+\n+         Method[] methods = stack.getClass().getDeclaredMethods();\n+         for (Method m : methods) {\n+            System.out.println(m.getName());\n+         }\n+         assertThat(server.getRequestCount()).isEqualTo(2);\n+         assertAuthentication(server);\n+         assertRequest(server.takeRequest(), \"GET\", BASE_URI + \"/stacks/simple_stack/3095aefc-09fb-4bc7-b1f0-f21a304e864c\");\n+\n+\n+         assertThat(stack).isNotNull();\n+      } finally {\n+         server.shutdown();\n+      }\n+   }\n+\n+   public void testList() throws Exception {\n+      MockWebServer server = mockOpenStackServer();\n+      server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource(\"/access.json\"))));\n+      server.enqueue(addCommonHeaders(\n+            new MockResponse().setResponseCode(200).setBody(stringFromResource(\"/stack_list_response.json\"))));\n+\n+      try {\n+         HeatApi heatApi = api(server.getUrl(\"/\").toString(), \"openstack-heat\", overrides);\n+         StackApi api = heatApi.getStackApi(\"RegionOne\");\n+\n+         List<Stack> stacks = api.list().toList();\n+\n+         /*\n+          * Check request\n+          */\n+         assertThat(server.getRequestCount()).isEqualTo(2);\n+         assertAuthentication(server);\n+         assertRequest(server.takeRequest(), \"GET\", BASE_URI + \"/stacks\");\n+\n+         /*\n+          * Check response\n+          */\n+         assertThat(stacks).isNotEmpty();\n+         assertThat(stacks.size()).isEqualTo(1);\n+\n+      } finally {\n+         server.shutdown();\n+      }\n+   }\n+\n+   public void testListResource() throws Exception {\n+      MockWebServer server = mockOpenStackServer();\n+      server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource(\"/access.json\"))));\n+      server.enqueue(addCommonHeaders(\n+            new MockResponse().setResponseCode(200).setBody(stringFromResource(\"/stack_resources_list_response.json\"))));\n+\n+      try {\n+         HeatApi heatApi = api(server.getUrl(\"/\").toString(), \"openstack-heat\", overrides);\n+         StackApi api = heatApi.getStackApi(\"RegionOne\");\n+\n+         List<StackResource> stackResources = api.listStackResources(TEST_STACK_NAME, TEST_STACK_ID).toList();\n+\n+         /*\n+          * Check request\n+          */\n+         assertThat(server.getRequestCount()).isEqualTo(2);\n+         assertAuthentication(server);\n+         assertRequest(server.takeRequest(), \"GET\", BASE_URI + \"/stacks/\" + TEST_STACK_NAME + \"/\" + TEST_STACK_ID + \"/resources\");\n+\n+         /*\n+          * Check response\n+          */\n+         assertThat(stackResources).isNotEmpty();\n+         assertThat(stackResources.size()).isEqualTo(1);\n+\n+      } finally {\n+         server.shutdown();\n+      }\n+   }\n+\n+   public void testGetResource() throws Exception {\n+      MockWebServer server = mockOpenStackServer();\n+      server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource(\"/access.json\"))));\n+      server.enqueue(addCommonHeaders(\n+            new MockResponse().setResponseCode(200).setBody(stringFromResource(\"/stack_resources_get_response.json\"))));\n+\n+      try {\n+         HeatApi heatApi = api(server.getUrl(\"/\").toString(), \"openstack-heat\", overrides);\n+         StackApi api = heatApi.getStackApi(\"RegionOne\");\n+\n+         StackResource stackResource = api.getStackResource(TEST_STACK_NAME, TEST_STACK_ID, TEST_STACK_RESOURCE_NAME);\n+\n+         /*\n+          * Check request\n+          */\n+         assertThat(server.getRequestCount()).isEqualTo(2);\n+         assertAuthentication(server);\n+         assertRequest(server.takeRequest(), \"GET\", BASE_URI + \"/stacks/\" + TEST_STACK_NAME + \"/\" + TEST_STACK_ID + \"/resources/\" + TEST_STACK_RESOURCE_NAME);\n+\n+         /*\n+          * Check response\n+          */\n+         assertThat(stackResource).isNotNull();\n+         assertThat(stackResource.getName()).isNotNull();\n+         assertThat(stackResource.getName()).isNotEmpty();\n+         assertThat(stackResource.getLogicalResourceId()).isNotNull();\n+         assertThat(stackResource.getLogicalResourceId()).isNotEmpty();\n+         assertThat(stackResource.getPhysicalResourceId()).isNotNull();\n+         assertThat(stackResource.getPhysicalResourceId()).isNotEmpty();\n+\n+      } finally {\n+         server.shutdown();\n+      }\n+   }\n+\n+   public void testListIsEmpty() throws Exception {\n+      MockWebServer server = mockOpenStackServer();\n+      server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource(\"/access.json\"))));\n+      server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));\n+\n+      try {\n+         HeatApi heatApi = api(server.getUrl(\"/\").toString(), \"openstack-heat\", overrides);\n+         StackApi api = heatApi.getStackApi(\"RegionOne\");\n+\n+         List<Stack> stacks = api.list().toList();\n+\n+         /*\n+          * Check request\n+          */\n+         assertThat(server.getRequestCount()).isEqualTo(2);\n+         assertAuthentication(server);\n+         assertRequest(server.takeRequest(), \"GET\", BASE_URI + \"/stacks\");\n+\n+         /*\n+          * Check response\n+          */\n+         assertThat(stacks).isEmpty();\n+      } finally {\n+         server.shutdown();\n+      }\n+   }\n+\n+   public void testCreateWithTemplateUrl() throws Exception {\n+      MockWebServer server = mockOpenStackServer();\n+      server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource(\"/access.json\"))));\n+      server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource(\"/create_stack.json\"))));\n+\n+      try {\n+         HeatApi heatApi = api(server.getUrl(\"/\").toString(), \"openstack-heat\", overrides);\n+         StackApi api = heatApi.getStackApi(\"RegionOne\");\n+\n+         Map<String, String> parameters = new HashMap<String, String>();\n+         parameters.put(\"key_name\", \"myKey\");\n+         parameters.put(\"image_id\", \"3b7be1fa-d381-4067-bb81-e835df630564\");\n+         parameters.put(\"instance_type\", \"SMALL_1\");\n+         CreateStackOptions createStackOptions = CreateStackOptions.Builder.templateUrl(\"http://10.5.5.121/Installs/cPaaS/YAML/simple_stack.yaml\");\n+         Stack stack = api.create(TEST_STACK_NAME, createStackOptions);\n+\n+         /*\n+          * Check request\n+          */\n+         assertThat(server.getRequestCount()).isEqualTo(2);\n+         assertAuthentication(server);\n+         assertRequest(server.takeRequest(), \"POST\", BASE_URI + \"/stacks\");\n+\n+         /*\n+          * Check response\n+          */\n+         assertThat(stack).isNotNull();\n+         assertThat(stack.getId()).isEqualTo(\"3095aefc-09fb-4bc7-b1f0-f21a304e864c\");\n+\n+      } finally {\n+         server.shutdown();\n+      }\n+   }\n+\n+   public void testDeleteStack() throws IOException, InterruptedException {\n+      MockWebServer server = mockOpenStackServer();\n+      server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource(\"/access.json\"))));\n+      server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200)));\n+\n+      try {\n+         HeatApi heatApi = api(server.getUrl(\"/\").toString(), \"openstack-heat\", overrides);\n+         StackApi api = heatApi.getStackApi(\"RegionOne\");\n+\n+         boolean result = api.delete(TEST_STACK_NAME, TEST_STACK_ID);\n+\n+         /*\n+          * Check request\n+          */\n+         assertEquals(server.getRequestCount(), 2);\n+         assertAuthentication(server);\n+         assertRequest(server.takeRequest(), \"DELETE\", BASE_URI + \"/stacks/\" + TEST_STACK_NAME + \"/\" + TEST_STACK_ID);\n+\n+         /*\n+          * Check response\n+          */\n+         assertTrue(result);\n+      } finally {\n+         server.shutdown();\n+      }\n+   }\n+\n+   public void testUpdateStack() throws IOException, InterruptedException {\n+      MockWebServer server = mockOpenStackServer();\n+      server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource(\"/access.json\"))));\n+      server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(202)));\n+\n+      try {\n+         HeatApi heatApi = api(server.getUrl(\"/\").toString(), \"openstack-heat\", overrides);\n+         StackApi api = heatApi.getStackApi(\"RegionOne\");\n+\n+         UpdateStackOptions updateOptions = UpdateStackOptions.Builder.templateUrl(\"http://10.5.5.121/Installs/cPaaS/YAML/simple_stack.yaml\");\n+\n+         boolean result = api.update(TEST_STACK_NAME, TEST_STACK_ID, updateOptions);\n+\n+         /*\n+          * Check request\n+          */\n+         assertEquals(server.getRequestCount(), 2);\n+         assertAuthentication(server);\n+         assertRequest(server.takeRequest(), \"PUT\", BASE_URI + \"/stacks/\" + TEST_STACK_NAME + \"/\" + TEST_STACK_ID);\n+\n+         /*\n+          * Check response\n+          */\n+         assertTrue(result);\n+      } finally {\n+         server.shutdown();\n+      }\n+   }\n+\n+   public void testResourcesMetadata() throws IOException, InterruptedException {\n+      MockWebServer server = mockOpenStackServer();\n+      server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource(\"/access.json\"))));\n+      server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(stringFromResource(\"/resources_metadata.json\"))));\n+\n+      try {\n+         HeatApi heatApi = api(server.getUrl(\"/\").toString(), \"openstack-heat\", overrides);\n+         StackApi api = heatApi.getStackApi(\"RegionOne\");\n+\n+         Map<String, Object> metadata = api.getStackResourceMetadata(TEST_STACK_NAME, TEST_STACK_ID, RESOURCES_TEST_NAME);\n+\n+         /*\n+          * Check request\n+          */\n+         assertEquals(server.getRequestCount(), 2);\n+         assertAuthentication(server);\n+         assertRequest(server.takeRequest(), \"GET\", BASE_URI + \"/stacks/\" + TEST_STACK_NAME + \"/\" + TEST_STACK_ID + \"/resources/\" + RESOURCES_TEST_NAME + \"/metadata\");\n+         assertThat(metadata).isNotEmpty();\n+\n+\n+      } finally {\n+         server.shutdown();\n+      }\n+   }\n+}\n+\n+","path":"openstack-heat/src/test/java/org/jclouds/openstack/heat/v1/features/StackApiMockTest.java","position":317,"original_position":317,"commit_id":"21f2d7e6b1b856d94e6ef3a646b8e3ac0d9b01e3","original_commit_id":"21f2d7e6b1b856d94e6ef3a646b8e3ac0d9b01e3","user":{"login":"zack-shoylev","id":3600302,"avatar_url":"https://avatars.githubusercontent.com/u/3600302?v=3","gravatar_id":"","url":"https://api.github.com/users/zack-shoylev","html_url":"https://github.com/zack-shoylev","followers_url":"https://api.github.com/users/zack-shoylev/followers","following_url":"https://api.github.com/users/zack-shoylev/following{/other_user}","gists_url":"https://api.github.com/users/zack-shoylev/gists{/gist_id}","starred_url":"https://api.github.com/users/zack-shoylev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zack-shoylev/subscriptions","organizations_url":"https://api.github.com/users/zack-shoylev/orgs","repos_url":"https://api.github.com/users/zack-shoylev/repos","events_url":"https://api.github.com/users/zack-shoylev/events{/privacy}","received_events_url":"https://api.github.com/users/zack-shoylev/received_events","type":"User","site_admin":false},"body":"extra newlines?","created_at":"2015-04-09T21:04:04Z","updated_at":"2015-04-09T21:04:04Z","html_url":"https://github.com/jclouds/jclouds-labs-openstack/pull/188#discussion_r28102489","pull_request_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/pulls/188","_links":{"self":{"href":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/pulls/comments/28102489"},"html":{"href":"https://github.com/jclouds/jclouds-labs-openstack/pull/188#discussion_r28102489"},"pull_request":{"href":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/pulls/188"}}},"pull_request":{"url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/pulls/188","id":32836728,"html_url":"https://github.com/jclouds/jclouds-labs-openstack/pull/188","diff_url":"https://github.com/jclouds/jclouds-labs-openstack/pull/188.diff","patch_url":"https://github.com/jclouds/jclouds-labs-openstack/pull/188.patch","issue_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/issues/188","number":188,"state":"open","locked":false,"title":"adding: StackApi, Stack and StackResource","user":{"login":"limorbortman","id":2089584,"avatar_url":"https://avatars.githubusercontent.com/u/2089584?v=3","gravatar_id":"","url":"https://api.github.com/users/limorbortman","html_url":"https://github.com/limorbortman","followers_url":"https://api.github.com/users/limorbortman/followers","following_url":"https://api.github.com/users/limorbortman/following{/other_user}","gists_url":"https://api.github.com/users/limorbortman/gists{/gist_id}","starred_url":"https://api.github.com/users/limorbortman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/limorbortman/subscriptions","organizations_url":"https://api.github.com/users/limorbortman/orgs","repos_url":"https://api.github.com/users/limorbortman/repos","events_url":"https://api.github.com/users/limorbortman/events{/privacy}","received_events_url":"https://api.github.com/users/limorbortman/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-04-08T08:07:17Z","updated_at":"2015-04-09T21:04:04Z","closed_at":null,"merged_at":null,"merge_commit_sha":"846b6b3dedf7fc30b7b8c7214b4d5e9df9585d36","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/pulls/188/commits","review_comments_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/pulls/188/comments","review_comment_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/pulls/comments{/number}","comments_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/issues/188/comments","statuses_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/statuses/21f2d7e6b1b856d94e6ef3a646b8e3ac0d9b01e3","head":{"label":"limorbortman:adding_heat","ref":"adding_heat","sha":"21f2d7e6b1b856d94e6ef3a646b8e3ac0d9b01e3","user":{"login":"limorbortman","id":2089584,"avatar_url":"https://avatars.githubusercontent.com/u/2089584?v=3","gravatar_id":"","url":"https://api.github.com/users/limorbortman","html_url":"https://github.com/limorbortman","followers_url":"https://api.github.com/users/limorbortman/followers","following_url":"https://api.github.com/users/limorbortman/following{/other_user}","gists_url":"https://api.github.com/users/limorbortman/gists{/gist_id}","starred_url":"https://api.github.com/users/limorbortman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/limorbortman/subscriptions","organizations_url":"https://api.github.com/users/limorbortman/orgs","repos_url":"https://api.github.com/users/limorbortman/repos","events_url":"https://api.github.com/users/limorbortman/events{/privacy}","received_events_url":"https://api.github.com/users/limorbortman/received_events","type":"User","site_admin":false},"repo":{"id":30344032,"name":"jclouds-labs-openstack","full_name":"limorbortman/jclouds-labs-openstack","owner":{"login":"limorbortman","id":2089584,"avatar_url":"https://avatars.githubusercontent.com/u/2089584?v=3","gravatar_id":"","url":"https://api.github.com/users/limorbortman","html_url":"https://github.com/limorbortman","followers_url":"https://api.github.com/users/limorbortman/followers","following_url":"https://api.github.com/users/limorbortman/following{/other_user}","gists_url":"https://api.github.com/users/limorbortman/gists{/gist_id}","starred_url":"https://api.github.com/users/limorbortman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/limorbortman/subscriptions","organizations_url":"https://api.github.com/users/limorbortman/orgs","repos_url":"https://api.github.com/users/limorbortman/repos","events_url":"https://api.github.com/users/limorbortman/events{/privacy}","received_events_url":"https://api.github.com/users/limorbortman/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/limorbortman/jclouds-labs-openstack","description":"Read-only mirror of ASF Git Repo for jclouds labs-openstack. Although this is a \"labs\" repository, some of the providers and APIs here are production ready. Please review the table below or the README in each sub-directory to determine if the provider or API is production ready.","fork":true,"url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack","forks_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/forks","keys_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/keys{/key_id}","collaborators_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/teams","hooks_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/hooks","issue_events_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/issues/events{/number}","events_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/events","assignees_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/assignees{/user}","branches_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/branches{/branch}","tags_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/tags","blobs_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/git/refs{/sha}","trees_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/git/trees{/sha}","statuses_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/statuses/{sha}","languages_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/languages","stargazers_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/stargazers","contributors_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/contributors","subscribers_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/subscribers","subscription_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/subscription","commits_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/commits{/sha}","git_commits_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/git/commits{/sha}","comments_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/comments{/number}","issue_comment_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/issues/comments{/number}","contents_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/contents/{+path}","compare_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/compare/{base}...{head}","merges_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/merges","archive_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/downloads","issues_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/issues{/number}","pulls_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/pulls{/number}","milestones_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/milestones{/number}","notifications_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/labels{/name}","releases_url":"https://api.github.com/repos/limorbortman/jclouds-labs-openstack/releases{/id}","created_at":"2015-02-05T07:45:01Z","updated_at":"2015-04-08T08:32:25Z","pushed_at":"2015-04-08T08:40:34Z","git_url":"git://github.com/limorbortman/jclouds-labs-openstack.git","ssh_url":"git@github.com:limorbortman/jclouds-labs-openstack.git","clone_url":"https://github.com/limorbortman/jclouds-labs-openstack.git","svn_url":"https://github.com/limorbortman/jclouds-labs-openstack","homepage":"","size":4372,"stargazers_count":0,"watchers_count":0,"language":"Java","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":"jclouds:master","ref":"master","sha":"e7d93f40689dc6b138e4d064254acf75fcb51e04","user":{"login":"jclouds","id":108982,"avatar_url":"https://avatars.githubusercontent.com/u/108982?v=3","gravatar_id":"","url":"https://api.github.com/users/jclouds","html_url":"https://github.com/jclouds","followers_url":"https://api.github.com/users/jclouds/followers","following_url":"https://api.github.com/users/jclouds/following{/other_user}","gists_url":"https://api.github.com/users/jclouds/gists{/gist_id}","starred_url":"https://api.github.com/users/jclouds/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jclouds/subscriptions","organizations_url":"https://api.github.com/users/jclouds/orgs","repos_url":"https://api.github.com/users/jclouds/repos","events_url":"https://api.github.com/users/jclouds/events{/privacy}","received_events_url":"https://api.github.com/users/jclouds/received_events","type":"Organization","site_admin":false},"repo":{"id":10040986,"name":"jclouds-labs-openstack","full_name":"jclouds/jclouds-labs-openstack","owner":{"login":"jclouds","id":108982,"avatar_url":"https://avatars.githubusercontent.com/u/108982?v=3","gravatar_id":"","url":"https://api.github.com/users/jclouds","html_url":"https://github.com/jclouds","followers_url":"https://api.github.com/users/jclouds/followers","following_url":"https://api.github.com/users/jclouds/following{/other_user}","gists_url":"https://api.github.com/users/jclouds/gists{/gist_id}","starred_url":"https://api.github.com/users/jclouds/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jclouds/subscriptions","organizations_url":"https://api.github.com/users/jclouds/orgs","repos_url":"https://api.github.com/users/jclouds/repos","events_url":"https://api.github.com/users/jclouds/events{/privacy}","received_events_url":"https://api.github.com/users/jclouds/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/jclouds/jclouds-labs-openstack","description":"Read-only mirror of ASF Git Repo for jclouds labs-openstack. Although this is a \"labs\" repository, some of the providers and APIs here are production ready. Please review the table below or the README in each sub-directory to determine if the provider or API is production ready.","fork":false,"url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack","forks_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/forks","keys_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/teams","hooks_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/hooks","issue_events_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/issues/events{/number}","events_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/events","assignees_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/assignees{/user}","branches_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/branches{/branch}","tags_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/tags","blobs_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/git/refs{/sha}","trees_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/statuses/{sha}","languages_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/languages","stargazers_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/stargazers","contributors_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/contributors","subscribers_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/subscribers","subscription_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/subscription","commits_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/commits{/sha}","git_commits_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/git/commits{/sha}","comments_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/comments{/number}","issue_comment_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/issues/comments{/number}","contents_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/contents/{+path}","compare_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/merges","archive_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/downloads","issues_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/issues{/number}","pulls_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/pulls{/number}","milestones_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/milestones{/number}","notifications_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/labels{/name}","releases_url":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/releases{/id}","created_at":"2013-05-13T20:48:21Z","updated_at":"2015-04-09T20:02:08Z","pushed_at":"2015-04-09T20:02:07Z","git_url":"git://github.com/jclouds/jclouds-labs-openstack.git","ssh_url":"git@github.com:jclouds/jclouds-labs-openstack.git","clone_url":"https://github.com/jclouds/jclouds-labs-openstack.git","svn_url":"https://github.com/jclouds/jclouds-labs-openstack","homepage":"","size":4595,"stargazers_count":6,"watchers_count":6,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":35,"mirror_url":null,"open_issues_count":1,"forks":35,"open_issues":1,"watchers":6,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/pulls/188"},"html":{"href":"https://github.com/jclouds/jclouds-labs-openstack/pull/188"},"issue":{"href":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/issues/188"},"comments":{"href":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/issues/188/comments"},"review_comments":{"href":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/pulls/188/comments"},"review_comment":{"href":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/pulls/188/commits"},"statuses":{"href":"https://api.github.com/repos/jclouds/jclouds-labs-openstack/statuses/21f2d7e6b1b856d94e6ef3a646b8e3ac0d9b01e3"}}}}