{"action":"created","comment":{"url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/pulls/comments/90654469","pull_request_review_id":11173501,"id":90654469,"diff_hunk":"@@ -0,0 +1,43 @@\n+package nginx\n+\n+import (\n+\t\"fmt\"\n+\n+\t\"github.com/golang/glog\"\n+\t\"k8s.io/kubernetes/pkg/apis/extensions\"\n+)\n+\n+type NeverMerger struct {","path":"nginx-controller/nginx/nevermerger.go","position":10,"original_position":10,"commit_id":"cb9cfd2e025b69b2c893f20eff0e75d692912ce9","original_commit_id":"e175f3c3dd77084397d96049c464d87b96b64767","user":{"login":"pleshakov","id":2199726,"avatar_url":"https://avatars.githubusercontent.com/u/2199726?v=3","gravatar_id":"","url":"https://api.github.com/users/pleshakov","html_url":"https://github.com/pleshakov","followers_url":"https://api.github.com/users/pleshakov/followers","following_url":"https://api.github.com/users/pleshakov/following{/other_user}","gists_url":"https://api.github.com/users/pleshakov/gists{/gist_id}","starred_url":"https://api.github.com/users/pleshakov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pleshakov/subscriptions","organizations_url":"https://api.github.com/users/pleshakov/orgs","repos_url":"https://api.github.com/users/pleshakov/repos","events_url":"https://api.github.com/users/pleshakov/events{/privacy}","received_events_url":"https://api.github.com/users/pleshakov/received_events","type":"User","site_admin":false},"body":"> Adding a additional collision check afterwards will only be redundant self validation, which should be put into the unittests of the Merger implementation.\r\n\r\nI think  a conditional statement in the configurator is what we need:\r\n**if** merging is enabled then do the merging, using one of the implementations\r\n**else** do the hostname checking, if any error -- ignore the Ingress and report the error\r\n\r\n> Edit: We could also rename this component to something like Deduplicator, if this matches the behavior better ;)\r\n\r\nbut it will still have the interface of the meger","created_at":"2016-12-02T14:52:49Z","updated_at":"2016-12-02T14:52:49Z","html_url":"https://github.com/nginxinc/kubernetes-ingress/pull/77#discussion_r90654469","pull_request_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/pulls/77","_links":{"self":{"href":"https://api.github.com/repos/nginxinc/kubernetes-ingress/pulls/comments/90654469"},"html":{"href":"https://github.com/nginxinc/kubernetes-ingress/pull/77#discussion_r90654469"},"pull_request":{"href":"https://api.github.com/repos/nginxinc/kubernetes-ingress/pulls/77"}}},"pull_request":{"url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/pulls/77","id":94525459,"html_url":"https://github.com/nginxinc/kubernetes-ingress/pull/77","diff_url":"https://github.com/nginxinc/kubernetes-ingress/pull/77.diff","patch_url":"https://github.com/nginxinc/kubernetes-ingress/pull/77.patch","issue_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/issues/77","number":77,"state":"open","locked":false,"title":"Implement merging strategy","user":{"login":"thetechnick","id":7278896,"avatar_url":"https://avatars.githubusercontent.com/u/7278896?v=3","gravatar_id":"","url":"https://api.github.com/users/thetechnick","html_url":"https://github.com/thetechnick","followers_url":"https://api.github.com/users/thetechnick/followers","following_url":"https://api.github.com/users/thetechnick/following{/other_user}","gists_url":"https://api.github.com/users/thetechnick/gists{/gist_id}","starred_url":"https://api.github.com/users/thetechnick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thetechnick/subscriptions","organizations_url":"https://api.github.com/users/thetechnick/orgs","repos_url":"https://api.github.com/users/thetechnick/repos","events_url":"https://api.github.com/users/thetechnick/events{/privacy}","received_events_url":"https://api.github.com/users/thetechnick/received_events","type":"User","site_admin":false},"body":"I have implemented a first version to fix issue #76, some cleanup ist still needed\r\n\r\nThis pull request introduces a new component, the intermixer (\"suggestions for a better name are welcome :P \"), this component will act as a final layer for the generated IngressNginxConfig.\r\nThe core of this strategy is to generate a file in the conf.d/ folder for each server and not for each ingress.\r\n\r\nAfter receiving the IngressNginxConfig of a new/updated ingress object, the intermixer performs the following steps:\r\n1. Check if there are configs generated by other ingress objects that contain a server with the same name of one of the new/updated servers.\r\n2. Get all configs that contain a server with one of those names\r\n3. Sort these configs ascending after the creation time of the ingress object, so the oldest config is the first index\r\n4. Use the first server as a base and add the locations of every other server in the list, if there is a conflict (same path) the newer location will be used\r\n5. Get a list of upstreams used in the newly composed server\r\n6. Return a list of new IngressNginxConfig objects each containing one server and its upstreams\r\n\r\nNotes:\r\n- I am using a feature of golang 1.7 to setup sequential tests using t.Run()\r\n- The unittests may not cover all edge cases","created_at":"2016-11-20T17:34:00Z","updated_at":"2016-12-02T14:52:49Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b3e8e106436535886a1db35b2fe1b48fd8078628","assignee":null,"assignees":[],"milestone":{"url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/milestones/1","html_url":"https://github.com/nginxinc/kubernetes-ingress/milestones/v0.7.0","labels_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/milestones/1/labels","id":2161092,"number":1,"title":"v0.7.0","description":"","creator":{"login":"pleshakov","id":2199726,"avatar_url":"https://avatars.githubusercontent.com/u/2199726?v=3","gravatar_id":"","url":"https://api.github.com/users/pleshakov","html_url":"https://github.com/pleshakov","followers_url":"https://api.github.com/users/pleshakov/followers","following_url":"https://api.github.com/users/pleshakov/following{/other_user}","gists_url":"https://api.github.com/users/pleshakov/gists{/gist_id}","starred_url":"https://api.github.com/users/pleshakov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pleshakov/subscriptions","organizations_url":"https://api.github.com/users/pleshakov/orgs","repos_url":"https://api.github.com/users/pleshakov/repos","events_url":"https://api.github.com/users/pleshakov/events{/privacy}","received_events_url":"https://api.github.com/users/pleshakov/received_events","type":"User","site_admin":false},"open_issues":5,"closed_issues":4,"state":"open","created_at":"2016-11-28T14:37:05Z","updated_at":"2016-12-01T19:48:17Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/pulls/77/commits","review_comments_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/pulls/77/comments","review_comment_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/pulls/comments{/number}","comments_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/issues/77/comments","statuses_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/statuses/cb9cfd2e025b69b2c893f20eff0e75d692912ce9","head":{"label":"thetechnick:ingress-merging","ref":"ingress-merging","sha":"cb9cfd2e025b69b2c893f20eff0e75d692912ce9","user":{"login":"thetechnick","id":7278896,"avatar_url":"https://avatars.githubusercontent.com/u/7278896?v=3","gravatar_id":"","url":"https://api.github.com/users/thetechnick","html_url":"https://github.com/thetechnick","followers_url":"https://api.github.com/users/thetechnick/followers","following_url":"https://api.github.com/users/thetechnick/following{/other_user}","gists_url":"https://api.github.com/users/thetechnick/gists{/gist_id}","starred_url":"https://api.github.com/users/thetechnick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thetechnick/subscriptions","organizations_url":"https://api.github.com/users/thetechnick/orgs","repos_url":"https://api.github.com/users/thetechnick/repos","events_url":"https://api.github.com/users/thetechnick/events{/privacy}","received_events_url":"https://api.github.com/users/thetechnick/received_events","type":"User","site_admin":false},"repo":{"id":73461496,"name":"kubernetes-ingress","full_name":"thetechnick/kubernetes-ingress","owner":{"login":"thetechnick","id":7278896,"avatar_url":"https://avatars.githubusercontent.com/u/7278896?v=3","gravatar_id":"","url":"https://api.github.com/users/thetechnick","html_url":"https://github.com/thetechnick","followers_url":"https://api.github.com/users/thetechnick/followers","following_url":"https://api.github.com/users/thetechnick/following{/other_user}","gists_url":"https://api.github.com/users/thetechnick/gists{/gist_id}","starred_url":"https://api.github.com/users/thetechnick/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thetechnick/subscriptions","organizations_url":"https://api.github.com/users/thetechnick/orgs","repos_url":"https://api.github.com/users/thetechnick/repos","events_url":"https://api.github.com/users/thetechnick/events{/privacy}","received_events_url":"https://api.github.com/users/thetechnick/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/thetechnick/kubernetes-ingress","description":"NGINX and  NGINX Plus Ingress Controllers for Kubernetes","fork":true,"url":"https://api.github.com/repos/thetechnick/kubernetes-ingress","forks_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/forks","keys_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/keys{/key_id}","collaborators_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/teams","hooks_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/hooks","issue_events_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/issues/events{/number}","events_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/events","assignees_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/assignees{/user}","branches_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/branches{/branch}","tags_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/tags","blobs_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/git/refs{/sha}","trees_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/git/trees{/sha}","statuses_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/statuses/{sha}","languages_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/languages","stargazers_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/stargazers","contributors_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/contributors","subscribers_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/subscribers","subscription_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/subscription","commits_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/commits{/sha}","git_commits_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/git/commits{/sha}","comments_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/comments{/number}","issue_comment_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/issues/comments{/number}","contents_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/contents/{+path}","compare_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/compare/{base}...{head}","merges_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/merges","archive_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/downloads","issues_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/issues{/number}","pulls_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/pulls{/number}","milestones_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/milestones{/number}","notifications_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/labels{/name}","releases_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/releases{/id}","deployments_url":"https://api.github.com/repos/thetechnick/kubernetes-ingress/deployments","created_at":"2016-11-11T08:53:58Z","updated_at":"2016-11-11T08:53:59Z","pushed_at":"2016-12-02T14:42:56Z","git_url":"git://github.com/thetechnick/kubernetes-ingress.git","ssh_url":"git@github.com:thetechnick/kubernetes-ingress.git","clone_url":"https://github.com/thetechnick/kubernetes-ingress.git","svn_url":"https://github.com/thetechnick/kubernetes-ingress","homepage":null,"size":7069,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"nginxinc:master","ref":"master","sha":"38405974e029430f88e544a2fd24f4d969fbf824","user":{"login":"nginxinc","id":8629072,"avatar_url":"https://avatars.githubusercontent.com/u/8629072?v=3","gravatar_id":"","url":"https://api.github.com/users/nginxinc","html_url":"https://github.com/nginxinc","followers_url":"https://api.github.com/users/nginxinc/followers","following_url":"https://api.github.com/users/nginxinc/following{/other_user}","gists_url":"https://api.github.com/users/nginxinc/gists{/gist_id}","starred_url":"https://api.github.com/users/nginxinc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nginxinc/subscriptions","organizations_url":"https://api.github.com/users/nginxinc/orgs","repos_url":"https://api.github.com/users/nginxinc/repos","events_url":"https://api.github.com/users/nginxinc/events{/privacy}","received_events_url":"https://api.github.com/users/nginxinc/received_events","type":"Organization","site_admin":false},"repo":{"id":53553027,"name":"kubernetes-ingress","full_name":"nginxinc/kubernetes-ingress","owner":{"login":"nginxinc","id":8629072,"avatar_url":"https://avatars.githubusercontent.com/u/8629072?v=3","gravatar_id":"","url":"https://api.github.com/users/nginxinc","html_url":"https://github.com/nginxinc","followers_url":"https://api.github.com/users/nginxinc/followers","following_url":"https://api.github.com/users/nginxinc/following{/other_user}","gists_url":"https://api.github.com/users/nginxinc/gists{/gist_id}","starred_url":"https://api.github.com/users/nginxinc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nginxinc/subscriptions","organizations_url":"https://api.github.com/users/nginxinc/orgs","repos_url":"https://api.github.com/users/nginxinc/repos","events_url":"https://api.github.com/users/nginxinc/events{/privacy}","received_events_url":"https://api.github.com/users/nginxinc/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/nginxinc/kubernetes-ingress","description":"NGINX and  NGINX Plus Ingress Controllers for Kubernetes","fork":false,"url":"https://api.github.com/repos/nginxinc/kubernetes-ingress","forks_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/forks","keys_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/keys{/key_id}","collaborators_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/teams","hooks_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/hooks","issue_events_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/issues/events{/number}","events_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/events","assignees_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/assignees{/user}","branches_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/branches{/branch}","tags_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/tags","blobs_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/git/refs{/sha}","trees_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/git/trees{/sha}","statuses_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/statuses/{sha}","languages_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/languages","stargazers_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/stargazers","contributors_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/contributors","subscribers_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/subscribers","subscription_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/subscription","commits_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/commits{/sha}","git_commits_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/git/commits{/sha}","comments_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/comments{/number}","issue_comment_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/issues/comments{/number}","contents_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/contents/{+path}","compare_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/compare/{base}...{head}","merges_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/merges","archive_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/downloads","issues_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/issues{/number}","pulls_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/pulls{/number}","milestones_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/milestones{/number}","notifications_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/labels{/name}","releases_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/releases{/id}","deployments_url":"https://api.github.com/repos/nginxinc/kubernetes-ingress/deployments","created_at":"2016-03-10T03:45:12Z","updated_at":"2016-12-01T02:01:20Z","pushed_at":"2016-12-02T14:00:42Z","git_url":"git://github.com/nginxinc/kubernetes-ingress.git","ssh_url":"git@github.com:nginxinc/kubernetes-ingress.git","clone_url":"https://github.com/nginxinc/kubernetes-ingress.git","svn_url":"https://github.com/nginxinc/kubernetes-ingress","homepage":null,"size":7090,"stargazers_count":125,"watchers_count":125,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":47,"mirror_url":null,"open_issues_count":14,"forks":47,"open_issues":14,"watchers":125,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/nginxinc/kubernetes-ingress/pulls/77"},"html":{"href":"https://github.com/nginxinc/kubernetes-ingress/pull/77"},"issue":{"href":"https://api.github.com/repos/nginxinc/kubernetes-ingress/issues/77"},"comments":{"href":"https://api.github.com/repos/nginxinc/kubernetes-ingress/issues/77/comments"},"review_comments":{"href":"https://api.github.com/repos/nginxinc/kubernetes-ingress/pulls/77/comments"},"review_comment":{"href":"https://api.github.com/repos/nginxinc/kubernetes-ingress/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/nginxinc/kubernetes-ingress/pulls/77/commits"},"statuses":{"href":"https://api.github.com/repos/nginxinc/kubernetes-ingress/statuses/cb9cfd2e025b69b2c893f20eff0e75d692912ce9"}}}}
{"actor":{"display_login":"pleshakov"}}