Puppet中的执行序列

时间:2014-01-10 14:04:54

标签: puppet

我的Puppet清单中有一系列exec

  1. 第一个用二进制文件下载ZIP文件(除非已经安装了二进制文件)并将其保存到/tmp
  2. 第二个拉开拉链。
  3. 当我第一次应用清单时,它可以正常工作。但是,当我清理/tmp并再次应用清单时,它会失败,因为第一个exec没有执行(这是正确的),但第二个仍然尝试执行并失败,因为ZIP文件不存在。< / p>

    如果第一个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'],
    }
    

2 个答案:

答案 0 :(得分: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'],
}

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

通常我会把它放到一个更永久的位置并留在那里。然后代替除非=&gt; '哪个ngrok'检查,替换为creates =&gt; '/path/to/zip.file'。结果是只要文件仍然存在,就不会触发任何执行。

在对zip文件进行版本设置并想要更改版本时派上用场。

答案 1 :(得分:0)

你也可以尝试更简单的方法:

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'],
  refreshonly => true,
}

Exec ['ngrok-download']通知Exec ['ngrok-unzip']如果应用,Exec ['ngrok-unzip']仅在需要时刷新其状态

通过以下方式可以实现同样的目的:

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'],
  refreshonly => true,
}

Exec['ngrok-download'] ~> Exec['ngrok-unzip']

希望这有帮助。