{"id":37213122,"url":"https://github.com/sardinasystems/fleeting-plugin-openstack","last_synced_at":"2026-01-15T00:34:32.475Z","repository":{"id":204771892,"uuid":"712503508","full_name":"sardinasystems/fleeting-plugin-openstack","owner":"sardinasystems","description":"GitLab fleeting plugin for OpenStack","archived":false,"fork":false,"pushed_at":"2025-06-06T10:00:45.000Z","size":365,"stargazers_count":16,"open_issues_count":0,"forks_count":7,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-06-06T11:18:37.308Z","etag":null,"topics":["autoscaling","ci","fleeting","gitlab-runner","openstack"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sardinasystems.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}},"created_at":"2023-10-31T15:43:13.000Z","updated_at":"2025-06-06T10:00:42.000Z","dependencies_parsed_at":null,"dependency_job_id":"897905da-0ab0-411d-a589-214f985e1377","html_url":"https://github.com/sardinasystems/fleeting-plugin-openstack","commit_stats":null,"previous_names":["sardinasystems/fleeting-plugin-openstack"],"tags_count":51,"template":false,"template_full_name":null,"purl":"pkg:github/sardinasystems/fleeting-plugin-openstack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sardinasystems%2Ffleeting-plugin-openstack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sardinasystems%2Ffleeting-plugin-openstack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sardinasystems%2Ffleeting-plugin-openstack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sardinasystems%2Ffleeting-plugin-openstack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sardinasystems","download_url":"https://codeload.github.com/sardinasystems/fleeting-plugin-openstack/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sardinasystems%2Ffleeting-plugin-openstack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28439757,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T22:37:52.437Z","status":"ssl_error","status_checked_at":"2026-01-14T22:37:31.496Z","response_time":107,"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":["autoscaling","ci","fleeting","gitlab-runner","openstack"],"created_at":"2026-01-15T00:34:31.973Z","updated_at":"2026-01-15T00:34:32.467Z","avatar_url":"https://github.com/sardinasystems.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"fleeting-plugin-openstack\n=========================\n\nGitLab fleeting plugin for OpenStack.\n\nhttps://docs.gitlab.com/runner/executors/docker_autoscaler.html\n\n\nPlugin Configuration\n--------------------\n\nThe following parameters are supported:\n\n| Parameter             | Type   | Description |\n|-----------------------|--------|-------------|\n| `cloud`               | string | Name of the cloud config from clouds.yaml to use |\n| `clouds_config`       | string | Optional. Path to clouds.yaml |\n| `auth_from_env`       | bool   | Optional. Use environment variables for authentication |\n| `name`                | string | Name of the Auto Scaling Group (unique string that used to find instances) |\n| `nova_microversion`   | string | Optional. Microversion for the Openstack Nova client. Default 2.79 (which should be ok for Train+) |\n| `boot_time`           | string | Optional. Maximum wait time for instance to boot up. During that time plugin check Cloud-Init signatures. |\n| `use_ignition`        | string | Enable Fedora CoreOS / Flatcar Linux Ignition support |\n| `server_spec`         | object | Server spec used to create instances. See: [Compute API](https://docs.openstack.org/api-ref/compute/#create-server) |\n\n\n### Default connector config\n\n| Parameter                | Default  |\n|--------------------------|----------|\n| `os`                     | `linux`  |\n| `protocol`               | `ssh`    |\n| `username`               | `unset`  |\n| `use_static_credentials` | `false`  |\n\n\nOpenStack setup\n---------------\n\n1. You should create a special user (recommended) and project (optional),\n   then export clouds.yaml with credentials for that cloud.\n\n  1. Optional: You can also use OS\\_\\* environment variables to authenticate.\n\n2. You may create a tenant network for workers, in that case don't forget to add a router.\n   In that case manager VM should have two ports: external and that tenant network,\n   so it will be able to connect to the worker instances.\n\n3. You should upload a special image with container runtime installed in it.\n   For example we use [Flatcar Linux](https://stable.release.flatcar-linux.net/amd64-usr/current/)\n\n4. *(Optional)* You should generate SSH keypair which will be used by manager instance to connect to workers.\n   Public key must be added to Nova from the user.\n\n   Note: that key required only for Cloud-Init based images. For a Flatcar plugin can generate dynamic ssh key and pass it via Ignition script.\n\nPreparation of the resources could be done by Heat using [heat/stack.yaml](heat/stack.yaml).\nBut consider it as an example.\n\n\nExample runner config\n---------------------\n```toml\nconcurrent = 16\ncheck_interval = 0\nshutdown_timeout = 0\nlog_level = \"info\"\n\n[session_server]\nsession_timeout = 1800\nlisten_address = \":8093\"\nadvertise_address = \"mgr.scalingrunner.cloud:8093\"\n\n[[runners]]\nname = \"manager\"\nurl = \"https://gitlab.com\"\ntoken = \"token\"\nexecutor = \"docker-autoscaler\"\noutput_limit = 10240\nshell = \"bash\"\nenvironment = [\n  \"FF_NETWORK_PER_BUILD=1\",\n  \"FF_USE_FASTZIP=1\",\n  \"ARTIFACT_COMPRESSION_LEVEL=default\",\n  \"CACHE_COMPRESSION_LEVEL=fastest\",\n  \"FASTZIP_ARCHIVER_BUFFER_SIZE=67108864\"\n  ]\n\n[runners.cache]\nType = \"s3\"\nShared = true\n\n[runners.cache.s3]\nServerAddress = \"s3.foo.bar\"\nAccessKey = \"access\"\nSecretKey = \"secret\"\nBucketName = \"cache\"\n\n[runners.docker]\ndisable_entrypoint_overwrite = false\noom_kill_disable = false\ndisable_cache = true\nshm_size = 0\nnetwork_mtu = 0\n# host = \"unix:///run/user/1000/podman/podman.sock\"\n# tls_verify = false\n# image = \"quay.io/podman/stable\"\nimage = \"almalinux:9\"\nprivileged = true\npull_policy = [\"always\", \"always\"]\n\n[runners.autoscaler]\ncapacity_per_instance = 1\nmax_use_count = 10\nmax_instances = 16\n# NOTE: If you manually download plugin and place it into your PATH:\n# plugin = \"fleeting-plugin-openstack\"\n# Or just run `gitlab-runner fleeting install` and it'll download OCI image automatically.\nplugin = \"ghcr.io/sardinasystems/fleeting-plugin-openstack:latest\"\n\n[runners.autoscaler.plugin_config]\ncloud = \"runner\"\nclouds_config = \"/etc/gitlab-runner/clouds.yaml\"\nname = \"scaling-runner-stack-id\"\nnova_microversion = \"2.79\" # train+\nboot_time = \"10m\"\nuse_ignition = true  # enable injection of dynamic SSH key into Ignition config\n\n[runners.autoscaler.plugin_config.server_spec]\nname = \"scaling-runner-%d\"                                               # %d replaced with instance index\ndescription = \"GitLab CI Docker runners with autoscaling\"\ntags = [\"GitLab\", \"CI\", \"Docker\", \"Scaling\"]\nimageRef = \"d5460af5-83f3-47d7-9c4f-80294c66b267\"                       # Flatcar Linux (ID)\nimage_name = \"flatcar\"                                                  # Resolve imageRef. If set, each time a new VM should be created, the imageRef will be resolved.\nflavorRef = \"4e9d4fa4-a703-4850-8bc1-58b5e139ab57\"                      # xlarge flavor\n# key_name = \"ci-admin\"                                                 # SSH public key for worker nodes\nnetworks = [ { uuid = \"f05e7f64-9e0f-4c5c-acb0-b636000d7301\" } ]        # tenant network\nsecurity_groups = [ \"cee22d91-bb9a-455d-be88-e911d3cb066a\" ]            # allow SSH ingress from tenant network\nscheduler_hints = { group = \"a9c941cb-5b34-46e0-8fc6-7471e3b77c75\" }    # [Soft-]Anti-Affinity group\n# May be used to pass #cloud-config or ignition scripts.\n# If use_ignition == true, plugin will try parse existing script to inject passwd.users entry.\n# Example: disable OS auto-updates\nuser_data = '''\n{\n  \"ignition\": {\n    \"version\": \"3.4.0\"\n  },\n  \"storage\": {\n    \"files\": [\n      {\n        \"overwrite\": true,\n        \"path\": \"/etc/flatcar/update.conf\",\n        \"contents\": {\n          \"compression\": \"\",\n          \"source\": \"data:,SERVER%3Ddisabled%0AREBOOT_STRATEGY%3Doff%0A\"\n        },\n        \"mode\": 272\n      }\n    ]\n  }\n}\n'''\n\n[runners.autoscaler.connector_config]\n# username = \"fedora\"                    # Can be extracted from Image metadata os_admin_user\n# password = \"\"                          # not used\n# key_path = \"/etc/gitlab-runner/id_rsa\" # private key passed to server_spec.key_name. Required in cloud-init mode, optional for Ignition.\n# use_static_credentials = true          # Tells to use key provided above.\nkeepalive = \"30s\"\ntimeout = \"0m\"\nuse_external_addr = false\n\n[[runners.autoscaler.policy]]\nidle_count = 2\nidle_time = \"30m0s\"\nscale_factor = 0.0\nscale_factor_limit = 0\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsardinasystems%2Ffleeting-plugin-openstack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsardinasystems%2Ffleeting-plugin-openstack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsardinasystems%2Ffleeting-plugin-openstack/lists"}