Puppet:执行相对于文件的脚本

Puppet:执行相对于文件的脚本

我对 Puppet 完全陌生,所以如果这个问题不够规范,我很抱歉,哈哈。我正在尝试使用 Boxen 设置我的新 Macbook Pro。我找到了一个脚本这将帮助我操作 dock 中的内容。我不确定如何运行它,所以我只是将它复制到script我的 Boxen repo 目录中。然后,我尝试按如下方式使用它:

# Public: Add a new app to the dock
define dock-app($app = $title) {
    exec { "Add $app to dock":
        command => '/opt/boxen/repo/script/dockutil add',
    }
}

# Public: Remove all existing apps from the dock
class my-osx::dock::clear() {
    exec { 'Clear existing dock app':
        command => '/opt/boxen/repo/script/dockutil remove --all',
    }
}

然后我将按如下方式使用它manifests/site.pp

  include webstorm
  include chrome
  include chrome::canary

  include my-osx::dock::clear

  dock-app { '/Applications/"Google Chrome".app': }
  dock-app { '/Applications/"Google Chrome Canary".app': }
  dock-app { '/Applications/Webstorm.app': }
  dock-app { '/Applications/Utilities/Terminal.app': }

(再说一次,我真的不知道自己在做什么,所以如果您知道更好的方法的话请告诉我哈哈。)

这似乎运行没有错误,但是我有一些尚未解决的问题:

  • 我不太喜欢使用绝对路径来查找dockutil脚本。在 node 中是否有等效项__dirname,您可以在其中获取当前所在文件的目录?
  • 有没有更好的方法来询问软件包webstorm将被安装到哪里,而不是硬编码路径?
  • 还有比这个更好的地方可以dockutils存放脚本吗?

谢谢!

然而却给了我一个负面评价:介意留下一些反馈以便我可以改进吗?

答案1

我不太喜欢使用绝对路径来查找 dockutil 脚本。

您可以通过为执行程序设置资源默认值来部分解决此问题。具体来说,您可以设置路径。也许可以设置类似这样的内容?

Exec {
  path => ['/opt/boxen/repo/script/', '/usr/sbin', '/usr/bin', '/sbin', '/bin']
}

如果创建了一个自定义事实来报告远程主机上的脚本目录,dockutils您可以像这样重写配置。您确实需要对此小心一点。您很可能有一个无效/损坏的事实值。

define dock-app($app = $title) {
    exec { "Add $app to dock":
        command => "$::dockerpath/dockutil add",
    }
}

相关内容