如何解决如何忽略 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 举报,一经查实,本站将立刻删除。