{"action":"created","comment":{"url":"https://api.github.com/repos/cilium/cilium/pulls/comments/176530867","pull_request_review_id":104666741,"id":176530867,"diff_hunk":"@@ -0,0 +1,537 @@\n+// Copyright 2017-2018 Authors of Cilium\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+package v3\n+\n+import (\n+\t\"github.com/cilium/cilium/pkg/policy/api/v2\"\n+)\n+\n+// V2RulesTov3RulesSanitized translates the given v2Rules to the respective v3\n+// Rules.\n+// All given v2Rules needs to be sanitized and the returned v3 Rules will be\n+// already sanitized. In case of an error while sanitizing a rule, that error\n+// will be returned.\n+func V2RulesTov3RulesSanitized(v2Rules *v2.Rules) (*Rules, error) {\n+\tv3Rules := V2RulesTov3Rules(v2Rules)\n+\tfor _, v3Rule := range *v3Rules {\n+\t\terr := v3Rule.Sanitize()\n+\t\tif err != nil {\n+\t\t\treturn nil, err\n+\t\t}\n+\t}\n+\treturn v3Rules, nil\n+}\n+\n+// V2RuleTov3RuleSanitized translates the given v2Rule to the respective v3\n+// Rule.\n+// The given v2Rules needs to be sanitized and the returned v3 Rule is alread\n+// sanitized. In case of an error while sanitizing a rule, that error\n+// will be returned.\n+func V2RuleTov3RuleSanitized(v2Rule *v2.Rule) (*Rule, error) {\n+\tv3Rule := V2RuleTov3Rule(v2Rule)\n+\tif v3Rule == nil {\n+\t\treturn nil, nil\n+\t}\n+\terr := v3Rule.Sanitize()\n+\tif err != nil {\n+\t\treturn nil, err\n+\t}\n+\treturn v3Rule, nil\n+}\n+\n+// V2RulesTov3Rules translates the given v2Rules to the respective v3 Rules.\n+// All given v2Rules needs to be sanitized and the returned v3 Rules needs to\n+// be sanitized.\n+func V2RulesTov3Rules(v2Rules *v2.Rules) *Rules {\n+\tif v2Rules == nil {\n+\t\treturn nil\n+\t}\n+\tv3Rules := make(Rules, len(*v2Rules))\n+\tfor i, v := range *v2Rules {\n+\t\tv3Rules[i] = V2RuleTov3Rule(v)\n+\t}\n+\treturn &v3Rules\n+}\n+\n+// V2RuleTov3Rule translates the given v2Rule to the respective v3 Rule.\n+// The given v2Rule needs to be sanitized and the returned v3Rule needs to\n+// be sanitized.\n+func V2RuleTov3Rule(v2Rule *v2.Rule) *Rule {\n+\tif v2Rule == nil {\n+\t\treturn nil\n+\t}\n+\tv3Rule := &Rule{}\n+\n+\tv3Rule.EndpointSelector = *v2ESTov3ES(&v2Rule.EndpointSelector)\n+\n+\tif v2Rule.Ingress != nil {\n+\t\tv3Rule.Ingress = []IngressRule{}\n+\n+\t\tfor _, v := range v2Rule.Ingress {\n+\t\t\tv3Rule.Ingress = append(v3Rule.Ingress, v2IRTov3IR(&v)...)\n+\t\t}\n+\t}\n+\n+\tif v2Rule.Egress != nil {\n+\t\tv3Rule.Egress = []EgressRule{}\n+\n+\t\tfor _, v := range v2Rule.Egress {\n+\t\t\tv3Rule.Egress = append(v3Rule.Egress, v2ERTov3ER(&v)...)\n+\t\t}\n+\t}\n+\n+\tv3Rule.Labels = v2Rule.Labels.DeepCopy()\n+\tv3Rule.Description = v2Rule.Description\n+\n+\treturn v3Rule\n+}\n+\n+func v2ESTov3ES(v2ES *v2.EndpointSelector) *IdentitySelector {","path":"pkg/policy/api/v3/v2tov3.go","position":101,"original_position":101,"commit_id":"b7a5cf4f4a6d6131045d94b7054e934cad73ed0b","original_commit_id":"76e0c46434fb7a12bc126ae0c7cfca840a469df2","user":{"login":"ianvernon","id":3858271,"avatar_url":"https://avatars1.githubusercontent.com/u/3858271?v=4","gravatar_id":"","url":"https://api.github.com/users/ianvernon","html_url":"https://github.com/ianvernon","followers_url":"https://api.github.com/users/ianvernon/followers","following_url":"https://api.github.com/users/ianvernon/following{/other_user}","gists_url":"https://api.github.com/users/ianvernon/gists{/gist_id}","starred_url":"https://api.github.com/users/ianvernon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ianvernon/subscriptions","organizations_url":"https://api.github.com/users/ianvernon/orgs","repos_url":"https://api.github.com/users/ianvernon/repos","events_url":"https://api.github.com/users/ianvernon/events{/privacy}","received_events_url":"https://api.github.com/users/ianvernon/received_events","type":"User","site_admin":false},"body":"I'm not a big fan of these abbreviated function names. I prefer verbosity in this case (ES --> EndpointSelector).","created_at":"2018-03-22T18:39:28Z","updated_at":"2018-03-22T18:49:33Z","html_url":"https://github.com/cilium/cilium/pull/3164#discussion_r176530867","pull_request_url":"https://api.github.com/repos/cilium/cilium/pulls/3164","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/cilium/cilium/pulls/comments/176530867"},"html":{"href":"https://github.com/cilium/cilium/pull/3164#discussion_r176530867"},"pull_request":{"href":"https://api.github.com/repos/cilium/cilium/pulls/3164"}}},"pull_request":{"url":"https://api.github.com/repos/cilium/cilium/pulls/3164","id":175439119,"html_url":"https://github.com/cilium/cilium/pull/3164","diff_url":"https://github.com/cilium/cilium/pull/3164.diff","patch_url":"https://github.com/cilium/cilium/pull/3164.patch","issue_url":"https://api.github.com/repos/cilium/cilium/issues/3164","number":3164,"state":"open","locked":false,"title":"Cilium Network Policy v3","user":{"login":"aanm","id":5714066,"avatar_url":"https://avatars0.githubusercontent.com/u/5714066?v=4","gravatar_id":"","url":"https://api.github.com/users/aanm","html_url":"https://github.com/aanm","followers_url":"https://api.github.com/users/aanm/followers","following_url":"https://api.github.com/users/aanm/following{/other_user}","gists_url":"https://api.github.com/users/aanm/gists{/gist_id}","starred_url":"https://api.github.com/users/aanm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aanm/subscriptions","organizations_url":"https://api.github.com/users/aanm/orgs","repos_url":"https://api.github.com/users/aanm/repos","events_url":"https://api.github.com/users/aanm/events{/privacy}","received_events_url":"https://api.github.com/users/aanm/received_events","type":"User","site_admin":false},"body":"**Summary of changes**:\r\n\r\nPolicy v3 implementation\r\n\r\nFixes: #3005 \r\n\r\n```release-note\r\nNew Cilium Network Policy v3\r\n```\r\n\r\nThere's lack of documentation since it's WIP. Please suggest better fields names for the Network Policy attributes if needed.\r\n\r\nThere's a translator from v2 to v3. It's only missing some unit tests.\r\n\r\n```\r\n---\r\nendpointSelector:\r\n  matchLabels:\r\n    any:id: backend\r\ningress:\r\n- fromIdentities:\r\n    identitySelector:\r\n      matchLabels:\r\n        any:id: frontend\r\n      matchExpressions:\r\n      - key: any:id\r\n        operator: In\r\n        values:\r\n        - frontend\r\n        - qa\r\n- fromIdentities:\r\n    identitySelector:\r\n      matchLabels:\r\n        any:id: team-a\r\n    toPorts:\r\n      anyOf:\r\n      - port: '111'\r\n        protocol: TCP\r\n- fromCIDR:\r\n    anyOf:\r\n    - 1.1.1.1/31\r\n    except:\r\n    - 1.1.1.1/32\r\n    toPorts:\r\n      anyOf:\r\n      - port: '9090'\r\n        protocol: TCP\r\negress:\r\n- toServices:\r\n    k8sServiceSelector:\r\n      serviceSelector:\r\n        matchLabels:\r\n          id: backup\r\n- toIdentities:\r\n    identitySelector:\r\n      matchLabels:\r\n        any:group: backend\r\n- toIdentities:\r\n    identitySelector:\r\n      matchLabels:\r\n        any:id: qa\r\n- toRequires:\r\n    anyOf:\r\n    - matchLabels:\r\n        any:team: b\r\n    - matchLabels:\r\n        any:team: c\r\n- toCIDR:\r\n    anyOf:\r\n    - 1.1.1.1/31\r\n    except:\r\n    - 1.1.1.1/32\r\n    toPorts:\r\n      anyOf:\r\n      - port: '9191'\r\n        protocol: TCP\r\n      rules:\r\n        http:\r\n        - path: \"/\"\r\n          method: GET\r\n          headers:\r\n          - foo=bar\r\n- toEntities:\r\n    anyOf:\r\n    - world\r\n    toPorts:\r\n      anyOf:\r\n      - port: '8080'\r\n        protocol: TCP\r\n```\r\n\r\n\r\n1- Allow `id=frontend` *or* `id=qa` to talk with `id=backend` on any port\r\n2- Allow `id=team-a` to talk with `id=backend` on port `tcp/111`\r\n3- Allow all IPs from `1.1.1.1/32`, except `1.1.1.1/31` to talk with `id=backend` on port `tcp/9090`\r\n4- Allow `id=backend` to talk with k8s service that have the labels `id=backup`\r\n5- Allow `id=backend` to talk with endpoints `id=backend` or `id=qa` on any port\r\n6- Allow `id=backend` to talk with endpoints `team=b` or `team=c` on any port (plus a cross product with any toEndpoints present)\r\n7- Allow `id=backend` to talk with `1.1.1.1/32` except `1.1.1.1/31` on port `tcp/9191` on path \"GET /\"\r\n8- Allow `id=backend` to talk with `world` on port `tcp/8080`\r\n\r\nThe ingress traffic is allowed if any of the rules 1, 2 or 3 matches the ingress traffic\r\n\r\nThe egress traffic is allowed if any of the rules 4, 5(x)6, 7 or 8 matches the egress traffic. (x) means cross product between 2 rules.\r\n","created_at":"2018-03-16T04:41:29Z","updated_at":"2018-03-22T18:49:33Z","closed_at":null,"merged_at":null,"merge_commit_sha":"173471f6f00790a4ba7e772172b1ecbb40eec7a1","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[{"name":"proxy","id":2519788,"slug":"proxy","description":"Proxy layer","privacy":"closed","url":"https://api.github.com/teams/2519788","members_url":"https://api.github.com/teams/2519788/members{/member}","repositories_url":"https://api.github.com/teams/2519788/repos","permission":"pull"},{"name":"janitors","id":2519796,"slug":"janitors","description":"Rotating team of janitors for unowned code","privacy":"closed","url":"https://api.github.com/teams/2519796","members_url":"https://api.github.com/teams/2519796/members{/member}","repositories_url":"https://api.github.com/teams/2519796/repos","permission":"pull"}],"labels":[{"id":746643464,"url":"https://api.github.com/repos/cilium/cilium/labels/area/policy","name":"area/policy","color":"c9f97a","default":false},{"id":403149902,"url":"https://api.github.com/repos/cilium/cilium/labels/pending-review","name":"pending-review","color":"fbca04","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/cilium/cilium/pulls/3164/commits","review_comments_url":"https://api.github.com/repos/cilium/cilium/pulls/3164/comments","review_comment_url":"https://api.github.com/repos/cilium/cilium/pulls/comments{/number}","comments_url":"https://api.github.com/repos/cilium/cilium/issues/3164/comments","statuses_url":"https://api.github.com/repos/cilium/cilium/statuses/b7a5cf4f4a6d6131045d94b7054e934cad73ed0b","head":{"label":"cilium:v3-policy","ref":"v3-policy","sha":"b7a5cf4f4a6d6131045d94b7054e934cad73ed0b","user":{"login":"cilium","id":21054566,"avatar_url":"https://avatars0.githubusercontent.com/u/21054566?v=4","gravatar_id":"","url":"https://api.github.com/users/cilium","html_url":"https://github.com/cilium","followers_url":"https://api.github.com/users/cilium/followers","following_url":"https://api.github.com/users/cilium/following{/other_user}","gists_url":"https://api.github.com/users/cilium/gists{/gist_id}","starred_url":"https://api.github.com/users/cilium/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cilium/subscriptions","organizations_url":"https://api.github.com/users/cilium/orgs","repos_url":"https://api.github.com/users/cilium/repos","events_url":"https://api.github.com/users/cilium/events{/privacy}","received_events_url":"https://api.github.com/users/cilium/received_events","type":"Organization","site_admin":false},"repo":{"id":48109239,"name":"cilium","full_name":"cilium/cilium","owner":{"login":"cilium","id":21054566,"avatar_url":"https://avatars0.githubusercontent.com/u/21054566?v=4","gravatar_id":"","url":"https://api.github.com/users/cilium","html_url":"https://github.com/cilium","followers_url":"https://api.github.com/users/cilium/followers","following_url":"https://api.github.com/users/cilium/following{/other_user}","gists_url":"https://api.github.com/users/cilium/gists{/gist_id}","starred_url":"https://api.github.com/users/cilium/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cilium/subscriptions","organizations_url":"https://api.github.com/users/cilium/orgs","repos_url":"https://api.github.com/users/cilium/repos","events_url":"https://api.github.com/users/cilium/events{/privacy}","received_events_url":"https://api.github.com/users/cilium/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/cilium/cilium","description":"HTTP, gRPC, and Kafka Aware Security and Networking for Containers with BPF and XDP","fork":false,"url":"https://api.github.com/repos/cilium/cilium","forks_url":"https://api.github.com/repos/cilium/cilium/forks","keys_url":"https://api.github.com/repos/cilium/cilium/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cilium/cilium/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cilium/cilium/teams","hooks_url":"https://api.github.com/repos/cilium/cilium/hooks","issue_events_url":"https://api.github.com/repos/cilium/cilium/issues/events{/number}","events_url":"https://api.github.com/repos/cilium/cilium/events","assignees_url":"https://api.github.com/repos/cilium/cilium/assignees{/user}","branches_url":"https://api.github.com/repos/cilium/cilium/branches{/branch}","tags_url":"https://api.github.com/repos/cilium/cilium/tags","blobs_url":"https://api.github.com/repos/cilium/cilium/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cilium/cilium/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cilium/cilium/git/refs{/sha}","trees_url":"https://api.github.com/repos/cilium/cilium/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cilium/cilium/statuses/{sha}","languages_url":"https://api.github.com/repos/cilium/cilium/languages","stargazers_url":"https://api.github.com/repos/cilium/cilium/stargazers","contributors_url":"https://api.github.com/repos/cilium/cilium/contributors","subscribers_url":"https://api.github.com/repos/cilium/cilium/subscribers","subscription_url":"https://api.github.com/repos/cilium/cilium/subscription","commits_url":"https://api.github.com/repos/cilium/cilium/commits{/sha}","git_commits_url":"https://api.github.com/repos/cilium/cilium/git/commits{/sha}","comments_url":"https://api.github.com/repos/cilium/cilium/comments{/number}","issue_comment_url":"https://api.github.com/repos/cilium/cilium/issues/comments{/number}","contents_url":"https://api.github.com/repos/cilium/cilium/contents/{+path}","compare_url":"https://api.github.com/repos/cilium/cilium/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cilium/cilium/merges","archive_url":"https://api.github.com/repos/cilium/cilium/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cilium/cilium/downloads","issues_url":"https://api.github.com/repos/cilium/cilium/issues{/number}","pulls_url":"https://api.github.com/repos/cilium/cilium/pulls{/number}","milestones_url":"https://api.github.com/repos/cilium/cilium/milestones{/number}","notifications_url":"https://api.github.com/repos/cilium/cilium/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cilium/cilium/labels{/name}","releases_url":"https://api.github.com/repos/cilium/cilium/releases{/id}","deployments_url":"https://api.github.com/repos/cilium/cilium/deployments","created_at":"2015-12-16T12:33:31Z","updated_at":"2018-03-22T17:33:32Z","pushed_at":"2018-03-22T17:52:09Z","git_url":"git://github.com/cilium/cilium.git","ssh_url":"git@github.com:cilium/cilium.git","clone_url":"https://github.com/cilium/cilium.git","svn_url":"https://github.com/cilium/cilium","homepage":"","size":43325,"stargazers_count":1668,"watchers_count":1668,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":158,"mirror_url":null,"archived":false,"open_issues_count":392,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":158,"open_issues":392,"watchers":1668,"default_branch":"master"}},"base":{"label":"cilium:master","ref":"master","sha":"3b7c3b9396dcd3e3b682b4b665b71b14df5f67ef","user":{"login":"cilium","id":21054566,"avatar_url":"https://avatars0.githubusercontent.com/u/21054566?v=4","gravatar_id":"","url":"https://api.github.com/users/cilium","html_url":"https://github.com/cilium","followers_url":"https://api.github.com/users/cilium/followers","following_url":"https://api.github.com/users/cilium/following{/other_user}","gists_url":"https://api.github.com/users/cilium/gists{/gist_id}","starred_url":"https://api.github.com/users/cilium/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cilium/subscriptions","organizations_url":"https://api.github.com/users/cilium/orgs","repos_url":"https://api.github.com/users/cilium/repos","events_url":"https://api.github.com/users/cilium/events{/privacy}","received_events_url":"https://api.github.com/users/cilium/received_events","type":"Organization","site_admin":false},"repo":{"id":48109239,"name":"cilium","full_name":"cilium/cilium","owner":{"login":"cilium","id":21054566,"avatar_url":"https://avatars0.githubusercontent.com/u/21054566?v=4","gravatar_id":"","url":"https://api.github.com/users/cilium","html_url":"https://github.com/cilium","followers_url":"https://api.github.com/users/cilium/followers","following_url":"https://api.github.com/users/cilium/following{/other_user}","gists_url":"https://api.github.com/users/cilium/gists{/gist_id}","starred_url":"https://api.github.com/users/cilium/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cilium/subscriptions","organizations_url":"https://api.github.com/users/cilium/orgs","repos_url":"https://api.github.com/users/cilium/repos","events_url":"https://api.github.com/users/cilium/events{/privacy}","received_events_url":"https://api.github.com/users/cilium/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/cilium/cilium","description":"HTTP, gRPC, and Kafka Aware Security and Networking for Containers with BPF and XDP","fork":false,"url":"https://api.github.com/repos/cilium/cilium","forks_url":"https://api.github.com/repos/cilium/cilium/forks","keys_url":"https://api.github.com/repos/cilium/cilium/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cilium/cilium/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cilium/cilium/teams","hooks_url":"https://api.github.com/repos/cilium/cilium/hooks","issue_events_url":"https://api.github.com/repos/cilium/cilium/issues/events{/number}","events_url":"https://api.github.com/repos/cilium/cilium/events","assignees_url":"https://api.github.com/repos/cilium/cilium/assignees{/user}","branches_url":"https://api.github.com/repos/cilium/cilium/branches{/branch}","tags_url":"https://api.github.com/repos/cilium/cilium/tags","blobs_url":"https://api.github.com/repos/cilium/cilium/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cilium/cilium/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cilium/cilium/git/refs{/sha}","trees_url":"https://api.github.com/repos/cilium/cilium/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cilium/cilium/statuses/{sha}","languages_url":"https://api.github.com/repos/cilium/cilium/languages","stargazers_url":"https://api.github.com/repos/cilium/cilium/stargazers","contributors_url":"https://api.github.com/repos/cilium/cilium/contributors","subscribers_url":"https://api.github.com/repos/cilium/cilium/subscribers","subscription_url":"https://api.github.com/repos/cilium/cilium/subscription","commits_url":"https://api.github.com/repos/cilium/cilium/commits{/sha}","git_commits_url":"https://api.github.com/repos/cilium/cilium/git/commits{/sha}","comments_url":"https://api.github.com/repos/cilium/cilium/comments{/number}","issue_comment_url":"https://api.github.com/repos/cilium/cilium/issues/comments{/number}","contents_url":"https://api.github.com/repos/cilium/cilium/contents/{+path}","compare_url":"https://api.github.com/repos/cilium/cilium/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cilium/cilium/merges","archive_url":"https://api.github.com/repos/cilium/cilium/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cilium/cilium/downloads","issues_url":"https://api.github.com/repos/cilium/cilium/issues{/number}","pulls_url":"https://api.github.com/repos/cilium/cilium/pulls{/number}","milestones_url":"https://api.github.com/repos/cilium/cilium/milestones{/number}","notifications_url":"https://api.github.com/repos/cilium/cilium/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cilium/cilium/labels{/name}","releases_url":"https://api.github.com/repos/cilium/cilium/releases{/id}","deployments_url":"https://api.github.com/repos/cilium/cilium/deployments","created_at":"2015-12-16T12:33:31Z","updated_at":"2018-03-22T17:33:32Z","pushed_at":"2018-03-22T17:52:09Z","git_url":"git://github.com/cilium/cilium.git","ssh_url":"git@github.com:cilium/cilium.git","clone_url":"https://github.com/cilium/cilium.git","svn_url":"https://github.com/cilium/cilium","homepage":"","size":43325,"stargazers_count":1668,"watchers_count":1668,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":158,"mirror_url":null,"archived":false,"open_issues_count":392,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":158,"open_issues":392,"watchers":1668,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/cilium/cilium/pulls/3164"},"html":{"href":"https://github.com/cilium/cilium/pull/3164"},"issue":{"href":"https://api.github.com/repos/cilium/cilium/issues/3164"},"comments":{"href":"https://api.github.com/repos/cilium/cilium/issues/3164/comments"},"review_comments":{"href":"https://api.github.com/repos/cilium/cilium/pulls/3164/comments"},"review_comment":{"href":"https://api.github.com/repos/cilium/cilium/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/cilium/cilium/pulls/3164/commits"},"statuses":{"href":"https://api.github.com/repos/cilium/cilium/statuses/b7a5cf4f4a6d6131045d94b7054e934cad73ed0b"}},"author_association":"OWNER"}}
{"actor":{"display_login":"ianvernon"}}