exec - 如果满足条件,如何运行 puppet exec?

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

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

最佳答案

您可以使用 Puppet 来运行脚本,就像您正在做的那样。但是,如果您在没有 Puppet 的情况下运行脚本,您最终会遇到同样的问题:很难使它们具有幂等性,维护起来很烦人,并且无法移植到其他平台。

似乎有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 虚拟机,它似乎对我有用:

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/

关于exec - 如果满足条件,如何运行 puppet exec?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35485372/

相关文章:

ruby - 未定义的局部变量或方法 - 使用 Beaker 测试 Puppet 模块

linux - 即使 crond_disable_trans 被禁用,cron 也可以强制执行 SELinux

linux - 使用 execv/execl 删除所有文件

c - Fork 和 NodeJS 错误

vagrant - Puppet 语法错误位于 '|'

linux - 为 Redhat Linux 安装 MonoDevelop IDE

package - 在 Red Hat (RHEL) 上安装 Cairo 软件包时出错

sql - 触发器函数中的 Postgres dblink_exec

haskell - 干净地替换当前的 Haskell 进程 (exec)

mysql - 错误 1064 (42000) : You have an error in your SQL syntax; to set permission