{"action":"created","comment":{"url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments/53270274","id":53270274,"diff_hunk":"@@ -0,0 +1,170 @@\n+/*\n+Copyright 2015 The Kubernetes Authors All rights reserved.\n+\n+Licensed under the Apache License, Version 2.0 (the \"License\");\n+you may not use this file except in compliance with the License.\n+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+\n+package v1\n+\n+import (\n+\t\"k8s.io/kubernetes/pkg/api/unversioned\"\n+\t\"k8s.io/kubernetes/pkg/api/v1\"\n+)\n+\n+// Job represents the configuration of a single job.\n+type Job struct {\n+\tunversioned.TypeMeta `json:\",inline\"`\n+\t// Standard object's metadata.\n+\t// More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata\n+\tv1.ObjectMeta `json:\"metadata,omitempty\"`\n+\n+\t// Spec is a structure defining the expected behavior of a job.\n+\t// More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status\n+\tSpec JobSpec `json:\"spec,omitempty\"`\n+\n+\t// Status is a structure describing current status of a job.\n+\t// More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status\n+\tStatus JobStatus `json:\"status,omitempty\"`\n+}\n+\n+// JobList is a collection of jobs.\n+type JobList struct {\n+\tunversioned.TypeMeta `json:\",inline\"`\n+\t// Standard list metadata\n+\t// More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata\n+\tunversioned.ListMeta `json:\"metadata,omitempty\"`\n+\n+\t// Items is the list of Job.\n+\tItems []Job `json:\"items\"`\n+}\n+\n+// JobSpec describes how the job execution will look like.\n+type JobSpec struct {\n+\n+\t// Parallelism specifies the maximum desired number of pods the job should\n+\t// run at any given time. The actual number of pods running in steady state will\n+\t// be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism),\n+\t// i.e. when the work left to do is less than max parallelism.\n+\t// More info: http://releases.k8s.io/HEAD/docs/user-guide/jobs.md\n+\tParallelism *int32 `json:\"parallelism,omitempty\"`\n+\n+\t// Completions specifies the desired number of successfully finished pods the\n+\t// job should be run with.  Setting to nil means that the success of any\n+\t// pod signals the success of all pods, and allows parallelism to have any positive\n+\t// value.  Setting to 1 means that parallelism is limited to 1 and the success of that\n+\t// pod signals the success of the job.\n+\tCompletions *int32 `json:\"completions,omitempty\"`\n+\n+\t// Optional duration in seconds relative to the startTime that the job may be active\n+\t// before the system tries to terminate it; value must be positive integer\n+\tActiveDeadlineSeconds *int64 `json:\"activeDeadlineSeconds,omitempty\"`\n+\n+\t// Selector is a label query over pods that should match the pod count.\n+\t// More info: http://releases.k8s.io/HEAD/docs/user-guide/labels.md#label-selectors\n+\tSelector *LabelSelector `json:\"selector,omitempty\"`\n+\n+\t// Template is the object that describes the pod that will be created when\n+\t// executing a job.\n+\t// More info: http://releases.k8s.io/HEAD/docs/user-guide/jobs.md\n+\tTemplate v1.PodTemplateSpec `json:\"template\"`\n+}\n+\n+// JobStatus represents the current state of a Job.\n+type JobStatus struct {\n+\n+\t// Conditions represent the latest available observations of an object's current state.\n+\t// More info: http://releases.k8s.io/HEAD/docs/user-guide/jobs.md\n+\tConditions []JobCondition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\"`\n+\n+\t// StartTime represents time when the job was acknowledged by the Job Manager.\n+\t// It is not guaranteed to be set in happens-before order across separate operations.\n+\t// It is represented in RFC3339 form and is in UTC.\n+\tStartTime *unversioned.Time `json:\"startTime,omitempty\"`\n+\n+\t// CompletionTime represents time when the job was completed. It is not guaranteed to\n+\t// be set in happens-before order across separate operations.\n+\t// It is represented in RFC3339 form and is in UTC.\n+\tCompletionTime *unversioned.Time `json:\"completionTime,omitempty\"`\n+\n+\t// Active is the number of actively running pods.\n+\tActive int32 `json:\"active,omitempty\"`\n+\n+\t// Succeeded is the number of pods which reached Phase Succeeded.\n+\tSucceeded int32 `json:\"succeeded,omitempty\"`\n+\n+\t// Failed is the number of pods which reached Phase Failed.\n+\tFailed int32 `json:\"failed,omitempty\"`\n+}\n+\n+type JobConditionType string\n+\n+// These are valid conditions of a job.\n+const (\n+\t// JobComplete means the job has completed its execution.\n+\tJobComplete JobConditionType = \"Complete\"\n+\t// JobFailed means the job has failed its execution.\n+\tJobFailed JobConditionType = \"Failed\"\n+)\n+\n+// JobCondition describes current state of a job.\n+type JobCondition struct {\n+\t// Type of job condition, Complete or Failed.\n+\tType JobConditionType `json:\"type\"`\n+\t// Status of the condition, one of True, False, Unknown.\n+\tStatus v1.ConditionStatus `json:\"status\"`\n+\t// Last time the condition was checked.\n+\tLastProbeTime unversioned.Time `json:\"lastProbeTime,omitempty\"`\n+\t// Last time the condition transit from one status to another.\n+\tLastTransitionTime unversioned.Time `json:\"lastTransitionTime,omitempty\"`\n+\t// (brief) reason for the condition's last transition.\n+\tReason string `json:\"reason,omitempty\"`\n+\t// Human readable message indicating details about last transition.\n+\tMessage string `json:\"message,omitempty\"`\n+}\n+\n+// A label selector is a label query over a set of resources. The result of matchLabels and\n+// matchExpressions are ANDed. An empty label selector matches all objects. A null\n+// label selector matches no objects.\n+type LabelSelector struct {","path":"pkg/apis/batch/v1/types.go","position":138,"original_position":138,"commit_id":"af34de91599d385f623547bde2ae5fc6bcd02003","original_commit_id":"e06b4b2c5ae181a3dd0241ce5d1d85d9f7e31416","user":{"login":"bgrant0607","id":7725777,"avatar_url":"https://avatars.githubusercontent.com/u/7725777?v=3","gravatar_id":"","url":"https://api.github.com/users/bgrant0607","html_url":"https://github.com/bgrant0607","followers_url":"https://api.github.com/users/bgrant0607/followers","following_url":"https://api.github.com/users/bgrant0607/following{/other_user}","gists_url":"https://api.github.com/users/bgrant0607/gists{/gist_id}","starred_url":"https://api.github.com/users/bgrant0607/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bgrant0607/subscriptions","organizations_url":"https://api.github.com/users/bgrant0607/orgs","repos_url":"https://api.github.com/users/bgrant0607/repos","events_url":"https://api.github.com/users/bgrant0607/events{/privacy}","received_events_url":"https://api.github.com/users/bgrant0607/received_events","type":"User","site_admin":false},"body":"Go packages and type names aren't part of the API. They are implementation details that are subject to change. That is also true for our \"internal\", unversioned client library, and any libraries in our main repo.\r\n\r\n@lavalamp Will the generated versioned client be done in 1.2?\r\n\r\nLabelSelector is currently in unversioned.","created_at":"2016-02-18T04:26:20Z","updated_at":"2016-02-18T04:26:20Z","html_url":"https://github.com/kubernetes/kubernetes/pull/20551#discussion_r53270274","pull_request_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/20551","_links":{"self":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments/53270274"},"html":{"href":"https://github.com/kubernetes/kubernetes/pull/20551#discussion_r53270274"},"pull_request":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/20551"}}},"pull_request":{"url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/20551","id":58104174,"html_url":"https://github.com/kubernetes/kubernetes/pull/20551","diff_url":"https://github.com/kubernetes/kubernetes/pull/20551.diff","patch_url":"https://github.com/kubernetes/kubernetes/pull/20551.patch","issue_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/20551","number":20551,"state":"open","locked":false,"title":"WIP: move job to batch/v1","user":{"login":"erictune","id":8105590,"avatar_url":"https://avatars.githubusercontent.com/u/8105590?v=3","gravatar_id":"","url":"https://api.github.com/users/erictune","html_url":"https://github.com/erictune","followers_url":"https://api.github.com/users/erictune/followers","following_url":"https://api.github.com/users/erictune/following{/other_user}","gists_url":"https://api.github.com/users/erictune/gists{/gist_id}","starred_url":"https://api.github.com/users/erictune/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/erictune/subscriptions","organizations_url":"https://api.github.com/users/erictune/orgs","repos_url":"https://api.github.com/users/erictune/repos","events_url":"https://api.github.com/users/erictune/events{/privacy}","received_events_url":"https://api.github.com/users/erictune/received_events","type":"User","site_admin":false},"body":"I am trying to move job to batch/v1.\r\n\r\nMy goals are:\r\n\r\n1. keep supporting resource path like `/apis/extensions/v1beta1/.../jobs`\r\n2. new resource path like `/apis/batch/v1/.../jobs`\r\n3. both `/apis/extensions/v1/.../jobs/foo` and `/apis/batch/v1/.../jobs/foo` map to same etcd storage path, allowing easy upgrade and a single controller for both resources.\r\n4. There will be different validation and defaulting for the new path.\r\n5. Eventually, the old path will be deprecated.\r\n\r\nBecause of goal 3, there will only be 1 internal type for Job.\r\nIt can't live in two places.  So, I am trying to keep it in `pkg/apis/extensions` for now.\r\n\r\nMy overall plan is:\r\n\r\n1. define new serialized representation in `pkg/apis/batch/v1` and install it.  Not exposed by default yet.\r\n2. make changes to `pkg/apis/batch/v1` type and defaulting and validation.\r\n3. expose it by default.  Generate clients.\r\n4. Change controller and kubectl to use new path.\r\n\r\nI am working on step 1 right now, and getting stuck.\r\n\r\nI am stuck.\r\nI have defined the new serializable type in a new directory for the new group.\r\nI now need to generate deep copies and conversions.  I need to install the new serializeable type.\r\nI am not sure if I should have  new `pkg/apis/batch/install/install.go` for it, or edit `pkg/apis/extensions/install/install.go` to include a second API group and additional serializable version.\r\nAdvice wanted.\r\n\r\n","created_at":"2016-02-03T08:15:30Z","updated_at":"2016-02-18T04:26:20Z","closed_at":null,"merged_at":null,"merge_commit_sha":"2bb867dcd45d3d3adfdf1c73d7fb7035a4952ed9","assignee":{"login":"lavalamp","id":647318,"avatar_url":"https://avatars.githubusercontent.com/u/647318?v=3","gravatar_id":"","url":"https://api.github.com/users/lavalamp","html_url":"https://github.com/lavalamp","followers_url":"https://api.github.com/users/lavalamp/followers","following_url":"https://api.github.com/users/lavalamp/following{/other_user}","gists_url":"https://api.github.com/users/lavalamp/gists{/gist_id}","starred_url":"https://api.github.com/users/lavalamp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lavalamp/subscriptions","organizations_url":"https://api.github.com/users/lavalamp/orgs","repos_url":"https://api.github.com/users/lavalamp/repos","events_url":"https://api.github.com/users/lavalamp/events{/privacy}","received_events_url":"https://api.github.com/users/lavalamp/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/kubernetes/kubernetes/milestones/15","html_url":"https://github.com/kubernetes/kubernetes/milestones/v1.2","labels_url":"https://api.github.com/repos/kubernetes/kubernetes/milestones/15/labels","id":1278499,"number":15,"title":"v1.2","description":"https://github.com/kubernetes/kubernetes/wiki/Release-1.2","creator":{"login":"bgrant0607","id":7725777,"avatar_url":"https://avatars.githubusercontent.com/u/7725777?v=3","gravatar_id":"","url":"https://api.github.com/users/bgrant0607","html_url":"https://github.com/bgrant0607","followers_url":"https://api.github.com/users/bgrant0607/followers","following_url":"https://api.github.com/users/bgrant0607/following{/other_user}","gists_url":"https://api.github.com/users/bgrant0607/gists{/gist_id}","starred_url":"https://api.github.com/users/bgrant0607/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bgrant0607/subscriptions","organizations_url":"https://api.github.com/users/bgrant0607/orgs","repos_url":"https://api.github.com/users/bgrant0607/repos","events_url":"https://api.github.com/users/bgrant0607/events{/privacy}","received_events_url":"https://api.github.com/users/bgrant0607/received_events","type":"User","site_admin":false},"open_issues":165,"closed_issues":200,"state":"open","created_at":"2015-08-29T03:54:16Z","updated_at":"2016-02-18T01:41:22Z","due_on":"2016-03-07T08:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/20551/commits","review_comments_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/20551/comments","review_comment_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments{/number}","comments_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/20551/comments","statuses_url":"https://api.github.com/repos/kubernetes/kubernetes/statuses/af34de91599d385f623547bde2ae5fc6bcd02003","head":{"label":"erictune:jobv1-try3","ref":"jobv1-try3","sha":"af34de91599d385f623547bde2ae5fc6bcd02003","user":{"login":"erictune","id":8105590,"avatar_url":"https://avatars.githubusercontent.com/u/8105590?v=3","gravatar_id":"","url":"https://api.github.com/users/erictune","html_url":"https://github.com/erictune","followers_url":"https://api.github.com/users/erictune/followers","following_url":"https://api.github.com/users/erictune/following{/other_user}","gists_url":"https://api.github.com/users/erictune/gists{/gist_id}","starred_url":"https://api.github.com/users/erictune/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/erictune/subscriptions","organizations_url":"https://api.github.com/users/erictune/orgs","repos_url":"https://api.github.com/users/erictune/repos","events_url":"https://api.github.com/users/erictune/events{/privacy}","received_events_url":"https://api.github.com/users/erictune/received_events","type":"User","site_admin":false},"repo":{"id":21629362,"name":"kubernetes","full_name":"erictune/kubernetes","owner":{"login":"erictune","id":8105590,"avatar_url":"https://avatars.githubusercontent.com/u/8105590?v=3","gravatar_id":"","url":"https://api.github.com/users/erictune","html_url":"https://github.com/erictune","followers_url":"https://api.github.com/users/erictune/followers","following_url":"https://api.github.com/users/erictune/following{/other_user}","gists_url":"https://api.github.com/users/erictune/gists{/gist_id}","starred_url":"https://api.github.com/users/erictune/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/erictune/subscriptions","organizations_url":"https://api.github.com/users/erictune/orgs","repos_url":"https://api.github.com/users/erictune/repos","events_url":"https://api.github.com/users/erictune/events{/privacy}","received_events_url":"https://api.github.com/users/erictune/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/erictune/kubernetes","description":"Container Cluster Manager","fork":true,"url":"https://api.github.com/repos/erictune/kubernetes","forks_url":"https://api.github.com/repos/erictune/kubernetes/forks","keys_url":"https://api.github.com/repos/erictune/kubernetes/keys{/key_id}","collaborators_url":"https://api.github.com/repos/erictune/kubernetes/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/erictune/kubernetes/teams","hooks_url":"https://api.github.com/repos/erictune/kubernetes/hooks","issue_events_url":"https://api.github.com/repos/erictune/kubernetes/issues/events{/number}","events_url":"https://api.github.com/repos/erictune/kubernetes/events","assignees_url":"https://api.github.com/repos/erictune/kubernetes/assignees{/user}","branches_url":"https://api.github.com/repos/erictune/kubernetes/branches{/branch}","tags_url":"https://api.github.com/repos/erictune/kubernetes/tags","blobs_url":"https://api.github.com/repos/erictune/kubernetes/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/erictune/kubernetes/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/erictune/kubernetes/git/refs{/sha}","trees_url":"https://api.github.com/repos/erictune/kubernetes/git/trees{/sha}","statuses_url":"https://api.github.com/repos/erictune/kubernetes/statuses/{sha}","languages_url":"https://api.github.com/repos/erictune/kubernetes/languages","stargazers_url":"https://api.github.com/repos/erictune/kubernetes/stargazers","contributors_url":"https://api.github.com/repos/erictune/kubernetes/contributors","subscribers_url":"https://api.github.com/repos/erictune/kubernetes/subscribers","subscription_url":"https://api.github.com/repos/erictune/kubernetes/subscription","commits_url":"https://api.github.com/repos/erictune/kubernetes/commits{/sha}","git_commits_url":"https://api.github.com/repos/erictune/kubernetes/git/commits{/sha}","comments_url":"https://api.github.com/repos/erictune/kubernetes/comments{/number}","issue_comment_url":"https://api.github.com/repos/erictune/kubernetes/issues/comments{/number}","contents_url":"https://api.github.com/repos/erictune/kubernetes/contents/{+path}","compare_url":"https://api.github.com/repos/erictune/kubernetes/compare/{base}...{head}","merges_url":"https://api.github.com/repos/erictune/kubernetes/merges","archive_url":"https://api.github.com/repos/erictune/kubernetes/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/erictune/kubernetes/downloads","issues_url":"https://api.github.com/repos/erictune/kubernetes/issues{/number}","pulls_url":"https://api.github.com/repos/erictune/kubernetes/pulls{/number}","milestones_url":"https://api.github.com/repos/erictune/kubernetes/milestones{/number}","notifications_url":"https://api.github.com/repos/erictune/kubernetes/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/erictune/kubernetes/labels{/name}","releases_url":"https://api.github.com/repos/erictune/kubernetes/releases{/id}","deployments_url":"https://api.github.com/repos/erictune/kubernetes/deployments","created_at":"2014-07-08T21:00:59Z","updated_at":"2016-01-15T20:40:20Z","pushed_at":"2016-02-17T23:22:48Z","git_url":"git://github.com/erictune/kubernetes.git","ssh_url":"git@github.com:erictune/kubernetes.git","clone_url":"https://github.com/erictune/kubernetes.git","svn_url":"https://github.com/erictune/kubernetes","homepage":null,"size":164432,"stargazers_count":0,"watchers_count":0,"language":"Go","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":"kubernetes:master","ref":"master","sha":"3bbf55d38b8e86425af6c150ddd8b5c06aa2dae8","user":{"login":"kubernetes","id":13629408,"avatar_url":"https://avatars.githubusercontent.com/u/13629408?v=3","gravatar_id":"","url":"https://api.github.com/users/kubernetes","html_url":"https://github.com/kubernetes","followers_url":"https://api.github.com/users/kubernetes/followers","following_url":"https://api.github.com/users/kubernetes/following{/other_user}","gists_url":"https://api.github.com/users/kubernetes/gists{/gist_id}","starred_url":"https://api.github.com/users/kubernetes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kubernetes/subscriptions","organizations_url":"https://api.github.com/users/kubernetes/orgs","repos_url":"https://api.github.com/users/kubernetes/repos","events_url":"https://api.github.com/users/kubernetes/events{/privacy}","received_events_url":"https://api.github.com/users/kubernetes/received_events","type":"Organization","site_admin":false},"repo":{"id":20580498,"name":"kubernetes","full_name":"kubernetes/kubernetes","owner":{"login":"kubernetes","id":13629408,"avatar_url":"https://avatars.githubusercontent.com/u/13629408?v=3","gravatar_id":"","url":"https://api.github.com/users/kubernetes","html_url":"https://github.com/kubernetes","followers_url":"https://api.github.com/users/kubernetes/followers","following_url":"https://api.github.com/users/kubernetes/following{/other_user}","gists_url":"https://api.github.com/users/kubernetes/gists{/gist_id}","starred_url":"https://api.github.com/users/kubernetes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kubernetes/subscriptions","organizations_url":"https://api.github.com/users/kubernetes/orgs","repos_url":"https://api.github.com/users/kubernetes/repos","events_url":"https://api.github.com/users/kubernetes/events{/privacy}","received_events_url":"https://api.github.com/users/kubernetes/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/kubernetes/kubernetes","description":"Container Cluster Manager from Google","fork":false,"url":"https://api.github.com/repos/kubernetes/kubernetes","forks_url":"https://api.github.com/repos/kubernetes/kubernetes/forks","keys_url":"https://api.github.com/repos/kubernetes/kubernetes/keys{/key_id}","collaborators_url":"https://api.github.com/repos/kubernetes/kubernetes/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/kubernetes/kubernetes/teams","hooks_url":"https://api.github.com/repos/kubernetes/kubernetes/hooks","issue_events_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/events{/number}","events_url":"https://api.github.com/repos/kubernetes/kubernetes/events","assignees_url":"https://api.github.com/repos/kubernetes/kubernetes/assignees{/user}","branches_url":"https://api.github.com/repos/kubernetes/kubernetes/branches{/branch}","tags_url":"https://api.github.com/repos/kubernetes/kubernetes/tags","blobs_url":"https://api.github.com/repos/kubernetes/kubernetes/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/kubernetes/kubernetes/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/kubernetes/kubernetes/git/refs{/sha}","trees_url":"https://api.github.com/repos/kubernetes/kubernetes/git/trees{/sha}","statuses_url":"https://api.github.com/repos/kubernetes/kubernetes/statuses/{sha}","languages_url":"https://api.github.com/repos/kubernetes/kubernetes/languages","stargazers_url":"https://api.github.com/repos/kubernetes/kubernetes/stargazers","contributors_url":"https://api.github.com/repos/kubernetes/kubernetes/contributors","subscribers_url":"https://api.github.com/repos/kubernetes/kubernetes/subscribers","subscription_url":"https://api.github.com/repos/kubernetes/kubernetes/subscription","commits_url":"https://api.github.com/repos/kubernetes/kubernetes/commits{/sha}","git_commits_url":"https://api.github.com/repos/kubernetes/kubernetes/git/commits{/sha}","comments_url":"https://api.github.com/repos/kubernetes/kubernetes/comments{/number}","issue_comment_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/comments{/number}","contents_url":"https://api.github.com/repos/kubernetes/kubernetes/contents/{+path}","compare_url":"https://api.github.com/repos/kubernetes/kubernetes/compare/{base}...{head}","merges_url":"https://api.github.com/repos/kubernetes/kubernetes/merges","archive_url":"https://api.github.com/repos/kubernetes/kubernetes/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/kubernetes/kubernetes/downloads","issues_url":"https://api.github.com/repos/kubernetes/kubernetes/issues{/number}","pulls_url":"https://api.github.com/repos/kubernetes/kubernetes/pulls{/number}","milestones_url":"https://api.github.com/repos/kubernetes/kubernetes/milestones{/number}","notifications_url":"https://api.github.com/repos/kubernetes/kubernetes/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/kubernetes/kubernetes/labels{/name}","releases_url":"https://api.github.com/repos/kubernetes/kubernetes/releases{/id}","deployments_url":"https://api.github.com/repos/kubernetes/kubernetes/deployments","created_at":"2014-06-06T22:56:04Z","updated_at":"2016-02-18T02:40:56Z","pushed_at":"2016-02-18T04:17:22Z","git_url":"git://github.com/kubernetes/kubernetes.git","ssh_url":"git@github.com:kubernetes/kubernetes.git","clone_url":"https://github.com/kubernetes/kubernetes.git","svn_url":"https://github.com/kubernetes/kubernetes","homepage":"http://kubernetes.io","size":327512,"stargazers_count":12738,"watchers_count":12738,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":3636,"mirror_url":null,"open_issues_count":2907,"forks":3636,"open_issues":2907,"watchers":12738,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/20551"},"html":{"href":"https://github.com/kubernetes/kubernetes/pull/20551"},"issue":{"href":"https://api.github.com/repos/kubernetes/kubernetes/issues/20551"},"comments":{"href":"https://api.github.com/repos/kubernetes/kubernetes/issues/20551/comments"},"review_comments":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/20551/comments"},"review_comment":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/kubernetes/kubernetes/pulls/20551/commits"},"statuses":{"href":"https://api.github.com/repos/kubernetes/kubernetes/statuses/af34de91599d385f623547bde2ae5fc6bcd02003"}}}}