{"action":"opened","number":1849,"pull_request":{"url":"https://api.github.com/repos/HubSpot/Singularity/pulls/1849","id":215106742,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE1MTA2NzQy","html_url":"https://github.com/HubSpot/Singularity/pull/1849","diff_url":"https://github.com/HubSpot/Singularity/pull/1849.diff","patch_url":"https://github.com/HubSpot/Singularity/pull/1849.patch","issue_url":"https://api.github.com/repos/HubSpot/Singularity/issues/1849","number":1849,"state":"open","locked":false,"title":"WIP: Slave attribute minimums","user":{"login":"pschoenfelder","id":15224190,"node_id":"MDQ6VXNlcjE1MjI0MTkw","avatar_url":"https://avatars0.githubusercontent.com/u/15224190?v=4","gravatar_id":"","url":"https://api.github.com/users/pschoenfelder","html_url":"https://github.com/pschoenfelder","followers_url":"https://api.github.com/users/pschoenfelder/followers","following_url":"https://api.github.com/users/pschoenfelder/following{/other_user}","gists_url":"https://api.github.com/users/pschoenfelder/gists{/gist_id}","starred_url":"https://api.github.com/users/pschoenfelder/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pschoenfelder/subscriptions","organizations_url":"https://api.github.com/users/pschoenfelder/orgs","repos_url":"https://api.github.com/users/pschoenfelder/repos","events_url":"https://api.github.com/users/pschoenfelder/events{/privacy}","received_events_url":"https://api.github.com/users/pschoenfelder/received_events","type":"User","site_admin":false},"body":"*Task*\r\nAllow users to set a minimum number of non-spot instances for spot-compatible requests.\r\n\r\n*Purpose*\r\nMake spot-compatible services more reliable, particularly in prod, when AWS terminates a large number of spot instances.\r\n\r\n*End State*\r\nUsers should be able to set something like the following in their deploy config:\r\n```\r\nprocfile:  \r\n  deployItem:\r\n    override:\r\n      qa:\r\n        allowSpotInstances: true\r\n        maxSpotInstancePercent: 20\r\n```\r\n\r\nThis changeset is the first step in to do this. It adds a field to Singularity requests to specify the minimum number of instances, as a percentage, that must run on slaves with a given attribute.\r\n```\r\n      allowedSlaveAttributes:\r\n        instance_lifecycle_type: spot\r\n      slaveAttributeMinimums:\r\n        instance_lifecycle_type: \r\n          non_spot: 80  # i.e. At least 80% of instances must run on slaves with the \"non_spot\" attribute\r\n```\r\n\r\n","created_at":"2018-09-12T21:51:24Z","updated_at":"2018-09-12T21:51:24Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/HubSpot/Singularity/pulls/1849/commits","review_comments_url":"https://api.github.com/repos/HubSpot/Singularity/pulls/1849/comments","review_comment_url":"https://api.github.com/repos/HubSpot/Singularity/pulls/comments{/number}","comments_url":"https://api.github.com/repos/HubSpot/Singularity/issues/1849/comments","statuses_url":"https://api.github.com/repos/HubSpot/Singularity/statuses/79859de3cffb69c3498fcad16e6905345294b75e","head":{"label":"HubSpot:spot-min","ref":"spot-min","sha":"79859de3cffb69c3498fcad16e6905345294b75e","user":{"login":"HubSpot","id":326419,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMyNjQxOQ==","avatar_url":"https://avatars2.githubusercontent.com/u/326419?v=4","gravatar_id":"","url":"https://api.github.com/users/HubSpot","html_url":"https://github.com/HubSpot","followers_url":"https://api.github.com/users/HubSpot/followers","following_url":"https://api.github.com/users/HubSpot/following{/other_user}","gists_url":"https://api.github.com/users/HubSpot/gists{/gist_id}","starred_url":"https://api.github.com/users/HubSpot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/HubSpot/subscriptions","organizations_url":"https://api.github.com/users/HubSpot/orgs","repos_url":"https://api.github.com/users/HubSpot/repos","events_url":"https://api.github.com/users/HubSpot/events{/privacy}","received_events_url":"https://api.github.com/users/HubSpot/received_events","type":"Organization","site_admin":false},"repo":{"id":13631804,"node_id":"MDEwOlJlcG9zaXRvcnkxMzYzMTgwNA==","name":"Singularity","full_name":"HubSpot/Singularity","owner":{"login":"HubSpot","id":326419,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMyNjQxOQ==","avatar_url":"https://avatars2.githubusercontent.com/u/326419?v=4","gravatar_id":"","url":"https://api.github.com/users/HubSpot","html_url":"https://github.com/HubSpot","followers_url":"https://api.github.com/users/HubSpot/followers","following_url":"https://api.github.com/users/HubSpot/following{/other_user}","gists_url":"https://api.github.com/users/HubSpot/gists{/gist_id}","starred_url":"https://api.github.com/users/HubSpot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/HubSpot/subscriptions","organizations_url":"https://api.github.com/users/HubSpot/orgs","repos_url":"https://api.github.com/users/HubSpot/repos","events_url":"https://api.github.com/users/HubSpot/events{/privacy}","received_events_url":"https://api.github.com/users/HubSpot/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/HubSpot/Singularity","description":"Scheduler (HTTP API and webapp) for running Mesos tasks—long running processes, one-off tasks, and scheduled jobs. #hubspot-open-source","fork":false,"url":"https://api.github.com/repos/HubSpot/Singularity","forks_url":"https://api.github.com/repos/HubSpot/Singularity/forks","keys_url":"https://api.github.com/repos/HubSpot/Singularity/keys{/key_id}","collaborators_url":"https://api.github.com/repos/HubSpot/Singularity/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/HubSpot/Singularity/teams","hooks_url":"https://api.github.com/repos/HubSpot/Singularity/hooks","issue_events_url":"https://api.github.com/repos/HubSpot/Singularity/issues/events{/number}","events_url":"https://api.github.com/repos/HubSpot/Singularity/events","assignees_url":"https://api.github.com/repos/HubSpot/Singularity/assignees{/user}","branches_url":"https://api.github.com/repos/HubSpot/Singularity/branches{/branch}","tags_url":"https://api.github.com/repos/HubSpot/Singularity/tags","blobs_url":"https://api.github.com/repos/HubSpot/Singularity/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/HubSpot/Singularity/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/HubSpot/Singularity/git/refs{/sha}","trees_url":"https://api.github.com/repos/HubSpot/Singularity/git/trees{/sha}","statuses_url":"https://api.github.com/repos/HubSpot/Singularity/statuses/{sha}","languages_url":"https://api.github.com/repos/HubSpot/Singularity/languages","stargazers_url":"https://api.github.com/repos/HubSpot/Singularity/stargazers","contributors_url":"https://api.github.com/repos/HubSpot/Singularity/contributors","subscribers_url":"https://api.github.com/repos/HubSpot/Singularity/subscribers","subscription_url":"https://api.github.com/repos/HubSpot/Singularity/subscription","commits_url":"https://api.github.com/repos/HubSpot/Singularity/commits{/sha}","git_commits_url":"https://api.github.com/repos/HubSpot/Singularity/git/commits{/sha}","comments_url":"https://api.github.com/repos/HubSpot/Singularity/comments{/number}","issue_comment_url":"https://api.github.com/repos/HubSpot/Singularity/issues/comments{/number}","contents_url":"https://api.github.com/repos/HubSpot/Singularity/contents/{+path}","compare_url":"https://api.github.com/repos/HubSpot/Singularity/compare/{base}...{head}","merges_url":"https://api.github.com/repos/HubSpot/Singularity/merges","archive_url":"https://api.github.com/repos/HubSpot/Singularity/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/HubSpot/Singularity/downloads","issues_url":"https://api.github.com/repos/HubSpot/Singularity/issues{/number}","pulls_url":"https://api.github.com/repos/HubSpot/Singularity/pulls{/number}","milestones_url":"https://api.github.com/repos/HubSpot/Singularity/milestones{/number}","notifications_url":"https://api.github.com/repos/HubSpot/Singularity/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/HubSpot/Singularity/labels{/name}","releases_url":"https://api.github.com/repos/HubSpot/Singularity/releases{/id}","deployments_url":"https://api.github.com/repos/HubSpot/Singularity/deployments","created_at":"2013-10-16T21:28:49Z","updated_at":"2018-09-12T00:40:09Z","pushed_at":"2018-09-12T21:51:21Z","git_url":"git://github.com/HubSpot/Singularity.git","ssh_url":"git@github.com:HubSpot/Singularity.git","clone_url":"https://github.com/HubSpot/Singularity.git","svn_url":"https://github.com/HubSpot/Singularity","homepage":"http://getsingularity.com/","size":30584,"stargazers_count":735,"watchers_count":735,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":161,"mirror_url":null,"archived":false,"open_issues_count":40,"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":161,"open_issues":40,"watchers":735,"default_branch":"master"}},"base":{"label":"HubSpot:master","ref":"master","sha":"2c77825acf1cd5929029cb678ecb71172ac8e566","user":{"login":"HubSpot","id":326419,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMyNjQxOQ==","avatar_url":"https://avatars2.githubusercontent.com/u/326419?v=4","gravatar_id":"","url":"https://api.github.com/users/HubSpot","html_url":"https://github.com/HubSpot","followers_url":"https://api.github.com/users/HubSpot/followers","following_url":"https://api.github.com/users/HubSpot/following{/other_user}","gists_url":"https://api.github.com/users/HubSpot/gists{/gist_id}","starred_url":"https://api.github.com/users/HubSpot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/HubSpot/subscriptions","organizations_url":"https://api.github.com/users/HubSpot/orgs","repos_url":"https://api.github.com/users/HubSpot/repos","events_url":"https://api.github.com/users/HubSpot/events{/privacy}","received_events_url":"https://api.github.com/users/HubSpot/received_events","type":"Organization","site_admin":false},"repo":{"id":13631804,"node_id":"MDEwOlJlcG9zaXRvcnkxMzYzMTgwNA==","name":"Singularity","full_name":"HubSpot/Singularity","owner":{"login":"HubSpot","id":326419,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMyNjQxOQ==","avatar_url":"https://avatars2.githubusercontent.com/u/326419?v=4","gravatar_id":"","url":"https://api.github.com/users/HubSpot","html_url":"https://github.com/HubSpot","followers_url":"https://api.github.com/users/HubSpot/followers","following_url":"https://api.github.com/users/HubSpot/following{/other_user}","gists_url":"https://api.github.com/users/HubSpot/gists{/gist_id}","starred_url":"https://api.github.com/users/HubSpot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/HubSpot/subscriptions","organizations_url":"https://api.github.com/users/HubSpot/orgs","repos_url":"https://api.github.com/users/HubSpot/repos","events_url":"https://api.github.com/users/HubSpot/events{/privacy}","received_events_url":"https://api.github.com/users/HubSpot/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/HubSpot/Singularity","description":"Scheduler (HTTP API and webapp) for running Mesos tasks—long running processes, one-off tasks, and scheduled jobs. #hubspot-open-source","fork":false,"url":"https://api.github.com/repos/HubSpot/Singularity","forks_url":"https://api.github.com/repos/HubSpot/Singularity/forks","keys_url":"https://api.github.com/repos/HubSpot/Singularity/keys{/key_id}","collaborators_url":"https://api.github.com/repos/HubSpot/Singularity/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/HubSpot/Singularity/teams","hooks_url":"https://api.github.com/repos/HubSpot/Singularity/hooks","issue_events_url":"https://api.github.com/repos/HubSpot/Singularity/issues/events{/number}","events_url":"https://api.github.com/repos/HubSpot/Singularity/events","assignees_url":"https://api.github.com/repos/HubSpot/Singularity/assignees{/user}","branches_url":"https://api.github.com/repos/HubSpot/Singularity/branches{/branch}","tags_url":"https://api.github.com/repos/HubSpot/Singularity/tags","blobs_url":"https://api.github.com/repos/HubSpot/Singularity/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/HubSpot/Singularity/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/HubSpot/Singularity/git/refs{/sha}","trees_url":"https://api.github.com/repos/HubSpot/Singularity/git/trees{/sha}","statuses_url":"https://api.github.com/repos/HubSpot/Singularity/statuses/{sha}","languages_url":"https://api.github.com/repos/HubSpot/Singularity/languages","stargazers_url":"https://api.github.com/repos/HubSpot/Singularity/stargazers","contributors_url":"https://api.github.com/repos/HubSpot/Singularity/contributors","subscribers_url":"https://api.github.com/repos/HubSpot/Singularity/subscribers","subscription_url":"https://api.github.com/repos/HubSpot/Singularity/subscription","commits_url":"https://api.github.com/repos/HubSpot/Singularity/commits{/sha}","git_commits_url":"https://api.github.com/repos/HubSpot/Singularity/git/commits{/sha}","comments_url":"https://api.github.com/repos/HubSpot/Singularity/comments{/number}","issue_comment_url":"https://api.github.com/repos/HubSpot/Singularity/issues/comments{/number}","contents_url":"https://api.github.com/repos/HubSpot/Singularity/contents/{+path}","compare_url":"https://api.github.com/repos/HubSpot/Singularity/compare/{base}...{head}","merges_url":"https://api.github.com/repos/HubSpot/Singularity/merges","archive_url":"https://api.github.com/repos/HubSpot/Singularity/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/HubSpot/Singularity/downloads","issues_url":"https://api.github.com/repos/HubSpot/Singularity/issues{/number}","pulls_url":"https://api.github.com/repos/HubSpot/Singularity/pulls{/number}","milestones_url":"https://api.github.com/repos/HubSpot/Singularity/milestones{/number}","notifications_url":"https://api.github.com/repos/HubSpot/Singularity/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/HubSpot/Singularity/labels{/name}","releases_url":"https://api.github.com/repos/HubSpot/Singularity/releases{/id}","deployments_url":"https://api.github.com/repos/HubSpot/Singularity/deployments","created_at":"2013-10-16T21:28:49Z","updated_at":"2018-09-12T00:40:09Z","pushed_at":"2018-09-12T21:51:21Z","git_url":"git://github.com/HubSpot/Singularity.git","ssh_url":"git@github.com:HubSpot/Singularity.git","clone_url":"https://github.com/HubSpot/Singularity.git","svn_url":"https://github.com/HubSpot/Singularity","homepage":"http://getsingularity.com/","size":30584,"stargazers_count":735,"watchers_count":735,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":161,"mirror_url":null,"archived":false,"open_issues_count":40,"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":161,"open_issues":40,"watchers":735,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/HubSpot/Singularity/pulls/1849"},"html":{"href":"https://github.com/HubSpot/Singularity/pull/1849"},"issue":{"href":"https://api.github.com/repos/HubSpot/Singularity/issues/1849"},"comments":{"href":"https://api.github.com/repos/HubSpot/Singularity/issues/1849/comments"},"review_comments":{"href":"https://api.github.com/repos/HubSpot/Singularity/pulls/1849/comments"},"review_comment":{"href":"https://api.github.com/repos/HubSpot/Singularity/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/HubSpot/Singularity/pulls/1849/commits"},"statuses":{"href":"https://api.github.com/repos/HubSpot/Singularity/statuses/79859de3cffb69c3498fcad16e6905345294b75e"}},"author_association":"CONTRIBUTOR","merged":false,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"maintainer_can_modify":false,"commits":2,"additions":146,"deletions":5,"changed_files":5}}
{"actor":{"display_login":"pschoenfelder"}}