[Suggestion] Use separate commands for each provider
- Dominant language
- Go
- Stars
- 488
- Forks
- 62
- PR merge metrics
- No merged PRs in 30d
Description
Rather than using an ambiguous string to define a provider, rather have each provider as a sub-command to the `create` command
## Expected Behaviour
Have better type safety, better discovery, and easier usage for users
## Current Behaviour
Run the `create` command and add flags as they are needed. Different per provider
## Possible Solution
Create separate commands for each provider. The files are already separated, this would just be to add the `&cobra.Command{}` to the top of each file, and adding the commands to the `create` command.
The added bonus here is that there can be provider specific help information displayed in the terminal. An excellent use of the help text would be to display _what_ is being created... (this is only known by reading the code, or inlets-operator readme)
```
$ inletsctl create gcp --help
Create an exit node on Google Cloud Platform.
Note: The account associated with the access token
will need compute.firewalls.create and serviceaccount user permissions
Usage:
inletsctl create gcp \
--access-token-file $HOME/gcp-token.json \
--zone "us-central1-a" \
--project-id "awesomness"
Flags:
...
```
This would also allow the flags available to be specific to the provider being used rather than having to negotiate a long list where some are relevant, and others are not.
It also provides an outlet for provider specific information. In the above example, this includes access permissions needed for inletsctl needs to be successful
It would also remove 19 `if` checks each with a string value defined each time (maintenance overhead).
## Steps to Reproduce (for bugs)
N/A
## Context
I read through the code to know what each flag was being used for in the specific provider I was planning on using. Some of the flags are called out in the help, but not all.
"Do the commands with no provider called out mean it's required for _all_ or _none_?"
> eg: `--region`
"What happens if I leave one of the flags empty?"
> eg: `--remote-tcp`
Also, there is no specific documentation for any one provider. In the demo gif, it's DigitalOcean, in the readme, there is an example for Scaleway, but again nothing inclusive
## Your Environment
* inlets version `inlets --version`
Version: 0.3.9
* Docker/Kubernetes version `docker version` / `kubectl version`:
N/A
* Operating System and version (e.g. Linux, Windows, MacOS):
Ubuntu Linux
* Link to your project or a code example to reproduce issue:
N/A
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.