-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[1/7] SchemaProcessor: integer/v0 #23
Conversation
schemaProcessor/integer/v0/validator
Aqui você seguiu um caminho diferente do que eu tinha imaginado como evolução. Meu plano inicial era tornar a criação de module "v1alpha2" {
source = "./module"
count = split("/", var.manifest.apiVersion)[1] == "v1alpha2" ? 1 : 0
path = var.path
manifest = var.manifest
type_versions = {
integer = "v1"
string = "v1"
bool = "v1"
array = "v0"
reduced_array = "v0"
object = "v0"
reduced_object = "v0"
root_object = "v0"
}
} Isso quer dizer a chamada interna dos módulos do Isso também quer dizer que os módulos presentes no object({
type = string # tipo do elemento
version = string # versão do validador utilizado para o elemento
validations = object({}) # objeto contento as configurações extras de validação de cada tipo
subItem = object({}) # instância do mesmo objeto com informações do subItem
}) Essa interface já não nos atende mais, portanto, sugiro a adição de um campo novo, ficando: object({
action = string # ação a ser tomada pelo schemaProcessor (schemaValidation / schemaGeneration)
type = string # tipo do elemento
version = string # versão do validador utilizado para o elemento
validations = object({}) # objeto contento as configurações extras de validação de cada tipo
subItem = object({}) # instância do mesmo objeto com informações do subItem
}) Essa interface nos abre a possibilidade de criação de novas |
Interessante! Mas tenho uma dúvida: module "v1alpha2" {
source = "./module"
count = split("/", var.manifest.apiVersion)[1] == "v1alpha2" ? 1 : 0
path = var.path
manifest = var.manifest
type_versions = {
integer = "v1"
string = "v1"
bool = "v1"
array = "v0"
reduced_array = "v0"
object = "v0"
reduced_object = "v0"
root_object = "v0"
}
} O código do module, que estará em module "integer" {
source = ".././schemaProcessor/integer/${var.type_versions.integer}/"
action = "processor"
path = var.path
manifest = var.manifest
} e com isso, internamente, o módule Seria algo assim o caminho? |
Minha ideia consiste em: O module "v1alpha2" {
source = "./module"
count = split("/", var.manifest.apiVersion)[1] == "v1alpha2" ? 1 : 0
path = var.path
manifest = var.manifest
type_versions = {
integer = "v1"
string = "v1"
bool = "v1"
array = "v0"
reduced_array = "v0"
object = "v0"
reduced_object = "v0"
root_object = "v0"
}
} O module "integer" {
source = "../../schemaProcessor/integer"
action = "processor"
path = var.path
manifest = var.manifest
...
} O module "v0" {
source = "./v0"
count = var.schema.version == "v0" ? 1 : 0
action = var.action
path = var.path
manifest = var.manifest
...
} só então chegaria no module "processor" {
source = "./processor"
count = var.action == "processor" ? 1 : 0
path = var.path
manifest = var.manifest
...
} O que estou pensando agora é que eu falei besteira. O variable "metadata_name" {
type = string
}
variable "path" {
type = string
}
variable "field_path" {
type = string
}
variable "manifest" {
type = any
}
variable "schema" {
type = any
}
Acredito que para o |
Dúvida: Acha que a ideia do schemaProcessor que está nesse PR pode servir de passo intermedíario até chegarmos nessa ideia final de CRD versions mais dinâmicas e mais simples de implementar? |
Acho sim. Podemos usar dessa chamada direta do módulo como tu fez para fazer a transição até chegar na versão dinâmica final. Só tem que ir pensando nas interfaces e ir tentando chegar em uma interface estável para os módulos. |
[3/7] SchemaProcessor: bool/v0
[2/7] SchemaProcessor: string/v0
No description provided.