Johnny Doe
Johnny Doe

Reputation: 29

File paths must be fully qualified error in puppet

I was trying to create a new file in my module, but every time I am getting an error for my file resource, saying:

File paths must be fully qualified, not '/the/path/that/I/have/given'.

What are the possible reasons for that error?

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,    
  }
}

I have also tried to put the file path in a variable and use that variable as the path attribute's value, but I got the same error.

Upvotes: 1

Views: 1448

Answers (1)

Alex Harvey
Alex Harvey

Reputation: 15472

This happens when you attempt to run code with Unix paths on Windows. Check out the Puppet source code here and here.

Using a debugger, we can see that Unix-style paths are rejected on a Windows platform:

[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

Upvotes: 2

Related Questions