edit-yaml
Nesta seção, você encontra a referência de um Hook Declarativo do tipo
edit-yaml.
Um Hook Declarativo do tipo edit-yaml é usado para definir alterações feitas em arquivos YAML existentes. Confira 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
spec:
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 de o 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
encoding:
Define o tipo de encoding a ser gravado no arquivo e aceita os formatos ascii, utf-8 ou utf-16. O valor padrã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
1até9.
changes:
É uma lista de ações de edição que serão executadas na ordem em que aparecem. O bloco de cada ação tem como obrigatório o parâmetro yamlpath.
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:
Confira as expressões detalhadas
| Expressão | Descrição |
|---|---|
@ | Define o objeto do elemento atual. |
$ | Define o objeto do elemento raiz. |
() | Expressão de script que usa o mecanismo de script subjacente. |
[início:fim] | Retorna uma cópia de parte de um array entre as posições inicial e final (final não incluído). |
?() | Aplica o filtro à expressão do script. |
[] | Operador filho usado em expressões. |
.. | Representa uma descida recursiva. |
* | É usado em elementos de objeto independentemente de seus nomes. |
[] | Em JSON e JavaScript, é o operador de array nativo. |
[,] | Permite definir um conjunto de índices e nomes de array em um mesmo caminho JSON. |
yamlpath:
Permite inserir a linguagem de busca em JSON (JSONPath) 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 no campo value existem no arquivo. Caso existam, as ações update, remove e clear não serão efetivadas.
changes:
- yamlpath: "$.some"
update:
value: |
not-existing:
item: 2
when:
not-exists: "$.some.not-existing"