如果满足条件,如何运行傀儡执行器



只是为了提供一些细节 - 在AWS上构建,使用Puppet来处理DSC,并引导Puppet,以便它在新预置的节点上配置和安装Puppet。

我已经使用 Puppet 一段时间了,我发现自己想编写一个仅在创建 vm 时执行的模块。

我的特殊用例是,我想通过 Puppet 自动将防病毒软件(特别是趋势科技服务器深度安全防护系统)安装到新置备的节点上。

运行

此脚本只需要下载,运行和几个TMDS特定的命令即可激活自身等。

如果我使用 Puppet,它会在每次运行时执行此操作(下载、尝试安装、尝试激活),这绝对不是我想要的。

但是,我不认为Puppet"知道"趋势科技,或如何获取它,或URL等。所以我不能使用这样的东西:

  service { "trend micro":
    ensure => running,
    ensure => present,
  }

做一些研究,看看博客文章,我知道我的代码的结构应该是这样的(我知道这是不正确的):

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.
}

因此,我的问题是:我如何将其组合在一起?

你可以使用 Puppet 来运行脚本,就像你现在所做的那样。但是,您最终会遇到与在没有Puppet的情况下运行脚本时相同的问题:很难使它们具有意识形态,它们对maitain来说很烦人,并且它们无法移植到其他平台。

该公司似乎提供了用于安装代理的 Chef 食谱和 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/

看看这个模块: https://github.com/echocat/puppet-redis

它从源代码安装 Redis。因此,它会下载、安装、配置和启动服务。从本质上讲,它的功能等同于您正在寻找的功能。

最新更新