set.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package context
  2. import (
  3. "fmt"
  4. "log"
  5. "github.com/gravitl/netmaker/cli/config"
  6. "github.com/gravitl/netmaker/cli/functions"
  7. "github.com/spf13/cobra"
  8. )
  9. var (
  10. endpoint string
  11. username string
  12. password string
  13. masterKey string
  14. sso bool
  15. tenantId string
  16. saas bool
  17. )
  18. var contextSetCmd = &cobra.Command{
  19. Use: "set [NAME]",
  20. Args: cobra.ExactArgs(1),
  21. Short: "Create a context or update an existing one",
  22. Long: `Create a context or update an existing one`,
  23. Run: func(cmd *cobra.Command, args []string) {
  24. ctx := config.Context{
  25. Endpoint: endpoint,
  26. Username: username,
  27. Password: password,
  28. MasterKey: masterKey,
  29. SSO: sso,
  30. TenantId: tenantId,
  31. Saas: saas,
  32. }
  33. if !ctx.Saas {
  34. if ctx.Username == "" && ctx.MasterKey == "" && !ctx.SSO {
  35. log.Fatal("Either username/password or master key is required")
  36. cmd.Usage()
  37. }
  38. if ctx.Endpoint == "" {
  39. log.Fatal("Endpoint is required when for self-hosted tenants")
  40. cmd.Usage()
  41. }
  42. } else {
  43. if ctx.TenantId == "" {
  44. log.Fatal("Tenant ID is required for SaaS tenants")
  45. cmd.Usage()
  46. }
  47. ctx.Endpoint = fmt.Sprintf(functions.TenantUrlTemplate, tenantId)
  48. if ctx.Username == "" && ctx.Password == "" && !ctx.SSO {
  49. log.Fatal("Username/password is required for non-SSO SaaS contexts")
  50. cmd.Usage()
  51. }
  52. }
  53. config.SetContext(args[0], ctx)
  54. },
  55. }
  56. func init() {
  57. contextSetCmd.Flags().StringVar(&endpoint, "endpoint", "", "Endpoint of the API Server")
  58. contextSetCmd.Flags().StringVar(&username, "username", "", "Username")
  59. contextSetCmd.Flags().StringVar(&password, "password", "", "Password")
  60. contextSetCmd.MarkFlagsRequiredTogether("username", "password")
  61. contextSetCmd.Flags().BoolVar(&sso, "sso", false, "Login via Single Sign On (SSO)?")
  62. contextSetCmd.Flags().StringVar(&masterKey, "master_key", "", "Master Key")
  63. contextSetCmd.Flags().StringVar(&tenantId, "tenant_id", "", "Tenant ID")
  64. contextSetCmd.Flags().BoolVar(&saas, "saas", false, "Is this context for a SaaS tenant?")
  65. rootCmd.AddCommand(contextSetCmd)
  66. }