木偶中的文件路径必须是完全限定的错误

时间:2017-10-05 11:11:17

标签: puppet

我试图在我的模块中创建一个新文件,但每次我的文件资源出错时都会说:

  

文件路径必须是完全限定的,而不是'/ / path / that / I / have / given'。

该错误的可能原因是什么?

class fresh_start {
  file { 'source_file.rb':
    ensure => 'file',
    source => 'puppet:///modules/fresh_start/source_file.rb',
    path   => '/etc/puppetlabs/code/environments/production/modules/fresh_start/destination_file.rb',
    owner  => 'root',
    group  => 'root',
    mode   => '0755', # Use 0700 if it is sensitive
    notify => Exec['run_my_ruby']
  }
  exec { 'run_my_ruby':
    command     => 'ruby etc/puppetlabs/code/environments/production/modules/fresh_start/source_file.rb > /etc/puppetlabs/code/environments/production/modules/fresh_start/output.txt',
    refreshonly => true,    
  }
}

我还尝试将文件路径放在变量中,并使用该变量作为路径属性的值,但是我得到了同样的错误。

1 个答案:

答案 0 :(得分:2)

当您尝试在Windows上使用Unix路径运行代码时会发生这种情况。查看Puppet源代码herehere

使用调试器,我们可以看到在Windows平台上拒绝Unix风格的路径:

[1] pry(main)> slash = '[\\\\/]'  
=> "[\\\\/]"
[2] pry(main)> label = '[^\\\\/]+'  
=> "[^\\\\/]+"
[3] pry(main)> AbsolutePathWindows = %r!^(?:(?:[A-Z]:#{slash})|(?:#{slash}#{slash}#{label}#{slash}#{label})|(?:#{slash}#{slash}\?#{slash}#{label}))!io
=> /^(?:(?:[A-Z]:[\\\/])|(?:[\\\/][\\\/][^\\\/]+[\\\/][^\\\/]+)|(?:[\\\/][\\\/]\?[\\\/][^\\\/]+))/i
[4] pry(main)> path = '/foo/bar'
=> "/foo/bar"
[5] pry(main)> path =~ AbsolutePathWindows
=> nil