Pular para o conteúdo principal

Referência da ferramenta

O nnconsole é a ferramenta do autor de módulo. Num repositório de módulo ela é chamada pelo wrapper ./nnconsolew, versionado ao lado do mvnw, que resolve o jar da versão do SDK do pom.xml e roda a JVM. Antes do primeiro módulo (quando ainda não existe um repositório com o wrapper), não há instalador: o CLI é o jar all publicado no repositório Maven da empresa — br.com.nnumbers.console:console-sdk-cli (0.8.0-SNAPSHOT), no grupo https://cicd.nnumbers.com.br/nexus/repository/maven-public/ (leitura sem credencial; o grupo também espelha o Maven Central):

MAVEN=https://cicd.nnumbers.com.br/nexus/repository/maven-public
SDK=0.8.0-SNAPSHOT # a versão do SDK desta linha
value=$(curl -sS "$MAVEN/br/com/nnumbers/console/console-sdk-cli/$SDK/maven-metadata.xml" \
| awk '/<classifier>all<\/classifier>/{f=1} f && /<value>/{gsub(/.*<value>|<\/value>.*/,""); print; exit}')
curl -sS -o nnconsole-all.jar \
"$MAVEN/br/com/nnumbers/console/console-sdk-cli/$SDK/console-sdk-cli-$value-all.jar"
java -jar nnconsole-all.jar version
# sdk 0.8.0-SNAPSHOT (nnconsole/0.8.0-SNAPSHOT), contrato console.nnumbers.io/v1alpha3

(O caminho -SNAPSHOT do arquivo 404; por isso o value do <snapshotVersions>.) Dentro de um repositório de módulo, o ./nnconsolew resolve o mesmo jar sozinho — o jar baixado só é necessário para o PRIMEIRO módulo; no repositório, um desenvolvedor precisa só de JDK 26 e do Maven Wrapper.

./nnconsolew version
sdk 0.8.0-SNAPSHOT (nnconsole/0.8.0-SNAPSHOT), contrato console.nnumbers.io/v1alpha3

Códigos de saída: 0 certo; 1 falha (a mensagem sai em stderr, prefixada por nnconsole:); 2 uso errado. As flags aceitam -nome valor, --nome valor, -nome=valor e --nome=valor, vêm antes dos argumentos posicionais, e -- encerra as flags. -h, -help e --help pedem o uso. Quase todo comando aceita --json para a saída de máquina.

Sem argumentos, o nnconsole lista os subcomandos:

uso: nnconsole descriptors validate | openapi check | nnp build|sign|verify|inspect|plan |
grants sign|verify|inspect|diff | docs check | template check | chart check |
netpolicy render|release|verify|probe | status check --targets … | api get|post|put|patch|delete |
modules show|plan|upload|deploy|rollback|disable|enable|retire|wait|probe-pause|probe-resume|fault-inject|fault-clear |
conformance validate|run | portability scan | secrets scan |
keys generate (--issuer … | --grant-key) (--seed-to-cmd | --out) | image inspect |
schema v1alpha3 <nome> | version | module create <id>

module create​

Cria o módulo: a árvore completa (NNS em Java, descritores, chart, status, docs, help, embed, conformance e onboarding) no diretório de destino. O gerado não escreve fora do --dir.

./nnconsolew module create --dir nnumbers-console-notes \
--package br.com.nnumbers.console.notes --name "Notes" notes

As flags vêm antes do id posicional — a ordem contrária é recusada (nnconsole: esperado exatamente um argumento: o id do módulo, exit 2).

flago que épadrão
<id> (posicional)o id do módulo: 3–40, ^[a-z][a-z0-9]*(-[a-z0-9]+)*$, fora dos reservados e dos ids com donoobrigatório
--dirdestino (criado ou vazio; um destino existente e não vazio é recusado)./<id>
--packagepacote Java raiz (2–5 rótulos, terminando no id com _; palavra reservada é recusada)br.com.nnumbers.console.<id com _>
--nameo nome de exibiçãoo id

