Skip to content
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

Merged
merged 8 commits into from
Nov 4, 2024
Merged

Conversation

daltonmatos
Copy link
Collaborator

No description provided.

@daltonmatos daltonmatos requested a review from lukerops October 18, 2024 23:38
@lukerops
Copy link
Owner

Aqui você seguiu um caminho diferente do que eu tinha imaginado como evolução. Meu plano inicial era tornar a criação de CustomResourceDefintions dinâmica e sendo feita completamente através de parâmetros. Isso quer dizer que adicionar uma versão nova consistiria apenas em adicionar algo do tipo no arquivo CustomResourceDefinition/main.tf:

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 schemaProcessor não podem ser feitas com source ../../../schemaProcessor/integer/v0/processor, mas sim com ../../../schemaProcessor/integer.

Isso também quer dizer que os módulos presentes no schemaProcessor/XXXX precisarão identificar quando o que está sendo chamado é para cair no processor ou no validator. Hoje, a interface de comunicação interna (definida no PR) é dada por:

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 ações no futuro, caso se mostre viável.

@daltonmatos
Copy link
Collaborator Author

Interessante! Mas tenho uma dúvida:
Em um código como esse:

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 faria algo nessa linha?

module "integer" {
  source  = ".././schemaProcessor/integer/${var.type_versions.integer}/"

  action = "processor"
  path = var.path
  manifest = var.manifest
}

e com isso, internamente, o módule .././schemaProcessor/integer/v1/ olharia o var.action e instanciaria o sub-modulo correto?

Seria algo assim o caminho?

@lukerops
Copy link
Owner

lukerops commented Oct 22, 2024

Minha ideia consiste em:

O CustomResource seria:

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 seria:

module "integer" {
  source  = "../../schemaProcessor/integer"

  action   = "processor"
  path     = var.path
  manifest = var.manifest
  ...
}

O schemaProcessor/integer seria:

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 schemaProcessor/integer/v0:

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 schemaValidation atual tem a interface:

variable "metadata_name" {
  type = string
}

variable "path" {
  type = string
}

variable "field_path" {
  type = string
}

variable "manifest" {
  type = any
}

variable "schema" {
  type = any
}

O que eu mandei antes contempla apenas o schema.

Acredito que para o schemaProcessor teremos que repensar essa interface e como é a comunicação interna entre os módulos 🤔

@daltonmatos
Copy link
Collaborator Author

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?

@lukerops
Copy link
Owner

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.

@daltonmatos daltonmatos marked this pull request as ready for review October 25, 2024 16:22
@daltonmatos daltonmatos changed the title Refactor processor and validator into schemaProcessor schemaProcessorL integer/v0 Oct 30, 2024
@daltonmatos daltonmatos changed the title schemaProcessorL integer/v0 SchemaProcessor: integer/v0 Oct 30, 2024
@daltonmatos daltonmatos changed the title SchemaProcessor: integer/v0 [1/7 ]SchemaProcessor: integer/v0 Oct 30, 2024
@daltonmatos daltonmatos changed the title [1/7 ]SchemaProcessor: integer/v0 [1/7] SchemaProcessor: integer/v0 Oct 30, 2024
@daltonmatos daltonmatos merged commit c43c733 into main Nov 4, 2024
4 checks passed
@daltonmatos daltonmatos deleted the feat/refact-schemaprocessor branch November 4, 2024 14:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants