Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Puppet 傀儡中的执行序列_Puppet - Fatal编程技术网

Puppet 傀儡中的执行序列

Puppet 傀儡中的执行序列,puppet,Puppet,我的傀儡清单中有一个exec序列: 第一个下载带有二进制文件的ZIP文件(除非二进制文件已经安装),并将其保存到/tmp 第二个可以解开拉链 当我第一次应用清单时,它工作正常。但是,当我清理我的/tmp并再次应用清单时,它失败了,因为第一个exec没有执行(这是正确的),但第二个exec仍然尝试执行,并且失败了,因为ZIP文件不存在 如果第一个exec没有下载文件,如何修改清单以跳过第二个exec exec { 'ngrok-download': command => 'wget ht

我的傀儡清单中有一个
exec
序列:

  • 第一个下载带有二进制文件的ZIP文件(除非二进制文件已经安装),并将其保存到
    /tmp
  • 第二个可以解开拉链
  • 当我第一次应用清单时,它工作正常。但是,当我清理我的
    /tmp
    并再次应用清单时,它失败了,因为第一个exec没有执行(这是正确的),但第二个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'],
    }
    
    试试这个:

    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'],
    }
    
    这将导致解压exec仅在wget exec实际执行某些操作时运行——如果找到ngrok,则不会运行

    通常我会把它搬到一个更固定的地方,然后留在那里。然后替换为creates=>'/path/to/zip.file',而不是除非=>'which ngrok'检查。结果是,只要文件还在,就不会触发任何exec


    当您对zip文件进行版本设置并希望更改版本时,此方法非常方便。

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

    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']
    

    希望这能有所帮助。

    当使用
    通知
    +
    仅刷新
    和使用
    创建
    时,我遇到了相同的错误,所以我想它不会以这种方式工作。如果你放入creates,那么如果文件被删除,exec将再次启动以将文件放回。然后,notify将触发解压exec。要防止两个exec每次运行都触发,请确保文件不会被删除——或者保留您的除非语句以检查它是否已安装。是的,当我使用
    创建
    +
    通知
    +
    仅刷新
    时,它工作正常,谢谢!起初我认为
    创建
    是一种单独的方法。