You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Due to some autoloading behaviour when using resources{'network_config': purge => true} or crayfishx/purge 2 instances of the provider get created.
This creates a problem because FileMapper calls parse_file('/etc/network/interfaces') twice, resulting in it detecting duplicate interfaces since the parse state gets kept globally between runs in the Instance class.
Affected Puppet, Ruby, OS and module versions/distributions
Puppet: 6.6.0
Distribution: debian (stretch)
Module version: master (as of writing)
How to reproduce (e.g Puppet code you use)
resources { 'network_config':
purge => true,
}
What are you seeing
Error: Could not prefetch network_config provider 'interfaces': Malformed debian interfaces file; cannot instantiate network_config resources
/opt/puppetlabs/puppet/cache/lib/puppet/provider/network_config/interfaces.rb:39:in `raise_malformed'
/opt/puppetlabs/puppet/cache/lib/puppet/provider/network_config/interfaces.rb:181:in `block (2 levels) in parse_file'
/opt/puppetlabs/puppet/cache/lib/puppet/provider/network_config/interfaces.rb:174:in `match'
/opt/puppetlabs/puppet/cache/lib/puppet/provider/network_config/interfaces.rb:174:in `block in parse_file'
/opt/puppetlabs/puppet/cache/lib/puppet/provider/network_config/interfaces.rb:130:in `each'
/opt/puppetlabs/puppet/cache/lib/puppet/provider/network_config/interfaces.rb:130:in `parse_file'
/opt/puppetlabs/puppet/cache/lib/puppetx/filemapper.rb:172:in `block in load_all_providers_from_disk'
/opt/puppetlabs/puppet/cache/lib/puppetx/filemapper.rb:166:in `each_pair'
/opt/puppetlabs/puppet/cache/lib/puppetx/filemapper.rb:166:in `load_all_providers_from_disk'
/opt/puppetlabs/puppet/cache/lib/puppetx/filemapper.rb:102:in `instances'
/opt/puppetlabs/puppet/cache/lib/puppetx/filemapper.rb:192:in `prefetch'
/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/transaction.rb:364:in `prefetch'
/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/transaction.rb:256:in `prefetch_if_necessary'
/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/transaction.rb:111:in `block in evaluate'
What behaviour did you expect instead
No exceptions and removal of unmanaged config
Possible fixes:
hard way: keep track of which files we have already parsed and just refuse to parse the same file twice
easy way: call Instance.reset! at the beginning of self.parse_file since we only ever parse one file.
the brute-force way: remove the duplicity check. (not really an option though)
Which one would you like me to take a look at for a PR?
Related issues:
This is likely to be the root issue behind stuff like #60 and #44
The text was updated successfully, but these errors were encountered:
Due to some autoloading behaviour when using
resources{'network_config': purge => true}
orcrayfishx/purge
2 instances of the provider get created.This creates a problem because
FileMapper
callsparse_file('/etc/network/interfaces')
twice, resulting in it detecting duplicate interfaces since the parse state gets kept globally between runs in theInstance
class.Affected Puppet, Ruby, OS and module versions/distributions
How to reproduce (e.g Puppet code you use)
What are you seeing
What behaviour did you expect instead
No exceptions and removal of unmanaged config
Possible fixes:
Instance.reset!
at the beginning ofself.parse_file
since we only ever parse one file.Which one would you like me to take a look at for a PR?
Related issues:
This is likely to be the root issue behind stuff like #60 and #44
The text was updated successfully, but these errors were encountered: