{"action":"created","comment":{"url":"https://api.github.com/repos/cilium/cilium/pulls/comments/174996455","pull_request_review_id":104453597,"id":174996455,"diff_hunk":"@@ -0,0 +1,244 @@\n+// Copyright 2016-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/labels\"\n+)\n+\n+// Rule is a policy rule which must be applied to all endpoints which match the\n+// labels contained in the endpointSelector\n+//\n+// Each rule is split into an ingress section which contains all rules\n+// applicable at ingress, and an egress section applicable at egress. For rule\n+// types such as `L4Rule` and `CIDR` which can be applied at both ingress and\n+// egress, both ingress and egress side have to either specifically allow the\n+// connection or one side has to be omitted.\n+//\n+// Either ingress, egress, or both can be provided. If both ingress and egress\n+// are omitted, the rule has no effect.\n+type Rule struct {\n+\t// EndpointSelector selects all endpoints which should be subject to\n+\t// this rule. Cannot be empty.\n+\tEndpointSelector EndpointSelector `json:\"endpointSelector\"`\n+\n+\t// Ingress is a list of IngressRule which are enforced at ingress.\n+\t// If omitted or empty, this rule does not apply at ingress.\n+\t//\n+\t// +optional\n+\tIngress []IngressRule `json:\"ingress,omitempty\"`\n+\n+\t// Egress is a list of EgressRule which are enforced at egress.\n+\t// If omitted or empty, this rule does not apply at egress.\n+\t//\n+\t// +optional\n+\tEgress []EgressRule `json:\"egress,omitempty\"`\n+\n+\t// Labels is a list of optional strings which can be used to\n+\t// re-identify the rule or to store metadata. It is possible to lookup\n+\t// or delete strings based on labels. Labels are not required to be\n+\t// unique, multiple rules can have overlapping or identical labels.\n+\t//\n+\t// +optional\n+\tLabels labels.LabelArray `json:\"labels,omitempty\"`\n+\n+\t// Description is a free form string, it can be used by the creator of\n+\t// the rule to store human readable explanation of the purpose of this\n+\t// rule. Rules cannot be identified by comment.\n+\t//\n+\t// +optional\n+\tDescription string `json:\"description,omitempty\"`\n+}\n+\n+type IngressRule struct {\n+\tFromEndpoint *Endpoint `json:\"fromEndpoint,omitempty\"`\n+\n+\tFromRequire *Endpoint `json:\"fromRequire,omitempty\"`\n+\n+\tFromIPs *CIDRMeta `json:\"fromIPs,omitempty\"`\n+\n+\tFromEntity *EntityRule `json:\"fromEntity,omitempty\"`\n+}\n+\n+type EgressRule struct {\n+\tToEndpoint *Endpoint `json:\"toEndpoint,omitempty\"`\n+\n+\tToRequire *Endpoint `json:\"toRequire,omitempty\"`\n+\n+\tToIPs *CIDRMeta `json:\"toIPs,omitempty\"`\n+\n+\tToEntity *EntityRule `json:\"toEntity,omitempty\"`\n+\n+\tToService *ServiceRule `json:\"toService,omitempty\"`\n+}\n+\n+type Endpoint struct {\n+\tEndpointSelector *EndpointSelector `json:\"endpointSelector,omitempty\"`\n+\tToPorts          PortRules         `json:\"toPorts,omitempty\"`\n+}\n+\n+type CIDRMeta struct {\n+\tCIDR    *CIDRRule `json:\"cidrSelector,omitempty\"`\n+\tToPorts PortRules `json:\"toPorts,omitempty\"`\n+}\n+\n+type EntityRule struct {\n+\tEntity  *Entity   `json:\"entities,omitempty\"`\n+\tToPorts PortRules `json:\"toPorts,omitempty\"`\n+}\n+\n+// Service wraps around selectors for services\n+type Service struct {\n+\t// K8sServiceSelector selects services by k8s labels and namespace\n+\tK8sServiceSelector *K8sServiceSelectorNamespace `json:\"k8sServiceSelector,omitempty\"`\n+\t// K8sService selects service by name and namespace pair\n+\tK8sService *K8sServiceNamespace `json:\"k8sService,omitempty\"`\n+}\n+\n+// K8sServiceNamespace is an abstraction for the k8s service + namespace types.\n+type K8sServiceNamespace struct {\n+\tServiceName string `json:\"serviceName,omitempty\"`\n+\tNamespace   string `json:\"serviceNamespace,omitempty\"`\n+}\n+\n+// K8sServiceSelectorNamespace wraps service selector with namespace\n+type K8sServiceSelectorNamespace struct {\n+\tSelector  ServiceSelector `json:\"selectorSelector\"`\n+\tNamespace string          `json:\"namespace,omitempty\"`\n+}\n+\n+type ServiceRule struct {\n+\tService Service   `json:\"service,omitempty\"`\n+\tToPorts PortRules `json:\"toServicePorts,omitempty\"`\n+}\n+\n+// PortProtocol specifies an L4 port with an optional transport protocol\n+type PortProtocol struct {\n+\t// Port is an L4 port number. For now the string will be strictly\n+\t// parsed as a single uint16. In the future, this field may support\n+\t// ranges in the form \"1024-2048\n+\tPort string `json:\"port\"`\n+\n+\t// Protocol is the L4 protocol. If omitted or empty, any protocol\n+\t// matches. Accepted values: \"TCP\", \"UDP\", \"\"/\"ANY\"\n+\t//\n+\t// Matching on ICMP is not supported.\n+\t//\n+\t// +optional\n+\tProtocol L4Proto `json:\"protocol,omitempty\"`\n+}\n+\n+// PortRule is a list of ports/protocol combinations with optional Layer 7\n+// rules which must be met.\n+type PortRule struct {\n+\t// Ports is a list of L4 port/protocol\n+\t//\n+\t// If omitted or empty but RedirectPort is set, then all ports of the\n+\t// endpoint subject to either the ingress or egress rule are being\n+\t// redirected.\n+\t//\n+\t// +optional\n+\tPorts []PortProtocol `json:\"ports,omitempty\"`\n+\n+\t// Rules is a list of additional port level rules which must be met in\n+\t// order for the PortRule to allow the traffic. If omitted or empty,\n+\t// no layer 7 rules are enforced.\n+\t//\n+\t// +optional\n+\tRules *L7Rules `json:\"rules,omitempty\"`\n+}\n+\n+// CIDRRule is a rule that specifies a CIDR prefix to/from which outside\n+// communication  is allowed, along with an optional list of subnets within that\n+// CIDR prefix to/from which outside communication is not allowed.\n+type CIDRRule struct {\n+\t// CIDR is a CIDR prefix / IP Block.\n+\t//\n+\tCIDR CIDR `json:\"cidr\"`\n+\n+\t// ExceptCIDRs is a list of IP blocks which the endpoint subject to the rule\n+\t// is not allowed to initiate connections to. These CIDR prefixes should be\n+\t// contained within CIDR. These exceptions are only applied to the CIDR in\n+\t// this CIDRRule, and do not apply to any other CIDR prefixes in any other\n+\t// CIDRRules.\n+\t//\n+\t// +optional\n+\tExceptCIDRs []CIDR `json:\"except,omitempty\"`\n+\n+\t// Generated indicates whether the rule was generated based on other rules\n+\t// or provided by user\n+\tGenerated bool `json:\"-\"`\n+}\n+\n+// L7Rules is a union of port level rule types. Mixing of different port\n+// level rule types is disallowed, so exactly one of the following must be set.\n+// If none are specified, then no additional port level rules are applied.\n+type L7Rules struct {\n+\t// HTTP specific rules.\n+\t//\n+\t// +optional\n+\tHTTP []PortRuleHTTP `json:\"http,omitempty\"`\n+\n+\t// Kafka-specific rules.\n+\t//\n+\t// +optional\n+\tKafka []PortRuleKafka `json:\"kafka,omitempty\"`\n+}\n+\n+type PortRules []PortRule","path":"pkg/policy/api/v3/rule.go","position":200,"original_position":200,"commit_id":"c285e1ce0bf4f2e3318b2ffa689c06758ff298fe","original_commit_id":"c285e1ce0bf4f2e3318b2ffa689c06758ff298fe","user":{"login":"houndci-bot","id":6697940,"avatar_url":"https://avatars0.githubusercontent.com/u/6697940?v=4","gravatar_id":"","url":"https://api.github.com/users/houndci-bot","html_url":"https://github.com/houndci-bot","followers_url":"https://api.github.com/users/houndci-bot/followers","following_url":"https://api.github.com/users/houndci-bot/following{/other_user}","gists_url":"https://api.github.com/users/houndci-bot/gists{/gist_id}","starred_url":"https://api.github.com/users/houndci-bot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/houndci-bot/subscriptions","organizations_url":"https://api.github.com/users/houndci-bot/orgs","repos_url":"https://api.github.com/users/houndci-bot/repos","events_url":"https://api.github.com/users/houndci-bot/events{/privacy}","received_events_url":"https://api.github.com/users/houndci-bot/received_events","type":"User","site_admin":false},"body":"exported type PortRules should have comment or be unexported","created_at":"2018-03-16T04:41:49Z","updated_at":"2018-03-16T04:41:50Z","html_url":"https://github.com/cilium/cilium/pull/3164#discussion_r174996455","pull_request_url":"https://api.github.com/repos/cilium/cilium/pulls/3164","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/cilium/cilium/pulls/comments/174996455"},"html":{"href":"https://github.com/cilium/cilium/pull/3164#discussion_r174996455"},"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":"RFC: 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\nIMO the new policy output is extremely verbose but it is way less misleading since it is more descriptive of what are the rule intentions. \r\n\r\n```\r\n---\r\nendpointSelector:\r\n  matchLabels:\r\n    any:foo: bar\r\ningress:\r\n- fromEndpoint:\r\n    endpointSelector:\r\n      matchLabels:\r\n        any:allow: all-ports\r\n- fromEndpoint:\r\n    endpointSelector:\r\n      matchLabels:\r\n        any:restrict: port-111\r\n    toPorts:\r\n    - ports:\r\n      - port: '111'\r\n        protocol: TCP\r\n- fromIPs:\r\n    cidrRule:\r\n      cidr: 1.1.1.1/32\r\n      except:\r\n      - 1.1.1.1/31\r\n    toPorts:\r\n    - ports:\r\n      - port: '111'\r\n        protocol: TCP\r\negress:\r\n- toService:\r\n    service:\r\n      k8sServiceSelector:\r\n        selectorSelector:\r\n          matchLabels:\r\n            send-to: all-ports\r\n- toService:\r\n    service:\r\n      k8sServiceSelector:\r\n        selectorSelector:\r\n          matchLabels:\r\n            send-to: port-8080\r\n    toServicePorts:\r\n    - ports:\r\n      - port: '8080'\r\n        protocol: TCP\r\n      - port: '80'\r\n        protocol: TCP\r\n      rules:\r\n        http:\r\n        - path: \"/foo\"\r\n          method: GET\r\n```\r\n\r\nFundamental missing pieces:\r\n - Change the internal code to accept the new v3\r\n - Tests?","created_at":"2018-03-16T04:41:29Z","updated_at":"2018-03-16T04:41:51Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e55cba0df8bce3bf1d64a8473c48e986aca1a9aa","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[{"name":"ci","id":2519781,"slug":"ci","description":"CI integration","privacy":"closed","url":"https://api.github.com/teams/2519781","members_url":"https://api.github.com/teams/2519781/members{/member}","repositories_url":"https://api.github.com/teams/2519781/repos","permission":"pull"},{"name":"kubernetes","id":2519785,"slug":"kubernetes","description":"Kubernetes integration","privacy":"closed","url":"https://api.github.com/teams/2519785","members_url":"https://api.github.com/teams/2519785/members{/member}","repositories_url":"https://api.github.com/teams/2519785/repos","permission":"pull"},{"name":"policy","id":2519786,"slug":"policy","description":"Policy engine","privacy":"closed","url":"https://api.github.com/teams/2519786","members_url":"https://api.github.com/teams/2519786/members{/member}","repositories_url":"https://api.github.com/teams/2519786/repos","permission":"pull"},{"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":"agent","id":2519792,"slug":"agent","description":"Cilium Agent","privacy":"closed","url":"https://api.github.com/teams/2519792","members_url":"https://api.github.com/teams/2519792/members{/member}","repositories_url":"https://api.github.com/teams/2519792/repos","permission":"pull"},{"name":"cli","id":2519794,"slug":"cli","description":"Command Line Interface tools","privacy":"closed","url":"https://api.github.com/teams/2519794","members_url":"https://api.github.com/teams/2519794/members{/member}","repositories_url":"https://api.github.com/teams/2519794/repos","permission":"pull"},{"name":"api","id":2519795,"slug":"api","description":"REST API","privacy":"closed","url":"https://api.github.com/teams/2519795","members_url":"https://api.github.com/teams/2519795/members{/member}","repositories_url":"https://api.github.com/teams/2519795/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"},{"name":"endpoint","id":2519798,"slug":"endpoint","description":"Endpoint abstraction","privacy":"closed","url":"https://api.github.com/teams/2519798","members_url":"https://api.github.com/teams/2519798/members{/member}","repositories_url":"https://api.github.com/teams/2519798/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},{"id":403244562,"url":"https://api.github.com/repos/cilium/cilium/labels/wip","name":"wip","color":"fef2c0","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/c285e1ce0bf4f2e3318b2ffa689c06758ff298fe","head":{"label":"cilium:v3-policy","ref":"v3-policy","sha":"c285e1ce0bf4f2e3318b2ffa689c06758ff298fe","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 Network 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-16T03:14:00Z","pushed_at":"2018-03-16T04:41:49Z","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":42899,"stargazers_count":1650,"watchers_count":1650,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":157,"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":157,"open_issues":392,"watchers":1650,"default_branch":"master"}},"base":{"label":"cilium:master","ref":"master","sha":"0136fc5d2656f2b5599234510feb3fdd5c483dc3","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 Network 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-16T03:14:00Z","pushed_at":"2018-03-16T04:41:49Z","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":42899,"stargazers_count":1650,"watchers_count":1650,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":157,"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":157,"open_issues":392,"watchers":1650,"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/c285e1ce0bf4f2e3318b2ffa689c06758ff298fe"}},"author_association":"OWNER"}}
{"actor":{"display_login":"houndci-bot"}}