{"id":17531143,"url":"https://github.com/milosgajdos/taurus","last_synced_at":"2025-04-23T20:40:56.016Z","repository":{"id":32567886,"uuid":"36150674","full_name":"milosgajdos/taurus","owner":"milosgajdos","description":"Experimental Mesos framework for Docker containers written in Go","archived":false,"fork":false,"pushed_at":"2020-02-25T21:03:09.000Z","size":310,"stargazers_count":15,"open_issues_count":1,"forks_count":5,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-26T05:42:09.590Z","etag":null,"topics":["docker-container","go","golang","mesos","mesos-framework"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/milosgajdos.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-05-24T01:35:37.000Z","updated_at":"2022-01-31T13:46:45.000Z","dependencies_parsed_at":"2022-08-29T00:10:18.245Z","dependency_job_id":null,"html_url":"https://github.com/milosgajdos/taurus","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milosgajdos%2Ftaurus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milosgajdos%2Ftaurus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milosgajdos%2Ftaurus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/milosgajdos%2Ftaurus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/milosgajdos","download_url":"https://codeload.github.com/milosgajdos/taurus/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":232052266,"owners_count":18465727,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker-container","go","golang","mesos","mesos-framework"],"created_at":"2024-10-20T17:22:59.793Z","updated_at":"2025-01-01T06:03:07.777Z","avatar_url":"https://github.com/milosgajdos.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"**THIS PROJECT IS MASSIVELY ALPHA AND UNSTABLE AT THE MOMENT. CONSIDER YOURSELF WARNED.**\n\n# taurus\nSimple Mesos Container framework written in Go.\n\nAt the moment this is just a **PoC** serving for learning purpose. I'm not sure if I turn into more than just that.\nThere is a lot of design flaws - lots of existing code would need to be refactored to make this useful.\n\n## Theory of operation\n**taurus** provides REST API that allows you to submit taurus Jobs and run them as Mesos tasks in Docker containers.\n\nYou can run **taurus** using docker-compose.\n\nOut of the box:\n- **taurus** uses [NATS](https://github.com/nats-io/nats) distributed queue to queue pending tasks. You can implement your own queue that satisfies taurus ```queue``` interface and replace the basic queue implementation.\n\n- **taurus** stores Jobs in a local store implemented using [gkvlite](https://github.com/steveyen/gkvlite). You can implement your own Job store that satisfies taurus ```store``` Go interface and replace the basic store implementation.\n\n- **taurus** implements a simple scheduler worker which does all the heavy lifting i.e.: detecting state of submitted Jobs and taking appropriate action like queueing them to particular queues, killing the stopped Job tasks etc. You can implement your own worker which satisfies taurus ```worker``` interface and replace the basic worker implementation.\n\n## Example\nThere are some example jobs in ```examplejobs``` directory.\n\nSubmit a job:\n```\n$ curl -i -X POST 127.0.0.1:8080/job/new -d @job.json\nHTTP/1.1 200 OK\nContent-Type: application/json; charset=UTF-8\nDate: Sun, 12 Jul 2015 22:53:17 GMT\nContent-Length: 0\n```\n\nTaurus logs:\n```\n2015/07/12 23:53:17 server.go:43: POST\t/job/new\n2015/07/12 23:53:17 api.go:103: Submitting Job taurusjob\n2015/07/12 23:53:17 scheduler.go:315: No tasks to kill\n2015/07/12 23:53:17 scheduler.go:381: Launched tasks: map[string]string{}\n2015/07/12 23:53:17 scheduler.go:568: No Pending tasks available\n2015/07/12 23:53:18 scheduler.go:159: Creating new Pending task taurusjob-web-prod-1436741598-c9cbf28d-28e8-11e5-a327-600308a80bb2 for job taurusjob\n2015/07/12 23:53:18 scheduler.go:159: Creating new Pending task taurusjob-web-prod-1436741598-c9cc085d-28e8-11e5-a327-600308a80bb2 for job taurusjob\n2015/07/12 23:53:18 scheduler.go:159: Creating new Pending task taurusjob-web-prod-1436741598-c9cc0d1c-28e8-11e5-a327-600308a80bb2 for job taurusjob\n2015/07/12 23:53:18 scheduler.go:159: Creating new Pending task taurusjob-web-prod-1436741598-c9cc10ea-28e8-11e5-a327-600308a80bb2 for job taurusjob\n2015/07/12 23:53:18 scheduler.go:203: Queueing task taurusjob-web-prod-1436741598-c9cbf28d-28e8-11e5-a327-600308a80bb2 to Pending queue\n2015/07/12 23:53:18 scheduler.go:203: Queueing task taurusjob-web-prod-1436741598-c9cc085d-28e8-11e5-a327-600308a80bb2 to Pending queue\n2015/07/12 23:53:18 scheduler.go:203: Queueing task taurusjob-web-prod-1436741598-c9cc0d1c-28e8-11e5-a327-600308a80bb2 to Pending queue\n2015/07/12 23:53:18 scheduler.go:203: Queueing task taurusjob-web-prod-1436741598-c9cc10ea-28e8-11e5-a327-600308a80bb2 to Pending queue\n...\n...\n2015/07/12 23:53:26 scheduler.go:667: Task taurusjob-web-prod-1436741598-c9cc0d1c-28e8-11e5-a327-600308a80bb2 is in state TASK_RUNNING\n2015/07/12 23:53:26 scheduler.go:667: Task taurusjob-web-prod-1436741598-c9cc085d-28e8-11e5-a327-600308a80bb2 is in state TASK_RUNNING\n2015/07/12 23:53:26 scheduler.go:667: Task taurusjob-web-prod-1436741598-c9cbf28d-28e8-11e5-a327-600308a80bb2 is in state TASK_RUNNING\n2015/07/12 23:53:26 scheduler.go:667: Task taurusjob-web-prod-1436741598-c9cc10ea-28e8-11e5-a327-600308a80bb2 is in state TASK_RUNNING\n```\n\nCheck if the containers are running:\n```\n$ docker ps\nCONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES\n07bf0188afc6        nginx:latest        \"nginx -g 'daemon of   8 seconds ago       Up 6 seconds        443/tcp, 80/tcp     mesos-466f9aa8-32e1-4148-9e42-c0716f8c594a\n4e246cfab0f7        nginx:latest        \"nginx -g 'daemon of   8 seconds ago       Up 6 seconds        443/tcp, 80/tcp     mesos-78df44ea-2ca6-448c-9dbf-9cf88081b8fc\naf6fefad032c        nginx:latest        \"nginx -g 'daemon of   8 seconds ago       Up 6 seconds        443/tcp, 80/tcp     mesos-a689eec3-6d63-44fb-818a-64c427b2b88a\n98b0902a8aae        nginx:latest        \"nginx -g 'daemon of   9 seconds ago       Up 8 seconds        443/tcp, 80/tcp     mesos-f8534b44-4c88-43b9-aced-21bee4c91f8a\n\n```\n\nStop the job:\n```\n$ curl -i -X DELETE 127.0.0.1:8080/job/taurusjob\nHTTP/1.1 200 OK\nContent-Type: application/json; charset=UTF-8\nDate: Sun, 12 Jul 2015 22:54:39 GMT\nContent-Length: 0\n```\n\nTaurus logs:\n```\n2015/07/12 23:54:39 server.go:43: DELETE\t/job/taurusjob\n2015/07/12 23:54:39 api.go:131: Stopping Job taurusjob\n2015/07/12 23:54:39 api.go:148: Killing Job taurusjob\n2015/07/12 23:54:39 scheduler.go:258: Queueing task taurusjob-web-prod-1436741598-c9cc10ea-28e8-11e5-a327-600308a80bb2 to Doomed queue\n2015/07/12 23:54:39 scheduler.go:258: Queueing task taurusjob-web-prod-1436741598-c9cc0d1c-28e8-11e5-a327-600308a80bb2 to Doomed queue\n2015/07/12 23:54:39 scheduler.go:258: Queueing task taurusjob-web-prod-1436741598-c9cc085d-28e8-11e5-a327-600308a80bb2 to Doomed queue\n2015/07/12 23:54:39 scheduler.go:258: Queueing task taurusjob-web-prod-1436741598-c9cbf28d-28e8-11e5-a327-600308a80bb2 to Doomed queue\n...\n...\n2015/07/12 23:54:42 scheduler.go:667: Task taurusjob-web-prod-1436741598-c9cc0d1c-28e8-11e5-a327-600308a80bb2 is in state TASK_KILLED\n2015/07/12 23:54:42 scheduler.go:667: Task taurusjob-web-prod-1436741598-c9cbf28d-28e8-11e5-a327-600308a80bb2 is in state TASK_KILLED\n2015/07/12 23:54:42 scheduler.go:667: Task taurusjob-web-prod-1436741598-c9cc10ea-28e8-11e5-a327-600308a80bb2 is in state TASK_KILLED\n2015/07/12 23:54:42 scheduler.go:667: Task taurusjob-web-prod-1436741598-c9cc085d-28e8-11e5-a327-600308a80bb2 is in state TASK_KILLED\n```\n\nCheck if the containers are running:\n```\n$ docker ps\nCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES\n```\n\n# TODO\n**E_TOO_MUCH**, but in a gist:\n\n- redesign a lot of things (I might spin another project from this)\n- implement etcd/consul/zk storage driver support\n- implement more scalable solution using something like graft by Apcera \n\nAND THE LIST GOES ON AND ON AND ON\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmilosgajdos%2Ftaurus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmilosgajdos%2Ftaurus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmilosgajdos%2Ftaurus/lists"}