O resumo vai para o stderr (módulo <id>@0.1.0 criado em <dir> (… arquivos)); o stdout é uma linha, o caminho do diretório criado. A árvore gerada já declara a audience nas rotas, no help, nas docs, no status e nas trilhas.


descriptors validate​

Confere os descritores contra os schemas: é o primeiro gate de qualquer mudança.

./nnconsolew descriptors validate --dir nnp
ok: sample@0.1.0 (module)
flago que épadrão
--diro diretório nnp/ ou a raiz do módulonnp
--targets, --targetconferem também o contrato de rede contra o target—
--authorizeddependências a SUPOR autorizadas na conferência local (quem decide é o Module Manager no deploy)—
--jsonproblemas em JSON—

openapi check​

Confere as rotas do api.yaml e o nns/api/openapi.yaml nos dois sentidos.

./nnconsolew openapi check --dir nnp
openapi: ok (2 rota(s))

Flags: --dir (padrão nnp), --json.

nnp build​

Monta o .nnp: release.json, SBOM, checksums e o pacote.

./nnconsolew nnp build --root . --out dist --java-image <registry>/<repo>@sha256:<digest>
flago que épadrão
--rootraiz do módulo (com nnp/release.yaml).
--outdiretório de saídadist
--java-imagea imagem JVM do NNS, PUBLICADA, por digest: o nnconsole a lê do registry e o SBOM recebe o registro de runtime, o SDK do carimbo e os jars com SHA-256—
--probe-java-imagea imagem JVM do Status Probe, publicada, por digest—
--sbomum SBOM CycloneDX pronto, se você já temgerado
--npm-lockpackage-lock.json do NNC; repetível, um por surface—
--nnc-packagesinventário dos pacotes npm EMBUTIDOS no bundle de uma surface; repetível, um por build—
--build-id, --repositoryUUID do build e URL do repositórioderivados

nnp sign​

Assina o pacote com a seed Ed25519 (a seed fica FORA do repositório e nunca é impressa).

./nnconsolew nnp sign --key-file <seed> --key-id <kid> --out dist/<módulo>-<versão>.signed.nnp dist/<módulo>-<versão>.nnp

Flags: --key-file, --key-id (padrão: o da regra nova), --trusted-keys (JWKS para autoverificar), --out (padrão: sobrescreve a entrada).

nnp verify​

Abre o pacote com o mesmo validador do Module Manager.

./nnconsolew nnp verify --signature-policy required --trusted-keys <jwks> dist/<módulo>-<versão>.nnp

Flags: --signature-policy (off|optional|required, padrão required), --trusted-keys, --sdk-version (padrão: a do validador), --json. Sem JSON, a última linha é ok: <release> <digest> (assinatura: <estado>).

nnp inspect​

Lista o conteúdo do pacote.

./nnconsolew nnp inspect dist/<módulo>-<versão>.nnp

Flags: --json.

nnp plan​

O plano de deploy em modo leitura: cada recurso e cada blocker, sem tocar na plataforma.

./nnconsolew nnp plan dist/<módulo>-<versão>.nnp --targets <targets> --target <id> --all-capabilities --simulate-greenfield
flago que é
--targets, --targeto arquivo de targets e o id do target
--signature-policy, --trusted-keysa política de assinatura do pacote
--grants, --grant-keysa política de grants assinada e o JWKS dela
--active-module <id>=<callers>um módulo ACTIVE no registro, com os chamadores internos dele; repetível
--capabilities, --all-capabilitiesas capabilities de plataforma disponíveis, ou todas
--simulate-greenfieldsimula executor greenfield: unknown → will_create
--jsonem JSON

grants sign|verify|inspect|diff​

A política de grants de dependência privilegiada.

./nnconsolew grants sign --key-file <seed> --out <política-assinada> <política.json>
./nnconsolew grants verify --trusted-keys <jwks> --current <pacote-vigente> <pacote>
./nnconsolew grants inspect --trusted-keys <jwks> <pacote>
./nnconsolew grants diff --trusted-keys <jwks> <anterior|-> <novo>

