The Puppet Labs Issue Tracker has Moved: https://tickets.puppetlabs.com
https://tickets.puppetlabs.com. See the following page for information on filing tickets with JIRA:
Exec provider should support environment variables with empty values
|Status:||Needs More Information||Start date:|
|Affected Puppet version:||Branch:|
The exec provider takes an environment parameter that takes either a string or an array of variables. Each variable is expressed as a pair, like “KEY=value” for example. The problem is that the code that parses this string requires a value whereas this is not strictly necessary, like “KEY=” should be perfectly acceptable. The code in Puppet::Provider::Exec.run looks like this:
if setting =~ /^(\w+)=((.|\n)+)$/ env_name = $1 value = $2
Simply changing the regular expression to use “*” instread of “+” for the value should work just fine:
irb(main):001:0> setting = 'KEY=' => "KEY=" irb(main):002:0> setting =~ /^(\w+)=((.|\n)+)$/ => nil irb(main):003:0> setting =~ /^(\w+)=((.|\n)*)$/ => 0 irb(main):004:0> $1 => "KEY" irb(main):005:0> $2 => ""
So, the value of empty string is exactly what was requested.
#2 Updated by Marc Tardif about 3 years ago
The environment of the operating system only knows about strings, it doesn’t know about other data types like nils for example. Even though Ruby does support the distinction between string and nil, I would expect something from the realm of strings to remain as such. Furthermore, empty string makes it possible to distinguish variables that are set to nothing from variables that are simply not set.