{"id":15055413,"url":"https://github.com/juanfont/fleeting-plugin-vcd","last_synced_at":"2026-02-17T17:00:50.741Z","repository":{"id":254015082,"uuid":"842019704","full_name":"juanfont/fleeting-plugin-vcd","owner":"juanfont","description":"GitLab Fleeting plugin for VMware Cloud Director","archived":false,"fork":false,"pushed_at":"2026-02-08T19:46:18.000Z","size":132,"stargazers_count":2,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-09T00:54:33.668Z","etag":null,"topics":["fleeting","fleeting-plugin-vcd","gitlab","gitlab-fleeting","gitlab-runner","vcd","vcloud-director","vmware-cloud-director"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/juanfont.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":"2024-08-13T14:05:13.000Z","updated_at":"2026-02-08T19:35:47.000Z","dependencies_parsed_at":"2024-10-12T18:03:31.930Z","dependency_job_id":"db1e1c44-86cc-4e8d-8ae2-ffda2245c3f4","html_url":"https://github.com/juanfont/fleeting-plugin-vcd","commit_stats":{"total_commits":5,"total_committers":2,"mean_commits":2.5,"dds":"0.19999999999999996","last_synced_commit":"aa3559f9d3956a1459060bbf13149b3b702e5d57"},"previous_names":["juanfont/fleeting-plugin-vcd"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/juanfont/fleeting-plugin-vcd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juanfont%2Ffleeting-plugin-vcd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juanfont%2Ffleeting-plugin-vcd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juanfont%2Ffleeting-plugin-vcd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juanfont%2Ffleeting-plugin-vcd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/juanfont","download_url":"https://codeload.github.com/juanfont/fleeting-plugin-vcd/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/juanfont%2Ffleeting-plugin-vcd/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29550799,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T14:33:00.708Z","status":"ssl_error","status_checked_at":"2026-02-17T14:32:58.657Z","response_time":100,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["fleeting","fleeting-plugin-vcd","gitlab","gitlab-fleeting","gitlab-runner","vcd","vcloud-director","vmware-cloud-director"],"created_at":"2024-09-24T21:41:53.124Z","updated_at":"2026-02-17T17:00:50.733Z","avatar_url":"https://github.com/juanfont.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# fleeting-plugin-vcd\n\nA GitLab [Fleeting](https://docs.gitlab.com/runner/fleet_scaling/fleeting.html) plugin for [VMware Cloud Director](https://www.vmware.com/products/cloud-infrastructure/cloud-director).\n\n## Overview\n\nThis plugin enables GitLab Runner to dynamically provision and manage virtual machines in VMware Cloud Director for CI/CD job execution. It's part of GitLab's Fleeting ecosystem, which replaces Docker Machine for autoscaling runners.\n\nFleeting is an abstraction layer for cloud providers' instance groups, allowing for the provisioning of multiple identical instances with a minimal API focused on creation, connection, and deletion.\n\n## Features\n\n- Dynamic provisioning of VMs in VMware Cloud Director\n- Support for both Linux and Windows VMs\n- SSH key and password-based authentication\n- Customizable VM resources (CPU, memory, disk size)\n- Automatic garbage collection of stuck/failed instances\n- Debug HTTP server for monitoring instance states\n\n## Requirements\n\n- VMware Cloud Director 10.4+ (for API token authentication)\n- GitLab Runner with Fleeting support\n- VM template with VMware Tools installed\n\n## Installation\n\nDownload the latest release from [GitHub Releases](https://github.com/juanfont/fleeting-plugin-vcd/releases) and place the binary in a location accessible by GitLab Runner.\n\n## Assumptions\n\n- The vApp template must have a single VM\n- The OS template must have VMware Tools (or open-vm-tools for Linux) installed\n- If using the Docker Autoscaler executor, the Docker daemon must be installed and running on the VM\n- For Windows machines, the OpenSSH service must be enabled (WinRM is not supported)\n\n## Configuration\n\nThe plugin is configured via the GitLab Runner's `config.toml` file under `[runners.autoscaler.plugin_config]`.\n\n### Required Configuration\n\n| Parameter | Description |\n|-----------|-------------|\n| `name` | Unique name for this runner instance |\n| `url` | VMware Cloud Director API URL |\n| `org` | VCD Organization name |\n| `token` | API token for authentication (VCD 10.4+) |\n| `virtual_datacenter` | Virtual Datacenter name |\n| `network` | Network to attach VMs to |\n| `ip_allocation_mode` | IP allocation mode: `POOL` or `DHCP` |\n| `instance_group_name` | Metadata tag to identify VMs belonging to this group |\n| `vapp_name_prefix` | Prefix for vApp names |\n| `catalog` | VCD Catalog containing the VM template |\n| `template` | Template name within the catalog |\n| `storage_profile` | Storage profile for VM disks |\n| `cpu_count` | Number of vCPUs |\n| `cores_per_socket` | CPU cores per socket |\n| `memory_mb` | Memory in MB |\n\n### Optional Configuration\n\n| Parameter | Description | Default |\n|-----------|-------------|---------|\n| `disk_size_gb` | Disk size in GB (0 = use template default) | `0` |\n| `debug_server_addr` | Debug HTTP server address (e.g., `127.0.0.1:27060`) | disabled |\n| `max_concurrent_creates` | Maximum number of VMs being created simultaneously | `3` |\n| `max_concurrent_deletes` | Maximum number of VMs being deleted simultaneously | `5` |\n\n### Example Configuration\n\nSee [`config.example.toml`](config.example.toml) for a complete example configuration.\n\n```toml\n[[runners]]\nexecutor = \"docker-autoscaler\"\n\n[runners.autoscaler]\nplugin = \"fleeting-plugin-vcd\"\ncapacity_per_instance = 1\nmax_instances = 5\n\n[runners.autoscaler.plugin_config]\nname = \"my-runner\"\nurl = \"https://vcd.example.com/api\"\norg = \"MyOrg\"\ntoken = \"your-api-token\"\nvirtual_datacenter = \"MyVDC\"\nnetwork = \"MyNetwork\"\nip_allocation_mode = \"POOL\"\ninstance_group_name = \"gitlab-runners\"\nvapp_name_prefix = \"gitlab-runner\"\ncatalog = \"MyCatalog\"\ntemplate = \"Ubuntu-22.04\"\nstorage_profile = \"MyStorageProfile\"\ncpu_count = 4\ncores_per_socket = 2\nmemory_mb = 8192\ndisk_size_gb = 100\n\n# Optional: Enable debug server\ndebug_server_addr = \"127.0.0.1:27060\"\n\n[runners.autoscaler.connector_config]\nuse_static_credentials = true\nusername = \"root\"\npassword = \"your-password\"\n```\n\n## Debug Server\n\nWhen `debug_server_addr` is configured, the plugin exposes an HTTP server showing the current state of all instances. Access it at `http://[address]/` to see a table with instance states, creation times, and lifecycle events.\n\n## Building from Source\n\n```bash\n# Using goreleaser\ngoreleaser build --single-target --snapshot --clean\n\n# Or using make\nmake build\n```\n\n## Running Integration Tests\n\nIntegration tests require environment variables (not used by the plugin itself, only for tests):\n\n```bash\nexport VCD_URL=\"https://vcd.example.com/api\"\nexport VCD_ORG=\"MyOrg\"\nexport VCD_TOKEN=\"your-api-token\"\nexport VCD_VDC=\"MyVDC\"\nexport VCD_NETWORK=\"MyNetwork\"\nexport VCD_NETWORK_ALLOCATION_MODE=\"POOL\"\nexport VCD_CATALOG=\"MyCatalog\"\nexport VCD_TEMPLATE=\"Ubuntu-22.04\"\nexport VCD_VAPP_NAME_PREFIX=\"test-runner\"\nexport VCD_STORAGE_PROFILE=\"MyStorageProfile\"\nexport VCD_CPU_COUNT=\"2\"\nexport VCD_CORES_PER_SOCKET=\"2\"\nexport VCD_MEMORY_MB=\"4096\"\nexport VCD_DISK_SIZE_GB=\"50\"\n\nmake test\n```\n\n## History\n\nThis plugin is based on:\n\n- My previous [Docker Machine driver for VCD](https://github.com/juanfont/docker-machine-driver-vcd)\n- The [Hetzner](https://gitlab.com/hetznercloud/fleeting-plugin-hetzner) plugin for Fleeting\n- Joe Burnett's [Fleeting explanation on YouTube](https://www.youtube.com/watch?v=niZ508K4dts)\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## License\n\nSee [LICENSE](LICENSE) file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuanfont%2Ffleeting-plugin-vcd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuanfont%2Ffleeting-plugin-vcd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuanfont%2Ffleeting-plugin-vcd/lists"}