Jira (PUP-11330) Puppet::Node#environment_name may return the wrong value

30 views
Skip to first unread message

Josh Cooper (Jira)

unread,
Oct 26, 2021, 8:46:01 PM10/26/21
to puppe...@googlegroups.com
Josh Cooper created an issue
 
Puppet / Bug PUP-11330
Puppet::Node#environment_name may return the wrong value
Issue Type: Bug Bug
Assignee: Unassigned
Created: 2021/10/26 5:45 PM
Priority: Normal Normal
Reporter: Josh Cooper

If an environment instance is set on a node, then the Node#environment_name returns nil, but Node#environment returns the instance whose name is the expected value:

irb(main):010:0> node = Puppet::Node.new('hostname')
=> #<Puppet::Node:0x00005582e746c3e0 @name="hostname", @classes=[], @parameters={}, @facts=nil, @server_facts={}, @time...
irb(main):011:0> node.environment = Puppet::Node::Environment.remote('www123')
=> <Puppet::Node::Environment::Remote:7880 @name="www123" @manifest="no_manifest" @modulepath="" >
irb(main):012:0> node.environment_name
=> nil
irb(main):013:0> node.environment.name
=> :www123

However, setting environment_name on the node DOES cause Node#environment to load that environment (which must exist on disk):

irb(main):001:0> require 'puppet'
=> true
irb(main):002:0> Puppet.initialize_settings
=> {}
irb(main):003:0> FileUtils.mkdir(File.join(Puppet[:environmentpath], "www123"))
=> ["/home/josh/.puppetlabs/etc/code/environments/www123"]
irb(main):004:0> run_mode = Puppet::Util::RunMode[:agent]
=> #<Puppet::Util::UnixRunMode:0x00005582e7075520 @name=:agent>
irb(main):005:0> Puppet::ApplicationSupport.push_application_context(run_mode)
=> #<Puppet::Context::Stack:0x00005582e646cc88 ...
irb(main):006:0> node = Puppet::Node.new('hostname')
=> #<Puppet::Node:0x00005582e7152c40 @name="hostname", @classes=[], @parameters={}, @facts=nil, @server_facts={}, @time...
irb(main):007:0> node.environment_name = 'www123'
=> "www123"
irb(main):008:0> node.environment_name
=> "www123"
irb(main):009:0> node.environment.name
=> :www123

This inconsistency leads to complicated logic where we can never be sure how to retrieve the node's environment:

https://github.com/puppetlabs/puppet/blob/e89bc9f1e0a9365cb7f0e8b105c04c50a7b43395/lib/puppet/configurer.rb#L313-L317

Add Comment Add Comment
 
