Puppet中的执行序列

p0d*_*eje 2 puppet

exec我的Puppet清单中有一系列:

  1. 第一个用二进制文件下载ZIP文件(除非已经安装了二进制文件)并将其保存到/tmp.
  2. 第二个拉开拉链.

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

如果第一个exec没有下载文件,如何修改清单以跳过第二个exec?

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'],
}
Run Code Online (Sandbox Code Playgroud)

roj*_*ojs 5

试试这个:

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'],
}
Run Code Online (Sandbox Code Playgroud)

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

通常情况下,我会把它放到一个更永久的位置并留在那里.然后代替unless =>'which ngrok'检查,替换为creates =>'/ path/to/zip.file'.结果是只要文件仍然存在,没有任何高管触发.

当您对zip文件进行版本设置并想要更改版本时,它会派上用场.