terraform-provider-iterative
terraform-provider-iterative copied to clipboard
Common method for command execution
It would be nice[^1] to have an Execute method to run commands in any of the active instances.
https://github.com/iterative/terraform-provider-iterative/blob/57625b6db38238a18dd10797ac239710c5f94f8a/task/task.go#L37-L47
Loose ends
- How to deal with parallelism?
- Run the command on every instance and return a slice of results.
- Allow users to specify an index in the range
[0, parallelism[and return an error if there aren't enough instances running to satisfy the requested index. - Allow users to list the running instances for a given task and select one of them to run the command on.
- ~Pick a random instance every time.~ I had to include it. 😂
Draft proposal
-
Execute(instance uint16, input string, command ...string) (Result, error)instancerepresents the instance index in the range[0, parallelism[; maybe we can use a string identifier instead.inputoptionally, the standard input to feed the remote command with;""will disable this function.commandis the slice of exec–like arguments; “no arguments” can default toshorbashif appropriate.Resultis astructcontaining- Standard output
- Standard error
- Exit code
-
ExecuteTTY(instance uint16, streams Streams, command ...string) errorSame as above but with TTY and interactive streams, so it behaves like an ordinary SSH session. Seekubectl execfor an example implementation.
[^1]: Not necessary because #237 eliminates the need of SSH by implementing #126