faas-cli icon indicating copy to clipboard operation
faas-cli copied to clipboard

Support for contexts or profiles for remote gateways

Open alexellis opened this issue 6 years ago • 12 comments

We could offer a way to support a profile or context as an alias for a gateway. A user suggested something similar about an "rc" file or not having to remember multiple gateway URLs in #479

Current behaviour

You need to remember your gateway URLs or look them up in ~/.openfaas/config.yaml

Feature

This might be similar to how kubectl handles multiple contexts.

# faas-cli create-context staging --gateway https://staging.openfaas.com

# faas-cli set-context staging
Using gateway: https://staging.openfaas.com

# faas-cli get-context staging
Using gateway: https://staging.openfaas.com

# faas-cli get-context

[x] staging
[ ] local
[ ] swarm

alexellis avatar Aug 05 '18 08:08 alexellis

I totally vouch for this enhancement (literally working with 20+ kube-contexts 😅), while also suggesting the potential of migrating the provider configuration to config.yml.

My main reasoning for this big of a change is influenced by the fact that I mainly work under private repositories, so the gateways that I use would most definitely not be included inside of the repository. I would instead use an alternative suggested here, using the --gateway flag or the OPENFAAS_URL environment variable.

I would guess that a large majority of the OpenFaaS function repositories have http://127.0.0.1:8080 or similar committed (examples), so I don't see much of an impact with regards to thinking of how to migrate users to this configuration (on an initial faas-cli command after new version, defaults could be cached right away to the configuration file).

jameschensmith avatar Aug 07 '18 06:08 jameschensmith

Wonder if there's much interest in this from our users?

alexellis avatar Sep 13 '18 08:09 alexellis

I think it would be useful, mainly to avoid deploying at the wrong gateway by mistake. Also for auditing and coordination purposes, as we work in teams using git as central repository. At creating a project the team leader could establish each context beforehand, improving project visibility.

padiazg avatar Sep 13 '18 12:09 padiazg

This remind me of setting OPENFAAS_URL without the search for the URL if properly written etc... I usually use --gateway for the times I need exception. I think that most of the people operate mainly with single OF instance at a time and rarely switch fast between instances. This is my take otherwise I can start digging in how to do this if no one is working on it ATM.

martindekov avatar Sep 18 '18 14:09 martindekov

I would like us to spend some more time working on the user experience before working on this with Go code.

cc @openfaas/cli @rgee0 @stefanprodan @LucasRoesler

alexellis avatar Sep 18 '18 19:09 alexellis

$ faas context create staging --gateway https://staging.openfaas.com`
Context 'staging' created using gateway: https://staging.openfaas.com
$ faas context set staging
Setting gateway: https://staging.openfaas.com
$ faas context get staging
Using gateway: https://staging.openfaas.com
$ faas context show
[x] staging
[ ] local
[ ] swarm

rgee0 avatar Oct 01 '18 18:10 rgee0

I like those. But I would prefer the verb use instead of set. Set makes me think it is an edit/update command. So,

$ faas context use staging

Also, we should support the hyphen shortcut

faas context use - # use previous ctx

We probably also want the ability to rename a context, like

$ faas context rename staging stg

LucasRoesler avatar Oct 01 '18 19:10 LucasRoesler

I considered use too, seems more intuitive. However, it gave me a sense of single use whereas set gives the user a sense of persistence.

I like the idea of - good for situations where the user wants to flip flop.

rgee0 avatar Oct 01 '18 19:10 rgee0

@rgee0 I would avoid using pretty output on its own, as it makes scripting with the cli a pain.

$ faas context show
staging

Could alternately hang displaying the current context off the context root with no subcommand.

$ faas context
staging

I'd also stick to commonly used verbs across the cli, for example ls in place of show.

$ faas context ls
staging [active]
local
swam

It should also specify what output is returned when no context had been set and either some gateway logins exist, or nothing exists at all.

johnmccabe avatar Oct 01 '18 22:10 johnmccabe

I like the idea of utilising the root command of context. Take the point on show; I think we've used list elsewhere.

rgee0 avatar Oct 02 '18 18:10 rgee0

You can alias both list and ls as we've done for the function list command.

https://github.com/openfaas/faas-cli/blob/7a861dbc0eba59251d6fc4e40c5aa42c8712bed0/commands/list.go#L29-L31

johnmccabe avatar Oct 02 '18 21:10 johnmccabe

I like John's suggestion to keep the output scripting friendly and to use the root context command for the "show currently active".

If no context is active or none exist, it seems reasonable that it would return a message on standard error: "no context configured"

LucasRoesler avatar Oct 03 '18 07:10 LucasRoesler