{"action":"created","comment":{"url":"https://api.github.com/repos/kubernetes/community/pulls/comments/194206413","pull_request_review_id":127343883,"id":194206413,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5NDIwNjQxMw==","diff_hunk":"@@ -0,0 +1,781 @@\n+# Scheduling Policy\n+\n+_Status: Draft_\n+\n+_Authors: @arnaudmz, @yastij_\n+\n+_Reviewers: @bsalamat, @liggitt_\n+\n+# Objectives\n+\n+-  Define the concept of scheduling policies\n+-  Propose their initial design and scope\n+\n+## Non-Goals\n+\n+-  How taints / tolerations work\n+-  How NodeSelector works\n+-  How node / pod affinity / anti-affinity rules work\n+-  How several schedulers can be used within a single cluster\n+-  How priority classes work\n+\n+# Background\n+\n+During real-life Kubernetes architecturing we encountered contexts where role-isolation (between administration and simple namespace usage in a multi-tenant context) could be improved. So far, no restriction is possible on toleration, priority class usage, nodeSelector, anti-affinity depending on user permissions (RBAC).\n+\n+Identified use-cases aim to ensure that administrators have a way to restrict users or namepace when\n+-  using schedulers,\n+-  placing pods on specific nodes (master roles for instance),\n+-  using specific priority classes,\n+-  expressing pod affinity or anti-affinity rules.\n+\n+Mandatory (and optionally default) values must also be enforced by scheduling policies in case of:\n+-  mutli-arch (amd64, arm64) of multi-os (Linux, Windows) clusters\n+-  multi-az / region / failure domain clusters\n+\n+# Overview\n+\n+Implementing SchedulingPolicy implies:\n+-  Creating a new resource named **SchedulingPolicy** (schedpol)\n+-  Creating an **AdmissionController** that dehaves on a deny-all-but basis\n+-  Allow SchedulingPolicy to be used by pods using RoleBindings or ClusterRoleBindings\n+\n+# Detailed Design\n+\n+SchedulingPolicy resource specs are composed of several main attributes:\n+-  **Required** scheduling components. These list the manadory NodeSelectors, Scheduler-Name, Anti-Affinity rules, Priority class, and Tolerations and optionally valid values that have to be provided to allow scheduling.\n+-  **Allowed** scheduling components. These list the optional components that can be specified in pods definition.\n+-  **Default** scheduling components. These list default values to set unless specified in pods definition.\n+\n+SchedulingPolicy resources are supposed to apply in a deny-all-except approach.\n+\n+An AdmissionController must be added to the mutating phase to\n+-  add default values if unspecified for NodeSelectors, Scheduler-Name, Anti-Affinity rules, Priority class, and Tolerations,\n+-  reject pod scheduling if the serviceaccount running the pod is not allowed to specify requested NodeSelectors, Scheduler-Name, Anti-Affinity rules, Priority class, and Tolerations.\n+\n+All usable scheduling policies (allowed by RBAC) are merged before evaluating if scheduling constraints defined in pods are allowed.\n+\n+## SchedulingPolicy\n+\n+Proposed API group: `extensions/v1alpha1`\n+\n+SchedulingPolicy is a cluster-scoped resource (not namespaced).\n+\n+### SchedulingPolicy content\n+\n+SchedulingPolicy spec is composed of optional fields that allow scheduling rules. If a field is absent from a SchedulingPolicy, this schedpol won't allow any item from the missing field.\n+\n+```yaml\n+apiVersion: extensions/valpha1\n+kind: SchedulingPolicy\n+metadata:\n+  name: my-schedpol\n+spec:\n+  required:\n+    schedulerNames:      # Describes schedulers names that are required\n+    priorityClasseNames: # Describes priority class names that are required\n+    nodeSelectors:       # Describes node selectors that must be used\n+    affinities:          # Describes affinities that must be used\n+  allowed:\n+    schedulerNames:      # Describes schedulers names that are allowed\n+    priorityClasseNames: # Describes priority class names that are allowed\n+    nodeSelectors:       # Describes node selectors that can be used\n+    tolerations:         # Describes tolerations that can be used\n+    affinities:          # Describes affinities that can be used\n+  default:\n+    schedulerName:       # Describes default scheduler name\n+    priorityClasseName:  # Describes default priority class name\n+    nodeSelector:        # Describes default node selector\n+    tolerations:         # Describes default tolerations\n+    affinity:            # Describes default affinity\n+```\n+\n+### required\n+Elements here are required, pods won't schedule if they aren't present. Also note that if something is required it is also allowed.\n+\n+### allowed\n+Elements here are allowed, the policy allows the presence of these elements. From Pod's perspective, a pod can use one or N of the allowed items.","path":"contributors/design-proposals/scheduling/scheduling-policy.md","position":174,"original_position":97,"commit_id":"aad9f2fcad32b42ceb0df074028962b2b8c76f01","original_commit_id":"8ed464f5f993fad1d612bf2cd23ccecef91318c9","user":{"login":"bsalamat","id":14308438,"node_id":"MDQ6VXNlcjE0MzA4NDM4","avatar_url":"https://avatars3.githubusercontent.com/u/14308438?v=4","gravatar_id":"","url":"https://api.github.com/users/bsalamat","html_url":"https://github.com/bsalamat","followers_url":"https://api.github.com/users/bsalamat/followers","following_url":"https://api.github.com/users/bsalamat/following{/other_user}","gists_url":"https://api.github.com/users/bsalamat/gists{/gist_id}","starred_url":"https://api.github.com/users/bsalamat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bsalamat/subscriptions","organizations_url":"https://api.github.com/users/bsalamat/orgs","repos_url":"https://api.github.com/users/bsalamat/repos","events_url":"https://api.github.com/users/bsalamat/events{/privacy}","received_events_url":"https://api.github.com/users/bsalamat/received_events","type":"User","site_admin":false},"body":"> What should the posture of the policy be toward new future capabilities? If I make a policy that locks down scheduling in a specific way, and a new field in a future version lets pods target scheduling in a different way, wouldn't you expect the old policy to keep them as limited as they were before the new field existed? If so, that's a default deny approach. That approach makes rolling out new capabilities much easier/safer.\r\n\r\nAs I explained in my previous comment, once you have one \"allow\" rule, it means that nothing else is allowed, but when you don't have any \"allow\" rule, it means everything is allowed. In other words, the policy is \"default allow\" when there is no \"allow\" rule and it changes to \"default deny\" once one or more \"allow\" rule is added. This would solve the problem of adding a new scheduling feature and makes rolling out pod scheduling policy easy.\r\n\r\n","created_at":"2018-06-09T00:15:57Z","updated_at":"2018-06-09T00:16:59Z","html_url":"https://github.com/kubernetes/community/pull/1937#discussion_r194206413","pull_request_url":"https://api.github.com/repos/kubernetes/community/pulls/1937","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/kubernetes/community/pulls/comments/194206413"},"html":{"href":"https://github.com/kubernetes/community/pull/1937#discussion_r194206413"},"pull_request":{"href":"https://api.github.com/repos/kubernetes/community/pulls/1937"}},"in_reply_to_id":176275171},"pull_request":{"url":"https://api.github.com/repos/kubernetes/community/pulls/1937","id":175487860,"node_id":"MDExOlB1bGxSZXF1ZXN0MTc1NDg3ODYw","html_url":"https://github.com/kubernetes/community/pull/1937","diff_url":"https://github.com/kubernetes/community/pull/1937.diff","patch_url":"https://github.com/kubernetes/community/pull/1937.patch","issue_url":"https://api.github.com/repos/kubernetes/community/issues/1937","number":1937,"state":"open","locked":false,"title":"Add initial design proposal for Scheduling Policy","user":{"login":"arnaudmz","id":1323980,"node_id":"MDQ6VXNlcjEzMjM5ODA=","avatar_url":"https://avatars3.githubusercontent.com/u/1323980?v=4","gravatar_id":"","url":"https://api.github.com/users/arnaudmz","html_url":"https://github.com/arnaudmz","followers_url":"https://api.github.com/users/arnaudmz/followers","following_url":"https://api.github.com/users/arnaudmz/following{/other_user}","gists_url":"https://api.github.com/users/arnaudmz/gists{/gist_id}","starred_url":"https://api.github.com/users/arnaudmz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/arnaudmz/subscriptions","organizations_url":"https://api.github.com/users/arnaudmz/orgs","repos_url":"https://api.github.com/users/arnaudmz/repos","events_url":"https://api.github.com/users/arnaudmz/events{/privacy}","received_events_url":"https://api.github.com/users/arnaudmz/received_events","type":"User","site_admin":false},"body":"Ref: kubernetes/kubernetes#61185\r\n\r\n/assign @bsalamat @liggitt \r\n/cc @yastij ","created_at":"2018-03-16T10:05:18Z","updated_at":"2018-06-09T00:16:59Z","closed_at":null,"merged_at":null,"merge_commit_sha":"65594bed626b76092bc138c4bbb473f9a2efe447","assignee":{"login":"liggitt","id":980082,"node_id":"MDQ6VXNlcjk4MDA4Mg==","avatar_url":"https://avatars0.githubusercontent.com/u/980082?v=4","gravatar_id":"","url":"https://api.github.com/users/liggitt","html_url":"https://github.com/liggitt","followers_url":"https://api.github.com/users/liggitt/followers","following_url":"https://api.github.com/users/liggitt/following{/other_user}","gists_url":"https://api.github.com/users/liggitt/gists{/gist_id}","starred_url":"https://api.github.com/users/liggitt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/liggitt/subscriptions","organizations_url":"https://api.github.com/users/liggitt/orgs","repos_url":"https://api.github.com/users/liggitt/repos","events_url":"https://api.github.com/users/liggitt/events{/privacy}","received_events_url":"https://api.github.com/users/liggitt/received_events","type":"User","site_admin":false},"assignees":[{"login":"liggitt","id":980082,"node_id":"MDQ6VXNlcjk4MDA4Mg==","avatar_url":"https://avatars0.githubusercontent.com/u/980082?v=4","gravatar_id":"","url":"https://api.github.com/users/liggitt","html_url":"https://github.com/liggitt","followers_url":"https://api.github.com/users/liggitt/followers","following_url":"https://api.github.com/users/liggitt/following{/other_user}","gists_url":"https://api.github.com/users/liggitt/gists{/gist_id}","starred_url":"https://api.github.com/users/liggitt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/liggitt/subscriptions","organizations_url":"https://api.github.com/users/liggitt/orgs","repos_url":"https://api.github.com/users/liggitt/repos","events_url":"https://api.github.com/users/liggitt/events{/privacy}","received_events_url":"https://api.github.com/users/liggitt/received_events","type":"User","site_admin":false},{"login":"bsalamat","id":14308438,"node_id":"MDQ6VXNlcjE0MzA4NDM4","avatar_url":"https://avatars3.githubusercontent.com/u/14308438?v=4","gravatar_id":"","url":"https://api.github.com/users/bsalamat","html_url":"https://github.com/bsalamat","followers_url":"https://api.github.com/users/bsalamat/followers","following_url":"https://api.github.com/users/bsalamat/following{/other_user}","gists_url":"https://api.github.com/users/bsalamat/gists{/gist_id}","starred_url":"https://api.github.com/users/bsalamat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bsalamat/subscriptions","organizations_url":"https://api.github.com/users/bsalamat/orgs","repos_url":"https://api.github.com/users/bsalamat/repos","events_url":"https://api.github.com/users/bsalamat/events{/privacy}","received_events_url":"https://api.github.com/users/bsalamat/received_events","type":"User","site_admin":false},{"login":"tallclair","id":29742491,"node_id":"MDQ6VXNlcjI5NzQyNDkx","avatar_url":"https://avatars1.githubusercontent.com/u/29742491?v=4","gravatar_id":"","url":"https://api.github.com/users/tallclair","html_url":"https://github.com/tallclair","followers_url":"https://api.github.com/users/tallclair/followers","following_url":"https://api.github.com/users/tallclair/following{/other_user}","gists_url":"https://api.github.com/users/tallclair/gists{/gist_id}","starred_url":"https://api.github.com/users/tallclair/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tallclair/subscriptions","organizations_url":"https://api.github.com/users/tallclair/orgs","repos_url":"https://api.github.com/users/tallclair/repos","events_url":"https://api.github.com/users/tallclair/events{/privacy}","received_events_url":"https://api.github.com/users/tallclair/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":486032367,"node_id":"MDU6TGFiZWw0ODYwMzIzNjc=","url":"https://api.github.com/repos/kubernetes/community/labels/cncf-cla:%20yes","name":"cncf-cla: yes","color":"bfe5bf","default":false},{"id":653942785,"node_id":"MDU6TGFiZWw2NTM5NDI3ODU=","url":"https://api.github.com/repos/kubernetes/community/labels/kind/design","name":"kind/design","color":"c7def8","default":false},{"id":653942820,"node_id":"MDU6TGFiZWw2NTM5NDI4MjA=","url":"https://api.github.com/repos/kubernetes/community/labels/needs-ok-to-test","name":"needs-ok-to-test","color":"b60205","default":false},{"id":653942870,"node_id":"MDU6TGFiZWw2NTM5NDI4NzA=","url":"https://api.github.com/repos/kubernetes/community/labels/sig/auth","name":"sig/auth","color":"d2b48c","default":false},{"id":653942904,"node_id":"MDU6TGFiZWw2NTM5NDI5MDQ=","url":"https://api.github.com/repos/kubernetes/community/labels/sig/scheduling","name":"sig/scheduling","color":"d2b48c","default":false},{"id":653942920,"node_id":"MDU6TGFiZWw2NTM5NDI5MjA=","url":"https://api.github.com/repos/kubernetes/community/labels/size/XL","name":"size/XL","color":"ee5500","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/kubernetes/community/pulls/1937/commits","review_comments_url":"https://api.github.com/repos/kubernetes/community/pulls/1937/comments","review_comment_url":"https://api.github.com/repos/kubernetes/community/pulls/comments{/number}","comments_url":"https://api.github.com/repos/kubernetes/community/issues/1937/comments","statuses_url":"https://api.github.com/repos/kubernetes/community/statuses/aad9f2fcad32b42ceb0df074028962b2b8c76f01","head":{"label":"arnaudmz:scheduling-policy","ref":"scheduling-policy","sha":"aad9f2fcad32b42ceb0df074028962b2b8c76f01","user":{"login":"arnaudmz","id":1323980,"node_id":"MDQ6VXNlcjEzMjM5ODA=","avatar_url":"https://avatars3.githubusercontent.com/u/1323980?v=4","gravatar_id":"","url":"https://api.github.com/users/arnaudmz","html_url":"https://github.com/arnaudmz","followers_url":"https://api.github.com/users/arnaudmz/followers","following_url":"https://api.github.com/users/arnaudmz/following{/other_user}","gists_url":"https://api.github.com/users/arnaudmz/gists{/gist_id}","starred_url":"https://api.github.com/users/arnaudmz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/arnaudmz/subscriptions","organizations_url":"https://api.github.com/users/arnaudmz/orgs","repos_url":"https://api.github.com/users/arnaudmz/repos","events_url":"https://api.github.com/users/arnaudmz/events{/privacy}","received_events_url":"https://api.github.com/users/arnaudmz/received_events","type":"User","site_admin":false},"repo":{"id":125497835,"node_id":"MDEwOlJlcG9zaXRvcnkxMjU0OTc4MzU=","name":"community","full_name":"arnaudmz/community","owner":{"login":"arnaudmz","id":1323980,"node_id":"MDQ6VXNlcjEzMjM5ODA=","avatar_url":"https://avatars3.githubusercontent.com/u/1323980?v=4","gravatar_id":"","url":"https://api.github.com/users/arnaudmz","html_url":"https://github.com/arnaudmz","followers_url":"https://api.github.com/users/arnaudmz/followers","following_url":"https://api.github.com/users/arnaudmz/following{/other_user}","gists_url":"https://api.github.com/users/arnaudmz/gists{/gist_id}","starred_url":"https://api.github.com/users/arnaudmz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/arnaudmz/subscriptions","organizations_url":"https://api.github.com/users/arnaudmz/orgs","repos_url":"https://api.github.com/users/arnaudmz/repos","events_url":"https://api.github.com/users/arnaudmz/events{/privacy}","received_events_url":"https://api.github.com/users/arnaudmz/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/arnaudmz/community","description":"Kubernetes community content","fork":true,"url":"https://api.github.com/repos/arnaudmz/community","forks_url":"https://api.github.com/repos/arnaudmz/community/forks","keys_url":"https://api.github.com/repos/arnaudmz/community/keys{/key_id}","collaborators_url":"https://api.github.com/repos/arnaudmz/community/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/arnaudmz/community/teams","hooks_url":"https://api.github.com/repos/arnaudmz/community/hooks","issue_events_url":"https://api.github.com/repos/arnaudmz/community/issues/events{/number}","events_url":"https://api.github.com/repos/arnaudmz/community/events","assignees_url":"https://api.github.com/repos/arnaudmz/community/assignees{/user}","branches_url":"https://api.github.com/repos/arnaudmz/community/branches{/branch}","tags_url":"https://api.github.com/repos/arnaudmz/community/tags","blobs_url":"https://api.github.com/repos/arnaudmz/community/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/arnaudmz/community/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/arnaudmz/community/git/refs{/sha}","trees_url":"https://api.github.com/repos/arnaudmz/community/git/trees{/sha}","statuses_url":"https://api.github.com/repos/arnaudmz/community/statuses/{sha}","languages_url":"https://api.github.com/repos/arnaudmz/community/languages","stargazers_url":"https://api.github.com/repos/arnaudmz/community/stargazers","contributors_url":"https://api.github.com/repos/arnaudmz/community/contributors","subscribers_url":"https://api.github.com/repos/arnaudmz/community/subscribers","subscription_url":"https://api.github.com/repos/arnaudmz/community/subscription","commits_url":"https://api.github.com/repos/arnaudmz/community/commits{/sha}","git_commits_url":"https://api.github.com/repos/arnaudmz/community/git/commits{/sha}","comments_url":"https://api.github.com/repos/arnaudmz/community/comments{/number}","issue_comment_url":"https://api.github.com/repos/arnaudmz/community/issues/comments{/number}","contents_url":"https://api.github.com/repos/arnaudmz/community/contents/{+path}","compare_url":"https://api.github.com/repos/arnaudmz/community/compare/{base}...{head}","merges_url":"https://api.github.com/repos/arnaudmz/community/merges","archive_url":"https://api.github.com/repos/arnaudmz/community/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/arnaudmz/community/downloads","issues_url":"https://api.github.com/repos/arnaudmz/community/issues{/number}","pulls_url":"https://api.github.com/repos/arnaudmz/community/pulls{/number}","milestones_url":"https://api.github.com/repos/arnaudmz/community/milestones{/number}","notifications_url":"https://api.github.com/repos/arnaudmz/community/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/arnaudmz/community/labels{/name}","releases_url":"https://api.github.com/repos/arnaudmz/community/releases{/id}","deployments_url":"https://api.github.com/repos/arnaudmz/community/deployments","created_at":"2018-03-16T09:58:00Z","updated_at":"2018-03-16T10:01:33Z","pushed_at":"2018-05-17T18:21:06Z","git_url":"git://github.com/arnaudmz/community.git","ssh_url":"git@github.com:arnaudmz/community.git","clone_url":"https://github.com/arnaudmz/community.git","svn_url":"https://github.com/arnaudmz/community","homepage":"","size":19616,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"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","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"kubernetes:master","ref":"master","sha":"b092b6a92e3593101ee1c68ddd1147b9040c384d","user":{"login":"kubernetes","id":13629408,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzNjI5NDA4","avatar_url":"https://avatars2.githubusercontent.com/u/13629408?v=4","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":57939112,"node_id":"MDEwOlJlcG9zaXRvcnk1NzkzOTExMg==","name":"community","full_name":"kubernetes/community","owner":{"login":"kubernetes","id":13629408,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzNjI5NDA4","avatar_url":"https://avatars2.githubusercontent.com/u/13629408?v=4","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/community","description":"Kubernetes community content","fork":false,"url":"https://api.github.com/repos/kubernetes/community","forks_url":"https://api.github.com/repos/kubernetes/community/forks","keys_url":"https://api.github.com/repos/kubernetes/community/keys{/key_id}","collaborators_url":"https://api.github.com/repos/kubernetes/community/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/kubernetes/community/teams","hooks_url":"https://api.github.com/repos/kubernetes/community/hooks","issue_events_url":"https://api.github.com/repos/kubernetes/community/issues/events{/number}","events_url":"https://api.github.com/repos/kubernetes/community/events","assignees_url":"https://api.github.com/repos/kubernetes/community/assignees{/user}","branches_url":"https://api.github.com/repos/kubernetes/community/branches{/branch}","tags_url":"https://api.github.com/repos/kubernetes/community/tags","blobs_url":"https://api.github.com/repos/kubernetes/community/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/kubernetes/community/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/kubernetes/community/git/refs{/sha}","trees_url":"https://api.github.com/repos/kubernetes/community/git/trees{/sha}","statuses_url":"https://api.github.com/repos/kubernetes/community/statuses/{sha}","languages_url":"https://api.github.com/repos/kubernetes/community/languages","stargazers_url":"https://api.github.com/repos/kubernetes/community/stargazers","contributors_url":"https://api.github.com/repos/kubernetes/community/contributors","subscribers_url":"https://api.github.com/repos/kubernetes/community/subscribers","subscription_url":"https://api.github.com/repos/kubernetes/community/subscription","commits_url":"https://api.github.com/repos/kubernetes/community/commits{/sha}","git_commits_url":"https://api.github.com/repos/kubernetes/community/git/commits{/sha}","comments_url":"https://api.github.com/repos/kubernetes/community/comments{/number}","issue_comment_url":"https://api.github.com/repos/kubernetes/community/issues/comments{/number}","contents_url":"https://api.github.com/repos/kubernetes/community/contents/{+path}","compare_url":"https://api.github.com/repos/kubernetes/community/compare/{base}...{head}","merges_url":"https://api.github.com/repos/kubernetes/community/merges","archive_url":"https://api.github.com/repos/kubernetes/community/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/kubernetes/community/downloads","issues_url":"https://api.github.com/repos/kubernetes/community/issues{/number}","pulls_url":"https://api.github.com/repos/kubernetes/community/pulls{/number}","milestones_url":"https://api.github.com/repos/kubernetes/community/milestones{/number}","notifications_url":"https://api.github.com/repos/kubernetes/community/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/kubernetes/community/labels{/name}","releases_url":"https://api.github.com/repos/kubernetes/community/releases{/id}","deployments_url":"https://api.github.com/repos/kubernetes/community/deployments","created_at":"2016-05-03T03:36:05Z","updated_at":"2018-06-08T21:37:14Z","pushed_at":"2018-06-08T21:50:34Z","git_url":"git://github.com/kubernetes/community.git","ssh_url":"git@github.com:kubernetes/community.git","clone_url":"https://github.com/kubernetes/community.git","svn_url":"https://github.com/kubernetes/community","homepage":"","size":21046,"stargazers_count":1975,"watchers_count":1975,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1233,"mirror_url":null,"archived":false,"open_issues_count":206,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":1233,"open_issues":206,"watchers":1975,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/kubernetes/community/pulls/1937"},"html":{"href":"https://github.com/kubernetes/community/pull/1937"},"issue":{"href":"https://api.github.com/repos/kubernetes/community/issues/1937"},"comments":{"href":"https://api.github.com/repos/kubernetes/community/issues/1937/comments"},"review_comments":{"href":"https://api.github.com/repos/kubernetes/community/pulls/1937/comments"},"review_comment":{"href":"https://api.github.com/repos/kubernetes/community/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/kubernetes/community/pulls/1937/commits"},"statuses":{"href":"https://api.github.com/repos/kubernetes/community/statuses/aad9f2fcad32b42ceb0df074028962b2b8c76f01"}},"author_association":"NONE"}}
{"actor":{"display_login":"bsalamat"}}