{"id":28990445,"url":"https://github.com/brianmichel/nomad-driver-tart","last_synced_at":"2026-03-10T11:33:39.074Z","repository":{"id":297128657,"uuid":"995747620","full_name":"brianmichel/nomad-driver-tart","owner":"brianmichel","description":"An experimental task driver for Nomad using the Tart virtualization tool.","archived":false,"fork":false,"pushed_at":"2025-11-03T20:46:23.000Z","size":1534,"stargazers_count":4,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-27T18:38:35.876Z","etag":null,"topics":["ci","macos","nomad","tart","virtualization"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/brianmichel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-04T00:34:44.000Z","updated_at":"2025-11-03T20:43:49.000Z","dependencies_parsed_at":"2025-10-16T06:59:17.734Z","dependency_job_id":"4de1f7ad-1da6-4212-b082-10fe338108ac","html_url":"https://github.com/brianmichel/nomad-driver-tart","commit_stats":null,"previous_names":["brianmichel/nomad-driver-tart"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/brianmichel/nomad-driver-tart","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brianmichel%2Fnomad-driver-tart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brianmichel%2Fnomad-driver-tart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brianmichel%2Fnomad-driver-tart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brianmichel%2Fnomad-driver-tart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brianmichel","download_url":"https://codeload.github.com/brianmichel/nomad-driver-tart/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brianmichel%2Fnomad-driver-tart/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30332341,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T05:25:20.737Z","status":"ssl_error","status_checked_at":"2026-03-10T05:25:17.430Z","response_time":106,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["ci","macos","nomad","tart","virtualization"],"created_at":"2025-06-25T00:11:14.536Z","updated_at":"2026-03-10T11:33:34.063Z","avatar_url":"https://github.com/brianmichel.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Nomad Driver for Tart VMs\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"img/nomad-driver-tart-logo.png\" width=\"150\" /\u003e\n\u003c/p\u003e\n\nA custom task driver for HashiCorp Nomad that enables orchestration and management of [Tart](https://github.com/cirruslabs/tart) virtual machines on macOS.\n\n## Overview\n\nThis driver allows Nomad to manage the lifecycle of Tart VMs, providing a way to run macOS virtual machines as Nomad tasks. It integrates with Nomad's ecosystem, enabling users to deploy and manage Tart VMs through Nomad's job specification.\n\n## Video\n\n[![Nomad Driver for Tart VMs](img/nomad-driver-tart-video-thumbnail.png)](https://share.cleanshot.com/S5VmP3fk)\n\n## Features\n\n- Basic task lifecycle management (start, stop, destroy)\n- Task status reporting\n- Signal forwarding to tasks\n- Placeholder for resource usage statistics\n- Syslog streaming from VMs via SSH\n- Control VM CPU and memory via Nomad's `resources` block\n- Optional VM disk size configuration\n\n## Requirements\n\n- Go 1.20 or later\n- Nomad 1.6.x or later\n- macOS with Tart installed\n\n## Building\n\nTo build the driver plugin:\n\n```bash\nmake build\n# Cross compile for Apple Silicon\nGOOS=darwin GOARCH=arm64 make build\n```\n\nThis will create a `nomad-driver-tart` binary in the project root.\n\n## Installation\n\n1. Build the plugin as described above\n2. Place the binary in a directory where Nomad can find it\n3. Configure Nomad to use the plugin (see example configuration below)\n\n## Configuration\n\n### Nomad Agent Configuration\n\nCreate or modify your Nomad agent configuration to include the Tart driver plugin:\n\n```hcl\nplugin \"nomad-driver-tart\" {\n  config {\n    enabled = true\n  }\n}\n\nclient {\n  enabled = true\n  \n  options {\n    \"driver.allowlist\" = \"tart\"\n  }\n}\n```\n\n### Job Specification\n\nHere's an example job specification that uses the Tart driver:\n\n```hcl\njob \"macos-sequoia-vanilla\" {\n  datacenters = [\"dc1\"]\n  type        = \"service\"\n\n  update {\n    max_parallel = 1\n    // Downloading a VM image can take a while as they are\n    // tens of GBs in size. Give our jobs enough grace to\n    // get setup properly.\n    healthy_deadline  = \"30m\"\n    progress_deadline = \"60m\"\n  }\n\n  group \"vms\" {\n    count = 1\n\n    task \"vm\" {\n      driver = \"tart\"\n\n      # Setup password with a secure Nomad var\n      # Example:\n      #   nomad var put nomad/jobs/macos-sequoia-vanilla ssh_password=\"your VM password\"\n      template {\n        data        = \u003c\u003cEOH\nSSH_PASSWORD={{ with nomadVar \"nomad/jobs/macos-sequoia-vanilla\" }}{{ .ssh_password }}{{ end }}\nEOH\n        destination = \"secrets/file.env\"\n        env         = true\n      }\n\n      config {\n        url          = \"ghcr.io/cirruslabs/macos-sequoia-vanilla:latest\"\n        ssh_user     = \"admin\"\n        ssh_password = \"${SSH_PASSWORD}\"\n        # Whether or not to show the built-in Tart UI for the VM\n        # Defaults to false\n        show_ui      = true\n        # Optional resource configuration for the VM\n        # disk_size is the desired disk size in gigabytes\n        disk_size  = 60\n      }\n\n      resources {\n        cpu    = 500   # Number of virtual CPU shares (1 core = 1000)\n        memory = 256  # Memory in MB assigned to the VM\n      }\n\n      logs {\n        max_files     = 3\n        max_file_size = 10\n      }\n    }\n  }\n}\n```\n\n## Usage\n\n1. Start the Nomad agent with the plugin:\n\n```bash\nnomad agent -dev -config=./examples/agent.hcl -plugin-dir=$(pwd)\n```\n\n2. In another terminal, run a job that uses the Tart driver:\n\n```bash\nnomad run ./examples/example.nomad\n```\n\n3. Check the status of the job and get the allocation ID:\n\n```bash\nnomad status\n```\n\n4. View the logs from the task:\n\n```bash\nnomad logs \u003cALLOCATION_ID\u003e\n```\n\n## Development\n\nThis driver is currently in development and provides basic functionality. Future enhancements may include:\n\n- Proper Tart VM lifecycle management\n- Resource isolation and management\n- Network configuration\n- Volume mounts\n- Health checking\n\n### Continuous Integration\n\nA GitHub Actions workflow automatically formats, vets, and builds the driver for darwin/arm64 on every pull request and push to `main`. Releases are handled by a separate workflow that runs [GoReleaser](https://goreleaser.com/) whenever a tag starting with `v` is pushed. The release workflow can also be manually triggered to produce a snapshot from any commit.\n\n\n## License\n\nSee [LICENSE](LICENSE) file.\n\nTart's [LICENSE](https://github.com/cirruslabs/tart/blob/main/LICENSE) still applies to your usage of the underlying program. \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrianmichel%2Fnomad-driver-tart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrianmichel%2Fnomad-driver-tart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrianmichel%2Fnomad-driver-tart/lists"}