Estrutura de recursos

O que se pode escrever num manifesto, com que apiVersion, e o que acontece a cada documento depois de carregado.

Esta página não é escrita à mão a partir de uma lista: sai do mesmo registo que o parser, o schema, a completação e o reconciliador leem. Para a ver no teu próprio motor, em vez de aqui:

delonix api-resources
delonix api-resources -o json

Os grupos

Cada Kind vive num grupo, e o grupo faz parte da identidade — um apiVersion: storage.delonix.io/v1alpha1 num kind: Pod é recusado, com as duas formas aceites nomeadas no erro.

grupo Kinds
core.delonix.io/v1alpha1 Secret, Stack
compute.delonix.io/v1alpha1 Pod, VirtualMachine, Container, Workload
networking.delonix.io/v1alpha1 Network, NetworkRoute, NetworkPolicy, Dependency
gateway.delonix.io/v1alpha1 Gateway, HTTPRoute, Ingress
storage.delonix.io/v1alpha1 Volume
artifact.delonix.io/v1alpha1 Image
infrastructure.delonix.io/v1alpha1 KubernetesCluster

apiVersion: delonix.io/v1 continua a carregar

Não é uma grafia legada a caminho da porta. A promessa de estabilidade diz que o delonix.io/v1 só muda com um v2 que o continue a aceitar, e essa promessa mantém-se: um manifesto escrito antes desta reorganização carrega sem uma alteração.

O corte limpo aplica-se a comandos. Um ficheiro que está em git, revisto em PR e apontado por $schema num editor, ganha um degrau — não um erro.

O que acontece a cada documento

A coluna FORM do api-resources é a que não se adivinha: diz se um documento daquele Kind sobrevive ao load com o próprio nome. É a resposta a «porque é que o meu kind: Dependency nunca aparece no plano com esse nome».

forma significado
primary tem apply próprio e sobrevive ao load
sugar → X é reescrito em X por conveniência
compat → X schema estrangeiro aceite tal e qual, compilado sobre o mecanismo de X
aggregate expande-se nos documentos que contém
sunset → X funciona e não é reescrito — mas X é o caminho a seguir

sunset é diferente de deprecated, e a diferença é o ponto

Um Kind deprecated é reescrito no load, e quem o escreveu ganha o comportamento do sucessor de graça. Um Kind sunset não é reescrito, porque reescrevê-lo mudaria o que o motor FAZ.

O kind: Container é o caso que forçou a distinção. Baixá-lo para um kind: Pod de um container parece uma renomeação e não é: um Pod constrói sempre uma netns partilhada e os membros entram nela por re-exec, portanto todo o container declarado passaria a ter um holder de netns extra e um caminho de rede diferente. A metade do nome era solúvel; a da netns não é.

Por isso é anunciado, não reescrito: continua a funcionar, com um aviso por carregamento a dizer que kind: Pod é o caminho. Uma major futura remove-o, depois de os manifestos terem migrado.

Kinds removidos

Três Kinds deixaram de existir. A recusa nomeia o que escrever em vez deles, em vez de dizer «Kind desconhecido» — que faria um manifesto correcto até ontem parecer um erro de escrita:

removido escrever
Storage kind: Volume com um bloco nfs:/cifs:/webdav:
ShareVolume kind: Volume com um bloco share:
Egress kind: NetworkPolicy com direction: egress

Os três eram reescritos no load para exactamente estas formas, portanto o que o motor faz não mudou — mudou quem tem de escrever a forma final. Ver as notas da versão que os removeu para a migração.

Nomes antigos que continuam a resolver

Quatro Kinds foram renomeados. O nome antigo é um alias silencioso — não há aviso, porque uma renomeação não muda o que o documento significa e não há nada para migrar:

antes agora
Vm VirtualMachine
FirewallPolicy NetworkPolicy
Tunnel Gateway
Cluster KubernetesCluster

O alias vale em todo o lado, não só no carregador: delonix explain Cluster resolve tanto quanto delonix explain KubernetesCluster.

Plurais e abreviaturas

O get, o describe e o explain aceitam quatro grafias de cada Kind — o nome canónico, o singular em minúsculas, o plural e a abreviatura declarada:

delonix explain Pod
delonix explain pod
delonix explain pods
delonix explain po

As abreviaturas são deliberadamente poucas — existe uma quando é inequívoca e vale a pena escrever. delonix api-resources lista as que há.

O que ainda não existe

O kind: Service está previsto e ainda não foi implementado. Hoje a publicação de portas faz-se pelo -p do container run e pelo delonix net ingress publish; a forma declarativa entra numa versão seguinte.