使用 puppet 将命令添加到“exit 0”上方的 rc.local 的正确方法?

msa*_*ord 4 puppet

一个傀儡新手,我目前正在开发一个部署脚本,它将在启动时启动几个 foreverjs服务rc.local

我担心的是,在 Ubuntu 中,文件底部rc.local带有exit 0

我没有看到使用 stdlibfile_line指令来确保我的行出现在 exit 命令上方的方法(或者特别是其他任何地方,如果需要的话)。

我可以用一个exec块和一些丑陋的 sed来做到这一点,但在 puppet 中必须有更标准、更优雅的方式吗?

Cra*_*son 5

您可以使用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)

添加您的自定义部分,确保指定正确targetorder高于标题的值:

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参数允许您在文件中定位元素。

查看模块的使用自述文件以了解更多信息。