Jira (PUP-10530) FromDataConverter attempts to access deserialized object when deserializing local references

10 views
Skip to first unread message

Tom Beech (Jira)

unread,
May 22, 2020, 1:37:04 PM5/22/20
to puppe...@googlegroups.com
Tom Beech created an issue
 
Puppet / Bug PUP-10530
FromDataConverter attempts to access deserialized object when deserializing local references
Issue Type: Bug Bug
Assignee: Unassigned
Attachments: repo.json
Created: 2020/05/22 10:36 AM
Priority: Normal Normal
Reporter: Tom Beech

Puppet Version: 6.15.0
Puppet Server Version:
OS Name/Version: macOS 10.15

Describe your issue in as much detail as possible…

When applying manifest blocks, Bolt uses ToDataConverter to serialize plan variables, which can include Target objects. Bolt sets local_reference:true for ToDataConverter, as Target objects have references to objects that in turn have references to the Target object, causing endless recursion.

https://github.com/puppetlabs/bolt/blob/master/lib/bolt/applicator.rb#L182-L186

 

Later in execution, the serialized data is passed to FromDataConverter, which begins to deserialize the plan variables, including the Target objects.

https://github.com/puppetlabs/bolt/blob/master/lib/bolt/catalog.rb#L75

 

During deserialization, any targets that share identical config and are set as plan variables will cause Puppet to raise an error due to an attempt to access a deserialized Target object's config via the bracket [] operator. For example, given the following inventory where targets share identical configuration:

 

targets:
  - name: targetA
    config:
      ssh:
        run-as: root
        host-key-check: false
        tty: true
  - name: targetB
    config:
      ssh:
        run-as: root
        host-key-check: false
        tty: true

 

ToDataConverter will serialize these targets such that target B will have a local reference to target A's configuration:

 

...
"targetA"=> 
 [{"__ptype"=>"Target", 
   "name"=>"targetA",
   "config"=> {
     "transport"=>"ssh", 
     "ssh"=> {
       "run-as" => "root",
       "host-key-check" => false,
       "tty" => true
     }
   }
 }],
"targetB"=>	
  [{"__ptype"=>"Target",	
    "name"=>"targetB",	
    "config"=>{
      "transport"=>"ssh",
      "ssh"=>{
        "__ptype"=>"LocalRef",
        "__pvalue"=>"$['targetA'][0]['config']['ssh']"
      }
    }
  }],
...

 

 

 

However, during deserialization, the data hash for targetA will be replaced with the deserialized Bolt::ApplyTarget object. When targetB is deserialized, the local reference for the configuration will then be resolved such that $['targetA'][0] returns the Bolt::ApplyTarget object, and then attempts to access the configuration with ['config']['ssh']. This raises an exception, as the Bolt::ApplyTarget object does not define the [] method.

Describe steps to reproduce…

**Create an inventory with multiple targets that share identical configuration:

 

# Boltdir/inventory.yaml
targets:  
  - uri: <URI>    
    name: targetA    
    config:
      transport: ssh
      ssh:
        host-key-check: false
        connect-timeout: 100
  - uri: <URI>
    name: targetB
    config:
      transport: ssh
      ssh:
        host-key-check: false
        connect-timeout: 100

 

Create a plan that sets these targets as plan variables and then has an apply block:

plan bolt (
  TargetSpec $targets
) {
  $targetA = get_targets('targetA')
  $targetB = get_targets('targetB')
 
  $targetA.apply_prep
 
  apply($targetA) {
    notice('')
  }
}

Run the plan

$ bolt plan run bolt -t all

 

**The plan will fail with the following error:

