{"id":20631602,"url":"https://github.com/inlets/cloud-provision","last_synced_at":"2025-04-07T16:18:34.775Z","repository":{"id":38378334,"uuid":"330949345","full_name":"inlets/cloud-provision","owner":"inlets","description":"Get cloud instances with your favourite software pre-loaded","archived":false,"fork":false,"pushed_at":"2025-01-16T16:56:38.000Z","size":178,"stargazers_count":45,"open_issues_count":6,"forks_count":14,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-31T14:12:55.452Z","etag":null,"topics":["automation","droplet","ec2","hacktoberfest","provisioning"],"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/inlets.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}},"created_at":"2021-01-19T10:53:41.000Z","updated_at":"2025-01-16T16:56:08.000Z","dependencies_parsed_at":"2024-01-21T19:48:11.774Z","dependency_job_id":"2cbca9ae-ec1c-4f37-bc47-6b02f5b650c6","html_url":"https://github.com/inlets/cloud-provision","commit_stats":null,"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inlets%2Fcloud-provision","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inlets%2Fcloud-provision/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inlets%2Fcloud-provision/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inlets%2Fcloud-provision/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/inlets","download_url":"https://codeload.github.com/inlets/cloud-provision/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247685628,"owners_count":20979085,"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":["automation","droplet","ec2","hacktoberfest","provisioning"],"created_at":"2024-11-16T14:12:58.782Z","updated_at":"2025-04-07T16:18:34.752Z","avatar_url":"https://github.com/inlets.png","language":"Go","readme":"## cloud-provision\n\n\u003e Get cloud instances with your favourite software pre-loaded\n\nThis Golang package can be used to provision cloud hosts using a simple CRUD-style API along with a cloud-init user-data script. It could be used to automate anything from k3s clusters, to blogs, or CI runners. We use it to create the cheapest possible hosts in the cloud with a public IP address.\n\n[provision.go](https://github.com/inlets/inletsctl/blob/master/pkg/provision/provision.go)\n\n```go\ntype Provisioner interface {\n\tProvision(BasicHost) (*ProvisionedHost, error)\n\tStatus(id string) (*ProvisionedHost, error)\n\tDelete(HostDeleteRequest) error\n}\n```\n\n## Where is this package used?\n\n\u003e Feel free to send a PR to add your project\n\nThis package is used by:\n\n* [inletsctl](https://github.com/inlets/inletsctl) - Go CLI to create/delete exit-servers and inlets/-pro tunnels\n* [inlets-operator](https://github.com/inlets/inlets-operator) - Kubernetes operator to automate exit-servers and inlets/-pro tunnels via CRDs and Service definitions\n\n### Try an example program\n\nThe tester app takes in a cloud-config file and provisions a host with Nginx - polling until it is ready for access.\n\n```yaml\n#cloud-config\npackages:\n  - nginx\nruncmd:\n  - systemctl enable nginx\n  - systemctl start nginx\n```\n\nSee the example here: [Tester app](https://github.com/inlets/cloud-provision/tree/master/cmd)\n\n## Rules for adding a new provisioner\n\nThe first rule about the `provision` package is that we don't do SSH. Key management and statefulness are out of scope. Cheap servers should be treated like cattle, not pets. `ssh` may well be enabled by default, but is out of scope for management. For instance, with DigitalOcean, you can get a root password if you need to log in. Configure as much as you can via cloud-init / user-data.\n\n* Use the Ubuntu 16.04 LTS image\n* Select the cheapest plan and update the [README](https://github.com/inlets/inletsctl/blob/master/README.md) with the estimated monthly cost\n* You need to open all ports on any firewall rules since the inlets client advertises its ports at runtime\n* This API is event-driven and is expected to use polling from the Kubernetes Operator or inletsctl CLI, not callbacks or waits\n* Do not use any wait or blocking calls, all API calls should return ideally within \u003c 1s\n* Document how you chose any image or configuration, so that the code can be maintained, so that means links and `// comments`\n* All provisioning code should detect the correct \"status\" for the provider and set the standard known value\n* Always show your testing in PRs.\n\nFinally please [add an example to the documentation](https://docs.inlets.dev/#/tools/inletsctl?id=inletsctl-reference-documentation) for your provider in the [inlets/docs](https://github.com/inlets/docs) repo.\n\nIf you would like to add a provider please propose it with an Issue, to make sure that the community are happy to accept the change, and to maintain the code on an ongoing basis.\n\n## Maintainers for each provider\n\n* DigitalOcean, Equinix Metal, Civo - [alexellis](https://github.com/alexellis/)\n* Scaleway - [alexandrevilain](https://github.com/alexandrevilain/)\n* AWS EC2 - [adamjohnson01](https://github.com/adamjohnson01/)\n* GCE - [utsavanand2](https://github.com/utsavanand2/)\n* Azure, Linode - [zechenbit](https://github.com/zechenbit/)\n* Hetzner [Johannestegner](https://github.com/johannestegner)\n* Vultr [jsiebens](https://github.com/jsiebens)\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finlets%2Fcloud-provision","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finlets%2Fcloud-provision","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finlets%2Fcloud-provision/lists"}