Metadata
Nesta seção, você encontra detalhes sobre o objeto Metadata na StackSpot.
O Metadata é um objeto criado durante a execução de um Plugin. Ele contém diversos valores que auxiliam você na execução de outros processos ou automações.
A estrutura básica do objeto é:
metadata:
inputs: Dict
global_inputs: Dict
computed_inputs: Dict
global_computed_inputs: Dict
filters: Dict
target_path: Path
component_path: Path
Propriedades do Metadata
metadata.inputs
É um dicionário que contém os inputs processados.
Os inputs do tipo
global_inputs,computed_inputseglobal_computed_inputsapresentam o mesmo comportamento deinputs. A diferença é que cada objeto contém seus dados específicos.
Exemplo de uso em um Hook:
# Exemplo em um Plugin/Hook
hooks:
...
commands:
# Acessando via namespace inputs
- ping -c 4 {{ inputs.ipv4 }}
# ou acessando diretamente
- ping -c 4 {{ ipv4 }}
O input
ipv4é solicitado durante a execução do Hook. O sistema faz a interpolação do valor antes de executar o comando.
Os inputs processados também são adicionados ao corpo do objeto principal. Veja como acessá-los:
# Acesso completo
metadata.inputs.varname
metadata.varname
# Caso esteja executando dentro de um template Jinja, o termo 'metadata' é omitido:
{{ inputs.varname }}
{{ varname }}
metadata.target_path
Representa o caminho (path) do local onde o Plugin está sendo executado.
Exemplo de aplicação do arquivo main.yaml relativo ao caminho de execução:
# Exemplo em um Plugin/Hook
hooks:
...
commands: |
kubectl apply -f {{ target_path }}/deployment/main.yaml
O
target_pathretorna a pasta corrente de execução. Exemplo:'/home/user/scheduler'.
metadata.component_path
Representa o caminho de origem do Plugin, ou seja, onde os arquivos do Plugin estão armazenados localmente.
Exemplo de execução de scripts internos do Plugin:
# Exemplo em um Plugin/Hook
hooks:
...
commands:
windows: |
call "{{ component_path }}\scripts\my-script.bat"
linux: |
bash "{{ component_path }}/scripts/my-script.sh"
O
component_pathajuda a manter binários e scripts organizados dentro do seu Plugin, facilitando a referência para execução posterior.
Metadados Avançados
Você pode utilizar metadados em recursos mais avançados.
Os valores target_path e component_path são objetos do tipo Path (biblioteca pathlib do Python). Isso significa que você pode usar propriedades e métodos desse objeto no contexto da execução.
Exemplo para verificar o tamanho do diretório pai:
# Exemplo em um Plugin/Hook
hooks:
...
commands: |
# Tamanho do diretório pai do local de execução
du -sh {{ target_path.parent }}
Hooks
Os metadados também podem ser utilizados em Hooks Declarativos. Por exemplo, ao usar o tipo run-script:
Declaração no yaml:
hooks:
- type: run-script
...
script: my-custom-script.py
Script Python (my-custom-script.py):
# my-custom-script.py
import json
from templateframework.metadata import Metadata
def run(metadata: Metadata):
# Usa o target_path para localizar o arquivo package.json
with open(f"{metadata.target_path}/package.json") as f:
data = json.load(f)
if data["license"] == "MIT":
print("license ok")
else:
print("license error, please set MIT license at package.json")
exit(1)
return metadata
Resumo de Métodos e Propriedades
A tabela abaixo lista os métodos e propriedades acessíveis via objeto metadata dentro de um script:
| Método/Propriedade | Descrição |
|---|---|
metadata.all_inputs() | Retorna todos os inputs processados do Plugin. |
metadata.inputs | Dicionário contendo os inputs. |
metadata.global_inputs | Dicionário contendo os global inputs. |
metadata.global_computed_inputs | Dicionário contendo os global computed inputs. |
metadata.target_path | Caminho (Path) onde o Plugin está sendo executado. |
metadata.component_path | Caminho (Path) onde o Plugin está salvo (ex: ~/.stk/stacks/my-stack/). |
metadata.filters | Filtros de string integrados aos Templates Jinja. |
metadata.group_id_folder(str) | Substitui pontos . por barras / (útil para pacotes Java). |
metadata.to_unidecode(str) | Remove acentos e caracteres latinos, convertendo para ASCII (ex: áçhó -> acho). |