{"action":"closed","number":107,"pull_request":{"url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/pulls/107","id":233178206,"node_id":"MDExOlB1bGxSZXF1ZXN0MjMzMTc4MjA2","html_url":"https://github.com/openshift/cluster-api-provider-aws/pull/107","diff_url":"https://github.com/openshift/cluster-api-provider-aws/pull/107.diff","patch_url":"https://github.com/openshift/cluster-api-provider-aws/pull/107.patch","issue_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/issues/107","number":107,"state":"closed","locked":false,"title":"WIP: Move interaction with aws services under separate packages","user":{"login":"ingvagabund","id":8055242,"node_id":"MDQ6VXNlcjgwNTUyNDI=","avatar_url":"https://avatars2.githubusercontent.com/u/8055242?v=4","gravatar_id":"","url":"https://api.github.com/users/ingvagabund","html_url":"https://github.com/ingvagabund","followers_url":"https://api.github.com/users/ingvagabund/followers","following_url":"https://api.github.com/users/ingvagabund/following{/other_user}","gists_url":"https://api.github.com/users/ingvagabund/gists{/gist_id}","starred_url":"https://api.github.com/users/ingvagabund/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ingvagabund/subscriptions","organizations_url":"https://api.github.com/users/ingvagabund/orgs","repos_url":"https://api.github.com/users/ingvagabund/repos","events_url":"https://api.github.com/users/ingvagabund/events{/privacy}","received_events_url":"https://api.github.com/users/ingvagabund/received_events","type":"User","site_admin":false},"body":"- moving all interactions with ec2 and elb aws services under separate packages so the corresponding methods/functions can be unit-tested separately.\r\n- encapsulating aws client into  `instancesRuntime` and `loadBalancersRuntime` so the actuator is aws knowledge free\r\n\r\nIt could make sense to keep the actuator all internals aware but it complicates the unit testing process and make the code more coupled. It may seem this changes is not needed or it has no eminent impact on the code quality. Yet, the more code we put into the `actuator.go` file, the harder it gets to review since there all the interaction code is owned by the actuator itself. I recommend to create smaller packages each with its own semantics:\r\n- `pkg/actuators/machine/instances` - anything manipulating with ec2 instances goes here\r\n- `pkg/actuators/machine/loadbalancers` - anything manipulation with elb goes here\r\n\r\nPlease, don't put additional code into `actuator.go` unless it's built on top of `instances`/`loadbalancer` interfaces. The goal is to make the actuator create/update/delete operations declarative. It means I am putting more constraints on where each piece of code can live. ","created_at":"2018-11-23T11:49:09Z","updated_at":"2018-11-27T13:42:49Z","closed_at":"2018-11-27T13:42:49Z","merged_at":null,"merge_commit_sha":"db7745a5ba15a4da9ff778a92537233d0ec4a507","assignee":null,"assignees":[],"requested_reviewers":[{"login":"spangenberg","id":236406,"node_id":"MDQ6VXNlcjIzNjQwNg==","avatar_url":"https://avatars3.githubusercontent.com/u/236406?v=4","gravatar_id":"","url":"https://api.github.com/users/spangenberg","html_url":"https://github.com/spangenberg","followers_url":"https://api.github.com/users/spangenberg/followers","following_url":"https://api.github.com/users/spangenberg/following{/other_user}","gists_url":"https://api.github.com/users/spangenberg/gists{/gist_id}","starred_url":"https://api.github.com/users/spangenberg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spangenberg/subscriptions","organizations_url":"https://api.github.com/users/spangenberg/orgs","repos_url":"https://api.github.com/users/spangenberg/repos","events_url":"https://api.github.com/users/spangenberg/events{/privacy}","received_events_url":"https://api.github.com/users/spangenberg/received_events","type":"User","site_admin":false},{"login":"bison","id":240676,"node_id":"MDQ6VXNlcjI0MDY3Ng==","avatar_url":"https://avatars0.githubusercontent.com/u/240676?v=4","gravatar_id":"","url":"https://api.github.com/users/bison","html_url":"https://github.com/bison","followers_url":"https://api.github.com/users/bison/followers","following_url":"https://api.github.com/users/bison/following{/other_user}","gists_url":"https://api.github.com/users/bison/gists{/gist_id}","starred_url":"https://api.github.com/users/bison/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bison/subscriptions","organizations_url":"https://api.github.com/users/bison/orgs","repos_url":"https://api.github.com/users/bison/repos","events_url":"https://api.github.com/users/bison/events{/privacy}","received_events_url":"https://api.github.com/users/bison/received_events","type":"User","site_admin":false},{"login":"paulfantom","id":3531758,"node_id":"MDQ6VXNlcjM1MzE3NTg=","avatar_url":"https://avatars1.githubusercontent.com/u/3531758?v=4","gravatar_id":"","url":"https://api.github.com/users/paulfantom","html_url":"https://github.com/paulfantom","followers_url":"https://api.github.com/users/paulfantom/followers","following_url":"https://api.github.com/users/paulfantom/following{/other_user}","gists_url":"https://api.github.com/users/paulfantom/gists{/gist_id}","starred_url":"https://api.github.com/users/paulfantom/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/paulfantom/subscriptions","organizations_url":"https://api.github.com/users/paulfantom/orgs","repos_url":"https://api.github.com/users/paulfantom/repos","events_url":"https://api.github.com/users/paulfantom/events{/privacy}","received_events_url":"https://api.github.com/users/paulfantom/received_events","type":"User","site_admin":false},{"login":"vikaschoudhary16","id":11936386,"node_id":"MDQ6VXNlcjExOTM2Mzg2","avatar_url":"https://avatars3.githubusercontent.com/u/11936386?v=4","gravatar_id":"","url":"https://api.github.com/users/vikaschoudhary16","html_url":"https://github.com/vikaschoudhary16","followers_url":"https://api.github.com/users/vikaschoudhary16/followers","following_url":"https://api.github.com/users/vikaschoudhary16/following{/other_user}","gists_url":"https://api.github.com/users/vikaschoudhary16/gists{/gist_id}","starred_url":"https://api.github.com/users/vikaschoudhary16/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vikaschoudhary16/subscriptions","organizations_url":"https://api.github.com/users/vikaschoudhary16/orgs","repos_url":"https://api.github.com/users/vikaschoudhary16/repos","events_url":"https://api.github.com/users/vikaschoudhary16/events{/privacy}","received_events_url":"https://api.github.com/users/vikaschoudhary16/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":1003574140,"node_id":"MDU6TGFiZWwxMDAzNTc0MTQw","url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/labels/do-not-merge/work-in-progress","name":"do-not-merge/work-in-progress","color":"e11d21","default":false},{"id":1003578039,"node_id":"MDU6TGFiZWwxMDAzNTc4MDM5","url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/labels/size/XXL","name":"size/XXL","color":"ee0000","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/pulls/107/commits","review_comments_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/pulls/107/comments","review_comment_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/pulls/comments{/number}","comments_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/issues/107/comments","statuses_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/statuses/f96ca07399420a132dce344d57fb6f976be01818","head":{"label":"ingvagabund:move-aws-services-interaction-under-separate-package","ref":"move-aws-services-interaction-under-separate-package","sha":"f96ca07399420a132dce344d57fb6f976be01818","user":{"login":"ingvagabund","id":8055242,"node_id":"MDQ6VXNlcjgwNTUyNDI=","avatar_url":"https://avatars2.githubusercontent.com/u/8055242?v=4","gravatar_id":"","url":"https://api.github.com/users/ingvagabund","html_url":"https://github.com/ingvagabund","followers_url":"https://api.github.com/users/ingvagabund/followers","following_url":"https://api.github.com/users/ingvagabund/following{/other_user}","gists_url":"https://api.github.com/users/ingvagabund/gists{/gist_id}","starred_url":"https://api.github.com/users/ingvagabund/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ingvagabund/subscriptions","organizations_url":"https://api.github.com/users/ingvagabund/orgs","repos_url":"https://api.github.com/users/ingvagabund/repos","events_url":"https://api.github.com/users/ingvagabund/events{/privacy}","received_events_url":"https://api.github.com/users/ingvagabund/received_events","type":"User","site_admin":false},"repo":{"id":142441075,"node_id":"MDEwOlJlcG9zaXRvcnkxNDI0NDEwNzU=","name":"cluster-api-provider-aws","full_name":"ingvagabund/cluster-api-provider-aws","private":false,"owner":{"login":"ingvagabund","id":8055242,"node_id":"MDQ6VXNlcjgwNTUyNDI=","avatar_url":"https://avatars2.githubusercontent.com/u/8055242?v=4","gravatar_id":"","url":"https://api.github.com/users/ingvagabund","html_url":"https://github.com/ingvagabund","followers_url":"https://api.github.com/users/ingvagabund/followers","following_url":"https://api.github.com/users/ingvagabund/following{/other_user}","gists_url":"https://api.github.com/users/ingvagabund/gists{/gist_id}","starred_url":"https://api.github.com/users/ingvagabund/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ingvagabund/subscriptions","organizations_url":"https://api.github.com/users/ingvagabund/orgs","repos_url":"https://api.github.com/users/ingvagabund/repos","events_url":"https://api.github.com/users/ingvagabund/events{/privacy}","received_events_url":"https://api.github.com/users/ingvagabund/received_events","type":"User","site_admin":false},"html_url":"https://github.com/ingvagabund/cluster-api-provider-aws","description":null,"fork":true,"url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws","forks_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/forks","keys_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/teams","hooks_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/hooks","issue_events_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/issues/events{/number}","events_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/events","assignees_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/assignees{/user}","branches_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/branches{/branch}","tags_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/tags","blobs_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/git/refs{/sha}","trees_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/statuses/{sha}","languages_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/languages","stargazers_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/stargazers","contributors_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/contributors","subscribers_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/subscribers","subscription_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/subscription","commits_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/commits{/sha}","git_commits_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/git/commits{/sha}","comments_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/comments{/number}","issue_comment_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/issues/comments{/number}","contents_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/contents/{+path}","compare_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/merges","archive_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/downloads","issues_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/issues{/number}","pulls_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/pulls{/number}","milestones_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/milestones{/number}","notifications_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/labels{/name}","releases_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/releases{/id}","deployments_url":"https://api.github.com/repos/ingvagabund/cluster-api-provider-aws/deployments","created_at":"2018-07-26T12:57:17Z","updated_at":"2018-09-28T12:12:40Z","pushed_at":"2018-11-27T12:23:19Z","git_url":"git://github.com/ingvagabund/cluster-api-provider-aws.git","ssh_url":"git@github.com:ingvagabund/cluster-api-provider-aws.git","clone_url":"https://github.com/ingvagabund/cluster-api-provider-aws.git","svn_url":"https://github.com/ingvagabund/cluster-api-provider-aws","homepage":null,"size":77588,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"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":"openshift:master","ref":"master","sha":"9104c480e63d9eee05d59cded4ac6b757ab235bd","user":{"login":"openshift","id":792337,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc5MjMzNw==","avatar_url":"https://avatars3.githubusercontent.com/u/792337?v=4","gravatar_id":"","url":"https://api.github.com/users/openshift","html_url":"https://github.com/openshift","followers_url":"https://api.github.com/users/openshift/followers","following_url":"https://api.github.com/users/openshift/following{/other_user}","gists_url":"https://api.github.com/users/openshift/gists{/gist_id}","starred_url":"https://api.github.com/users/openshift/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openshift/subscriptions","organizations_url":"https://api.github.com/users/openshift/orgs","repos_url":"https://api.github.com/users/openshift/repos","events_url":"https://api.github.com/users/openshift/events{/privacy}","received_events_url":"https://api.github.com/users/openshift/received_events","type":"Organization","site_admin":false},"repo":{"id":142044780,"node_id":"MDEwOlJlcG9zaXRvcnkxNDIwNDQ3ODA=","name":"cluster-api-provider-aws","full_name":"openshift/cluster-api-provider-aws","private":false,"owner":{"login":"openshift","id":792337,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc5MjMzNw==","avatar_url":"https://avatars3.githubusercontent.com/u/792337?v=4","gravatar_id":"","url":"https://api.github.com/users/openshift","html_url":"https://github.com/openshift","followers_url":"https://api.github.com/users/openshift/followers","following_url":"https://api.github.com/users/openshift/following{/other_user}","gists_url":"https://api.github.com/users/openshift/gists{/gist_id}","starred_url":"https://api.github.com/users/openshift/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openshift/subscriptions","organizations_url":"https://api.github.com/users/openshift/orgs","repos_url":"https://api.github.com/users/openshift/repos","events_url":"https://api.github.com/users/openshift/events{/privacy}","received_events_url":"https://api.github.com/users/openshift/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/openshift/cluster-api-provider-aws","description":null,"fork":true,"url":"https://api.github.com/repos/openshift/cluster-api-provider-aws","forks_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/forks","keys_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/keys{/key_id}","collaborators_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/teams","hooks_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/hooks","issue_events_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/issues/events{/number}","events_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/events","assignees_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/assignees{/user}","branches_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/branches{/branch}","tags_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/tags","blobs_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/git/refs{/sha}","trees_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/git/trees{/sha}","statuses_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/statuses/{sha}","languages_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/languages","stargazers_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/stargazers","contributors_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/contributors","subscribers_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/subscribers","subscription_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/subscription","commits_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/commits{/sha}","git_commits_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/git/commits{/sha}","comments_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/comments{/number}","issue_comment_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/issues/comments{/number}","contents_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/contents/{+path}","compare_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/compare/{base}...{head}","merges_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/merges","archive_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/downloads","issues_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/issues{/number}","pulls_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/pulls{/number}","milestones_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/milestones{/number}","notifications_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/labels{/name}","releases_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/releases{/id}","deployments_url":"https://api.github.com/repos/openshift/cluster-api-provider-aws/deployments","created_at":"2018-07-23T17:08:48Z","updated_at":"2018-11-22T17:21:23Z","pushed_at":"2018-11-27T12:23:21Z","git_url":"git://github.com/openshift/cluster-api-provider-aws.git","ssh_url":"git@github.com:openshift/cluster-api-provider-aws.git","clone_url":"https://github.com/openshift/cluster-api-provider-aws.git","svn_url":"https://github.com/openshift/cluster-api-provider-aws","homepage":null,"size":63289,"stargazers_count":2,"watchers_count":2,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":9,"mirror_url":null,"archived":false,"open_issues_count":13,"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":9,"open_issues":13,"watchers":2,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/openshift/cluster-api-provider-aws/pulls/107"},"html":{"href":"https://github.com/openshift/cluster-api-provider-aws/pull/107"},"issue":{"href":"https://api.github.com/repos/openshift/cluster-api-provider-aws/issues/107"},"comments":{"href":"https://api.github.com/repos/openshift/cluster-api-provider-aws/issues/107/comments"},"review_comments":{"href":"https://api.github.com/repos/openshift/cluster-api-provider-aws/pulls/107/comments"},"review_comment":{"href":"https://api.github.com/repos/openshift/cluster-api-provider-aws/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/openshift/cluster-api-provider-aws/pulls/107/commits"},"statuses":{"href":"https://api.github.com/repos/openshift/cluster-api-provider-aws/statuses/f96ca07399420a132dce344d57fb6f976be01818"}},"author_association":"MEMBER","merged":false,"mergeable":true,"rebaseable":true,"mergeable_state":"unstable","merged_by":null,"comments":17,"review_comments":12,"maintainer_can_modify":false,"commits":1,"additions":683,"deletions":678,"changed_files":11}}
{"actor":{"display_login":"ingvagabund"}}