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 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: "\t"
    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.

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.

append:
    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