微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何忽略 Puppet 中的额外符号

如何解决如何忽略 Puppet 中的额外符号

我试图在 Puppet this 中执行以下模块并得到错误

[root@localhost modules]# puppet apply jenkin_install.pp
Error: Could not parse for environment production: Syntax error at '8080' at /etc/puppetlabs/code/modules/jenkin_install.pp:41:52 on node localhost.localdomain

代码如下:

 exec { 'Change the port from 8080 to 8000':
  command   => 'sed -i'.original' 's/JENKINS_PORT="8080"/JENKINS_PORT="8000"/' /etc/sysconfig/jenkins',path      => '/usr/local/bin/:/bin/',logoutput => true,onlyif    => 'grep "8000" /etc/sysconfig/jenkins',}

我想知道如何解决命令中的语法错误

谢谢

解决方法

问题是当命令本身包含单引号时,您使用单引号引用命令字符串。解析器无法分辨两者之间的区别,因此最终将命令的位解释为 Puppet 代码。

最简单、最清晰的解决方法是使用 heredoc strings

exec { 'Change the port from 8080 to 8000':
  command   => @(END),sed -i'.original' 's/JENKINS_PORT="8080"/JENKINS_PORT="8000"/' /etc/sysconfig/jenkins
    | END
  path      => '/usr/local/bin/:/bin/',logoutput => true,onlyif    => 'grep "8000" /etc/sysconfig/jenkins',}

尽管,正如另一位评论者所说,该资源应重新编码为 file_line 资源。

file_line { 'set_JENKINS_PORT':
  ensure => present,path   => '/etc/sysconfig/jenkins',match  => 'JENKINS_PORT=',line   => 'JENKINS_PORT="8000"',}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。