48 lines
1.4 KiB
Go
48 lines
1.4 KiB
Go
package license
|
|
|
|
// Plan is the contents of a tier at issue time.
|
|
//
|
|
// This table is the seed. Once the admin service exists (spec 3) it owns the
|
|
// authoritative copy in its `plans` collection, and every issued licence
|
|
// snapshots the plan it was cut from — so editing a plan never rewrites an
|
|
// existing licence, the same rule as workflow_runs.steps_snapshot.
|
|
//
|
|
// lkctl uses this table to issue by hand until then.
|
|
type Plan struct {
|
|
Tier string
|
|
Name string
|
|
Deployment string
|
|
Limits Limits
|
|
Features []string
|
|
}
|
|
|
|
var plans = map[string]Plan{
|
|
TierFree: {
|
|
Tier: TierFree,
|
|
Name: "Free",
|
|
Deployment: DeploymentCloud, // cloud only, by construction
|
|
Limits: Limits{MaxServers: 3, MaxSecretGroups: 1, MaxChannels: 1},
|
|
Features: nil,
|
|
},
|
|
TierProfessional: {
|
|
Tier: TierProfessional,
|
|
Name: "Professional",
|
|
Deployment: DeploymentCloud,
|
|
Limits: Limits{MaxServers: Unlimited, MaxSecretGroups: Unlimited, MaxChannels: Unlimited},
|
|
Features: []string{FeatureConsole, FeatureOIDC},
|
|
},
|
|
TierSelfHosted: {
|
|
Tier: TierSelfHosted,
|
|
Name: "Self Hosted",
|
|
Deployment: DeploymentSelfHosted,
|
|
Limits: Limits{MaxServers: Unlimited, MaxSecretGroups: Unlimited, MaxChannels: Unlimited},
|
|
Features: []string{FeatureConsole, FeatureOIDC},
|
|
},
|
|
}
|
|
|
|
// PlanFor returns the seed plan for a tier.
|
|
func PlanFor(tier string) (Plan, bool) {
|
|
p, ok := plans[tier]
|
|
return p, ok
|
|
}
|