Failed on targetA:
  Apply failed to compile for targetA: undefined method `[]' for #<Bolt::ApplyTarget:0x00007fc769ae5258> on node targetA
Failed on 1 target: targetA

 

Additional Context:

ToDataConverter will only create local references for identical configuration when a plan variable has an array of targets. If all plan variables are singular targets, ToDataConverter will not create local references for identical configuration.

 

I've attached the catalog input that contains the serialized plan variables for reference. Target B has a local reference to Target A's configuration: repo.json

 

**The related Bolt issue can be found here: https://github.com/puppetlabs/bolt/issues/1836

 

Desired Behavior:

**FromDataConverter should not attempt to access referenced values from a deserialized object.

 

Actual Behavior:

FromDataConverter attempts to access referenced values from a deserialized object. See above.

Add Comment Add Comment
 
This message was sent by Atlassian Jira (v8.5.2#805002-sha1:a66f935)
Atlassian logo

Tom Beech (Jira)

unread,
May 22, 2020, 1:45:04 PM5/22/20
to puppe...@googlegroups.com
Tom Beech updated an issue
Change By: Tom Beech
*Puppet Version:* 6.15.0
*Puppet Server Version:*
--
*OS Name/Version:* macOS 10.15

*Describe your issue in as much detail as possible…*


When applying manifest blocks, Bolt uses ToDataConverter to serialize plan variables, which can include Target objects. Bolt sets local_reference:true for ToDataConverter, as Target objects have references to objects that in turn have references to the Target object, causing endless recursion.

[https://github.com/puppetlabs/bolt/blob/master/lib/bolt/applicator.rb#L182-L186]

 

Later in execution, the serialized data is passed to FromDataConverter, which begins to deserialize the plan variables, including the Target objects.

[https://github.com/puppetlabs/bolt/blob/master/lib/bolt/catalog.rb#L75]

 

During deserialization, any targets that share identical config and are set as plan variables will cause Puppet to raise an error due to an attempt to access a deserialized Target object's config via the bracket [] operator. For example, given the following inventory where targets share identical configuration:

 
{code:java}
targets:
  - name: targetA
    config:
      ssh:
        run-as: root
        host-key-check: false
        tty: true
  - name: targetB
    config:
      ssh:
        run-as: root
        host-key-check: false
        tty: true{code}

 

ToDataConverter will serialize these targets such that target B will have a local reference to target A's configuration:

 
{code:java}
...
"targetA"=>
[{"__ptype"=>"Target",
   "name"=>"targetA",
   "config"=> {
     "transport"=>"ssh",
     "ssh"=> {
       "run-as" => "root",
       "host-key-check" => false,
       "tty" => true
     }
   }
}],
"targetB"=>
  [{"__ptype"=>"Target",
    "name"=>"targetB",
    "config"=>{
      "transport"=>"ssh",
      "ssh"=>{
        "__ptype"=>"LocalRef",
        "__pvalue"=>"$['targetA'][0]['config']['ssh']"
      }
    }
  }],
...
{code}
 

 

 

However, during deserialization, the data hash for targetA will be replaced with the deserialized Bolt::ApplyTarget object. When targetB is deserialized, the local reference for the configuration will then be resolved such that $['targetA'][0] returns the Bolt::ApplyTarget object, and then attempts to access the configuration with ['config']['ssh']. This raises an exception, as the Bolt::ApplyTarget object does not define the [] method.

 

*Describe steps to reproduce…*

** Create an inventory with multiple targets that share identical configuration:

 
{code:java}

# Boltdir/inventory.yaml
targets:  
  - uri: <URI>    
    name: targetA    
    config:
      transport: ssh
      ssh:
        host-key-check: false
        connect-timeout: 100
  - uri: <URI>
    name: targetB
    config:
      transport: ssh
      ssh:
        host-key-check: false
        connect-timeout: 100
{code}

 

Create a plan that sets these targets as plan variables and then has an apply block:
{code:java}
plan bolt (
  TargetSpec $targets
) {
  $targetA = get_targets('targetA')
  $targetB = get_targets('targetB')

  $targetA.apply_prep

  apply($targetA) {
    notice('')
  }
}{code}
Run the plan
{code:java}

$ bolt plan run bolt -t all
{code}
 

** The plan will fail with the following error:
{code:java}

Failed on targetA:
  Apply failed to compile for targetA: undefined method `[]' for #<Bolt::ApplyTarget:0x00007fc769ae5258> on node targetA
Failed on 1 target: targetA
{code}
 

*Additional Context:*


ToDataConverter will only create local references for identical configuration when a plan variable has an array of targets. If all plan variables are singular targets, ToDataConverter will not create local references for identical configuration.

 

I've attached the catalog input that contains the serialized plan variables for reference. Target B has a local reference to Target A's configuration: [^repo.json]

 