This message was sent by Atlassian Jira (v8.13.2#813002-sha1:c495a97)
Atlassian logo

Josh Cooper (Jira)

unread,
Oct 26, 2021, 8:53:02 PM10/26/21
to puppe...@googlegroups.com
Josh Cooper updated an issue
Change By: Josh Cooper
If an environment instance is set on a node, then the {{Node#environment_name}} returns nil, but {{Node#environment}} returns the instance whose name is the expected symbolic value:

{noformat}

irb(main):010:0> node = Puppet::Node.new('hostname')
=> #<Puppet::Node:0x00005582e746c3e0 @name="hostname", @classes=[], @parameters={}, @facts=nil, @server_facts={}, @time...
irb(main):011:0> node.environment = Puppet::Node::Environment.remote('www123')
=> <Puppet::Node::Environment::Remote:7880 @name="www123" @manifest="no_manifest" @modulepath="" >
irb(main):012:0> node.environment_name
=> nil
irb(main):013:0> node.environment.name
=> :www123
{noformat}

However, setting {{environment_name}} on the node *DOES* cause {{Node#environment}} to load that environment (which must exist on disk):

{noformat}

irb(main):001:0> require 'puppet'
=> true
irb(main):002:0> Puppet.initialize_settings
=> {}
irb(main):003:0> FileUtils.mkdir(File.join(Puppet[:environmentpath], "www123"))
=> ["/home/josh/.puppetlabs/etc/code/environments/www123"]
irb(main):004:0> run_mode = Puppet::Util::RunMode[:agent]
=> #<Puppet::Util::UnixRunMode:0x00005582e7075520 @name=:agent>
irb(main):005:0> Puppet::ApplicationSupport.push_application_context(run_mode)
=> #<Puppet::Context::Stack:0x00005582e646cc88 ...
irb(main):006:0> node = Puppet::Node.new('hostname')
=> #<Puppet::Node:0x00005582e7152c40 @name="hostname", @classes=[], @parameters={}, @facts=nil, @server_facts={}, @time...
irb(main):007:0> node.environment_name = 'www123'
=> "www123"
irb(main):008:0> node.environment_name
=> "www123"
irb(main):009:0> node.environment.name
=> :www123
{noformat}

This inconsistency leads to complicated logic where we can never be sure how to retrieve the node's environment
, while trying to be careful to not load the environment from disk :

https://github.com/puppetlabs/puppet/blob/e89bc9f1e0a9365cb7f0e8b105c04c50a7b43395/lib/puppet/configurer.rb#L313-L317

Ciprian Badescu (Jira)

unread,
Nov 1, 2021, 11:35:02 AM11/1/21
to puppe...@googlegroups.com

Ciprian Badescu (Jira)

unread,
Nov 3, 2021, 4:50:03 AM11/3/21
to puppe...@googlegroups.com

Ciprian Badescu (Jira)

unread,
Nov 3, 2021, 4:56:03 AM11/3/21
to puppe...@googlegroups.com

Ciprian Badescu (Jira)

unread,
Nov 10, 2021, 3:51:02 AM11/10/21
to puppe...@googlegroups.com
Ciprian Badescu updated an issue
Change By: Ciprian Badescu
Sprint: NW - 2021- 11 12 - 17 01(02)

Ciprian Badescu (Jira)

unread,
Nov 17, 2021, 4:12:01 AM11/17/21
to puppe...@googlegroups.com

Josh Cooper (Jira)

unread,
Dec 1, 2021, 11:41:02 PM12/1/21
to puppe...@googlegroups.com

Victor Bobosila (Jira)

unread,
Dec 6, 2021, 5:05:03 AM12/6/21
to puppe...@googlegroups.com

Ciprian Badescu (Jira)

unread,
Dec 17, 2021, 3:54:02 AM12/17/21
to puppe...@googlegroups.com
Ciprian Badescu updated an issue
Change By: Ciprian Badescu
Sprint: NW - 2021-12-17 , NW - 2022-01-04
This message was sent by Atlassian Jira (v8.20.2#820002-sha1:829506d)
Atlassian logo

Ciprian Badescu (Jira)

unread,
Dec 21, 2021, 7:52:01 AM12/21/21
to puppe...@googlegroups.com
Ciprian Badescu updated an issue
Change By: Ciprian Badescu
Sprint: NW - 2021-12-17, NW - 2022-01- 04 12

Josh Cooper (Jira)

unread,
Jan 7, 2022, 1:11:01 PM1/7/22
to puppe...@googlegroups.com
Josh Cooper updated an issue
Change By: Josh Cooper
Fix Version/s: PUP 7.14.0
Fix Version/s: PUP 6.26.0

Josh Cooper (Jira)

unread,
Jan 10, 2022, 8:58:01 PM1/10/22
to puppe...@googlegroups.com
Josh Cooper commented on Bug PUP-11330
 
Re: Puppet::Node#environment_name may return the wrong value

Passed CI in d90aaec90ca83d9846484bde5cd98f6d138b350e

# /opt/puppetlabs/puppet/bin/irb 
irb(main):001:0> require 'puppet'
=> true
irb(main):002:0> Puppet.initialize_settings
=> {}
irb(main):003:0> node = Puppet::Node.new('hostname')
=> #<Puppet::Node:0x00000000035b4a48 @name="hostname", @classes=[], @parameters={}, @facts=nil, @server_facts={}, @time=2022-01-11 ...
irb(main):004:0> node.environment = Puppet::Node::Environment.remote('www123')
=> <Puppet::Node::Environment::Remote:4300 @name="www123" @manifest="no_manifest" @modulepath="" >
irb(main):005:0> node.environment_name
=> :www123
irb(main):006:0> node.environment.name
=> :www123

Parker Leach (Jira)

unread,
Jan 11, 2022, 2:35:02 PM1/11/22
to puppe...@googlegroups.com

Josh Cooper (Jira)

unread,
Feb 23, 2022, 12:02:01 AM2/23/22
to puppe...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages