puppetlabs / puppetlabs-mysql

MySQL Puppet Module / Manifests + Types & Providers
Apache License 2.0
380 stars 790 forks source link

Don't emit ProcessOutput objects #1608

Open joshcooper opened 8 months ago

joshcooper commented 8 months ago

Describe the Bug

https://puppet.atlassian.net/browse/PUP-7808 changed puppet resource <type> --to_yaml so that it emits structured data correctly, using pops serialization. One unintended side-effect is that any module whose instances method returns resources whose values are the result of executed commands (via Puppet::Util::Execution.execute or the commands provider framework) may be emitted as:

mysql_database:
  PERCONA_SCHEMA:
    ensure: present
    charset: !ruby/string:Puppet::Util::Execution::ProcessOutput utf8
    collate: !ruby/string:Puppet::Util::Execution::ProcessOutput utf8_general_ci

While it is technically valid YAML, it is not parseable if the puppet classes aren't loaded or tags aren't stripped.

We will fix puppet in https://puppet.atlassian.net/browse/PUP-10105 to not emit ProcessOutput classes (and likely warn).

But the mysql module should call ProcessOutput#to_s when creating resources. I think this could be handled when calling mysql_raw(...).to_s in https://github.com/puppetlabs/puppetlabs-mysql/blob/ab9292eab45e81e693738e93f0eaf55d9bfd7752/lib/puppet/provider/mysql.rb#L100-L118

Expected Behavior

Running puppet resource mysql_database --to_yaml should not emit ProcessOuput tags

Additional Context

This originally was reported in https://puppet.atlassian.net/browse/PUP-7808?focusedCommentId=59303