** The related Bolt issue can be found here: [https://github.com/puppetlabs/bolt/issues/1836]

 

*Desired Behavior:*

** FromDataConverter should not attempt to access referenced values from a deserialized object.

 

*Actual Behavior:*


FromDataConverter attempts to access referenced values from a deserialized object. See above.

Tom Beech (Jira)

unread,
May 22, 2020, 2:13:04 PM5/22/20
to puppe...@googlegroups.com
Tom Beech updated an issue
*Puppet Version:* 6.15.0
*Puppet Server Version:* –
The plan will fail with the following error:
{code:java}Failed on targetA:
  Apply failed to compile for targetA: undefined method `[]' for #<Bolt::ApplyTarget:0x00007fc769ae5258> on node targetA
Failed on 1 target: targetA
{code}
 

*Additional Context:*

ToDataConverter will only create local references for identical configuration when a plan variable has an array of targets. If all plan variables are singular targets, ToDataConverter will not create local references for identical configuration.

 

I've attached the catalog input that contains the serialized plan variables for reference. Target B has a local reference to Target A's configuration: [^repo.json]

 

The related Bolt issue can be found here: [https://github.com/puppetlabs/bolt/issues/1836]

 

Here's the stack trace:
{code:java}
undefined method `[]' for #<Bolt::ApplyTarget:0x00007fa8ce1e82b8> on node targetA
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/json_path.rb:65:in `resolve_AccessExpression'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/visitor.rb:105:in `visit_this_2'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/json_path.rb:55:in `resolve_any'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/json_path.rb:60:in `resolve_AccessExpression'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/visitor.rb:49:in `block in visit_this'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/visitor.rb:43:in `each'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/visitor.rb:43:in `visit_this'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/visitor.rb:107:in `visit_this_2'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/json_path.rb:55:in `resolve_any'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/json_path.rb:50:in `resolve'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:117:in `block in initialize'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:155:in `convert'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:157:in `block (3 levels) in convert'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:171:in `with'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:157:in `block (2 levels) in convert'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:157:in `each_pair'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:157:in `block in convert'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:179:in `with_value'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:195:in `build'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:157:in `convert'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:211:in `block (3 levels) in pcore_type_hash_to_value'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:171:in `with'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:211:in `block (2 levels) in pcore_type_hash_to_value'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:211:in `each_pair'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:211:in `block in pcore_type_hash_to_value'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:179:in `with_value'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:201:in `build_object'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:211:in `pcore_type_hash_to_value'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:139:in `block in initialize'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:155:in `convert'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:160:in `block (3 levels) in convert'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:171:in `with'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:160:in `block (2 levels) in convert'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:160:in `each'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:160:in `each_with_index'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:160:in `block in convert'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:179:in `with_value'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:195:in `build'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:160:in `convert'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:157:in `block (3 levels) in convert'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:171:in `with'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:157:in `block (2 levels) in convert'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:157:in `each_pair'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:157:in `block in convert'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:179:in `with_value'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:195:in `build'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:157:in `convert'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pops/serialization/from_data_converter.rb:72:in `convert'
/Users/tom/git/bolt/lib/bolt/catalog.rb:76:in `block (4 levels) in compile_catalog'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pal/pal_impl.rb:445:in `block (3 levels) in main'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/parser/compiler.rb:196:in `block in compile'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/context.rb:62:in `override'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet.rb:290:in `override'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/parser/compiler.rb:155:in `compile'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/parser/catalog_compiler.rb:19:in `block in compile'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/context.rb:62:in `override'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet.rb:290:in `override'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/parser/catalog_compiler.rb:18:in `compile'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pal/pal_impl.rb:442:in `block (2 levels) in main'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/context.rb:62:in `override'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet.rb:290:in `override'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pal/pal_impl.rb:441:in `block in main'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/context.rb:62:in `override'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet.rb:290:in `override'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pal/pal_impl.rb:423:in `main'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pal/pal_impl.rb:194:in `with_catalog_compiler'
/Users/tom/git/bolt/lib/bolt/catalog.rb:72:in `block (3 levels) in compile_catalog'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/context.rb:62:in `override'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet.rb:290:in `override'
/Users/tom/git/bolt/lib/bolt/catalog.rb:69:in `block (2 levels) in compile_catalog'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pal/pal_impl.rb:335:in `block in in_environment_context'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/context.rb:62:in `override'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet.rb:290:in `override'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pal/pal_impl.rb:327:in `in_environment_context'
/Users/tom/.rvm/gems/ruby-2.6.3/gems/puppet-6.15.0/lib/puppet/pal/pal_impl.rb:229:in `in_tmp_environment'
/Users/tom/git/bolt/lib/bolt/catalog.rb:67:in `block in compile_catalog'
/Users/tom/git/bolt/lib/bolt/catalog.rb:39:in `block in with_puppet_settings'
/Users/tom/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/tmpdir.rb:93:in `mktmpdir'
/Users/tom/git/bolt/lib/bolt/catalog.rb:23:in `with_puppet_settings'
/Users/tom/git/bolt/lib/bolt/catalog.rb:61:in `compile_catalog'
/Users/tom/git/bolt/libexec/bolt_catalog:45:in `<top (required)>'
/Users/tom/.rvm/rubies/ruby-2.6.3/lib/ruby/site_ruby/2.6.0/bundler/cli/exec.rb:74:in `load'
/Users/tom/.rvm/rubies/ruby-2.6.3/lib/ruby/site_ruby/2.6.0/bundler/cli/exec.rb:74:in `kernel_load'
/Users/tom/.rvm/rubies/ruby-2.6.3/lib/ruby/site_ruby/2.6.0/bundler/cli/exec.rb:28:in `run'
/Users/tom/.rvm/rubies/ruby-2.6.3/lib/ruby/site_ruby/2.6.0/bundler/cli.rb:463:in `exec'
/Users/tom/.rvm/rubies/ruby-2.6.3/lib/ruby/site_ruby/2.6.0/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/Users/tom/.rvm/rubies/ruby-2.6.3/lib/ruby/site_ruby/2.6.0/bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command'
/Users/tom/.rvm/rubies/ruby-2.6.3/lib/ruby/site_ruby/2.6.0/bundler/vendor/thor/lib/thor.rb:387:in `dispatch'
/Users/tom/.rvm/rubies/ruby-2.6.3/lib/ruby/site_ruby/2.6.0/bundler/cli.rb:27:in `dispatch'
/Users/tom/.rvm/rubies/ruby-2.6.3/lib/ruby/site_ruby/2.6.0/bundler/vendor/thor/lib/thor/base.rb:466:in `start'
/Users/tom/.rvm/rubies/ruby-2.6.3/lib/ruby/site_ruby/2.6.0/bundler/cli.rb:18:in `start'
/Users/tom/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/bundler-1.17.3/exe/bundle:30:in `block in <top (required)>'
/Users/tom/.rvm/rubies/ruby-2.6.3/lib/ruby/site_ruby/2.6.0/bundler/friendly_errors.rb:124:in `with_friendly_errors'
/Users/tom/.rvm/rubies/ruby-2.6.3/lib/ruby/gems/2.6.0/gems/bundler-1.17.3/exe/bundle:22:in `<top (required)>'
/Users/tom/.rvm/rubies/ruby-2.6.3/bin/bundle:23:in `load'
/Users/tom/.rvm/rubies/ruby-2.6.3/bin/bundle:23:in `<main>'
/Users/tom/.rvm/gems/ruby-2.6.3/bin/ruby_executable_hooks:24:in `eval'
/Users/tom/.rvm/gems/ruby-2.6.3/bin/ruby_executable_hooks:24:in `<main>'
{code}
 

*Desired Behavior:*


FromDataConverter should not attempt to access referenced values from a deserialized object.

 

*Actual Behavior:*

FromDataConverter attempts to access referenced values from a deserialized object. See above.

Josh Cooper (Jira)

unread,
May 26, 2020, 11:12:03 AM5/26/20
to puppe...@googlegroups.com
Josh Cooper commented on Bug PUP-10530
 
Re: FromDataConverter attempts to access deserialized object when deserializing local references

We discovered that Bolt's Target doesn't include the Puppet::Pops::Types::PuppetObject marker interface. Adding that seems to have resolved the issue. But the error message could be better.

Rob Braden (Jira)

unread,
May 27, 2020, 1:20:05 PM5/27/20
to puppe...@googlegroups.com

Tom Beech (Jira)

unread,
May 27, 2020, 1:23:03 PM5/27/20
to puppe...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages