提供一些细节 - 在AWS上构建,使用Puppet处理DSC,并使用自举的Puppet进行配置,并在新配置的节点上安装Puppet。
我现在已经和Puppet合作了一段时间,我发现自己想要编写一个仅在创建虚拟机时执行的模块。
我的特殊用例是我想通过Puppet自动将防病毒软件(特别是趋势科技服务器深度安全防护系统)安装到新配置的节点上。
运行此脚本只需要下载,运行和一些TMDS特定命令来激活自己等。
如果我使用Puppet,它会在每次运行时执行此操作(下载,尝试安装,尝试激活),这绝对不是我想要的。
然而,我并不认为Puppet知道'关于趋势科技,或如何获取它,或URL等。所以我不能使用类似的东西:
service { "trend micro":
ensure => running,
ensure => present,
}
进行一些研究,并查看blog posts,我知道我的代码结构应该是符合的(我知道它不正确):
exec {'function_name':
# the script that downloads/installs/activates etc.
command => '/path/to/script.sh',
onlyif => systemctl service_trendmicro,
# which system should return 0 or 1 for pass/fail - I only want it to exec on 0 ofc.
}
因此,我的问题是:我如何把它放在一起?
答案 0 :(得分:3)
您可以像往常一样使用Puppet来运行脚本。但是,如果你在没有Puppet的情况下运行脚本,你最终会遇到同样的问题:很难让它们显得有意义,它们对于maitain来说很烦人,而且它们不能移植到其他平台。
公司似乎提供Chef cookbooks和Ansible Playbooks来安装代理。这些应该让你大致了解如何处理Puppet。
通过查看Ansible剧本,将其转换为等效的Puppet代码非常容易:
exec {'download Trend RPM':
command => '/bin/wget https://app.deepsecurity.trendmicro.com:443/software/agent/RedHat_EL7/x86_64/ O /tmp/agent.rpm --quiet',
creates => '/tmp/agent.rpm',
}
->
package {'ds_agent':
ensure => 'installed',
provider => 'rpm',
source => '/tmp/agent.rpm',
}
~>
service {'ds_agent':
ensure => running,
enable => true,
}
我刚刚对CentOS 7 VM进行了快速检查,它似乎对我有用:
Notice: Compiled catalog for centos7.vm in environment production in 1.06 seconds
Notice: /Stage[main]/Main/Exec[download Trend RPM]/returns: executed successfully
Notice: /Stage[main]/Main/Package[ds_agent]/ensure: created
Notice: /Stage[main]/Main/Service[ds_agent]/enable: enable changed 'false' to 'true'
Notice: /Stage[main]/Main/Service[ds_agent]: Triggered 'refresh' from 1 events
Notice: Applied catalog in 8.45 seconds
我建议查看现有的Ansible剧本,并了解如何完成其余的设置步骤:https://github.com/deep-security/ansible/blob/master/playbook/
答案 1 :(得分:-1)
看一下这个模块:https://github.com/echocat/puppet-redis
它从源代码安装Redis。因此,它下载,安装,配置和启动服务。从本质上讲,它的功能与您正在寻找的功能相同。