Pular para o conteúdo principal
Version: v4.5.0

edit-yaml


Um Hook Declarativo do tipo edit-yaml define alterações feitas em arquivos YAML existentes. Confira abaixo um exemplo de definição de um hook declarativo do tipo edit-yaml:

name: "hook-edit-yaml"
description: Test edit-yaml in hooks
types:
- app
inputs:
- label: Just a text
type: text
name: yaml_body
- label: Just a Tag
type: text
name: yaml_tag
hooks:
- type: edit-yaml
trigger: after-render
path: package.yaml
indent: 4
encoding: utf-8
changes:
- yamlpath: "$.scripts"
update:
value: |
{
"test": "ola 123",
"ola": "como vai você"
}
- yamlpath: "$"
remove:
- name: private
- name: devDependencies
- yamlpath: "$.log"
clear: true
- yamlpath: "$.spec.components[?name = '{{INTERPOLAR-INPUT-AQUI}}']"
update:
value: |
traits:
- type: teste
properties:
port: {{port}}

Ações Disponíveis

path:

Define o caminho do arquivo que será editado. O caminho pode ser composto por expressões Jinja.

path: package.yaml

trigger:

Campo para definir gatilhos que informam o momento em que a edição de arquivos deve ocorrer.

before-input:
Executa o Hook Declarativo antes de receber os parâmetros de entrada da pessoa usuária.

trigger: before-input

before-render:
Executa o Hook Declarativo antes do Template gerar arquivos no projeto.

trigger: before-render

after-render:
Executa o Hook Declarativo após o Template gerar arquivos no projeto.

trigger: after-render

enconding:

Define o tipo de encoding a ser gravado no arquivo, e aceita os formatos [ascii, utf-8, utf-16]. O valor padrão é o utf-8.

encoding: utf-8

indent:

Define o número de espaços para a indentação do documento gerado. O valor padrão de espaços é 2.

indent: 4

Usar somente inteiros de 1 até 9.


changes:

É uma lista de ações de edição que serão executadas na ordem em que aparecem. E o seu bloco tem como obrigatório o parâmetro yamlpath.

info

Durante o processo de pesquisa no atributo changes, todos os nós que correspondem aos critérios (atributo yamlpath) são alterados de uma só vez. Você pode fazer várias alterações em um arquivo apenas usando expressões.

Confira algumas expressões aceitas:

Clique aqui para expandir!
ExpressãoDescrição
@Define o objeto do elemento atual.
$Define o objeto do elemento raiz.
()Esta é uma expressão de script, usando o mecanismo de script subjacente.
[início:fim]Retorna uma cópia de parte de um array de um subarray criado entre as posições inicial e final (final não está incluído) de um array original.
?()Aplica o filtro à expressão do script.
[]Este é um operador filho que foi usado em expressões.
..Esta é uma descida recursiva.
*É usado em elementos de objeto independentemente de usar seus nomes.
[]Em json e javascript, é o operador do array nativo.
[,]O caminho Json nos permite um conjunto de índices e nomes de array.

yamlpath:

Permite inserir a linguagem de busca do JSON no arquivo YAML. O seu uso é Obrigatório.

changes:
- yamlpath: "$.packages.version"
...

Se necessário, consulte o Suporte do yamlpath (jsonpath)

É possível interpolar os valores do campo yamlpath com Jinja:

hooks:
- type: edit-yaml
trigger: after-render
path: app.yaml
indent: 2
encoding: utf-8
changes:
- yamlpath: "$.spec.components[?name = '{{INTERPOLAR-INPUT-AQUI}}']"
update:
value: |
traits:
- type: teste
properties:
port: {{port}}

update:
Altera ou acrescenta um item dentro de um resultado de um yamlpath. Os campos disponíveis são value ou snippet.

value
Recebe o valor para ser adicionado ao YAML.

  update:
value: "qa"

snippet
Recebe o snippet para ser adicionado ao YAML.

update:
snippet: snippets/fragment.yaml

remove:
Remove um elemento de dicionário. O campo disponível é o name.

name:
Recebe o nome do elemento a ser removido do dicionário YAML. É possível interpolar os valores do campo name com Jinja.

- yamlpath: "$.scripts"
remove:
- name: prepare

clear:
Remove todo o conteúdo do nó YAML, dado o contexto do yamlpath. Os valores aceitos são true ou false.

  - yamlpath: "$.devDependencies"
clear: true

when:

Ação condicional que avalia se a inserção será efetivada. A opção disponível é not-exists, que recebe o texto ou arquivo para serem avaliados pela condição.

not-exists:
Checa se os valores informados nos campo value existem no arquivo. Caso exista, as ações update, remove e clear não serão efetivadas.

hooks:
- yamlpath: "$.some"
update:
value: |
not-existing:
item: 2
when:
not-exists: "$.some.not-existing"

Leia também

Esta página foi útil?