Пути к файлам должны быть полностью уточнены, ошибка в марионетке

Я пытался создать новый файл в моем модуле, но каждый раз получаю сообщение об ошибке для моего файлового ресурса, говоря:

Пути к файлам должны быть полностью уточнены, а не '/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
Другие вопросы по тегам