Flags: sign — --key-file, --kid, --out; verify/inspect — --trusted-keys, --json (verify também aceita --current); diff — --trusted-keys.

docs check​

Roda o perfil docs-mdx/v1 sobre o docs/ do módulo, sem empacotar.

./nnconsolew docs check --dir . --required --reserved-prefixes <lista>
flago que épadrão
--dira raiz do módulo ou o nnp/.
--requiredpolítica de produção: texto de template recusaaviso
--reserved-prefixesprefixos reservados do motor, separados por vírgulavazio fora do Module Manager
--jsonproblemas em JSON—

template check​

Procura texto de template (nn-template-placeholder ou TROQUE) nos descritores, no help, no status e no NNC.

./nnconsolew template check --dir . --required
template: ok (0 aviso(s))

Flags: --dir (padrão .), --required, --json.

chart check​

Renderiza o chart client-only e confere o manifesto contra a allowlist, com as regras do runtime JVM.

./nnconsolew chart check --values nns/helm/testdata/injected-values.yaml --namespace nns-sample-0-1-0 \
--runtime jvm --runtime-user 1002 nns/helm/chart
ok: render client-only (v1.36.1) conferido; manifesto sha256:3f23aaca608289b30567f304c7a12c6cbe2a6e162bda0892490b54a98531db6a
flago que épadrão
--valuesos valores injetados (o bloco nnumbers)obrigatório
--namespaceo namespace de destino (.Release.Namespace)obrigatório
--kube-versiona versão do Kubernetes do targetv1.36.1
--runtimejvm aplica chart_runtime_command, chart_runtime_env e chart_runtime_mountvazio
--runtime-usercom --runtime jvm: o UID numérico da imagem; o runAsUser do chart tem de ser igual—
--outgrava o manifesto conferido—
--jsonproblemas em JSON—

netpolicy render|release|verify|probe|surface-probe​

A camada de rede: o que o Module Manager vai gerar e o que a sonda vai provar.

./nnconsolew netpolicy render --targets <targets> --target <id> [--json]
./nnconsolew netpolicy release --targets <targets> --target <id> [--dir nnp] [--json]
./nnconsolew netpolicy verify --targets <targets> --target <id> --tiers <json> --policies <json>
./nnconsolew netpolicy probe --targets <targets> --target <id> --registry <f> --kubelet-host <ip>

render aceita --validation-object (só o objeto de teste do runbook de troca da política viva). verify e probe recebem o resultado de kubectl get (--tiers, --policies, --daemonset, --guard-pods, --nodes, --module-pods) e --apiserver-url repetível. probe também aceita --plan-only, --conformance-digest, --existing-module, --existing-catalog e --dir.

status check​

Confere o contrato do Status Probe contra o target.

./nnconsolew status check --targets <targets> --registry <registry> --image <ref@sha256:…>

Flags: --targets, --dir (padrão .), --registry, --image (padrão: a do release.yaml), --env (production|development, padrão production), --json.

api get|post|put|patch|delete​

Chama a Public API com o token do CLI.

./nnconsolew api get /v1/platform/health
./nnconsolew api post /v1/sample/items --json '{"name":"primeiro"}'
flago que épadrão
--json, --fileo corpo literal, ou lido de um arquivo—
--content-typeo Content-Type do corpoapplication/json
--idempotency-keya chave da mutaçãogerada nas mutações
--header 'Nome: valor'cabeçalho extra; repetível (Authorization e Cookie são recusados)—
--rawo corpo como veio, sem indentar—
--api, --token-cmda URL da Public API (padrão: NN_API_URL) e o comando que imprime o bearerdevice flow

modules …​

O ciclo de vida no Module Manager, sempre pela ferramenta — nunca kubectl ou helm à mão.

