如果满足条件,我如何运行木偶执行?

时间:2016-02-18 15:18:13

标签: exec puppet redhat trend

提供一些细节 - 在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.
}

因此,我的问题是:我如何把它放在一起?

2 个答案:

答案 0 :(得分:3)

您可以像往常一样使用Puppet来运行脚本。但是,如果你在没有Puppet的情况下运行脚本,你最终会遇到同样的问题:很难让它们显得有意义,它们对于maitain来说很烦人,而且它们不能移植到其他平台。

公司似乎提供Chef cookbooksAnsible 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。因此,它下载,安装,配置和启动服务。从本质上讲,它的功能与您正在寻找的功能相同。