puppet - Puppet 中的 Exec 序列

标签 puppet

我的 Puppet list 中有一系列 exec:

  1. 第一个下载带有二进制文件的 ZIP 文件(除非已经安装了二进制文件)并将其保存到 /tmp
  2. 第二个将其解压缩。

当我第一次应用 list 时,它工作正常。但是,当我清理 /tmp 并再次应用 list 时,它会失败,因为第一个 exec 未执行(这是正确的),但第二个仍尝试执行并失败,因为 ZIP 文件是不存在。

如果第一个执行程序未下载文件,如何修改 list 以跳过第二个执行程序?

exec { 'ngrok-download':
  command => 'wget https://dl.ngrok.com/linux_386/ngrok.zip -O /tmp/ngrok.zip',
  unless  => 'which ngrok',
  path    => ['/bin', '/usr/bin'],
}

exec { 'ngrok-unzip':
  command => 'unzip ngrok.zip',
  cwd     => '/tmp',
  path    => ['/usr/bin'],
  require => Exec['ngrok-download'],
}

最佳答案

试试这个:

exec { 'ngrok-download':
  command => 'wget https://dl.ngrok.com/linux_386/ngrok.zip -O /tmp/ngrok.zip',
  unless  => 'which ngrok',
  path    => ['/bin', '/usr/bin'],
  notify  => Exec['ngrok-unzip'],
}

exec { 'ngrok-unzip':
  command     => 'unzip ngrok.zip',
  cwd         => '/tmp',
  path        => ['/usr/bin'],
  refreshonly => true,
  require     => Exec['ngrok-download'],
}

这将导致 unzip exec 仅在 wget exec 实际执行某些操作时运行 - 如果找到 ngrok,则不会运行。

通常我会把它放到一个更永久的位置并留在那里。然后,用create => '/path/to/zip.file' 替换,而不是unless => 'which ngrok' 检查。结果是只要文件仍然存在,就不会触发任何执行操作。

当您对 zip 文件进行版本控制并想要更改版本时会派上用场。

关于puppet - Puppet 中的 Exec 序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21046339/

相关文章:

vagrant - 在 PUPHPET 生成的 Wheezy VM 上向 Apache 添加新的虚拟主机

puppet - 检查类是否存在

ubuntu - 如何自动化 Puppet 的模块安装

iteration - Puppet - 在迭代哈希时,如果 hiera 中不存在,则在 list 中设置默认值

ubuntu-14.04 - Puppet 4.x 可以安装在 Ubuntu 14 上吗?

ruby - 如何从 Puppet 函数中读取 Hiera 值?

使用 Puppet & Hiera 的 Git 工作流

windows - 自动应用程序部署

mysql - 目前 Ubuntu 上的 puppetlabs-mysql 模块有什么技巧吗?

node.js - 使用 pm2 在同一 Node 上运行多个 Node 实例