web-dev-qa-db-fra.com

Puppet: Comment puis-je envelopper une commande en deux lignes si> 80 caractères?

Dans la marionnette, si la commande définir est> 80 caractères, comment puis-je envelopper en deux lignes pour le faire?

  exec { 'create_domain':
    command => "some command exceed 80 character...........................................................how to do how to do?.......",
  }
27
Kit Ho

C'est une sorte de moche, mais si le dernier caractère d'une chaîne est un "\ 'suivi d'une nouvelle ligne, la chaîne est ensuite poursuivie sur la ligne suivante. Mon échantillon.PP manifeste est ci-dessous:

class test {
        exec { 'create_domain':
                command => "/bin/echo 1234567890123456789012345678901234567890123456789012345678901234567890\
wrapped > /var/tmp/test.txt";
        }
}

node 'pwan-central' {
        include test
}

En cours d'exécution avec 'pupette appliquer extult.pp' sur un Ubuntu 11.10 avec Puppet 2.7.1 donne la sortie suivante

mrpwan@pwan-central:~$ puppet apply sample.pp
notice: /Stage[main]/Test/Exec[create_domain]/returns: executed successfully
notice: Finished catalog run in 0.10 seconds

Et la chat du fichier créé montre que les lignes ont enveloppé:

mrpwan@pwan-central:~$ cat /var/tmp/test.txt 
1234567890123456789012345678901234567890123456789012345678901234567890wrapped

Voir https://github.com/puppetlabs/puppet/blob/9fbb36de/lib/puppet/parser/lexer.rb#l537 (à partir de Puppet V2.7.0)

Il s'agit également d'un problème connu: http://project.puppetlabs.com/issues/5022

19
pwan

À partir de Puppet 3.5, vous avez quelques options que j'ai utilisées. Ruby vous permet de concéder des chaînes sur quelques lignes.

string = "line #1"\
         "line #2"\
         "line #3"

p string # => "line #1line #2line #3"

Une autre option, à partir de la marionnette 3.5, ils ont ajouté une fonctionnalité Heredoc. Cela vous permettra de mettre la chaîne dans une section d'un fichier de code source traité comme s'il s'agissait d'un fichier distinct.

$mytext = @(EOT)
    This block of text is
    visibly separated from
    everything around it.
    | EOT

La documentation de la marionnette est ici: https://docs.puppet.com/puppet/4.9/lang_data_string.html#heredocs

7
mccartjm

Pour de gros morceaux de données, les Heredocs sont la meilleure façon de traiter de longues lignes dans les manifestations de marionnettes. Les /L L'option d'interpolation est particulièrement utile. /L causes \ À la fin d'une ligne pour éliminer les nouvelles lignes. Par exemple, ce qui suit, ce que vous attendez, en décapant une indentation et des nouvelles lignes, y compris la nouvelle ligne de fuite.

  sshkey { 'example.com':
    ensure  => present,
    type    => 'ssh-rsa',
    key     => @(KEY/L),
      RfrXBrU1T6qMNllnhXsJdaud9yBgWWm6OprdEQ3rpkTvCc9kJKH0k8MNfKxeBiGZVsUn435q\
      e83opnamtGBz17gUOrzjfmpRuBaDDGmGGTPcO8Dohwz1zYuir93bJmxkNldjogbjAWPfrX10\
      8aoDw26K12sK61lOt6GTdR9yjDPdG4zL5G3ZjXCuDyQ6mzcNHdAPPFRQdlRRyCtG2sQWpWan\
      3AlYe6h6bG48thlo6vyNvOD8s9K0YBnwl596DJiNCY6EsxnSAhA3Uf9jeKqlVqqrxhEzHufx\
      07iP1nXIXCMUV
      |-KEY
    target  => '/home/user/.ssh/known_hosts',
  }
6
Jon

Si vous vous souciez vraiment de la limite de 80cols, vous pouvez toujours abuser d'un modèle pour atteindre cet objectif

exec {'VeryLongExec':
    command => template("${module}/verylongexec")
 }

Puis mettre la commande réelle dans ce fichier de modèle

Les crédits devraient aller à Jan Vansteenkiste pour personnaliser

4
KrisBuytaert