木偶复制msi,安装并删除一次

时间:2018-09-24 07:28:44

标签: puppet

我对资源类型文件和包有疑问。

  1. 我通过File-RT将Ubuntu上的msi文件复制到Windows计算机(我没有samba共享)

  2. 我通过Package-RT安装了msi文件

  3. 我使用Exec-RT删除了msi文件

到目前为止,它仍然有效,但是我的问题是,当我在客户端上调用puppet agent --test时,msi文件将被复制到Windows,然后将其删除。

所以我的问题是:复制,安装和删除后是否有办法再次忽略将复制文件复制到计算机?

预先感谢

UPDATE ::::::::::::::::::::::::::::::::

  #Copy file to Windows Client
  file { 'copy_msi_file_to_win_client':
          source => "puppet:///modules/test_msi/test.msi",
          ensure => 'present',
          path => "C:/test.msi",
          source_permissions => ignore,
          require => Exec['test'],
  }


  #install TEST on Windows Client
  Package { 'TEST APP NAME':
          ensure   => 'installed',
          provider => 'windows',
          source   => "c:/test.msi",
          require => File['copy_msi_file_to_win_client'],
  }


  #Remove test.msi file
  exec { 'remove_test_msi_file':
          command   => 'Remove-Item c:/test.msi -Force',
          onlyif    => 'if(Get-Service "TEST_SERVICE_NAME") { exit 0 } else { exit 1 }',
          provider  => powershell,
  }

最好的问候, 安迪

5 个答案:

答案 0 :(得分:0)

您是否使用Puppetlab's rsync module

根据实现副本的方式,可以使用 if 语句检查文件是否在路径中(如果不在路径中),然后运行副本。

如果您正在使用 exec ,则可以使用'onlyif',您可以编写将返回布尔值的powershell或* nix命令,如果布尔值为false,则exec不会为运行

答案 1 :(得分:0)

我“解决”了,我每次都将msi文件复制到C:\ Windows \ Temp,稍后我将尝试更好地解决它。

答案 2 :(得分:0)

这当然不是做事情的“木偶”方法。 Puppet是一种声明性语言,因此它试图将服务器保持在特定状态。这不是编排工具,这就是您要在此处执行的操作。

也就是说,我认为解决这个问题的唯一方法是在主机上设置一个事实变量。在清单应用第二遍之前,清单将返回。该文件,您将要在“删除项目”命令之后添加。我认为即使在Windows上,该文件也可以简单地为“ MY_FILE_HAS_BEEN_APPLIED = true”。之后,只需在清单中放置一些条件逻辑,例如“ if($ facts ['MY_FILE_HAS_BEEN_APPLIED']!= true){一切都在这里}“,那么您就可以进行了。

Happy!

答案 3 :(得分:0)

我建议您保持节点清洁安装介质。您可以使用Chocolatey Puppet模块并部署自己的内部nuget服务器。也许Puppet已经支持带有 url 文件资源。

答案 4 :(得分:0)

我认为您可以使用transition module解决此问题。像这样:

transition { 'install media':
  resource => File['C:/test.msi'],
  attributes => {
    'ensure' => 'present',
  },
  prior_to   => [
    Package['TEST APP NAME'],
  ],
}

file { 'C:/test.msi':
  ensure => 'absent',
  source => "puppet:///modules/test_msi/test.msi",
}

package { 'TEST APP NAME':
  ensure   => 'installed',
  provider => 'windows',
  source   => "c:/test.msi",
  require  => File['C:/test.msi'],
}