./nnconsolew modules show [<id> [<rid>]]
./nnconsolew modules plan <id> <release>
./nnconsolew modules upload <pacote.nnp>
./nnconsolew modules deploy <id> <release>
./nnconsolew modules rollback <id> --to <release>
./nnconsolew modules disable <id> # e enable
./nnconsolew modules retire <id> <release>
./nnconsolew modules wait <id> <release>
./nnconsolew modules probe-pause <id> # e probe-resume
./nnconsolew modules fault-inject <id> # e fault-clear
./nnconsolew modules tenants <id> # e tenant-enable | tenant-disable <id> <gid>
flago que épadrão
--api, --token-cmda Public API e o comando do bearerNN_API_URL, device flow
--jsonsaída de máquina—
--no-wait, --timeoutnão acompanhar a Action; prazo do acompanhamentoacompanha; 30m
--idempotency-keyrepetir a mesma chave torna o pedido segurogerada
--too alvo do rollbackobrigatório no rollback
--allow-audit-pendingaceita o registro de audit PENDING no deploy (nunca em kind: platform)—
--ttlsegundos da pausa e da falha sintética (≤ 900)300
--component, --resultcomponente e resultado da falha sintética (FAIL ou DEGRADED)DEGRADED

conformance validate e conformance run​

validate confere o tests/conformance.yaml contra a release, sem rede.

./nnconsolew conformance validate --dir . --expect tests/conformance.yaml
conformance: ok (sample, tests/conformance.yaml)

run prova a release ao vivo, com ids estáveis e estado retomável.

./nnconsolew conformance run --module sample --release sample@0.1.0 --out report.json \
--api https://<host> --token-cmd '…' --phase package --phase nns
flago que é
--module, --releaseo módulo e a release em prova (a ACTIVE)
--outestado e relatório (JSON, sem token; retomável)
--phasepackage|nns|api|audit|network|status|docs|audience|rollback; repetível
--packageo .nnp local da release (digest, NNC e OpenAPI comparados)
--docs-base, --status-basea origem do portal e da página pública do Status
--allow-mutations, --rollback-tolibera as provas que mutam; o alvo do rollback
--api, --token-cmda Public API e o bearer (o valor nunca vai a log, arquivo ou argumento de outro processo)
--tenant-token-cmd, --platform-token-cmdum principal de cada audience, para a fase audience
--evidenceo diretório das evidências de browser dos checks assistidos
--expect, --diras expectativas e a raiz do módulo

portability scan​

Recusa host, IP, namespace, cluster ou localhost fixos.

./nnconsolew portability scan --dir .
portability: ok (sem .nnportability.yaml (só regras genéricas))

Flags: --dir (padrão .), --json.

secrets scan​

Procura segredo no que está versionado.

./nnconsolew secrets scan --dir .
secrets: ok

Flags: --dir (padrão .), --json. Rode-o sozinho, conferindo o código de saída.

keys generate​

Gera uma seed Ed25519 nova e imprime só o kid e a JWK pública.

./nnconsolew keys generate --issuer nnumbers-public-api --seed-to-cmd '<comando que guarda a seed>'
./nnconsolew keys generate --grant-key --seed-to-cmd '<comando>'
flago que é
--issuero emissor (nn_iss da JWK)
--grant-keychave de assinatura da política de grants (nunca assina NNP)
--seed-to-cmdcomando que recebe a seed pelo stdin; repetível (produção)
--outarquivo da seed 0600, fora do repositório, sem sobrescrever (desenvolvimento)
--nnp-kinds, --nnp-moduleschave de assinatura de NNP: module, platform ou ambos; ids de módulo separados por vírgula ou *

schema v1alpha3 <nome>​

Imprime um dos schemas do contrato.

./nnconsolew schema v1alpha3 release
./nnconsolew schema v1alpha3 --bundle chart-values

A lista de nomes sai do próprio comando quando você o chama sem o nome.

image inspect​

Lê uma imagem publicada por digest e diz o que ela é.

./nnconsolew image inspect --role nns <registry>/<repositório>@sha256:<digest>

Flags: --role (nns ou status-probe). A imagem em si é construída pelo Maven, não pela ferramenta:

./mvnw spring-boot:build-image -Dnn.image.name=<registry>/<repositório>

version​

./nnconsolew version
# sdk 0.8.0-SNAPSHOT (nnconsole/0.8.0-SNAPSHOT), contrato console.nnumbers.io/v1alpha3