Пути к файлам должны быть полностью уточнены, ошибка в марионетке
Я пытался создать новый файл в моем модуле, но каждый раз получаю сообщение об ошибке для моего файлового ресурса, говоря:
Пути к файлам должны быть полностью уточнены, а не '/the/path/that/I/have/ дали'.
Каковы возможные причины этой ошибки?
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 ответ
Это происходит, когда вы пытаетесь запустить код с путями Unix в Windows. Проверьте исходный код Puppet здесь и здесь.
Используя отладчик, мы видим, что пути в стиле Unix отклоняются на платформе Windows:
[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