Metadata

Nesta seção, você encontra detalhes sobre metadados.

Metadata é um objeto criado durante a execução de um Template, Plugin ou Task. E ele contém diversos valores te auxiliam na execução de outros processos ou automações.

metadata:
  inputs: Dict
  global_inputs: Dict
  computed_inputs: Dict
  global_computed_inputs: Dict
  filters: Dict
  target_path: Path
  component_path: Path
  stack_path: Path

metadata.inputs: É um dicionário com os inputs processados.

Confira um exemplo abaixo:

# Exemplo em um Plugin/Hook
hooks:
  ...
  commands:
  - ping -c 4 {{ inputs.ipv4 }}
  # ou
  - ping -c 4 {{ ipv4 }}

Os inputs processados também são adicionados na corpo do objeto.

Confira o exemplo:

metadata.inputs.varname
metadata.varname

# caso esteja executando dentro de template jinja o termo metadata fica omitido.

{{ inputs.varname }}
{{ varname }}

Para mais informações, confira a seção de inputs.

metadata.target_path: Caminho do local de execução de um Template, Plugin e/ou Task.

Confira o exemplo abaixo:

# Exemplo em uma Task
...
command: |
  kubectl apply -f {{ target_path }}/deployment/main.yaml

metadata.component_path: Caminho da origem de um Template, Plugin ou Task. É o local onde cada um está armazenado.

Confira o exemplo abaixo:

# Exemplo em uma Task
...
command:
  windows: |
    call "{{ component_path }}\scripts\my-another.bat"
  linux: |
    bash "{{ component_path }}/scripts/my-another.sh"

metadata.stack_path: Local onde a Stack em execução está armazenada: (~/.stk/stacks/my-stack/).

Confira o exemplo abaixo:

# Exemplo em uma Task
...
command: .{{ stack_path }}/bin/custom_cmd

Metadados Avançados

Você pode utilizar alguns metadados em recursos mais avançados.

Os valores **target_path**, component_path** e stack_path** são objetos do tipo Path. Nestes casos, você pode usar as propriedades e os métodos desse objeto no contexto da execução. Confira o exemplo abaixo:

# Exemplo em uma Task
...
command: |
  # projects size
  du -sh {{ stack_path.parent }}

Hooks

Os metadados podem ser utilizados também nos cenários de hooks. Por exemplo, você pode usar o type: run-script aqui, confira abaixo:

hooks:
  - type: run-script
    ...
    script: my-custom-script.py
# my-custom-script.py
import json
from templateframework.metadata import Metadata

def run(metadata: Metadata):
    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

Para mais informações, confira a seção de Hooks.

Métodos e propriedades acessíveis por meio do metadata dentro de um script

Método/PropriedadeDescrição
metadata.all_inputs()Todos os inputs processados do Templates ou Plugins ou Tasks.
metadata.inputsDicionário dos inputs.
metadata.global_inputsDicionário de global inputs.
metadata.global_computed_inputsDicionário de global computed inputs.
metadata.target_pathPath onde o Plugin/Template está sendo executado.
metadata.component_pathPath do Plugin/Template (~/.stk/stacks/my-stack/).
metadata.stack_pathPath da Stack (~/.stk/stacks/).
metadata.filtersContém filtros de string integrados ao Jinja Templates.
metadata.group_id_folder(str)Substituí . para /
metadata.to_unidecode(str)Remove os caracteres do latim para ANSII (eg. áçhó -> acho).