set.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. authToken string
  18. )
  19. var contextSetCmd = &cobra.Command{
  20. Use: "set [NAME]",
  21. Args: cobra.ExactArgs(1),
  22. Short: "Create a context or update an existing one",
  23. Long: `Create a context or update an existing one`,
  24. Run: func(cmd *cobra.Command, args []string) {
  25. ctx := config.Context{
  26. Endpoint: endpoint,
  27. Username: username,
  28. Password: password,
  29. MasterKey: masterKey,
  30. AuthToken: authToken,
  31. SSO: sso,
  32. TenantId: tenantId,
  33. Saas: saas,
  34. }
  35. if !ctx.Saas {
  36. if ctx.Username == "" && ctx.MasterKey == "" && !ctx.SSO && ctx.AuthToken == "" {
  37. log.Fatal("Either username/password or master key or auth token is required")
  38. cmd.Usage()
  39. }
  40. if ctx.Endpoint == "" {
  41. log.Fatal("Endpoint is required when for self-hosted tenants")
  42. cmd.Usage()
  43. }
  44. } else {
  45. if ctx.TenantId == "" {
  46. log.Fatal("Tenant ID is required for SaaS tenants")
  47. cmd.Usage()
  48. }
  49. ctx.Endpoint = fmt.Sprintf(functions.TenantUrlTemplate, tenantId)
  50. if ctx.Username == "" && ctx.Password == "" && ctx.AuthToken == "" && !ctx.SSO {
  51. log.Fatal("Username/password or authtoken is required for non-SSO SaaS contexts")
  52. cmd.Usage()
  53. }
  54. }
  55. config.SetContext(args[0], ctx)
  56. },
  57. }
  58. func init() {
  59. contextSetCmd.Flags().StringVar(&endpoint, "endpoint", "", "Endpoint of the API Server")
  60. contextSetCmd.Flags().StringVar(&username, "username", "", "Username")
  61. contextSetCmd.Flags().StringVar(&password, "password", "", "Password")
  62. contextSetCmd.Flags().StringVar(&authToken, "auth_token", "", "Auth Token")
  63. contextSetCmd.MarkFlagsRequiredTogether("username", "password")
  64. contextSetCmd.Flags().BoolVar(&sso, "sso", false, "Login via Single Sign On (SSO)?")
  65. contextSetCmd.Flags().StringVar(&masterKey, "master_key", "", "Master Key")
  66. contextSetCmd.Flags().StringVar(&tenantId, "tenant_id", "", "Tenant ID")
  67. contextSetCmd.Flags().BoolVar(&saas, "saas", false, "Is this context for a SaaS tenant?")
  68. rootCmd.AddCommand(contextSetCmd)
  69. }