Exemplo n.º 1
0
        internal static V1CustomResourceDefinition CreateCrd(this Type entityType)
        {
            var entityDefinition = entityType.CreateResourceDefinition();

            var crd = new V1CustomResourceDefinition(
                new V1CustomResourceDefinitionSpec(),
                $"{V1CustomResourceDefinition.KubeGroup}/{V1CustomResourceDefinition.KubeApiVersion}",
                V1CustomResourceDefinition.KubeKind,
                new V1ObjectMeta {
                Name = $"{entityDefinition.Plural}.{entityDefinition.Group}"
            });

            var spec = crd.Spec;

            spec.Group = entityDefinition.Group;
            spec.Names = new V1CustomResourceDefinitionNames
            {
                Kind     = entityDefinition.Kind,
                ListKind = entityDefinition.ListKind,
                Singular = entityDefinition.Singular,
                Plural   = entityDefinition.Plural,
            };
            spec.Scope = entityDefinition.Scope.ToString();

            var version = new V1CustomResourceDefinitionVersion();

            spec.Versions = new[] { version };

            version.Name    = entityDefinition.Version;
            version.Served  = true;
            version.Storage = true;

            if (entityType.GetProperty("Status") != null || entityType.GetProperty("status") != null)
            {
                version.Subresources = new V1CustomResourceSubresources(null, new object());
            }

            var columns = new List <V1CustomResourceColumnDefinition>();

            version.Schema = new V1CustomResourceValidation(MapType(entityType, columns, string.Empty));

            version.AdditionalPrinterColumns = entityType
                                               .GetCustomAttributes <GenericAdditionalPrinterColumnAttribute>(true)
                                               .Select(a => a.ToAdditionalPrinterColumn())
                                               .Concat(columns)
                                               .ToList();

            if (version.AdditionalPrinterColumns.Count == 0)
            {
                version.AdditionalPrinterColumns = null;
            }

            return(crd);
        }
Exemplo n.º 2
0
        public V1CustomResourceDefinitionVersion BuildVersion(ApiVersion apiVersion, Type type)
        {
            JsonSchemaGenerator schemaGenerator = new JsonSchemaGenerator();
            var schema = schemaGenerator.Generate(type);

            schema.Properties = new Dictionary <string, JsonSchema>(schema.Properties.Where(kvp => kvp.Key == "spec" || kvp.Key == "status"));

            var version = new V1CustomResourceDefinitionVersion(apiVersion.Version, true, true);

            version.Schema = new V1CustomResourceValidation();
            version.Schema.OpenAPIV3Schema = MapSchemaToKubernetesModels(schema);

            if (type.Implements <IStatusEnabledCustomResource>())
            {
                version.Subresources = new V1CustomResourceSubresources(status: new object());
            }

            return(version);
        }
Exemplo n.º 3
0
        internal static V1CustomResourceDefinition CreateCrd(Type entityType)
        {
            var entityDefinition = CustomEntityDefinitionExtensions.CreateResourceDefinition(entityType);

            var crd = new V1CustomResourceDefinition(
                new V1CustomResourceDefinitionSpec(),
                $"{V1CustomResourceDefinition.KubeGroup}/{V1CustomResourceDefinition.KubeApiVersion}",
                V1CustomResourceDefinition.KubeKind,
                new V1ObjectMeta {
                Name = $"{entityDefinition.Plural}.{entityDefinition.Group}"
            });

            var spec = crd.Spec;

            spec.Group = entityDefinition.Group;
            spec.Names = new V1CustomResourceDefinitionNames
            {
                Kind     = entityDefinition.Kind,
                ListKind = entityDefinition.ListKind,
                Singular = entityDefinition.Singular,
                Plural   = entityDefinition.Plural,
            };
            spec.Scope = entityDefinition.Scope.ToString();

            var version = new V1CustomResourceDefinitionVersion();

            spec.Versions = new[] { version };

            // TODO: versions?
            version.Name    = entityDefinition.Version;
            version.Served  = true;
            version.Storage = true;

            if (entityType.GetProperty("Status") != null || entityType.GetProperty("status") != null)
            {
                version.Subresources = new V1CustomResourceSubresources(null, new { });
            }

            version.Schema = new V1CustomResourceValidation(MapType(entityType));

            return(crd);
        }