一个傀儡新手,我目前正在开发一个部署脚本,它将在启动时启动几个 foreverjs服务rc.local
。
我担心的是,在 Ubuntu 中,文件底部rc.local
带有exit 0
。
我没有看到使用 stdlibfile_line
指令来确保我的行出现在 exit 命令上方的方法(或者特别是其他任何地方,如果需要的话)。
我可以用一个exec
块和一些丑陋的 sed来做到这一点,但在 puppet 中必须有更标准、更优雅的方式吗?
您可以使用PuppetLabs Concat 模块将部件动态插入rc.local
文件,如下所示:
将文件定义为 concat 文件,并添加一个标题(哈希爆炸、“由 Puppet 管理”注释等) - 请注意以下内容可能不起作用,我不确定 Puppet 的换行处理是否在我的脑海中!
concat { '/etc/rc.local':
ensure => present,
}
concat::fragment { '00_rc.local_header':
target => '/etc/rc.local'
content => '#!/bin/bash\n# This file is manageed by Puppet, do not modify!',
order => '01'
}
Run Code Online (Sandbox Code Playgroud)
添加您的自定义部分,确保指定正确target
且order
高于标题的值:
concat::fragment { '05_rc.local_custom':
target => '/etc/rc.local',
content => template('path/to/template.erb'),
order => '05'
}
concat::fragment { '15_rc.local_custom_2':
target => '/etc/rc.local',
source => 'puppet:///modules/mymodule/myfile.txt',
order => '06'
}
Run Code Online (Sandbox Code Playgroud)
添加exit 0
页脚:
concat::fragment { '99_rc.local_footer':
target => '/etc/rc.local',
content => 'exit 0\n',
order => '99'
}
Run Code Online (Sandbox Code Playgroud)
等等!
只要您设置了正确的值并且将该文件声明为资源,您就可以concat::fragment
跨多个子类(以及多个模块,尽管这确实不推荐!)target
使用concat
。该order
参数允许您在文件中定位元素。
查看模块的使用自述文件以了解更多信息。