diff --git a/apis/management.cattle.io/v3/authn_types.go b/apis/management.cattle.io/v3/authn_types.go index 6fd4a476..be74edd1 100644 --- a/apis/management.cattle.io/v3/authn_types.go +++ b/apis/management.cattle.io/v3/authn_types.go @@ -35,6 +35,19 @@ type User struct { Me bool `json:"me,omitempty"` } +// UserAttribute will have a CRD (and controller) generated for it, but will not be exposed in the API. +type UserAttribute struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + UserName string + GroupPrincipals map[string]Principals // the value is a []Principal, but code generator cannot handle slice as a value +} + +type Principals struct { + Items []Principal +} + type Group struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` diff --git a/apis/management.cattle.io/v3/schema/schema.go b/apis/management.cattle.io/v3/schema/schema.go index 75b1f51c..bcc1d259 100644 --- a/apis/management.cattle.io/v3/schema/schema.go +++ b/apis/management.cattle.io/v3/schema/schema.go @@ -416,6 +416,10 @@ func userTypes(schema *types.Schemas) *types.Schemas { f.Required = false return f }) + }). + MustImportAndCustomize(&Version, v3.UserAttribute{}, func(schema *types.Schema) { + schema.CollectionMethods = []string{} + schema.ResourceMethods = []string{} }) } diff --git a/generator/generator.go b/generator/generator.go index 9718dcdc..4e72ebe6 100644 --- a/generator/generator.go +++ b/generator/generator.go @@ -53,14 +53,14 @@ func contains(list []string, needle string) bool { return false } -func Generate(schemas *types.Schemas) { +func Generate(schemas *types.Schemas, backendTypes map[string]bool) { version := getVersion(schemas) group := strings.Split(version.Group, ".")[0] cattleOutputPackage := path.Join(basePackage, baseCattle, group, version.Version) k8sOutputPackage := path.Join(basePackage, baseK8s, version.Group, version.Version) - if err := generator.Generate(schemas, cattleOutputPackage, k8sOutputPackage); err != nil { + if err := generator.Generate(schemas, backendTypes, cattleOutputPackage, k8sOutputPackage); err != nil { panic(err) } } diff --git a/main.go b/main.go index e99b7cd0..0e49c3e8 100644 --- a/main.go +++ b/main.go @@ -21,10 +21,12 @@ import ( func main() { generator.GenerateComposeType(projectSchema.Schemas, managementSchema.Schemas, clusterSchema.Schemas) - generator.Generate(managementSchema.Schemas) - generator.Generate(publicSchema.PublicSchemas) - generator.Generate(clusterSchema.Schemas) - generator.Generate(projectSchema.Schemas) + generator.Generate(managementSchema.Schemas, map[string]bool{ + "userAttribute": true}, + ) + generator.Generate(publicSchema.PublicSchemas, nil) + generator.Generate(clusterSchema.Schemas, nil) + generator.Generate(projectSchema.Schemas, nil) generator.GenerateNativeTypes(v1.SchemeGroupVersion, []interface{}{ v1.Endpoints{}, v1.Pod{},