Transform \ n para nova linha, embora a variável de entrada seja a única citada em Puppet

2

Se uma variável tiver aspas duplas e contiver um \n

$test="hello\nworld"

file { '/tmp/hello':
        content => $test
}

então uma nova linha é criada:

/tmp/hello
hello
world

Problema

O que fazer se a entrada não for duplicada devido à entrada hiera ou ao resultado de regsubst:

$test2=hiera("hiera::input")

file { '/tmp/hello':
        content => $test2
}

resulta em:

hello\nworld

Tente resolver o problema

A suposição era que a duplicação da variável de conteúdo resolveria o problema. Nem:

file { '/tmp/hello':
        content => "$test2"
}

nem:

file { '/tmp/hello':
        content => "\"$test2\""
}

resolve o problema. O último resulta em:

"hello\nworld"

Segunda tentativa

Outra tentativa foi tentada depois de ler esta resposta no StackOverflow .

hiera.yaml

---
bla: haha\nblabla

arquivo de manifesto

$test=hiera('bla')

$quoted = regsubst($test, '(.*)', '""')

file { '/tmp/hello':
        content => $quoted
}

resulta em:

"haha\nblabla"
    
por 030 04.05.2015 / 22:47

1 resposta

6

Estamos usando o backend YAML da Hiera, mas tenho certeza de que o mesmo é possível para o JSON e outros.

Você pode apenas formatar a sua string da maneira que você quer em YAML e o Puppet aceitará isso da forma mais feliz.

Por exemplo:

---
hiera::input: |
  my string
  with newlines
  preserved

Observe o | após o nome da chave hiera::input . Ele informa ao analisador YAML que tratar o seguinte valor como um bloco, preservando as novas linhas e qualquer outro recuo.

Consulte as seções 2.3 e 8.1.2 da especificação YAML para informações detalhadas.

    
por 05.05.2015 / 01:43

Tags