{"projects": [{"components": [{"description": "Command line interface", "name": "CLI"}, {"description": "", "name": "DOCS"}, {"description": "", "name": "QA"}, {"description": "", "lead": "557058:8f2288c8-aafd-4043-8c36-5121d7f0a7df", "name": "UX"}], "description": "Puppet catalog preview compiler", "externalName": "Puppet Catalog Preview", "issues": [{"affectedVersions": [], "assignee": null, "attachments": [], "comments": [], "components": [], "created": "2018-10-16T16:13:00.000000", "creator": "5f9905b462584c006bd65363", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@2d35b0f8"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "Method Found", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Needs Assessment"}, {"fieldName": "QA Risk Assessment", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Needs Assessment"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hzql0f:"}], "description": "*Puppet Version: 6.0.2*\n *Puppet Server Version: 6.0.1*\n *OS Name/Version: CentOS 7*\n\n\u00a0\n\nI've been having to downgrade to Puppet 5.4.0 to use this module due to the issue in PRE-145.\n\nThere seems to be a fresh problem with it in Puppet 6.0.0, due to the removal of the\u00a0write_only_yaml terminus in\u00a0PUP-8528 - it's still in use in the preview module.\n\nHoping for this supported module to get updated for modern versions - thanks!\n\n\u00a0\n{code:java}\nError: Could not prepare for execution: Could not find terminus write_only_yaml for indirection node\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/indirector/indirection.rb:153:in `validate_terminus_class'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/indirector/indirection.rb:50:in `cache_class='\n/opt/puppetlabs/puppet/cache/lib/puppet/application/preview.rb:855:in `setup_node_cache'\n/opt/puppetlabs/puppet/cache/lib/puppet/application/preview.rb:876:in `setup'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/application.rb:374:in `block in run'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util.rb:667:in `exit_on_fail'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/application.rb:374:in `run'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/command_line.rb:136:in `run'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/command_line.rb:73:in `execute'\n/opt/puppetlabs/puppet/bin/puppet:5:in `<main>'\n{code}", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32714", "fixedVersions": [], "id": "32714", "issueType": "Bug", "key": "PRE-146", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "5f9905b462584c006bd65363", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Catalog Preview module broken due to removal of write_only_yaml terminus", "timeSpent": "PT0S", "updated": "2018-10-16T16:13:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [], "components": [], "created": "2018-06-21T14:13:00.000000", "creator": "557058:3ff86ead-03bb-4b44-9e1d-735086bfa278", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@b2b6b52"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "Method Found", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Needs Assessment"}, {"fieldName": "QA Risk Assessment", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Needs Assessment"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hzntrb:"}], "description": "Currently, when there is a failure to get classification data from an 'exec' external node classifier, the preview process exits. This means that if there is any such node in a very long node list, I can't start an unattended process and then come back later to review the results, because there will be no summary and the remaining nodes will not be processed at all:\n\n$ time puppet preview --baseline-environment example_prod --preview-environment example_puppet5 --nodes env-example-prod.txt --migrate 3.8/4.0 --view summary --no-diff-array-value --skip-tags --excludes excludes.json\n\n*Error: Failed when searching for node foo.example.com: Failed to find foo.example.com via exec: Execution of '/etc/puppetlabs/foreman/foreman_external_node.rb foo.example.com' returned 1:*\n\n*Error: Failed when searching for node foo.example.com: Failed to find foo.example.com via exec: Execution of '/etc/puppetlabs/foreman/foreman_external_node.rb foo.example.com' returned 1:*\n\nreal 0m1.959s\n user 0m1.688s\n sys 0m0.207s\n\nIn order to save time, I would prefer to see the tool aggressively process every single node in the provided node list regardless of whether any previous node has failed.", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32740", "fixedVersions": [], "id": "32740", "issueType": "Bug", "key": "PRE-145", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:3ff86ead-03bb-4b44-9e1d-735086bfa278", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "preview should not exit when ENC fails for one node", "timeSpent": "PT0S", "updated": "2018-06-21T14:13:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [], "components": [], "created": "2018-06-11T16:38:00.000000", "creator": "5f9905b462584c006bd65363", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@665b20e2"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "Method Found", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Needs Assessment"}, {"fieldName": "QA Risk Assessment", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Needs Assessment"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hznl1b:"}], "description": "After upgrading from Puppet 5.4.0 to Puppet 5.5.0, the catalog_preview module is erroring when used:\n\n\u00a0\n{code:java}# puppet preview --view status --baseline-environment production --preview-environment someenv node.example.com --trace\n/opt/puppetlabs/puppet/cache/lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb:22: warning: constant ::Fixnum is deprecated\nError: undefined method `[]' for #<File:0x0000000002f26988>\n/opt/puppetlabs/puppet/lib/ruby/vendor_gems/gems/multi_json-1.13.1/lib/multi_json.rb:130:in `current_adapter'\n/opt/puppetlabs/puppet/lib/ruby/vendor_gems/gems/multi_json-1.13.1/lib/multi_json.rb:139:in `dump'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/json.rb:70:in `dump'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/log/destinations.rb:112:in `handle'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/log.rb:191:in `block in newmessage'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/log.rb:190:in `each'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/log.rb:190:in `newmessage'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/log.rb:308:in `initialize'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/log.rb:88:in `new'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/log.rb:88:in `create'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/logging.rb:11:in `send_log'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/logging.rb:20:in `block (2 levels) in <module:Logging>'\n/etc/puppetlabs/code/environments/master/modules/catalog_preview/lib/puppet/indirector/catalog/diff_compiler.rb:202:in `rescue in block (3 levels) in compile'\n/etc/puppetlabs/code/environments/master/modules/catalog_preview/lib/puppet/indirector/catalog/diff_compiler.rb:190:in `block (3 levels) in compile'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/context.rb:65:in `override'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet.rb:260:in `override'\n/etc/puppetlabs/code/environments/master/modules/catalog_preview/lib/puppet/indirector/catalog/diff_compiler.rb:177:in `block (2 levels) in compile'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/profiler/around_profiler.rb:58:in `profile'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/profiler.rb:51:in `profile'\n/etc/puppetlabs/code/environments/master/modules/catalog_preview/lib/puppet/indirector/catalog/diff_compiler.rb:176:in `block in compile'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/log.rb:156:in `with_destination'\n/etc/puppetlabs/code/environments/master/modules/catalog_preview/lib/puppet/indirector/catalog/diff_compiler.rb:160:in `compile'\n/etc/puppetlabs/code/environments/master/modules/catalog_preview/lib/puppet/indirector/catalog/diff_compiler.rb:62:in `find'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/indirector/indirection.rb:198:in `find'\n/opt/puppetlabs/puppet/cache/lib/puppet/application/preview.rb:341:in `compile_diff'\n/opt/puppetlabs/puppet/cache/lib/puppet/application/preview.rb:302:in `block in compile'\n/opt/puppetlabs/puppet/cache/lib/puppet/application/preview.rb:296:in `each'\n/opt/puppetlabs/puppet/cache/lib/puppet/application/preview.rb:296:in `compile'\n/opt/puppetlabs/puppet/cache/lib/puppet/application/preview.rb:248:in `main'\n/opt/puppetlabs/puppet/cache/lib/puppet/application/preview.rb:146:in `run_command'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/application.rb:375:in `block in run'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util.rb:661:in `exit_on_fail'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/application.rb:375:in `run'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/command_line.rb:137:in `run'\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/command_line.rb:73:in `execute'\n/opt/puppetlabs/puppet/bin/puppet:5:in `<main>'\n\n{code}\nI've exhausted my ruby debugging skills trying to figure out exactly which file that handle is referring to, but it seems to be an error during the wrapped Puppet::Parser::Compiler.compile that's resulting in this state.\u00a0 Reverting to 5.4.0 or older resolves the issue.\n\n\u00a0", "environment": "CentOS 7, packages installed from yum.puppetlabs.com repo", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32788", "fixedVersions": [], "id": "32788", "issueType": "Bug", "key": "PRE-144", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "5f9905b462584c006bd65363", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:48 AM", "summary": "Preview generation errors on Puppet newer than 5.5.0", "timeSpent": "PT0S", "updated": "2018-06-11T16:39:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [], "components": [], "created": "2017-08-24T10:25:00.000000", "creator": "557058:aa277a93-6688-4f34-ad9d-e53477acf74b", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@2b2e43bf"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Risk Assessment", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Needs Assessment"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hzg7tr:"}], "description": "The {{--excludes}} flag can be used to exclude resources along with edges by type and title. An option to exclude edges without also excluding resources would be useful for controlling the noise level in preview diffs.", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32690", "fixedVersions": [], "id": "32690", "issueType": "New Feature", "key": "PRE-141", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:aa277a93-6688-4f34-ad9d-e53477acf74b", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Add the ability to exclude edges without excluding resources", "timeSpent": "PT0S", "updated": "2017-08-24T10:25:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [], "components": [], "created": "2017-08-23T17:49:00.000000", "creator": "557058:aa277a93-6688-4f34-ad9d-e53477acf74b", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@2ea0ac4f"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Risk Assessment", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Needs Assessment"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hzg6rr:"}], "description": "The preview module currently allows resources to be excluded by type and title using the {{--excludes}} flag. The excludes functionality should be extended to support matching against resource parameters in addition to resource titles.\n\nFor example, {{file}} resources with {{replace => false}} are often used to populate random content used to configure other services. This content will always change with every catalog compilation, thus it would be useful to exclude all file resources with {{replace => false}} from catalog diffs. For example:\n\n{code:json}\n[\n  {\n    \"type\": file,\n    \"match_attributes\": {\n      \"replace\": false\n    }\n  }\n]\n{code}", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32706", "fixedVersions": [], "id": "32706", "issueType": "Improvement", "key": "PRE-140", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:aa277a93-6688-4f34-ad9d-e53477acf74b", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Add ability to exclude resources based on attribute", "timeSpent": "PT0S", "updated": "2017-08-23T17:49:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:aa277a93-6688-4f34-ad9d-e53477acf74b", "body": "Now that the {{puppetdb_query}} function is a standard part of Puppet Enterprise and the PuppetDB module (PDB-2186), it seems fairly straight forward to add a {{--query}} flag that works if the {{puppetdb_query}} function is available.", "created": "2017-08-22T16:41:00.000000"}], "components": [], "created": "2017-08-22T16:40:00.000000", "creator": "557058:aa277a93-6688-4f34-ad9d-e53477acf74b", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@43b77317"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Risk Assessment", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Needs Assessment"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hzg5zj:"}], "description": "The {{puppet preview}} command can take a list of node names as input which enables the use of additional tools, such as {{puppet query}}, to generate node lists based on some criteria. This can be a bit cumbersome in practice as the PuppetDB APIs and {{puppet query}} both return JSON data structures instead of the simple space-separated list that {{puppet preview}} requires:\n\n{noformat}\n# puppet query 'inventory[certname] {resources{tag = \"trapperkeeper\"}}'\n[\n  {\n    \"certname\": \"pe-201723-master.puppetdebug.vlan\"\n  }\n]\n{noformat}\n\nIn order to pass this information directly to {{puppet preview}} a third-party tool such as jq has to be used to un-wrap the data into a whitespace delimited list:\n\n{code:bash}\npuppet preview ... $(puppetquery 'inventory[certname] {resources{tag = \"trapperkeeper\"}}'|jq '.[].certname')\n{code}\n\nThis mis-match in data formats makes it cumbersome to drive {{puppet query}} based on PuppetDB queries. The {{puppet preview}} tool should support a {{--query}} flag that accepts a PQL query string and uses it to generate a list of target nodes.\n\n", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32677", "fixedVersions": [], "id": "32677", "issueType": "New Feature", "key": "PRE-139", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:aa277a93-6688-4f34-ad9d-e53477acf74b", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Add ability to select node names via a PQL query", "timeSpent": "PT0S", "updated": "2017-08-22T16:41:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "623cffe88d8b9c0068b93ebf", "body": "Ping [~accountid:557058:db3c8c5c-5825-4424-a788-64c2fa922e24] and [~accountid:557058:68216498-c6bf-4e8f-92c1-ac84887b7c02].", "created": "2017-08-15T17:20:00.000000"}], "components": [], "created": "2017-08-15T17:20:00.000000", "creator": "623cffe88d8b9c0068b93ebf", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@172ec4d9"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Risk Assessment", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Needs Assessment"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hzg11z:"}], "description": "_This ticket has been migrated from [GitHub issue #67|https://github.com/puppetlabs/puppetlabs-catalog_preview/issues/67]:_\n\nAt the moment users have to work through several sections to figure out how to setup systems and use the tool.\n\nIt would be great if there was a section outlining how to go from a freshly installed puppet system to one that is able to use the tool", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32712", "fixedVersions": [], "id": "32712", "issueType": "Improvement", "key": "PRE-137", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "623cffe88d8b9c0068b93ebf", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "zero-to-hero instructions in the documentation would be a great improvment", "timeSpent": "PT0S", "updated": "2017-08-15T17:20:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "623cffe88d8b9c0068b93ebf", "body": "Ping [~accountid:557058:db3c8c5c-5825-4424-a788-64c2fa922e24] and [~accountid:557058:68216498-c6bf-4e8f-92c1-ac84887b7c02].", "created": "2017-08-15T17:16:00.000000"}], "components": [], "created": "2017-08-15T17:02:00.000000", "creator": "623cffe88d8b9c0068b93ebf", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@13a26515"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Risk Assessment", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Needs Assessment"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hzg10v:"}], "description": "_This ticket has been migrated from [GitHub issue #70|https://github.com/puppetlabs/puppetlabs-catalog_preview/issues/70]:_\n\nI run my Puppet Master on Debian and since this module is PE only, perhaps it would be good if the tool advises that this platform is no longer supported for the next version of PE and possibly advise users of their migration options.", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32660", "fixedVersions": [], "id": "32660", "issueType": "New Feature", "key": "PRE-136", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "623cffe88d8b9c0068b93ebf", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "report deprecated platforms to user", "timeSpent": "PT0S", "updated": "2017-08-15T17:20:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [], "components": [], "created": "2017-08-15T16:18:00.000000", "creator": "623cffe88d8b9c0068b93ebf", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@17ee568a"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Risk Assessment", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Needs Assessment"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hzg0zj:"}], "description": "_This ticket has been migrated from [GitHub issue #158|https://github.com/puppetlabs/puppetlabs-catalog_preview/issues/158]:_\n\n{noformat}> puppet preview --pe development --be testing node.example.com --view status --last\nCatalogs for node '#<PuppetX::Puppetlabs::Migration::OverviewModel::Query::Wrapper:0x00000003ad0720>' are equal.{noformat}", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32689", "fixedVersions": [], "id": "32689", "issueType": "Improvement", "key": "PRE-135", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "623cffe88d8b9c0068b93ebf", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Reference instead of a node name in status output", "timeSpent": "PT0S", "updated": "2017-08-15T16:18:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [], "components": [], "created": "2017-08-15T12:50:00.000000", "creator": "623cffe88d8b9c0068b93ebf", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@2459a087"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Risk Assessment", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Needs Assessment"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hzg0af:"}], "description": "_This ticket has been migrated from [GitHub issue #162|https://github.com/puppetlabs/puppetlabs-catalog_preview/issues/162]:_\n\nThe word {{conflict}} is a bit ambiguos to me. What that's showing is that there is a difference in a resource in the catalog. So, I propose that we change the word to {{difference}} in the output of the preview tool.", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32703", "fixedVersions": [], "id": "32703", "issueType": "Improvement", "key": "PRE-134", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "623cffe88d8b9c0068b93ebf", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Change the word 'conflict'(s) to 'difference'(s)", "timeSpent": "PT0S", "updated": "2017-08-15T12:50:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [], "components": [], "created": "2017-08-15T12:04:00.000000", "creator": "623cffe88d8b9c0068b93ebf", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@358480f"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Risk Assessment", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Needs Assessment"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hzg08n:"}], "description": "_This ticket has been migrated from [GitHub issue #183|https://github.com/puppetlabs/puppetlabs-catalog_preview/issues/183]:_\n\nBefore upgrading the Puppet master server I'd like to spin up the new Puppet master on a test VM and  compare catalogs against the production Puppet master to become confident that no unexpected changes happen.\n\nThe {{baseline-environment}} and {{preview-environment`}} parameters could be expanded to include a server like {{(<server>(:<port>)?/)?<environment>}} and then call the catalog compilation by the catalog rest indirector. This would require adding permissions {{auth.conf}} on {{<server>}}\n\nAnother possibility would be to have a two phased preview: \n- first run catalog baseline compilation on the production master\n- transfer baseline catalogs to test puppet master and then \n- run only preview compilation and compare them.\n", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32687", "fixedVersions": [], "id": "32687", "issueType": "New Feature", "key": "PRE-133", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "623cffe88d8b9c0068b93ebf", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Compare catalogs from 2 puppet masters", "timeSpent": "PT0S", "updated": "2017-08-15T12:04:00.000000", "votes": "1", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "623cffe88d8b9c0068b93ebf", "body": "Notably I've just merged some PRs to deal with the non-ASCII character issue but I went ahead and filed this ticket since it's about relocating documentation.", "created": "2017-08-15T11:52:00.000000"}], "components": [], "created": "2017-08-15T11:50:00.000000", "creator": "623cffe88d8b9c0068b93ebf", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@48ec253"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Risk Assessment", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Needs Assessment"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hzg07z:"}], "description": "_This ticket has been migrated from [GitHub issue #185|https://github.com/puppetlabs/puppetlabs-catalog_preview/issues/185]:_\n\nsince /lib folder is getting synced to all agents it would probably better to move all documentation into docs folder.\n\nThe reason it came to my attention, on Solaris 10 plugin sync fails:\n\n{noformat}Error: invalid byte sequence in US-ASCII Error: /File[/opt/puppetlabs/puppet/cache/lib/puppet_x/puppetlabs/preview/api/documentation/preview-help.md]/content: change from {md5}84f5f1f9dd1b9e6ac8926af476ee4999 to {md5}e9c12f4d53774a330822e5cf6c27797c failed: invalid byte sequence in US-ASCII{noformat}", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32676", "fixedVersions": [], "id": "32676", "issueType": "Improvement", "key": "PRE-132", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "623cffe88d8b9c0068b93ebf", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "move documentation out of /lib", "timeSpent": "PT0S", "updated": "2017-08-15T12:04:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [], "components": [], "created": "2017-08-15T11:31:00.000000", "creator": "623cffe88d8b9c0068b93ebf", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@8f6b341"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "Method Found", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Needs Assessment"}, {"fieldName": "QA Risk Assessment", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Needs Assessment"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hzg06n:"}], "description": "_This ticket has been migrated from [GitHub issue #187|https://github.com/puppetlabs/puppetlabs-catalog_preview/issues/187]:_\n\nI have some weird warning for each node in PE\n\n{noformat}Preview Warnings (by message)\n  Class 'settings' is already defined; cannot redefine at : (202){noformat}\n\nI wasn't able to find this class anywhere, unfortunately, must be in some ruby code.\nBut what's interesting, preview doesn't report it correctly either:\n\n{noformat}Summary:\n  Total Number of Nodes...: 205\n  Baseline Failed.........: 2\n  Preview Failed..........: 0\n  Catalogs with Difference: 203\n  Compliant Catalogs......: 0\n  Equal Catalogs..........: 200{noformat}\n\nClearly, math doesn't add up", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32738", "fixedVersions": [], "id": "32738", "issueType": "Bug", "key": "PRE-131", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "623cffe88d8b9c0068b93ebf", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "status view incorrectly shows warnings as", "timeSpent": "PT0S", "updated": "2017-08-15T11:34:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:aa277a93-6688-4f34-ad9d-e53477acf74b", "body": "The error can occur when {{puppet preview}} is run on an agent node or a compile master for which {{ca = false}} hasn't been set in puppet.conf (PRE-128). For best results, the preview command should be run on the primary master.", "created": "2017-08-22T16:29:00.000000"}], "components": [], "created": "2017-08-03T10:07:00.000000", "creator": "60a2d27f5d67f2006934c1a5", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@72e1cbaf"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "Method Found", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Needs Assessment"}, {"fieldName": "QA Risk Assessment", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Needs Assessment"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hzfqav:"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "22/Aug/17"}], "description": "Getting this error whenever I tried to execute \"puppet preview\".  I ran the suggested commands on the master and agent but did not resolve the issue.\n\nError: Could not prepare for execution: The certificate retrieved from the master does not match the agent's private key.\nCertificate fingerprint: \"Fingerprint of the puppet master CA cert\"\n\nTo fix this, remove the certificate from both the master and the agent and then start a puppet run, which will automatically regenerate a certficate.\nOn the master:\n  puppet cert clean e1ciamsvr32d.aws.iams.org\nOn the agent:\n  1a. On most platforms: find /etc/puppetlabs/puppet/ssl -name e1ciamsvr32d.aws.iams.org.pem -delete\n  1b. On Windows: del \"/etc/puppetlabs/puppet/ssl/e1ciamsvr32d.aws.iams.org.pem\" /f\n  2. puppet agent -t\n\n/opt/puppet/lib/ruby/site_ruby/1.9.1/puppet/ssl/host.rb:218:in `validate_certificate_with_key'\n/opt/puppet/lib/ruby/site_ruby/1.9.1/puppet/ssl/host.rb:209:in `certificate'\n/opt/puppet/lib/ruby/site_ruby/1.9.1/puppet/ssl/certificate_authority.rb:270:in `setup'\n/opt/puppet/lib/ruby/site_ruby/1.9.1/puppet/ssl/certificate_authority.rb:161:in `initialize'\n/opt/puppet/lib/ruby/site_ruby/1.9.1/puppet/ssl/certificate_authority.rb:40:in `new'\n/opt/puppet/lib/ruby/site_ruby/1.9.1/puppet/ssl/certificate_authority.rb:40:in `singleton_instance'\n/opt/puppet/lib/ruby/site_ruby/1.9.1/puppet/ssl/certificate_authority.rb:58:in `instance'\n/var/opt/lib/pe-puppet/lib/puppet/application/preview.rb:838:in `setup_ssl'\n/var/opt/lib/pe-puppet/lib/puppet/application/preview.rb:878:in `setup'\n/opt/puppet/lib/ruby/site_ruby/1.9.1/puppet/application.rb:378:in `block (2 levels) in run'\n/opt/puppet/lib/ruby/site_ruby/1.9.1/puppet/application.rb:507:in `plugin_hook'\n/opt/puppet/lib/ruby/site_ruby/1.9.1/puppet/application.rb:378:in `block in run'\n/opt/puppet/lib/ruby/site_ruby/1.9.1/puppet/util.rb:488:in `exit_on_fail'\n/opt/puppet/lib/ruby/site_ruby/1.9.1/puppet/application.rb:378:in `run'\n/opt/puppet/lib/ruby/site_ruby/1.9.1/puppet/util/command_line.rb:146:in `run'\n/opt/puppet/lib/ruby/site_ruby/1.9.1/puppet/util/command_line.rb:92:in `execute'\n/opt/puppet/bin/puppet:8:in `<main>'\n", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32741", "fixedVersions": [], "id": "32741", "issueType": "Bug", "key": "PRE-130", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "60a2d27f5d67f2006934c1a5", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Certificate error when running puppet preview", "timeSpent": "PT0S", "updated": "2017-08-22T16:29:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [], "components": [], "created": "2017-06-29T16:29:00.000000", "creator": "557058:7317f440-3db6-429c-9980-6884f1f7ba86", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Acceptance Criteria", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "if /etc/puppetlabs/code/keys/gpg is found to exist, leave the permissions intact for this subdirectory."}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@1624d17a"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Risk Assessment", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Needs Assessment"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hzf2m7:"}], "description": "When running catalog preview as root, there are sweeping permissions changes that also apply to /etc/puppetlabs/code/keys/gpg/pubring.gpg, which can break implementations of PE using hiera-eyaml-gpg.", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32762", "fixedVersions": [], "id": "32762", "issueType": "Improvement", "key": "PRE-129", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:7317f440-3db6-429c-9980-6884f1f7ba86", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Ignore /etc/puppetlabs/code/keys/gpg/pubring.gpg when applying new permissions", "timeSpent": "PT0S", "updated": "2017-06-29T16:29:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [], "components": ["DOCS"], "created": "2017-03-17T06:08:00.000000", "creator": "623a4a827910a200718ac35d", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Acceptance Criteria", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "This should be documented in the requirements / setup section."}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@20f1753a"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Risk Assessment", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Needs Assessment"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hzcoy7:"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "22/Aug/17"}], "description": "catalog_preview requires that the puppet.conf parameter \"ca\" be set to \"false\" in order to be usable on a compile master. This is not mentioned anywhere in the documentation. Modern Puppetserver/PE installations don't seem to necessarily enforce that \"ca = false\" in compile master setups.\n", "environment": "PE 2016.4.2", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32778", "fixedVersions": [], "id": "32778", "issueType": "Bug", "key": "PRE-128", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "623a4a827910a200718ac35d", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:48 AM", "summary": "Document requirements for running catalog_preview on compile master", "timeSpent": "PT0S", "updated": "2017-08-22T16:29:00.000000", "votes": "1", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [], "components": [], "created": "2017-01-19T11:05:00.000000", "creator": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@67bf1375"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Risk Assessment", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Needs Assessment"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hzbcrz:"}], "description": "Currently in the overview json, if you want to attempt to identify commonalities in compile time errors, we make you uncrack the egg. This is the format we present currently:\n\n{code}\n \"baseline\": {\n    \"compilation_errors\": [\n      {\n        \"manifest\": null,\n        \"nodes\": [\n          \"foo.example.com\",\n          \"bar.example.com\",\n          \"baz.example.com\",\n\n{code}\n\nThis is fairly counter intuitive as while this shows the nodes, it does not link the nodes to the error message they had. \n\n{code}\n        \"errors\": [\n          {\n            \"message\": \"Could not find data item server_role in any Hiera data file and no default supplied at /etc/puppetlabs/puppet/environments/production/manifests/site.pp:64 on node apsyslog.corp.dom\"\n          },\n          {\n            \"message\": \"Could not find data item server_role in any Hiera data file and no default supplied at /etc/puppetlabs/puppet/environments/production/manifests/site.pp:64 on node jwtcvtpup1.corp.dom\"\n          },\n          {\n{code}\n\nThere seems to perhaps be a positional association with these two arrays, but I I think it would be better as a hash or hashes. That way you could answer questions like \"which nodes had THIS error\". I think a big part of that however is removing the known uniq strings , this is something the \"old\" catalog diff module did , by removing the hostname and hashing the errors.\n\nIn practice at a customer I able to do this by post processing the json data with this script\n\n{code}\n#!/usr/bin/env ruby\nrequire 'json'\nrequire 'terminal-table'\n\n\nfile = ARGV[0]\njson_txt = File.read(file)\ncatalog_preview = JSON.parse(json_txt)\n\n['baseline','preview'].each do |preview_type|\n  compilation_errors = catalog_preview[preview_type]['compilation_errors'].first\n  substitution_list  = Hash[compilation_errors['nodes'].map {|k| [\" #{k}\",' <node name>']}]\n\n  output = Hash.new 0\n\n  compilation_errors['errors'].each do |error|\n      generic_message = error['message'].gsub(/\\s\\b([a-z0-9]+(-[a-z0-9]+)*\\.)+[a-z]{2,}\\b/,substitution_list)\n      output[generic_message] += 1\n  end\n\n  table = Terminal::Table.new(:headings => ['Count',\"#{preview_type.capitalize} Error Message\"]) do |t|\n    output.each do |k,v|\n      t.add_row [v,k]\n    end\n  end\n\n  puts table\nend\n\n{code}\n\nThis code effectively removes the node name and hashes the error , so I can get a count of the nodes with that error. Given the positional association with the two arrays mentioned earlier , it seems harder to gain the node lists in a consistent  manner. \n\n\n", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32710", "fixedVersions": [], "id": "32710", "issueType": "New Feature", "key": "PRE-127", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Preview and Baseline Compile Errors should more easily allow for aggregation", "timeSpent": "PT0S", "updated": "2017-01-19T11:06:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [], "components": ["QA"], "created": "2016-09-13T18:02:00.000000", "creator": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Team/s", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiselect", "value": "Puppet Developer Experience"}, {"fieldName": "Acceptance Criteria", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "* setup steps in beaker, modularized \n  * PRs against beaker-libraries to remove methods from our setup\n* tests separated; in beaker\n* rototiller tasks in an acceptance Rakefile\n* ci-job-configs changes to use new tasks"}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@4b6f8480"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "Epic Color", "fieldType": "com.pyxis.greenhopper.jira:gh-epic-color", "value": "ghx-label-1"}, {"fieldName": "Epic Name", "fieldType": "com.pyxis.greenhopper.jira:gh-epic-label", "value": "catalog_preview acceptance tech debt"}, {"fieldName": "Epic Status", "fieldType": "com.pyxis.greenhopper.jira:gh-epic-status", "value": "To Do"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "Issue color", "fieldType": "com.pyxis.greenhopper.jira:jsw-issue-color", "value": "dark_grey"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hyo6yv:"}, {"fieldName": "Release Notes", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Not Needed"}], "description": "The current \"acceptance\" setup for catalog_preview was based, ignorantly, on some non-standard and non-best-practice module testing setups.\nWe should make this more standard, more extensible, and based upon best practices:\n\n* beaker; not beaker-rspec\n* no testmode-switcher (no agent/apply runs here)\n* modularize setup/configuration steps for foss vs pe\n* re-write tests in beaker\n\nthis epics needs sub-tasks based upon above and acceptance criteria", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32699", "fixedVersions": [], "id": "32699", "issueType": "Epic", "key": "PRE-126", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "catalog_preview acceptance tech debt", "timeSpent": "PT0S", "updated": "2018-09-27T00:05:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "This JIRA was in state \"Open\" which triggered me to create a PR for it. I then discovered that a PR already exists, which begs the question, shouldn't this be in state \"Ready for Merge\"?", "created": "2016-09-02T03:01:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "Merged to master at [a78dafe|https://github.com/puppetlabs/puppetlabs-catalog_preview/commit/a78dafe9984064a2bcac3f6daaaad4dcc90ddbdd].", "created": "2016-09-02T03:03:00.000000"}, {"author": "557058:639cd954-0530-45e8-ba35-7be3297421a0", "body": "[~accountid:557058:c7e2df03-377d-4bf0-9407-106b8483430d] yes you're right, I should have changed it to 'Ready for Merge' state after submitting the PR. Thanks for reviewing and merge.", "created": "2016-09-02T10:42:00.000000"}, {"author": "557058:639cd954-0530-45e8-ba35-7be3297421a0", "body": "Passed CI", "created": "2016-09-02T10:55:00.000000"}], "components": [], "created": "2016-09-01T17:29:00.000000", "creator": "557058:639cd954-0530-45e8-ba35-7be3297421a0", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@5aacd00f"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz8nbb:"}, {"fieldName": "Release Notes", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Not Needed"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "1.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "02/Sep/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "10008_*:*_1_*:*_28315109_*|*_1_*:*_1_*:*_33767161_*|*_10007_*:*_1_*:*_125625_*|*_3_*:*_1_*:*_523203_*|*_5_*:*_1_*:*_0"}], "description": "{code}\n04:07:34 bundler: failed to load command: rspec (/var/lib/jenkins/workspace/platform-lang_puppetlabs-catalog-preview_unit-module_puppet-4.6.1_master/PUPPET_GEM_VERSION/4.6.1/RUBY_VERSION/ruby-2.3.1/WORKER_LABEL/unit/vendor/gems/bin/rspec)\n04:07:34 NameError: uninitialized constant Syck\n04:07:34   /var/lib/jenkins/workspace/platform-lang_puppetlabs-catalog-preview_unit-module_puppet-4.6.1_master/PUPPET_GEM_VERSION/4.6.1/RUBY_VERSION/ruby-2.3.1/WORKER_LABEL/unit/vendor/gems/gems/puppet-3.8.7/lib/puppet/vendor/safe_yaml/lib/safe_yaml/syck_node_monkeypatch.rb:42:in `<top (required)>'\n{code}", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32686", "fixedVersions": [], "id": "32686", "issueType": "Bug", "key": "PRE-125", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:639cd954-0530-45e8-ba35-7be3297421a0", "resolution": "Fixed", "resolutionDate": "2016-09-02T10:55:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "CI pipeline failed step 3 on RUBY_VERSION=ruby-2.3.1 ", "timeSpent": "PT0S", "updated": "2016-09-03T11:44:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "merged to master at: e0c416a", "created": "2016-09-23T07:34:00.000000"}, {"author": "62450221ad6b7e006aa4e34c", "body": "[~accountid:557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715] is this all merged in now? I don't see a PR up for it on github.", "created": "2016-11-07T15:41:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "there was a PR, but it was better handled for all modules.  Sorry, i should have moved it to ready for CI. then friday sci7 failed.\nbut is now passing!", "created": "2016-11-07T16:28:00.000000"}], "components": ["QA"], "created": "2016-08-23T09:06:00.000000", "creator": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@1c0adef5"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "Epic Link", "fieldType": "com.pyxis.greenhopper.jira:gh-epic-link", "value": "PRE-126"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hymlmn:"}, {"fieldName": "Release Notes", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Not Needed"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "1.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "23/Sep/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "10008_*:*_4_*:*_1064430611_*|*_1_*:*_1_*:*_1222523602_*|*_10007_*:*_6_*:*_1600375914_*|*_3_*:*_5_*:*_212064058_*|*_5_*:*_1_*:*_0_*|*_10004_*:*_2_*:*_2497176836"}], "description": "this ticket was \"acceptance: run PE 3.x on ruby 1.8.7\" but PE ships with ruby.\nso we should test foss 3x against ruby 1.8.7.", "epicLinkSummary": "catalog_preview acceptance tech debt", "estimate": "PT0S", "externalId": "32675", "fixedVersions": [], "id": "32675", "issueType": "Task", "key": "PRE-124", "labels": ["maintenance"], "originalEstimate": "PT0S", "parent": "32699", "parentSummary": "catalog_preview acceptance tech debt", "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "resolution": "Fixed", "resolutionDate": "2016-11-07T16:28:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "acceptance: run foss 3.x on ruby 1.8.7", "timeSpent": "PT0S", "updated": "2017-03-01T17:31:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Merged to master at: 0d3dedd", "created": "2016-08-30T06:50:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Catalog Preview should be released ASAP with this fix.", "created": "2016-08-30T06:52:00.000000"}, {"author": "557058:b3e6b0df-198d-45f8-9ba5-d41f90e80ced", "body": "This update has caused unit testing with ruby 1.9.3 to go red.\nhttps://jenkins-modules.puppetlabs.com/view/2.%20linux%20only/view/catalog_preview/view/catalog_preview%20-%20master/job/platform-lang_puppetlabs-catalog-preview_unit-module_master/57/", "created": "2016-08-30T10:18:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "The build failures are caused by a rubocop requirement. They apparently dropped support for ruby < 2.0 in version 0.42. Catalog-preview will need to pin it to an earlier version.", "created": "2016-08-30T14:48:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "Added PR-171 to address the build failure on 1.9.3.\n\nAn attempt to build using Ruby 1.8.7 will still fail and I haven't been able to figure out how to make that work (or even if it is necessary. It seems puppetlabs-stdlib doesn't build using 1.8.7 either).", "created": "2016-08-30T23:54:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "PR-171 merged", "created": "2016-08-31T04:55:00.000000"}, {"author": "557058:639cd954-0530-45e8-ba35-7be3297421a0", "body": "Catalog-preview CI pipeline is green now but we are no longer testing with Ruby 1.8.7\n\nI attempted to test it locally with Ruby 1.8.7 but seeing several failures because many gems requires ruby 1.9.3 or newer.  \nping [~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd] [~accountid:557058:c7e2df03-377d-4bf0-9407-106b8483430d] [~accountid:557058:b3e6b0df-198d-45f8-9ba5-d41f90e80ced]", "created": "2016-09-02T15:15:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Thanks Phong. If we have a green 1.9.3, then, afaik, it will work on 1.8.7 if a user manages to put together a mix of gems that still work for 1.8.7. \nI think we should release now. We have done our best but cannot beat the eco-system when it has decided to abandon 1.8.7.\n", "created": "2016-09-02T16:42:00.000000"}, {"author": "557058:b3e6b0df-198d-45f8-9ba5-d41f90e80ced", "body": "+1 to release.", "created": "2016-09-02T17:24:00.000000"}, {"author": "557058:81f497cb-6a4e-4e6d-abbe-a8fa4611960f", "body": "This was merged over a year ago. Version 2.2.1, which only contains this issue, is still not released. Please release it!", "created": "2017-10-16T11:27:00.000000"}, {"author": "557058:0ecc452a-d349-4da1-b879-da696febc871", "body": "I'll echo Ken's comments from a year ago. The latest release on the Forge still uses\u00a0 [2.2.0|[https://forge.puppet.com/puppetlabs/catalog_preview]]\u00a0which is not compatible with Puppet 3.8. Many places still run Puppet 3.8 (Half the people in my Puppet class last year.\u00a0 Embarrassing, but true.) and we need to simplify the migration to Puppet 5+.\n\nPuppetlabs/catalog_preview 2.2.1 was released two years ago.\u00a0 It would be great to get that version into the Forge to simplify life.", "created": "2018-10-19T19:33:00.000000"}], "components": [], "created": "2016-08-22T16:05:00.000000", "creator": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@78c7365f"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz7lb3:"}, {"fieldName": "Release Notes Summary", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "It was not possible to run catalog preview on Ruby 1.8.7."}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "1.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "30/Aug/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "10008_*:*_2_*:*_219366369_*|*_1_*:*_1_*:*_23940_*|*_10007_*:*_2_*:*_27382307_*|*_3_*:*_1_*:*_666120_*|*_5_*:*_1_*:*_0_*|*_10011_*:*_1_*:*_18854244_*|*_10006_*:*_2_*:*_697012590"}], "description": "Catalog Preview uses {{require_relative}} and can therefore not run on Ruby 1.8.7 (which is a supported platform for Puppet 3.x).\n\nIt fails (at least) here:\n{code}\n.../modules/catalog_preview/lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb:1: undefined method `require_relative' \n{code}\n\nThis is bad because it prevents 3.x migration on typical 3.x installations.", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32659", "fixedVersions": ["PRE 2.2.1"], "id": "32659", "issueType": "Bug", "key": "PRE-123", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Major", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "resolution": "Fixed", "resolutionDate": "2016-09-02T19:40:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Catalog Preview does not work with Ruby 1.8.7 because of require_relative", "timeSpent": "PT0S", "updated": "2018-11-14T17:55:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "attachments": [], "comments": [{"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "Changed the description slightly since this isn't caused by using {{\\-\\-skip-inactive-nodes}} (that flag is true by default).", "created": "2016-08-12T01:19:00.000000"}], "components": [], "created": "2016-08-11T16:02:00.000000", "creator": "557058:b3e6b0df-198d-45f8-9ba5-d41f90e80ced", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@4b0e5c95"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz85y7:"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "1.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "12/Aug/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "10008_*:*_1_*:*_240346794_*|*_1_*:*_1_*:*_30048363_*|*_10007_*:*_1_*:*_48426597_*|*_3_*:*_1_*:*_695769_*|*_5_*:*_1_*:*_0_*|*_10011_*:*_1_*:*_279370999"}], "description": "Preview fails  when given an inactive node or a `\\-\\-nodes` file containing an inactive node. The inactive node is not skipped before facts are attempted to be retrieved about the nodes.\n\nDue to the inability to retrieve facts on inactive nodes as filed  in PRE-115, this results in the preview command failing with the following error.\n\n{code}\n$ puppet preview --preview-environment test --environmentpath /tmp/preview.6duPsm/environments --view baseline pl-inactive-node-364373\n  ERROR: Facts seems to be missing. No 'osfamily' fact found for node 'pl-inactive-node-364373'\n{code}", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32739", "fixedVersions": [], "id": "32739", "issueType": "Bug", "key": "PRE-122", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:b3e6b0df-198d-45f8-9ba5-d41f90e80ced", "resolution": "Fixed", "resolutionDate": "2016-08-18T14:24:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "deactivated nodes are not skipped by default", "timeSpent": "PT0S", "updated": "2016-08-18T14:24:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [], "components": ["CLI"], "created": "2016-07-29T13:31:00.000000", "creator": "557058:35060490-aa27-40a2-b587-eca7672140c8", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@4e359ecc"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz7umn:"}], "description": "The user has a situation where .erb templates are able to see variables higher up in scope as local variables, properly defined.\n\nThese variables are populated in the legacy and \"future\" parser when run by preview on the intermediate 3.8 system.\n\nHowever, when the code is run on 2016.2, changes to the parser are causing those variables to not be populated and instead resolve to empty strings in the .erb's output.\n\nSome way to catch that would be good. If it were possible for the preview tool to somehow compare catalogs from two different puppet servers, it would be a great feature. Alternately, if the preview tool were to somehow check ERB variable scope...\n\nIn the mean time, the user will add a \"noop\" stage to their migration where they point the agents at the 2016.2 server and check the logs for anything that changes... (since no changes are expected...)", "environment": "PE 3.3 -> PE 3.8 -> PE 2016.2", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32696", "fixedVersions": [], "id": "32696", "issueType": "Bug", "key": "PRE-121", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:35060490-aa27-40a2-b587-eca7672140c8", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Not catching formerly-leaked variables getting plugged", "timeSpent": "PT0S", "updated": "2016-07-29T13:32:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [], "components": ["CLI"], "created": "2016-07-29T06:24:00.000000", "creator": "557058:35060490-aa27-40a2-b587-eca7672140c8", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@75350ed6"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz7uan:"}], "description": "It would be nice if --debug printed to STDERR instead of STDOUT, allowing one to capture STDOUT for analysis with tools such as [Preview Report](https://github.com/puppetlabs/prosvc-preview_report) while preserving the debug information separately\n\nThis saves one from having to rerun the preview tool with --last (and without --debug)", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32761", "fixedVersions": [], "id": "32761", "issueType": "New Feature", "key": "PRE-120", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:35060490-aa27-40a2-b587-eca7672140c8", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "--debug to STDERR?", "timeSpent": "PT0S", "updated": "2016-07-29T06:25:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": "557058:c1e469c7-5baa-49f5-ab2d-334db44048e7", "attachments": [], "comments": [], "components": [], "created": "2016-07-28T12:40:00.000000", "creator": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@536f8963"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz7tsv:"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "29/Aug/16"}], "description": "In practice when using the preview tool, there are some \"noisy\" issues like MIGRATE4_REVIEW_IN_EXPRESSION , we should allow the user to pass in a list of these , perhaps in a CSV format that excludes them from being in the overview-json, or tracked in otherwords. This would allow you to thin the reports of anything you felt were red-herrings. Doing this with the current excludes mechanism seems like it would be quite cumbersome  it as you are effectively excluding by type and title not issue and in the case of in its not something happening on a resource level. I would be also fine with the excludes json supporting issue_code in liue of more simplistic option like `--exclude_issues MIGRATE4_REVIEW_IN_EXPRESSION` we could have \"issue_codes\" : [\"MIGRATE4_REVIEW_IN_EXPRESSION\"] in the excludes json referenced to filter the list", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32759", "fixedVersions": [], "id": "32759", "issueType": "New Feature", "key": "PRE-119", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Add option to exclude specific issues codes from output ", "timeSpent": "PT0S", "updated": "2016-08-29T15:31:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "attachments": [], "comments": [], "components": ["QA"], "created": "2016-07-27T10:38:00.000000", "creator": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Acceptance Criteria", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "* a test"}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@16f57423"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hyn427:"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "1.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "22/Aug/17"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "1_*:*_1_*:*_84194772795_*|*_6_*:*_1_*:*_0"}], "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32674", "fixedVersions": [], "id": "32674", "issueType": "Task", "key": "PRE-118", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "resolution": "Incomplete", "resolutionDate": "2019-03-28T22:04:00.000000", "status": "Closed", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "acceptance: preview should fail gracefully if puppetdb is missing", "timeSpent": "PT0S", "updated": "2019-03-28T22:04:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": "557058:639cd954-0530-45e8-ba35-7be3297421a0", "attachments": [], "comments": [], "components": ["QA"], "created": "2016-07-26T11:20:00.000000", "creator": "557058:639cd954-0530-45e8-ba35-7be3297421a0", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@1d4dfda7"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Contact", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:userpicker", "value": "557058:639cd954-0530-45e8-ba35-7be3297421a0"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz7rsv:"}, {"fieldName": "Scope Change Category", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Found"}, {"fieldName": "Scope Change Reason", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textfield", "value": "CI Blocker"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "1.0"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "1_*:*_1_*:*_719101_*|*_3_*:*_1_*:*_81402965_*|*_5_*:*_1_*:*_0_*|*_10011_*:*_1_*:*_1200741"}], "description": "Error logs: \nhttps://jenkins-modules.puppetlabs.com/view/2.%20linux%20only/view/catalog_preview/view/master/job/platform-lang_puppetlabs-catalog-preview_intn-sys_full-pe-2016.2.x-master/PLATFORM=ubuntu1604-64mdca,WORKER_LABEL=beaker/1/console", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32658", "fixedVersions": [], "id": "32658", "issueType": "Bug", "key": "PRE-117", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:639cd954-0530-45e8-ba35-7be3297421a0", "resolution": "Fixed", "resolutionDate": "2016-07-27T10:29:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Catalog_preview: CI failure on step 6 with Ubuntu", "timeSpent": "PT0S", "updated": "2016-07-27T10:29:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "Merged to master at [d9328d2|https://github.com/puppetlabs/puppetlabs-catalog_preview/commit/d9328d2f62f02727c1bdea9a9669676869b307d3].", "created": "2016-08-01T04:25:00.000000"}], "components": [], "created": "2016-07-26T05:18:00.000000", "creator": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@6853398b"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz7rfj:"}, {"fieldName": "Release Notes", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Not Needed"}, {"fieldName": "Release Notes Summary", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "This is the ticket that is for updating the changelog."}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "01/Aug/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "1_*:*_1_*:*_146527_*|*_10007_*:*_1_*:*_515136087_*|*_10009_*:*_1_*:*_101397776_*|*_5_*:*_1_*:*_0"}], "description": "The changelog and documentation needs to be updated for PRE 2.2.0 release.", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32787", "fixedVersions": [], "id": "32787", "issueType": "Sub-task", "key": "PRE-116", "labels": [], "originalEstimate": "PT0S", "parent": "32693", "parentSummary": "Release Preview 2.2.0", "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "resolution": "Fixed", "resolutionDate": "2016-08-02T08:36:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:48 AM", "summary": "Update changelog and documentation", "timeSpent": "PT0S", "updated": "2016-08-02T08:36:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Can you still retrieve the \"deactivated\" node's information from PDB?  The entire construct is based on the idea that there are nodes in PDB that are \"inactive\" but for which there is still information that can be retrieved.\n\nIf  \"deactivated\" means the information cannot be obtained, then the concept of forcing fetching of such information is kind of moot.... is there some other state, or are we using the wrong way of getting the information?", "created": "2016-07-21T17:12:00.000000"}, {"author": "557058:b3e6b0df-198d-45f8-9ba5-d41f90e80ced", "body": "As noted above, the node data can be retrieved from PDB with {{puppet node find}}:\n{code}\n[root@j40bk7fz5vuim8f puppetlabs-catalog_preview]# puppet node find bu1hti1git3zkoi.delivery.puppetlabs.net\n{\"document_type\":\"Node\",\"data\":{\"name\":\"bu1hti1git3zkoi.delivery.puppetlabs.net\",\"environment\":\"production\",\"parameters\":{\"uniqueid\":\"200ac170\",\"virtual\":\"vmware\",\"is_virtual\":true,\"kernel\":\"Linux\",\"architecture\":\"x86_64\",\"hardwaremodel\":\"x86_64\",\"operatingsystem\":\"CentOS\",\"os\":{\"name\":\"CentOS\",\"family\":\"RedHat\",\"release\":{\"major\":\"6\",\"minor\":\"5\",\"full\":\"6.5\"}},\"macaddress\":\"00:50:56:8F:60:4C\",\"osfamily\":\"RedHat\",\n...\n{code}\n\nIs there a preferable method for data retrieval that I should try?", "created": "2016-07-21T17:54:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "Thanks [~accountid:557058:b3e6b0df-198d-45f8-9ba5-d41f90e80ced], for a very elaborate bug description. It does make fixing this problem a lot easier.\n\nSome weeks ago, I mentioned an alternative process to resolve tickets like this one. The process would be something like this:\n\n# An acceptance test is created that provokes the issue and submitted as a PR.\n# That PR is referenced from this ticket as the acceptance criteria.\n# The engineer tasked with resolving the problem merges the acceptance PR locally.\n# A new PR is submitted once the problem is resolved (verified using the acceptance test). It now contains both the acceptance test and the fix.\n# The PR is reviewed and merged to it's final target branch.\n\nBy doing this we gain several advantages:\n\n# The acceptance test must be written at some point anyway, so there should be no extra work doing it first.\n# There is no need for the engineer to set up an environment with PE/PuppetDB etc. to provoke the problem (saves a lot of time).\n# The problem description has a greater chance of being unambiguous (we've had a couple of tickets in the past where that was not the case).\n# It's very likely that the CI-pipeline stays green after the final merge since the acceptance test was used as the verification mechanism.\n\nOne scenario, when a bug is detected by a Puppet engineer, could be that a test is written as part of submitting the ticket. That would reduce the need for a \"steps to reproduce\" section which also would save time.\n\nWhat do you think? Could we try this?", "created": "2016-07-22T00:30:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "+1 to that", "created": "2016-07-22T01:40:00.000000"}], "components": [], "created": "2016-07-21T16:31:00.000000", "creator": "557058:b3e6b0df-198d-45f8-9ba5-d41f90e80ced", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@224ae429"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz7odb:"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "21/Jul/16"}], "description": "After a node has been deactivated in PuppetDB, puppet preview is unable to fetch its facts.\n\nError\n{code}\n[root@j40bk7fz5vuim8f puppetlabs-catalog_preview]# puppet preview bu1hti1git3zkoi.delivery.puppetlabs.net --no-skip-inactive-nodes --preview_environment production_future_parser_testing --baseline_environment production  --migrate 3.8/4.0 --view overview\nWARNING: Host is missing hostname and/or domain: bu1hti1git3zkoi.delivery.puppetlabs.net\nERROR: Facts seems to be missing. No 'osfamily' fact found for node 'bu1hti1git3zkoi.delivery.puppetlabs.net'\nStats\n  Total number of nodes: 1, 100.0%\n  Failed compilation...: 1, 100.0%\n    baseline...........: 1, 100.0%\n    preview............: 0,   0.0%\n  Conflicting..........: 0,   0.0%\n  Compliant............: 0,   0.0%\n  Equal................: 0,   0.0%\n\nBaseline Errors (by manifest)\n\n    Nodes..: bu1hti1git3zkoi.delivery.puppetlabs.net\n    Issues.:\n'Facts seems to be missing. No 'osfamily' fact found for node 'bu1hti1git3zkoi.delivery.puppetlabs.net''\nBaseline Errors (by message)\n  Facts seems to be missing. No 'osfamily' fact found for node 'bu1hti1git3zkoi.delivery.puppetlabs.net' (1)\n{code}\n\nh2. Steps to reproduce\nh3. Install PE 3.8.6 monolithic master and agent\nh3. Ensure that puppet agent has run on all nodes\n{code}\n[root@j40bk7fz5vuim8f puppetlabs-catalog_preview]# puppet cert list --all\n+ \"bu1hti1git3zkoi.delivery.puppetlabs.net\"       (SHA256) A0:B5:89:D9:EE:36:33:86:9B:35:2D:4A:45:16:93:C1:26:B5:EF:0A:2C:22:77:5E:1A:5B:B9:DA:B7:AF:83:32\n+ \"j40bk7fz5vuim8f.delivery.puppetlabs.net\"       (SHA256) 9F:16:A6:27:4B:D8:DC:29:61:C0:3C:66:1A:A5:3E:57:3B:AD:30:5A:A3:C2:34:B5:85:B3:77:EA:B4:77:D8:56 (alt names: \"DNS:j40bk7fz5vuim8f.delivery.puppetlabs.net\", \"DNS:puppet\")\n{code}\nh3. Validate that facts have for target node have been captured in PuppetDB\n{code}\n[root@j40bk7fz5vuim8f puppetlabs-catalog_preview]# puppet node find bu1hti1git3zkoi.delivery.puppetlabs.net\n{\"document_type\":\"Node\",\"data\":{\"name\":\"bu1hti1git3zkoi.delivery.puppetlabs.net\",\"environment\":\"production\",\"parameters\":{\"uniqueid\":\"200ac170\",\"virtual\":\"vmware\",\"is_virtual\":true,\"kernel\":\"\nLinux\",\"architecture\":\"x86_64\",\"hardwaremodel\":\"x86_64\",\"operatingsystem\":\"CentOS\",\"os\":{\"name\":\"CentOS\",\"family\":\"RedHat\",\"release\":{\"major\":\"6\",\"minor\":\"5\",\"full\":\"6.5\"}},\"macaddress\":\"00:5\n0:56:8F:60:4C\",\"osfamily\":\"RedHat\",\n...\n{code}\nh3. Deactivate node\n{code}\n[root@j40bk7fz5vuim8f puppetlabs-catalog_preview]# puppet node deactivate bu1hti1git3zkoi.delivery.puppetlabs.net\nSubmitted 'deactivate node' for bu1hti1git3zkoi.delivery.puppetlabs.net with UUID b8d697f7-05ba-476b-bb0c-1ca95dbd7897\n[root@j40bk7fz5vuim8f puppetlabs-catalog_preview]# puppet node status bu1hti1git3zkoi.delivery.puppetlabs.net\nbu1hti1git3zkoi.delivery.puppetlabs.net\nDeactivated at 2016-07-21T18:13:06.525Z\nLast catalog: 2016-07-21T16:48:25.089Z\nLast facts: 2016-07-21T16:48:23.846Z\n{code}\nh3. Run puppet preview to not skip inactive nodes\n{code}\n[root@j40bk7fz5vuim8f puppetlabs-catalog_preview]# puppet preview bu1hti1git3zkoi.delivery.puppetlabs.net --no-skip-inactive-nodes --preview_environment production_future_parser_testing --baseline_environment production  --migrate 3.8/4.0 --view overview\nWARNING: Host is missing hostname and/or domain: bu1hti1git3zkoi.delivery.puppetlabs.net\nERROR: Facts seems to be missing. No 'osfamily' fact found for node 'bu1hti1git3zkoi.delivery.puppetlabs.net'\nStats\n  Total number of nodes: 1, 100.0%\n  Failed compilation...: 1, 100.0%\n    baseline...........: 1, 100.0%\n    preview............: 0,   0.0%\n  Conflicting..........: 0,   0.0%\n  Compliant............: 0,   0.0%\n  Equal................: 0,   0.0%\n\nBaseline Errors (by manifest)\n\n    Nodes..: bu1hti1git3zkoi.delivery.puppetlabs.net\n    Issues.:\n'Facts seems to be missing. No 'osfamily' fact found for node 'bu1hti1git3zkoi.delivery.puppetlabs.net''\nBaseline Errors (by message)\n  Facts seems to be missing. No 'osfamily' fact found for node 'bu1hti1git3zkoi.delivery.puppetlabs.net' (1)\n{code}", "environment": "Puppet Enterprise 3.8.6-rc0-36-g6518926\n* Monolithic Master\n* Additional node", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32757", "fixedVersions": [], "id": "32757", "issueType": "Bug", "key": "PRE-115", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:b3e6b0df-198d-45f8-9ba5-d41f90e80ced", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Preview cannot fetch facts for deactivated node", "timeSpent": "PT0S", "updated": "2016-09-07T16:11:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [], "components": [], "created": "2016-07-20T11:36:00.000000", "creator": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@195b8085"}, {"fieldName": "CS Business Value", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "2 - $$$"}, {"fieldName": "CS Frequency", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "1 - 1-5% of Customers"}, {"fieldName": "CS Impact", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "There are few users left upgrading from 3.8->2015+."}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "CS Priority", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Minor"}, {"fieldName": "CS Severity", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "3 - Serious"}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz7n8f:"}], "description": "A customer recently had an issue that was not caught by preview, as the change was a meta paramater in puppet not in the future parser. None the less this caused failures in their base profile because they had a defined type with the parameter \"export\", \n{code}\nError: Could not retrieve catalog from remote server: Error 400 on SERVER: Evaluation Error: Error while evaluating a Resource Statement, Invalid export in Nagios::Object::Host[puppet-ca2001.customer.com]: true is not a resource at /etc/puppetlabs/code/environments/production/modules/nagios/manifests/client.pp:41 on node puppet-ca2001.customer.com\n{code}\n\nThis leads to a really odd error message which PS was able to figure out but is not intuitive. Given this was a change that was added due to app orchestration, it seems like we should be able to check for it in preview, even when the existing (3.8) puppet version doesn't have that code merged as its simply a parameter to check for. ", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32786", "fixedVersions": [], "id": "32786", "issueType": "Bug", "key": "PRE-114", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:48 AM", "summary": "Migrate flag should catch new meta parameters in use in later versions of Puppet", "timeSpent": "PT0S", "updated": "2017-12-05T09:34:00.000000", "votes": "1", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "hmmm... found another issue...", "created": "2016-08-15T11:52:00.000000"}], "components": ["QA"], "created": "2016-07-20T10:12:00.000000", "creator": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Acceptance Criteria", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "* the two non-root tests pass "}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@7eb1819b"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hymy2f:"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "2.0"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "10008_*:*_3_*:*_175840826_*|*_1_*:*_1_*:*_8238634_*|*_10007_*:*_5_*:*_420064941_*|*_3_*:*_4_*:*_1737329212_*|*_5_*:*_1_*:*_0_*|*_10011_*:*_1_*:*_7857242_*|*_10006_*:*_1_*:*_152900634_*|*_10005_*:*_1_*:*_612200087"}], "description": "the non-root tests fail when preview can't find our node names in puppetdb.\n\nalso, unpend these tests", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32772", "fixedVersions": [], "id": "32772", "issueType": "Task", "key": "PRE-113", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "resolution": "Fixed", "resolutionDate": "2016-08-25T11:20:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "acceptance: configure non-root access to puppetdb ", "timeSpent": "PT0S", "updated": "2016-08-25T11:20:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": "623cfdfb8d8b9c0068b93e3c", "attachments": [], "comments": [{"author": "557058:639cd954-0530-45e8-ba35-7be3297421a0", "body": "Should curl_payload be updated to get it work with puppetDB in 2015.3.x?\nhttps://github.com/puppetlabs/puppetlabs-catalog_preview/blob/master/spec/spec_helper_integration.rb#L414-L417", "created": "2016-07-20T09:36:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "commands as query parameters appears to be deprecated.  i'd expect this to work in any puppetdb v4 (non puppet 3x use):\n{code}\ncurl -X POST --silent --show-error -H 'Content-Type:application/json'   -H 'Accept:application/json' -d '{\"command\":\"replace facts\",\"version\":4,\"payload\":{\"certname\":\"nonesuch\",\"environment\":\"production\",\"values\":{\"osfamily\":\"myvalue\"},\"producer_timestamp\":\"2015-01-01\"}}' 'http://localhost:8080/pdb/cmd/v1'\n{code}", "created": "2016-07-20T10:38:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "If I'm not mistaking, it's the opposite. Query parameter should be used on more recent puppetdb versions. Baking everything into one JSON structure is deprecated. See [PuppetDB command submission|https://docs.puppet.com/puppetdb/latest/api/command/v1/commands.html#command-submission].", "created": "2016-07-20T13:04:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "Also, please consider that the lines [414-417|https://github.com/puppetlabs/puppetlabs-catalog_preview/blob/master/spec/spec_helper_integration.rb#L414-L417] was added after carefully testing what works and what doesn't on both 2.3.x and latest versions of PuppetDB.", "created": "2016-07-20T13:09:00.000000"}], "components": ["QA"], "created": "2016-07-20T09:32:00.000000", "creator": "557058:639cd954-0530-45e8-ba35-7be3297421a0", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@7c7eaf28"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Contact", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:userpicker", "value": "557058:639cd954-0530-45e8-ba35-7be3297421a0"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz7n3z:"}, {"fieldName": "Release Notes", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Not Needed"}, {"fieldName": "Scope Change Category", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Found"}, {"fieldName": "Scope Change Reason", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textfield", "value": "CI Blocker"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "1.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "20/Jul/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "1_*:*_1_*:*_46086972_*|*_5_*:*_1_*:*_0_*|*_10011_*:*_1_*:*_43871155"}], "description": "CI passed on step step 5(smoke test) and 6(full test with 2015.1.x), but it fails in step 7 (full test with 2015.3.x) with  below errors:\n\n{code:title= Failed - 1 error logs}\n07:03:20 ue8ssyxhmap0asq.delivery.puppetlabs.net (centos6-64-1) 07:03:20$ puppet preview --view baseline nonesuch andanother file_node1\n07:03:20   Error: Could not retrieve status for nonesuch: Failed to find '/pdb/query/v4/nodes/nonesuch' on any of the following 'server_urls': https://ue8ssyxhmap0asq.delivery.puppetlabs.net:8081\n07:03:21   Error: Could not retrieve status for andanother: Failed to find '/pdb/query/v4/nodes/andanother' on any of the following 'server_urls': https://ue8ssyxhmap0asq.delivery.puppetlabs.net:8081\n07:03:22   Error: Could not retrieve status for file_node1: Failed to find '/pdb/query/v4/nodes/file_node1' on any of the following 'server_urls': https://ue8ssyxhmap0asq.delivery.puppetlabs.net:8081\n07:03:22   Error: Could not run: No compilation can be performed since none of the given node(s) are active\n07:03:22 \n07:03:22 ue8ssyxhmap0asq.delivery.puppetlabs.net (centos6-64-1) executed in 2.18 seconds\n07:03:22 Exited: 1\n07:03:22   should error if using an unsupported --view type with multiple nodes (FAILED - 1)\n{code}\n\nFull CI logs are here: https://jenkins-modules.puppetlabs.com/job/platform-lang_puppetlabs-catalog-preview_intn-sys_full-pe-2015.3.x-master/PLATFORM=centos6-64mdca,WORKER_LABEL=beaker/14/consoleFull\n", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32673", "fixedVersions": [], "id": "32673", "issueType": "CI Blocker", "key": "PRE-112", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Major", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:639cd954-0530-45e8-ba35-7be3297421a0", "resolution": "Fixed", "resolutionDate": "2016-07-21T10:32:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "CI failure: catalog_preview: Could not retrieve status for nodes", "timeSpent": "PT0S", "updated": "2016-07-21T10:32:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": "70121:afb719a0-4b0a-44f3-8b3e-37cc6ec6de41", "attachments": [], "comments": [{"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "[~accountid:70121:afb719a0-4b0a-44f3-8b3e-37cc6ec6de41], please run it again with option {{--trace}}. That will give you a stack trace that shows exactly where the problem occurs. It would be very helpful if you could paste that trace into a comment here.", "created": "2016-07-20T01:18:00.000000"}, {"author": "70121:afb719a0-4b0a-44f3-8b3e-37cc6ec6de41", "body": "This is the stack trace\n\n\n{noformat}\nError: Expected an instance of String. Got Fixnum\n/mnt/puppet-files/puppet/lib/puppet_x/puppetlabs/migration/model_object.rb:42:in `assert_type'\n/mnt/puppet-files/puppet/lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb:243:in `initialize'\n/mnt/puppet-files/puppet/lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb:857:in `new'\n/mnt/puppet-files/puppet/lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb:857:in `create_resource'\n/mnt/puppet-files/puppet/lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb:843:in `block in create_resources'\n/mnt/puppet-files/puppet/lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb:838:in `each'\n/mnt/puppet-files/puppet/lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb:838:in `create_resources'\n/mnt/puppet-files/puppet/lib/puppet_x/puppetlabs/migration/catalog_delta_model.rb:616:in `initialize'\n/mnt/puppet-files/puppet/lib/puppet/application/preview.rb:532:in `new'\n/mnt/puppet-files/puppet/lib/puppet/application/preview.rb:532:in `catalog_diff'\n/mnt/puppet-files/puppet/lib/puppet/application/preview.rb:358:in `compile_diff'\n/mnt/puppet-files/puppet/lib/puppet/application/preview.rb:290:in `block in compile'\n/mnt/puppet-files/puppet/lib/puppet/application/preview.rb:284:in `each'\n/mnt/puppet-files/puppet/lib/puppet/application/preview.rb:284:in `compile'\n/mnt/puppet-files/puppet/lib/puppet/application/preview.rb:236:in `main'\n/mnt/puppet-files/puppet/lib/puppet/application/preview.rb:141:in `run_command'\n/var/lib/gems/1.9.1/gems/puppet-3.8.7/lib/puppet/application.rb:381:in `block (2 levels) in run'\n/var/lib/gems/1.9.1/gems/puppet-3.8.7/lib/puppet/application.rb:507:in `plugin_hook'\n/var/lib/gems/1.9.1/gems/puppet-3.8.7/lib/puppet/application.rb:381:in `block in run'\n/var/lib/gems/1.9.1/gems/puppet-3.8.7/lib/puppet/util.rb:496:in `exit_on_fail'\n/var/lib/gems/1.9.1/gems/puppet-3.8.7/lib/puppet/application.rb:381:in `run'\n/var/lib/gems/1.9.1/gems/puppet-3.8.7/lib/puppet/util/command_line.rb:146:in `run'\n/var/lib/gems/1.9.1/gems/puppet-3.8.7/lib/puppet/util/command_line.rb:92:in `execute'\n/var/lib/gems/1.9.1/gems/puppet-3.8.7/bin/puppet:8:in `<top (required)>'\n/usr/local/bin/puppet:23:in `load'\n/usr/local/bin/puppet:23:in `<main>'\n{noformat}\n", "created": "2016-07-20T04:14:00.000000"}], "components": [], "created": "2016-07-19T23:07:00.000000", "creator": "70121:afb719a0-4b0a-44f3-8b3e-37cc6ec6de41", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@272d17a4"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz7mvr:"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "20/Jul/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "1_*:*_1_*:*_7895024_*|*_6_*:*_1_*:*_0_*|*_10004_*:*_1_*:*_23408912"}], "description": "Everytime when I run it, it give me \"Error: Expected an instance of String. Got Fixnum\". And here is the debug output of last few lines\n\n\n{code:java}\nDebug: /File[/mnt/puppet-files/puppet/state]: Autorequiring File[/mnt/puppet-files/puppet]\nDebug: /File[/mnt/puppet-files/puppet/lib]: Autorequiring File[/mnt/puppet-files/puppet]\nDebug: /File[/etc/puppet/hiera.yaml]: Autorequiring File[/etc/puppet]\nDebug: /File[/mnt/puppet-files/puppet/preview]: Autorequiring File[/mnt/puppet-files/puppet]\nDebug: /File[/mnt/puppet-files/puppet/ssl/certs]: Autorequiring File[/mnt/puppet-files/puppet/ssl]\nDebug: /File[/mnt/puppet-files/puppet/ssl]: Autorequiring File[/mnt/puppet-files/puppet]\nDebug: /File[/mnt/puppet-files/puppet/ssl/public_keys]: Autorequiring File[/mnt/puppet-files/puppet/ssl]\nDebug: /File[/mnt/puppet-files/puppet/ssl/certificate_requests]: Autorequiring File[/mnt/puppet-files/puppet/ssl]\nDebug: /File[/mnt/puppet-files/puppet/ssl/private_keys]: Autorequiring File[/mnt/puppet-files/puppet/ssl]\nDebug: /File[/mnt/puppet-files/puppet/ssl/private]: Autorequiring File[/mnt/puppet-files/puppet/ssl]\nDebug: /File[/mnt/puppet-files/puppet/ssl/certs/puppet-master.srv.fish.pem]: Autorequiring File[/mnt/puppet-files/puppet/ssl/certs]\nDebug: /File[/mnt/puppet-files/puppet/ssl/private_keys/puppet-master.srv.fish.pem]: Autorequiring File[/mnt/puppet-files/puppet/ssl/private_keys]\nDebug: /File[/mnt/puppet-files/puppet/ssl/public_keys/puppet-master.srv.fish.pem]: Autorequiring File[/mnt/puppet-files/puppet/ssl/public_keys]\nDebug: /File[/mnt/puppet-files/puppet/ssl/certs/ca.pem]: Autorequiring File[/mnt/puppet-files/puppet/ssl/certs]\nDebug: /File[/mnt/puppet-files/puppet/ssl/crl.pem]: Autorequiring File[/mnt/puppet-files/puppet/ssl]\nDebug: /File[/mnt/puppet-files/puppet/facts.d]: Autorequiring File[/mnt/puppet-files/puppet]\nDebug: /File[/etc/puppet/environments/production]: Autorequiring File[/etc/puppet]\nDebug: Finishing transaction 26065300\nDebug: Using cached certificate_revocation_list for ca\nInfo: Caching node for puppet-master.srv.fish\nError: Expected an instance of String. Got Fixnum\n{code}\n\n\n", "environment": "AWS EC2\nUbuntu 14.04\nruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-linux]\nPuppet 3.8.7\nCatalog preview 2.1.0\n", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32708", "fixedVersions": [], "id": "32708", "issueType": "Bug", "key": "PRE-111", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "70121:afb719a0-4b0a-44f3-8b3e-37cc6ec6de41", "resolution": "Duplicate", "resolutionDate": "2016-07-20T07:48:00.000000", "status": "Closed", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Can't run the preview", "timeSpent": "PT0S", "updated": "2016-07-20T07:48:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "merged to master at: 21f83e6", "created": "2016-07-19T15:26:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "previous PR seems to have fixed most of the root tests.  but the non-root tests are still failing even if we add \"osfamily\" facts for all nodes including one called \"diff_compiler\"\n\nhttps://jenkins-modules.puppetlabs.com/view/2.%20linux%20only/view/catalog_preview/view/master/job/platform-lang_puppetlabs-catalog-preview_intn-sys_smoke-master/27/", "created": "2016-07-19T17:14:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "this might stem from the same issue:\n{code}\n[root@rj5t8deh04bcsbv puppetlabs]# grep -r myvalue /opt/puppetlabs/server/data/puppetserver/yaml/\n/opt/puppetlabs/server/data/puppetserver/yaml/node/nonesuch.yaml:  osfamily: myvalue\n/opt/puppetlabs/server/data/puppetserver/yaml/node/file_node1.yaml:  osfamily: myvalue\n/opt/puppetlabs/server/data/puppetserver/yaml/node/file_node2.yaml:  osfamily: myvalue\n/opt/puppetlabs/server/data/puppetserver/yaml/node/andanother.yaml:  osfamily: myvalue\n[root@rj5t8deh04bcsbv puppetlabs]# ls /home/previewser/.puppetlabs/\netc/ opt/ var/\n[root@rj5t8deh04bcsbv puppetlabs]# grep -r myvalue /home/previewser/.puppetlabs/opt/puppet/\n{code}", "created": "2016-07-19T17:20:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "also i think \n{code}#{name}{code} should be {{node.name}} here:\nhttps://github.com/puppetlabs/puppetlabs-catalog_preview/blob/5693782ae0c3deaada248f57f1f9e7fd1d2c8101/lib/puppet/indirector/catalog/diff_compiler.rb#L194\nand here:\nhttps://github.com/puppetlabs/puppetlabs-catalog_preview/blob/5693782ae0c3deaada248f57f1f9e7fd1d2c8101/lib/puppet/indirector/catalog/diff_compiler.rb#L257\n\nit's spitting out \"node_compiler\" which i never use as a name, for a node or otherwise.  the error message might lead to some confusion", "created": "2016-07-19T17:23:00.000000"}, {"author": "557058:639cd954-0530-45e8-ba35-7be3297421a0", "body": "I am not sure why it complains about node 'diff_comiler' which is not used in the command line at all.\nFor example one of the failure is at line https://github.com/puppetlabs/puppetlabs-catalog_preview/blob/master/spec/integration/preview_spec.rb#L253 which only has node_name_cli and node_names_filename\nnode_name_cli = https://github.com/puppetlabs/puppetlabs-catalog_preview/blob/master/spec/spec_helper_integration.rb#L403\n node_names_filename =  https://github.com/puppetlabs/puppetlabs-catalog_preview/blob/master/spec/spec_helper_integration.rb#L402\n\n", "created": "2016-07-19T17:56:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "[~accountid:557058:639cd954-0530-45e8-ba35-7be3297421a0] i believe the error message is misleading about the node name.  'diff_compiler' is the name passed to the profiler in the links i posted above.  ", "created": "2016-07-19T18:01:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "I found some issues with the acceptance test.\n\n1. The curl for {{/pdb/cmd/v1}} doesn't work on PuppetDB 2.3. It must use URL {{/v3/commands}} with no query parameters (everything must be in the JSON body), and \"producer_timestamp\" becomes \"producer-timestamp\".\n2. Facts were added to a 'DEV' environment but the tests use 'production' and 'test' environments.\n3. The non-root tests aren't configured to run with PuppetDB.\n\n[PR-151|https://github.com/puppetlabs/puppetlabs-catalog_preview/pull/151] contains fixes for these issues and also a fix for the incorrect 'diff_compiler' output.", "created": "2016-07-20T07:15:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "fixes to tests merged to master: 556429e", "created": "2016-07-20T07:22:00.000000"}, {"author": "557058:639cd954-0530-45e8-ba35-7be3297421a0", "body": "[~accountid:557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715] That makes sense, thanks", "created": "2016-07-20T08:14:00.000000"}], "components": ["QA"], "created": "2016-07-19T11:54:00.000000", "creator": "557058:639cd954-0530-45e8-ba35-7be3297421a0", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@205e5baa"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Contact", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:userpicker", "value": "557058:639cd954-0530-45e8-ba35-7be3297421a0"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz7mdr:"}, {"fieldName": "Scope Change Category", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Found"}, {"fieldName": "Scope Change Reason", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textfield", "value": "CI blocker"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "1.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "19/Jul/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "10008_*:*_2_*:*_30372743_*|*_1_*:*_1_*:*_97947_*|*_10007_*:*_2_*:*_12549590_*|*_3_*:*_2_*:*_3477290_*|*_5_*:*_1_*:*_0_*|*_10011_*:*_2_*:*_406139_*|*_10006_*:*_1_*:*_47555120"}], "description": "CI test failed with below errors:\n{code}\nFinished in 2 minutes 14.7 seconds (files took 10 minutes 3 seconds to load)\n36 examples, 29 failures\n\nFailed examples:\n\nrspec ./spec/integration/preview_spec.rb:293 # preview subcommand should output valid json from --view diff\nrspec ./spec/integration/preview_spec.rb:302 # preview subcommand should output valid json from --view overview-json\nrspec ./spec/integration/preview_spec.rb:316 # preview subcommand should output valid json from --view preview-log\nrspec ./spec/integration/preview_spec.rb:324 # preview subcommand should produce a report for a successful run with --view overview and --last\nrspec ./spec/integration/preview_spec.rb:345 # preview subcommand should produce a report for a failed run with --view overview\nrspec ./spec/integration/preview_spec.rb:370 # preview subcommand should reconstruct the node list from a previous successful run when using --last\nrspec ./spec/integration/preview_spec.rb:377 # preview subcommand should reconstruct the node list from a previous compile failure when using --last\nrspec ./spec/integration/preview_spec.rb:385 # preview subcommand should produce overview including failed nodes from --last --view overview_json\nrspec ./spec/integration/preview_spec.rb:401 # preview subcommand should --view diff_nodes\nrspec ./spec/integration/preview_spec.rb:409 # preview subcommand should output nothing from --view failed_nodes with no failed nodes\nrspec ./spec/integration/preview_spec.rb:418 # preview subcommand should show the error and the failed nodes with --view failed_nodes\nrspec ./spec/integration/preview_spec.rb:442 # preview subcommand should exit with 3 when preview compilation fails\nrspec ./spec/integration/preview_spec.rb:450 # preview subcommand should exit with 4 when -assert equal is used and catalogs are not equal\nrspec ./spec/integration/preview_spec.rb:456 # preview subcommand should exit with 4 when -assert equal is used and catalogs are compliant\nrspec ./spec/integration/preview_spec.rb:462 # preview subcommand should exit with 0 when -assert compliant is used and catalogs are compliant\nrspec ./spec/integration/preview_spec.rb:513 # preview subcommand should exit with 5 when -assert compliant is used and preview is not compliant\nrspec ./spec/integration/preview_spec.rb:223 # preview subcommand when comparing simple catalogs as root, should exit with 0 and produce json logfiles\nrspec ./spec/integration/preview_spec.rb:251 # preview subcommand when comparing simple catalogs as non-root, should exit with 0 and produce json logfiles\nrspec ./spec/integration/preview_spec.rb:468 # preview subcommand when using --assert equal with --excludes should exit with 0 when excluding attributes qualified with type, title, and attribute name\nrspec ./spec/integration/preview_spec.rb:473 # preview subcommand when using --assert equal with --excludes should exit with 0 when excluding attributes qualified with type and attribute name\nrspec ./spec/integration/preview_spec.rb:478 # preview subcommand when using --assert equal with --excludes should exit with 0 when excluding conflicting resources qualified with type and title\nrspec ./spec/integration/preview_spec.rb:483 # preview subcommand when using --assert equal with --excludes should exit with 0 when excluding conflicting resources qualified with type\nrspec ./spec/integration/preview_spec.rb:488 # preview subcommand when using --assert equal with --excludes should exit with 0 when excluding missing resources qualified with type and title\nrspec ./spec/integration/preview_spec.rb:494 # preview subcommand when using --assert equal with --excludes should exit with 0 when excluding missing resources qualified with type\nrspec ./spec/integration/preview_spec.rb:500 # preview subcommand when using --assert equal with --excludes should exit with 0 when excluding added resources qualified with type and title\nrspec ./spec/integration/preview_spec.rb:506 # preview subcommand when using --assert equal with --excludes should exit with 0 when excluding added resources qualified with type\nrspec ./spec/integration/preview_spec.rb:554 # preview subcommand when compiling with trusted facts and puppetdb should find the trusted facts\nrspec ./spec/integration/preview_spec.rb:562 # preview subcommand when compiling with trusted facts and puppetdb should find the trusted facts as non-root\nrspec ./spec/integration/preview_spec.rb:574 # preview subcommand when using deprecated options should warn that --trusted is deprecated\n{code}\n{code:title=looks like below error is the main reason}\nERROR: Facts seems to be missing. No 'osfamily' fact found for node 'diff_compiler'\n{code}", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32737", "fixedVersions": [], "id": "32737", "issueType": "CI Blocker", "key": "PRE-110", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:639cd954-0530-45e8-ba35-7be3297421a0", "resolution": "Fixed", "resolutionDate": "2016-07-20T14:08:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "CI failure: catalog_preview: Error: No 'osfamily' fact found", "timeSpent": "PT0S", "updated": "2016-07-20T14:08:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Updated change log and documentation PR: https://github.com/puppetlabs/puppetlabs-catalog_preview/pull/155", "created": "2016-07-26T05:16:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Blocked by json_pure problems on Ruby 1.9.3 - tests cannot go green because of that.\n\nAlso, PRE-108 is causing problems for users and should go into the release.", "created": "2016-08-01T02:30:00.000000"}, {"author": "557058:315adc9a-49dc-4753-86d1-4536fc30e3f3", "body": "catalog_preview 2.2.0 is live on Puppet Forge.", "created": "2016-08-02T12:56:00.000000"}], "components": [], "created": "2016-07-13T14:23:00.000000", "creator": "557058:f1e252bd-73da-4e0e-90f7-f0aefb98d28c", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@1e6791cc"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hyn1bj:"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "2.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "26/Jul/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "1_*:*_1_*:*_7130_*|*_3_*:*_1_*:*_632449661_*|*_5_*:*_1_*:*_0_*|*_10006_*:*_1_*:*_1090344040"}], "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32693", "fixedVersions": ["PRE 2.2.0"], "id": "32693", "issueType": "Task", "key": "PRE-109", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:f1e252bd-73da-4e0e-90f7-f0aefb98d28c", "resolution": "Fixed", "resolutionDate": "2016-08-02T12:56:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Release Preview 2.2.0", "timeSpent": "PT0S", "updated": "2016-08-02T12:56:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "The title is supposed to be a String. In 3.x there is no difference between strings and numbers hence the construct works.\nNot sure what to do with this - on the one hand all that is required is that the title is unique among the resources, on the other hand there is an awful lot of code that assumes title is a string. This requires a bit more digging into.", "created": "2016-07-27T09:47:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "PRE-111 has a stack trace. The stack trace reveals that it is indeed the the diff model's title attribute that asserts it to be a String.\nIn general 3.x would always feed a String as the title since there are now numeric data types. We can therefore specify title as requiring it to be a String. \n\nWe should either error in puppet, or accept that it can be an integer. An integer is as good as any other unique identifier for the resource.\nIn catalog-preview we should widen the set of acceptable types to include Integer, if for no other reason that to report the diff in data type.\n\nTo those running into this issue before it is fixed: it is perfectly safe to change the manifests using integer titles to quote the value since that is exactly what a 3.x compilation without future parser would do.", "created": "2016-07-27T15:14:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "The use case is typical for resources like {{Dhcp::Vlan}} where title is often set using an integer.", "created": "2016-07-27T15:27:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Ping [~accountid:70121:199f31c7-67c7-42b0-b148-18ad3a391ab0] - should we raise the priority on this and get a fix in for 2.2.0 release ?\n", "created": "2016-07-27T15:28:00.000000"}, {"author": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "body": "I think I'm +1 on allowing integer titles... [~accountid:557058:8527c9e8-8e3f-451c-b529-f6fe014233ed] any opinion?", "created": "2016-07-27T15:32:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "The proposed fix - simply removing the assertion that title must be a string at this location:\n{code}\npuppet_x/puppetlabs/migration/catalog_delta_model.rb:243:in `initialize'\n{code}\nmade the customer problem (FM-5500) go away without any other side effects.\n\nSeems that integer titles is fairly common for network devices so we should include this in the PRE 2.2.0 release. (Fix release updated).", "created": "2016-07-28T15:03:00.000000"}, {"author": "557058:35060490-aa27-40a2-b587-eca7672140c8", "body": "FWIW - If we were to say that titles must be strings, I suggest the following things would happen:\n\n1. Users would complain because it would seem to them to be an arbitrary decision\n2. Users would do something to transmogrify their formerly-valid integer data strings (123 becomes \"vlan_123\"), possibly adding another key in the data that contains the original integer data\n3. Users modify their defined resource types, calls to create_resources and such to accept the new value from hiera\n4. We lose a little goodwill from our users.", "created": "2016-07-28T15:16:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "[~accountid:557058:35060490-aa27-40a2-b587-eca7672140c8] - if (unlikely) we were to force titles to be strings, you would only have to change {{123}} to {{'123'}} in hiera and in manifests.\nSince puppet itself obviously is capable of handling integer values in the title when the resource types can handle integers we have no interest in forbidding integers to be used. They are just as good (or even better) as unique identifiers :-).\n\nThere are several issues with integer titles though as there is logic that relies on them being strings. However if used in resource types that do not use those features there is (evidently) no problem. I can imagine that there are problems if the same resource is declared, once with a string title of {{'123'}} and once with an integer title of {{123}}, but the uniqueness key generator is probably doing {{to_s}} on the title anyway.", "created": "2016-07-28T15:36:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "Merged to master at [564e7a7|https://github.com/puppetlabs/puppetlabs-catalog_preview/commit/564e7a717eba8589cbdabd1499a88591a55ba8cd].", "created": "2016-08-01T04:22:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "validated on rhel7 at SHA: 4a77053e22c0b0d26362949909138e0fa0e4a748\n{code}\n[root@r61md9oqgqcp5pl production]# cat manifests/init.pp\n$operatingsystemrelease = '7.0'\nclass { 'apache': }\napache::listen { '80': }\n\n[root@r61md9oqgqcp5pl production]# puppet preview --preview-environment test --environmentpath /tmp/preview.EN8i1T/environments/ nonesuch\n/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util.rb:49: warning: Insecure world writable dir /tmp/preview.EN8i1T/environments/production in PATH, mode 040777\n\nCatalog:\n  Versions......: different\n  Preview.......: equal\n  Tags..........: compared\n  String/Numeric: type significant compare\n\nResources:\n  Baseline......: 191\n  Preview.......: 191\n  Equal.........: 191\n  Compliant.....: 0\n  Missing.......: 0\n  Added.........: 0\n  Conflicting...: 0\n\nAttributes:\n  Equal.........: 1412\n  Compliant.....: 0\n  Missing.......: 0\n  Added.........: 0\n  Conflicting...: 0\n\nEdges:\n  Baseline......: 190\n  Preview.......: 190\n  Missing.......: 0\n  Added.........: 0\n\nOutput:\n  For node......: /opt/puppetlabs/server/data/puppetserver/preview/nonesuch\n\nCatalogs for node '#<PuppetX::Puppetlabs::Migration::OverviewModel::Query::Wrapper:0x00000005be56e0>' are equal.\n{code}", "created": "2016-08-01T14:40:00.000000"}], "components": ["CLI"], "created": "2016-07-12T10:30:00.000000", "creator": "qm:f7b4bc64-445a-440e-8354-a55854c39cee:6849277a-4d18-4894-89b0-5ff545b54e1b", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Acceptance Criteria", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "It should be possible to use integer titles in catalogs without catalog preview raising an error."}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@5997b094"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz7hjb:"}, {"fieldName": "Release Notes", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Bug Fix"}, {"fieldName": "Release Notes Summary", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "Resource titles being set to an integer value (which is common when managing network devices) was not tolerated by catalog preview's data model.  Catalog preview would compile both catalogs and fail to compute a diff ending with an error that an Integer was used where a String was expected."}, {"fieldName": "Scope Change Category", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Found"}, {"fieldName": "Scope Change Reason", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textfield", "value": "blocking work on-site with customer"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "1.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "27/Jul/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "10008_*:*_1_*:*_15004607_*|*_1_*:*_1_*:*_1398592797_*|*_10007_*:*_1_*:*_6854813_*|*_3_*:*_1_*:*_48933090_*|*_5_*:*_1_*:*_0_*|*_10011_*:*_1_*:*_22474630_*|*_10006_*:*_1_*:*_251574260"}], "description": "Hi,\n\nGreat tool, thanks for making this available.\n\nI've a catalog which has an element like this:\n\n{noformat}\n        \"type\": \"Apache::Listen\",\n        \"title\": 80,\n        \"tags\": [\"apache::listen\",\"apache\",\"listen\",\"80\",\"apache::vhost\",\"vhost\",\"default\",\"class\",\"node\"],\n        \"exported\": false\n{noformat}\n\nNotice the title is an integer, it's created by the Apache forge module (init.pp)\n\nHaving this as an integer doesn't seem to be an issue when I apply the catalog to a host, however during a puppet preview run I get:\n\n'Error: Expected an instance of String. Got Fixnum'\n\nShould the schema provided with catalog_preview be updated to allow title to be a string or integer, or is this a problem elsewhere in the ecosystem? For example, if I quote 'port => \"80\"' in the Apache module, this fixes the problem with catalog_preview.\n\n\n\n", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32657", "fixedVersions": ["PRE 2.2.0"], "id": "32657", "issueType": "Bug", "key": "PRE-108", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "qm:f7b4bc64-445a-440e-8354-a55854c39cee:6849277a-4d18-4894-89b0-5ff545b54e1b", "resolution": "Fixed", "resolutionDate": "2016-08-01T14:47:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Schema needs updating so resource $title can be integers?", "timeSpent": "PT0S", "updated": "2016-08-01T14:47:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": "623cfdfb8d8b9c0068b93e3c", "attachments": [], "comments": [{"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "merged to master at: 92eb76c", "created": "2016-07-18T02:24:00.000000"}], "components": [], "created": "2016-07-08T09:43:00.000000", "creator": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "customFieldValues": [{"fieldName": "CI Pipeline/s", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiselect", "value": "modules"}, {"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@1937d157"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hyn2lr:"}, {"fieldName": "Release Notes", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Not Needed"}, {"fieldName": "Release Notes Summary", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "Fix of problem in new feature (overview has new ordering of node output)"}, {"fieldName": "Scope Change Category", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Found"}, {"fieldName": "Scope Change Reason", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textfield", "value": "TODO list is empty."}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "1.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "18/Jul/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "10008_*:*_1_*:*_215074804_*|*_1_*:*_1_*:*_417309753_*|*_10007_*:*_1_*:*_420349993_*|*_3_*:*_1_*:*_5248_*|*_5_*:*_1_*:*_0_*|*_10011_*:*_1_*:*_78605172"}], "description": "https://jenkins-modules.puppetlabs.com/view/2.%20linux%20only/view/catalog_preview/view/master/job/platform-lang_puppetlabs-catalog-preview_unit-module_master/\n\nruby 1.9.3 job:\n\n{code}\n22:16:14 rspec ./spec/unit/overview_report_spec.rb:52 # PuppetX::Puppetlabs::Migration::OverviewModel::Report when reporting can produce a text with top ten nodes\n22:16:14 rspec ./spec/unit/overview_report_spec.rb:62 # PuppetX::Puppetlabs::Migration::OverviewModel::Report when reporting can produce a text with all nodes\n22:16:14 rspec ./spec/unit/preview_spec.rb:304 # Puppet::Application::Preview when running with --migrate fails when no valid facts exist for a node\n{code}", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32672", "fixedVersions": ["PRE 2.2.0"], "id": "32672", "issueType": "CI Blocker", "key": "PRE-107", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "resolution": "Fixed", "resolutionDate": "2016-07-21T11:59:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Ensure that the order is consistent when reporting nodes", "timeSpent": "PT0S", "updated": "2016-07-21T11:59:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Ping [~accountid:557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715]", "created": "2016-07-06T02:57:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "is it interesting/important to permute all the tests against each puppet version with and without puppetdb?  \ni feel it might be important, but will double the testing time.  although i don't think that's super impactful here.", "created": "2016-07-06T11:48:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Catalog preview is sensitive to both puppet and PDB versions as well as not using PDB. I think that running against the supported PE versions (as that defines a combination of puppet and PDB) and one for puppet without PDB would be ideal.", "created": "2016-07-06T13:48:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "FYI, none of this works against PE (2016.1) either\n{quote} PuppetDB is installed correctly but it's not made aware of the nodes used in the tests{quote}\n\ndoes this mean our \"stand-alone\" nodes we're compiling \"for\" need configuration to talk directly with puppetdb ala puppet apply like this:\nhttps://docs.puppet.com/puppetdb/latest/connect_puppet_apply.html\n?\nit's not clear to me which parts of that is done by the puppetdb module.\n\nor can i just add arbitrary nodes to puppetdb (to \"make it aware\")  via the nodes endpoint?\n\nwe're running catalog-preview on the master (sole node in the test setup) but asking for the catalog for nodes with nonsensical names like:\n{{nonesuch, andanother, file_node1, file_node2}}", "created": "2016-07-07T12:15:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "ok.  figured out how to easily add nodes using replace_facts command with puppetdb", "created": "2016-07-07T13:05:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "note, other maint PR should also be merged to clear up CI:\nhttps://github.com/puppetlabs/puppetlabs-catalog_preview/pull/141", "created": "2016-07-07T15:20:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "Maint PR merged and [PR-145|https://github.com/puppetlabs/puppetlabs-catalog_preview/pull/145] merged to master at [8078394|https://github.com/puppetlabs/puppetlabs-catalog_preview/commit/8078394dae3f7504ee35c73e76814a765dce3a2c].", "created": "2016-07-07T23:26:00.000000"}], "components": ["QA"], "created": "2016-07-05T23:58:00.000000", "creator": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Acceptance Criteria", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "- That PuppetDB is correctly setup in both 3.x and 4.x environments.\n- The node information concerning nodes used in compiles where the expected result is that the compilation succeeds, are added to PuppetDB."}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@284f4eb2"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hyn2lj:"}, {"fieldName": "Scope Change Category", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Found"}, {"fieldName": "Scope Change Reason", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textfield", "value": "blocking development on in-sprint tickets"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "1.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "06/Jul/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "10008_*:*_2_*:*_1089507829_*|*_1_*:*_1_*:*_133506608_*|*_10007_*:*_1_*:*_29290905_*|*_3_*:*_1_*:*_8122797_*|*_5_*:*_1_*:*_0_*|*_10011_*:*_2_*:*_161991"}], "description": "The catalog-preview acceptance tests doesn't set up PuppetDB correctly.\n\nWhen using 3.x, PuppetDB is not correctly installed. It ends up under {{/opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/}} while puppet on the other hand is installed under {{/usr/share/ruby/vendor_ruby/puppet}}. Consequently, when running tests for 3.x, PuppetDB is not detected and the tests that should have involved it therefore succeeds.\n\nWhen using 4.x, PuppetDB is installed correctly but it's not made aware of the nodes used in the tests. It's thus impossible to use code that relies on PuppetDB to deliver node information (this blocks PRE-95).", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32756", "fixedVersions": [], "id": "32756", "issueType": "Bug", "key": "PRE-106", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Major", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "resolution": "Fixed", "resolutionDate": "2016-07-20T14:08:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Test harness for catalog-preview acceptance tests is broken.", "timeSpent": "PT0S", "updated": "2016-07-20T14:08:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "merged to master: 615c310", "created": "2016-07-01T08:33:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "validated on redhat7 against master SHA: 4d1cac25f26805d4acd615fa70f68ed7a9b153ac\n{code}\n  \"preview\": {\n    \"compilation_errors\": [\n      {\n        \"manifest\": \"/tmp/preview_broken_test.WJUzWO/environments/test/manifests/init.pp\",\n        \"nodes\": [\n          \"nonesuch\",\n          \"andanother\"\n        ],\n        \"errors\": [\n          {\n            \"message\": \"Illegal attempt to assign to 'a Name'. Not an assignable reference\",\n            \"issue_code\": \"ILLEGAL_ASSIGNMENT\",\n            \"line\": 3,\n            \"pos\": 5\n          }\n        ]\n      }\n    ],\n    \"error_count_by_issue_code\": [\n      {\n        \"issue_code\": \"ILLEGAL_ASSIGNMENT\",\n        \"count\": 2,\n        \"manifests\": {\n          \"/tmp/preview_broken_test.WJUzWO/environments/test/manifests/init.pp\": [\n            \"3:5\"\n          ]\n        }\n      }\n    ]\n  }\n}\n{code}", "created": "2016-07-07T15:41:00.000000"}], "components": ["CLI"], "created": "2016-06-29T16:43:00.000000", "creator": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Acceptance Criteria", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "- Overview report should eliminate duplicate positions in the report for each manifest under the 'error_count_by_issue_code' key.\n- The uniqueness should also apply to the issues reported under 'compilation_errors'.\n"}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@54f7f8c5"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz7af3:"}, {"fieldName": "Release Notes", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Bug Fix"}, {"fieldName": "Release Notes Summary", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "The overview report contained counts where the same error/warning was included more than once."}, {"fieldName": "Scope Change Category", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Found"}, {"fieldName": "Scope Change Reason", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textfield", "value": "TODO list was empty and PRE tickets have priorty"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "1.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "01/Jul/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "10008_*:*_1_*:*_361738379_*|*_1_*:*_1_*:*_43202233_*|*_10007_*:*_1_*:*_91863978_*|*_3_*:*_1_*:*_8375375_*|*_5_*:*_1_*:*_0_*|*_10011_*:*_1_*:*_182501133"}], "description": "Currently I am noticing that the line and position for the manifests breakdown has massive duplication , I am guessing this each nodes line and position\n\n{code}\n26026       },\n26027       {\n26028         \"issue_code\": \"MIGRATE4_REVIEW_IN_EXPRESSION\",\n26029         \"count\": 107,\n26030         \"manifests\": {\n26031           \"/opt/puppet/share/puppet/modules/pe_concat/manifests/fragment.pp\": [\n26032             \"93:20\",\n26033             \"93:20\",\n26034             \"93:20\",\n26035             \"93:20\",\n26036             \"93:20\",\n26037             \"93:20\",\n26038             \"93:20\",\n26039             \"93:20\",\n26040             \"93:20\",\n26041             \"93:20\",\n26042             \"93:20\",\n26043             \"93:20\",\n26044             \"93:20\",\n26045             \"93:20\",\n26046             \"93:20\",\n26047             \"93:20\",\n26048             \"93:20\",\n26049             \"93:20\",\n26050             \"93:20\",\n26051             \"93:20\",\n26052             \"93:20\",\n26053             \"93:20\",\n26054             \"93:20\",\n26055             \"93:20\",\n26056             \"93:20\",\n26057             \"93:20\",\n26058             \"93:20\",\n26059             \"93:20\",\n26060             \"93:20\",\n\n{code}\n\nHowever this duplication serves no useful purpose and given this is an array we should probably just .unique it since we already have a \"count\" key for the int count of the array.", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32705", "fixedVersions": ["PRE 2.2.0"], "id": "32705", "issueType": "Improvement", "key": "PRE-105", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "resolution": "Fixed", "resolutionDate": "2016-07-07T15:44:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "manifests key should uniqued in overview output", "timeSpent": "PT0S", "updated": "2016-07-07T15:44:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": "623cfdfb8d8b9c0068b93e3c", "attachments": [], "comments": [{"author": "557058:b3e6b0df-198d-45f8-9ba5-d41f90e80ced", "body": "[~accountid:557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715], can you review this PR:\nhttps://github.com/puppetlabs/puppetlabs-catalog_preview/pull/153", "created": "2016-07-22T15:58:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "this is blocked by the risk of the release.  no merge until post-release.  its features have been validated by [~accountid:557058:b3e6b0df-198d-45f8-9ba5-d41f90e80ced] in other tickets.", "created": "2016-07-25T16:47:00.000000"}, {"author": "557058:b3e6b0df-198d-45f8-9ba5-d41f90e80ced", "body": "This is failing in CI as seen here:\nhttps://jenkins-modules.puppetlabs.com/view/2.%20linux%20only/view/catalog_preview/view/catalog_preview%20-%20master/job/platform-lang_puppetlabs-catalog-preview_intn-sys_full-pe-3.8.x-master/20/PLATFORM=centos6-64mdca,WORKER_LABEL=beaker/consoleFull", "created": "2016-08-09T17:47:00.000000"}, {"author": "557058:b3e6b0df-198d-45f8-9ba5-d41f90e80ced", "body": "[~accountid:557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715], I have submitted [PR -163|https://github.com/puppetlabs/puppetlabs-catalog_preview/pull/163] to address the CI failures addressed by the tests. Three cases are still failing, but they appear to be failing because the facts are being looked up for inactive nodes that are not being properly skipped as expected.\n\ncc [~accountid:557058:c7e2df03-377d-4bf0-9407-106b8483430d]", "created": "2016-08-09T18:04:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "I think it's safe to say that this ticket is blocked by PRE-122.", "created": "2016-08-12T01:14:00.000000"}], "components": ["QA"], "created": "2016-06-29T14:18:00.000000", "creator": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Acceptance Criteria", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "* That the flag --[no-]skip-inactive-nodes (default true) makes catalog preview skip over nodes that are given and found to be inactive by puppetdb.\n* The flag only has effect if the node terminus is puppetdb\n* If flag is false a diff compilation is made for all given nodes even if they are inactive. (As a consequence, these nodes may result in errors if there are no facts for them)."}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@2cfc3e22"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hymzov:"}, {"fieldName": "Release Notes", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Not Needed"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "2.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "22/Jul/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "10008_*:*_2_*:*_433745504_*|*_1_*:*_1_*:*_23554_*|*_10007_*:*_3_*:*_265936384_*|*_3_*:*_2_*:*_2327768_*|*_5_*:*_1_*:*_0_*|*_10011_*:*_1_*:*_7315817_*|*_10004_*:*_1_*:*_1183131435_*|*_10006_*:*_1_*:*_165904276_*|*_10005_*:*_1_*:*_1989954545"}], "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32656", "fixedVersions": ["PRE 3.0.0"], "id": "32656", "issueType": "Task", "key": "PRE-104", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "resolution": "Fixed", "resolutionDate": "2016-08-15T10:51:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "acceptance: --skip-inactive-nodes", "timeSpent": "PT0S", "updated": "2016-08-15T10:51:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": "557058:639cd954-0530-45e8-ba35-7be3297421a0", "attachments": [{"attacher": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "created": "2016-06-29T15:27:00.000000", "name": "example.html", "uri": "https://puppet.atlassian.net/rest/api/3/attachment/content/12401"}], "comments": [{"author": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "body": "If you will excuse me linking to ugly code, the original catalog diff tool used these same basic three metrics to assign a node_difference key https://github.com/acidprime/puppet-catalog-diff/blob/master/lib/puppet/catalog-diff/differ.rb#L118 this key was then used in the ordering of arrays. All the mechanics are there in preview, what's missing is using the criteria for the ordering. There was also no concept of issues in the original tool.\n\nSo that said, I think we have a UX question here to decide on , we I think basically have a couple of options if this ticket is accepted:\n\n1. We can use this added,missing,conflicting data ONLY IF the issue count is 0\n\n2. We can allow you to change the sort preference for all_nodes ( I think if you left the issue_count sub keys ) then no data would be lost , except recalculating the original top_ten key by issue becomes harder. \n\n3. We can create an independant key that uses only this criteria only for its sort , then bikeshed on the name for it.\n\n[~accountid:557058:c1e469c7-5baa-49f5-ab2d-334db44048e7] do you have any thoughts here?\n\n\nI am sort of leaning towards two, but it seems like the implementation might need to dictate this a little bit as PRE-101 was able to be solved in the code simply by not truncating the list, this option is going to require a running tally of these three metrics for all nodes.", "created": "2016-06-28T17:28:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Just to make the picture complete - issues are both errors and warnings. For errors there will be no diffs (impossible), but if there are only warnings then there will be a delta (possibly empty, but could contain diffs).\n\nShould \"amount of change\" be calculated in percent? if so, of what - the reported diffs are both at attribute level, at resource level, and edges. Ordering in absolute number of diffs should not be a problem. I see the old code scales the diffs to \"number of titles\" which I take is the number of resources in total in the catalog. That has the potential of showing change in % as being > 100. For that to work it would need to count 1 per resource there is a diff for as opposed to 1 per attribute. Also, edges will screw up the percentage.\n\nNot sure I understand the rationale to scale by number of resources. A catalog with 10 resources, all busted will win over a catalog with 500 resources where 200 are busted. Which one should you focus on?\nAlso considering the type of the busted resources, are they typically of the same type - is a catalog with diffs for many types of higher prio than one that has diffs for fewer types.\n\nWe should indeed order the nodes based on something, but I am beginning to think that it perhaps does not matter that much and that the percentage is just giving a false impression that you are working in the order that is best, where many other orders would get you to the end result just as fast (or faster).\n\nAs I am thinking while typing - I think both errors and warnings (i.e. issue count) should be highest since you have the most information to act on and it is therefore best to start with those.\n", "created": "2016-06-29T14:00:00.000000"}, {"author": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "body": "[~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd] in the old diff tool I provided both lists ( node_differences which was a sum'ed int of add/remove/conflicts ) and the nodes percentages. If the web viewer is any indication , https://github.com/camptocamp/puppet-catalog-diff-viewer/search?utf8=%E2%9C%93&q=node_differences he used the int, not the percentage, the only place he even used the percentage was to provide a graphical bar. So I think both are important to calculate but ordering for my money is still the number. I don't know if there is a right answer on which one to focus on but personally I look at each resource as something I want to manage, so if the order is skewed by the number of resources in the catalog I am fine with that. \n\nI guess a way to look at it is if you imagine getting paid by resource then you ofcourse want the resource to be the governing factor. Ofcourse you don't get paid by resource, but in this case a resource might be a user/package/file. So if to use your example 200 users are going to be affected vs 10 I want to know about 200, the integer not the percentage. \n\nWhile I agree you likely have more information to \"act on\" with issues, there could be a sort of cascade effect that issues won't represent. Given for instance the empty string changes i.e. https://gist.github.com/acidprime/79826edf003db9552b6a if you had a series of resources that were declared by your conditional changes, the \"issue\" will only show you something like \"MIGRATE4_EMPTY_STRING_TRUE\", that problem may effect one nodes resources in a minor way, and anothers in a major way. I would want to start fixing the nodes that are going to have the most changes, the issues will help me fix that given nodes problems, but I am not sure i want to fix all issues first as thats the low hanging fruit, I want this ordered list to show where to start working so I can effect the most change in the smallest amount of time. \n\nThis is colored a little bit by professional services engagements  , for instance I want to help the customer with their harriest problems, while I am onsite so that they can work on low handing fruit themselves. So I don't want a few weeks later (as box did for instance ) for them to hit a major issue with their code because of the future parser. Puppet is a state based engine and each resource is part of that state, so I while issues help track down the root cause of change, I want the diff report to show me how much my state has changed.\n\nOne other thing thats in my mind as I write this, you likely are to have allot of white noise in these reports, for instance i.e. octal mode changes. I don", "created": "2016-06-29T15:26:00.000000"}, {"author": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "body": "Example of the html output referenced in my comment", "created": "2016-06-29T15:27:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Thanks [~accountid:557058:8527c9e8-8e3f-451c-b529-f6fe014233ed] - that helps. I am coming at this only from personal experience with how I attack getting lots of errors/warnings thrown at me. I was not considering the different roles here and getting the most difficult problems out of the way first, leaving the easy to fix stuff for others.\n\nAnd happy to agree on absolute numbers as opposed to percentage.\nSeems sensical to always order them first on number of errors and then on diffs (where an error on a node counts more or less as an infinite number of diffs), then on warnings and last on node name. Or do you want warnings count before diffs ?\n", "created": "2016-06-29T15:49:00.000000"}, {"author": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "body": "So this is I think were we get back to the UX issue. I am not sure I really like combining issue sorting what I am going to start calling diffs (i.e. added_resource_count + missing_resource_count + conflicting_resource_count = diffs ). The way I read your comment above , is that basically we would sort by issues:errors, then if issues = 0 then we sort by diffs, with a possible alternative of issues:errors,issues:warning and then if issues = 0 then we sort by diffs.\n\nThe issue I find with that is that if your are in an environment where every node has at least 1 issue, you never get sorted by diff. So the alternative I think I want to posit here would be the following:\n\nPerhaps we just add an option thats akin to something like sort-by, we default it to the current PRE-101 issue sorting. Allow the user to override it to change the sort order to this diff sorting. Then if possible add the sub keys in both outputs i.e.\nadded_resource_count,missing_resource_count,conflicting_resource_count s\n\n{code}\n\n\"all_nodes\": [\n    {\n      \"name\": \"agiledbprod2.ussl.uhs\",\n      \"issue_count\": 67\n      \"added_resource_count\": 450,\n       \"missing_resource_count\": 0,\n      \"conflicting_resource_count\": 23\n    },\n    {\n      \"name\": \"odsysrvsdbprod1.ussl.uhs\",\n      \"issue_count\": 67\n      \"added_resource_count\": 490,\n       \"missing_resource_count\": 44,\n      \"conflicting_resource_count\": 32\n    },\n    {\n      \"name\": \"boboprod1.pni.b1p3f3dc.ussl.uhs\",\n      \"issue_count\": 65\n      \"added_resource_count\": 490,\n       \"missing_resource_count\": 44,\n      \"conflicting_resource_count\": 32\n    }, \n{code}\n\nThat way no information is lost based on the sort order but users can choose which way  they want to tackle their nodes themselves. This duplicates some of the data in the catalog_diff.json which honestly I don't hate , as knitting this back together again means I have to process the diff on the node the report came from. ", "created": "2016-06-29T16:26:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "I like adding the data to the output. Maybe break out issues into errors and warning counts instead of just issue count. The data is then there to be sliced, sorted and presented. Naturally, the data in the aggregate can only be written in one order. If that is also the default order the information is displayed in (perhaps the only one as ordering quickly becomes a complex thing and you are probably better off using jquery, or for users less experienced with the data model (i.e. most users), a good interactive UI).\n\nFor the order in the data file I proposed that we use multiple sorts: a) errors count, warnings count, and diffs count OR b) errors count, diffs count, and warnings count.\n\nThus\n* nodes with errors do not have diffs - they failed compilation. They come first in the list. They may have warnings in additions to errors. Nodes with same error count are then ordered by number of warnings.\n\nThen one of:\n* either, a) nodes without errors are first ordered on warning count, and then on diff count\n* or b) nodes are ordered on diff count, and if the same diff count, by number of warnings\n ", "created": "2016-06-30T04:10:00.000000"}, {"author": "557058:c1e469c7-5baa-49f5-ab2d-334db44048e7", "body": "I like the idea of splitting issues out into Errors and Warnings as we're likely better off providing more explicit categorizations here for our users to consume. I updated [~accountid:557058:8527c9e8-8e3f-451c-b529-f6fe014233ed] code sample to visualize the latest proposal to split issues out.\n\n{code}\n\"all_nodes\": [\n    {\n      \"name\": \"agiledbprod2.ussl.uhs\",\n      \"error_count\": 23,\n      \"warning_count\": 44,\n      \"added_resource_count\": 450,\n      \"missing_resource_count\": 0,\n      \"conflicting_resource_count\": 23\n    },\n    {\n      \"name\": \"odsysrvsdbprod1.ussl.uhs\",\n      \"error_count\": 15,\n      \"warning_count\": 61,\n      \"added_resource_count\": 490,\n      \"missing_resource_count\": 44,\n      \"conflicting_resource_count\": 32\n    },\n    {\n      \"name\": \"boboprod1.pni.b1p3f3dc.ussl.uhs\",\n      \"error_count\": 15,\n      \"warning_count\": 61,\n      \"added_resource_count\": 490,\n      \"missing_resource_count\": 44,\n      \"conflicting_resource_count\": 32\n    }, \n{code}\n\nWith regard to [~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd] proposed sorting, I'm leaning towards option *B* of 'Errors > Warnings > Diffs', but that might be incongruent with the workflow that [~accountid:557058:8527c9e8-8e3f-451c-b529-f6fe014233ed] mentioned where total diff count might help better focus attention than on Warnings alone. Thoughts?\n\n", "created": "2016-06-30T14:05:00.000000"}, {"author": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "body": "The more I think about, it once the data is broken out, like tyler shows above, and the _count keys are pulled in , its pretty trivial for th user to sort things on those integers. i.e. in my html generator, once the keys are there is simplifies sorting, where having a command line argument to do so is almost not needed as I have all the data and it adds a small amount of time to to process. I think the key was we didn't include those . I really like breaking out the warnings and errors as that was like the first thing I thought about when I saw this output .\n\nAs for the default order (with the subkeys added) I think errors -> warnings -> diffs now makes sense to me for a default.", "created": "2016-06-30T14:13:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "[~accountid:557058:8527c9e8-8e3f-451c-b529-f6fe014233ed] Perfect, so the command line tool just supports that one output and users of the data model can sort any way on errors, warnings, and the three diff counts. Then this sounds like we can write the acceptance criteria.", "created": "2016-06-30T14:35:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "The acceptance criteria does not specify what should happen with the human readable output. At present, it outputs:\n{code}\nAll nodes\n  some.node.name(15)\n  some.other.name(12)\n  ...\n{code}\nwhere the count is the number of issues, not counting log entries. This will be misleading since the sort order now takes log entries (errors and warnings) into account. Presenting all five counters here will be fairly verbose. Should the number reflect the sum of all counters?", "created": "2016-07-01T09:37:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Defer to [~accountid:557058:c1e469c7-5baa-49f5-ab2d-334db44048e7] and [~accountid:557058:8527c9e8-8e3f-451c-b529-f6fe014233ed] on the UX of the output.  However, my 2c:\n\n* Just blurting out numbers would be bad.\n* Summing all of them would be kind of meaningless (but diffs should be summed)\n\nExample with verbose output...\n{code}\nAll nodes\n    some.node.name(errors => 10, warnings => 5, diffs => n/a)\n    fuzzy.node.name(errors => 10, warnings => 1, diffs => n/a)\n    diffuse.node.name(errors => 5, warnings => 10, diffs => n/a)\n    other.node.name(errors => 0, warnings => 8, diffs => 42)\n    blurry.node.name(errors => 0, warnings => 8, diffs => 11)\n    unsharp.node.name(errors => 0, warnings => 1, diffs => 111)\n{code}\n\nOr, with legend in the title:\n{code}\nAll nodes (errors, warnings, diffs)\n    some.node.name(10, 5, n/a)\n    fuzzy.node.name(10, 1, n/a)\n    diffuse.node.name(5, 10, n/a)\n    other.node.name(0, 8, 42)\n    blurry.node.name(0, 8, 11)\n    unsharp.node.name(0, 1, 111)\n{code}\n\nI think I like the legend in the title, and that {{n/a}} is printed for the diff number when diffs are not available.", "created": "2016-07-01T10:03:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "I like that too. Barring objections, I'll go ahead and implement it.", "created": "2016-07-01T15:55:00.000000"}, {"author": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "body": "Yeah I don't honestly care too much about the CLI output, but legend in the title looks cleaner to me. ", "created": "2016-07-01T15:59:00.000000"}, {"author": "557058:c1e469c7-5baa-49f5-ab2d-334db44048e7", "body": "We're starting to use tables on the CLI elsewhere in the product (puppet job and app) to help improve the readability of information that starts to get a bit dense. The amount of information presented to users here definitely needs to be managed and a table format improves skimmability to an extent.\n\nClassic, 'mysql' style table.\n\n{code}\n+-------------------+--------+-----------+-------+\n|       node        | errors |  warnings | diffs |\n+-------------------+--------+-----------+-------+\n| some.node.name    |     10 |         5 | n/a   |\n| fuzzy.node.name   |     10 |         1 | n/a   |\n| diffuse.node.name |      5 |        10 | n/a   |\n| other.node.nam    |      0 |         8 | 42    |\n| blurry.node.nam   |      0 |         8 | 11    |\n| unsharp.node.nam  |      0 |         1 | 111   |\n+-------------------+--------+-----------+-------+\n{code} \n\nSimpler, compact style.\n\n{code}\n        node          errors    warnings   diffs  \n ------------------- -------- ----------- ------- \n  some.node.name          10           5   n/a    \n  fuzzy.node.name         10           1   n/a    \n  diffuse.node.name        5          10   n/a    \n  other.node.nam           0           8   42     \n  blurry.node.nam          0           8   11     \n  unsharp.node.nam         0           1   111    \n{code}", "created": "2016-07-01T16:53:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "The PR went the extra mile and implements the suggested \"simpler, compact style\" table output with the rationale that if other CLI is adopting that, then that should be done here too in the name of consistency.", "created": "2016-07-05T03:42:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Merged to master at: 4d1cac2", "created": "2016-07-05T06:52:00.000000"}, {"author": "557058:639cd954-0530-45e8-ba35-7be3297421a0", "body": "\n{code:title=Test1: all_nodes should contain error_count, warning_count, added_resource_count, missing_resource_count, conflicting_resource_count}\naiz44lhjzoauep9 11:14:35$ puppet preview --preview-environment test nonesuch andanother --nodes /tmp/preview.7CLMt4/nodez --environmentpath /tmp/preview.7CLMt4/environments --view overview-json\n  {\n    \"stats\": {\n      \"node_count\": 4,\n      \"conflicting\": {\n        \"total\": 4,\n        \"percent\": 100.0\n      },\n      \"failures\": {\n  \n      }\n    },\n    \"all_nodes\": [\n      {\n        \"name\": \"andanother\",\n        \"error_count\": 0,\n        \"warning_count\": 0,\n        \"added_resource_count\": 1,\n        \"missing_resource_count\": 1,\n        \"conflicting_resource_count\": 0\n      },\n      {\n        \"name\": \"file_node1\",\n        \"error_count\": 0,\n        \"warning_count\": 0,\n        \"added_resource_count\": 1,\n        \"missing_resource_count\": 1,\n        \"conflicting_resource_count\": 0\n      },\n      {\n        \"name\": \"file_node2\",\n        \"error_count\": 0,\n        \"warning_count\": 0,\n        \"added_resource_count\": 1,\n        \"missing_resource_count\": 1,\n        \"conflicting_resource_count\": 0\n      },\n      {\n        \"name\": \"nonesuch\",\n        \"error_count\": 0,\n        \"warning_count\": 0,\n        \"added_resource_count\": 1,\n        \"missing_resource_count\": 1,\n        \"conflicting_resource_count\": 0\n{code}\n\n{code:title=Test 2: Test the all_nodes sorted by names and have all expected columns: node name, errors, warning, diffs}\nroot@aiz44lhjzoauep9 preview.7CLMt4]# puppet preview --preview-environment production puppet preview --preview-environment test --environmentpath /tmp/preview.7CLMt4/environments/ --view overview file_node1 file_node2 andanother nonesuch\n.....\n  node name   errors  warnings   diffs\n  ---------- -------- -------- --------\n  andanother        0        0        2\n  file_node1        0        0        2\n  file_node2        0        0        2\n  nonesuch          0        0        2\n[root@aiz44lhjzoauep9 preview.7CLMt4]# \n{code}\n\n{code:title=Test 3: Sorting is correct by errors, warnings, and sum of all resource counters}\n[root@aiz44lhjzoauep9 tmp]# puppet preview --preview-environment test --environmentpath /tmp/preview.7CLMt4/environments/ --view overview --last\nStats\n  Total number of nodes: 4, 100.0%\n  Conflicting..........: 1,  25.0%\n  Compliant............: 0,   0.0%\n  Equal................: 1,  25.0%\n\nPreview Errors (by manifest)\n  /tmp/preview_broken_test.4WHrWw/environments/two_errors/manifests/init.pp\n    Nodes..: nonesuch\n    Issues.:\n      ILLEGAL_ASSIGNMENT: 'Illegal attempt to assign to 'a Name'. Not an assignable reference' at line 4, column 5\n  /tmp/preview.7CLMt4/environments/warning/manifests/init.pp\n    Nodes..: file_node1\n    Issues.:\n      UNCLOSED_QUOTE: 'Unclosed quote after \"'\" followed by 'test ...'' at line 5, column 13\n\nPreview Errors (by issue)\n  ILLEGAL_ASSIGNMENT (1)\n    /tmp/preview_broken_test.4WHrWw/environments/two_errors/manifests/init.pp:4:5\n  UNCLOSED_QUOTE (1)\n    /tmp/preview.7CLMt4/environments/warning/manifests/init.pp:5:13\n\nPreview Warnings (by message)\n  danger, will smith (1)\n    \n\nChanges per Resource Type\n  Notify\n    title: 'yay we be the same' (missing, conflicting) at: /tmp/preview.7CLMt4/environments/production/manifests/init.pp:2 on andanother\n    title: 'yay we be the same, but different' (added, compliant) at: /tmp/preview.7CLMt4/environments/test/manifests/init.pp:2 on andanother\n\nChanges of Edges\n  added_edges\n    Class[main] => Notify[yay we be the same, but different] on nodes andanother\n  missing_edges\n    Class[main] => Notify[yay we be the same] on nodes andanother\n\nTop ten nodes with most issues\n  node name   errors  warnings   diffs\n  ---------- -------- -------- --------\n  file_node1        1        0        0\n  nonesuch          1        0        0\n  file_node2        0        1        0\n  andanother        0        0        2\n[root@aiz44lhjzoauep9 tmp]# \n{code}", "created": "2016-07-22T17:59:00.000000"}, {"author": "557058:639cd954-0530-45e8-ba35-7be3297421a0", "body": "Thanks [~accountid:557058:8872d0b6-d198-4e25-92ad-02776be82d59] for helping to review the QA verification", "created": "2016-07-25T11:14:00.000000"}], "components": ["CLI"], "created": "2016-06-28T17:15:00.000000", "creator": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Acceptance Criteria", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "The data model for overview  \"all_nodes\" should contain the following information:\n* error_count\n* warning_count\n* added_resource_count\n* missing_resource_count\n* conflicting_resource_count\n\nThe CLI output of this list should be sorted in order of priority on the following values:\n* error_count\n* warning_count\n* diff_count = added_resource_count + missing_resource_count + conflicting_resource_count\n\nThe List of nodes when presented by the CLI should be in a table with columns for name, error, warning and diffs."}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@52484eed"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hyn2lb:"}, {"fieldName": "Release Notes", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "New Feature"}, {"fieldName": "Release Notes Summary", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "The overview report is now easier to read as it outputs information about nodes (either top-ten with issues, or all) using a table format instead of shrik wrapped/jagged output.\n\nThe aggregate data model that is produced now also contains more data per node:\n* error_count\n* warning_count\n* added_resource_count\n* missing_resource_count\n* conflicting_resource_count\n\nThese added data elements makes it easier to write different kinds of presentations of the data and to search for information."}, {"fieldName": "Scope Change Category", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Found"}, {"fieldName": "Scope Change Reason", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textfield", "value": "Nothing in the TODO list and PRE tickets are prioritized"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "1.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "29/Jun/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "10008_*:*_2_*:*_1322034694_*|*_1_*:*_1_*:*_225973381_*|*_10007_*:*_1_*:*_11287259_*|*_3_*:*_1_*:*_329331364_*|*_5_*:*_1_*:*_0_*|*_10011_*:*_2_*:*_421736248_*|*_10006_*:*_1_*:*_785050"}], "description": "In PRE-101 we added a complete list of nodes sorted by their `\"issue_count\": 65`. While this is great as a MVP, those nodes without an issue accont ( i.e. `\"issue_count\": 0` ) still need to be sorted by their non-issue count integers. Issue only account for \"known\" issues that have our error codes, conflicts in the catalogs are still recorded in the individual nodes catalog_diff.json but are not used when ordering the list. Technically speaking this means the original top ten list was not actually a top ten list but a top ten issues list.  The counts of added_resource_count,missing_resource_count,conflicting_resource_count should be factored in here.\n\n\nI think the real issue is how to meld the two concepts together, we could simply when the issue count is 0 then use the _count keys above. another option is a whole new key that instead of being sorted by issue is sorted using these metrics. Either way the all_nodes key is missing a massive amount of data when simplifying using issues , as we have calculated all the added, missing, conflicting resource counts but not exposed them to determine which nodes actually have the most changes. I think the issue list is still great to have , but the real meat of tool like this needs to be this aggregate, as those tree keys comprise a singular integer that represents how radically different the new catalog has become. \n\nAs stated in PRE-101 comments, the main purpose of this type of list is to allow the user to create a hit list. This hit list would be the nodes (or roles by extension ) that I would begining working together. I want the nodes with the most changes at the top so I can choose where to start. ", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32701", "fixedVersions": ["PRE 2.2.0"], "id": "32701", "issueType": "Improvement", "key": "PRE-103", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "resolution": "Done", "resolutionDate": "2016-07-25T11:14:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "all_nodes key should factor  in *_count keys into it's array order", "timeSpent": "PT0S", "updated": "2018-07-16T17:21:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [], "components": [], "created": "2016-05-31T11:28:00.000000", "creator": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@3d382f99"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz6o9r:"}], "description": "Currently one of the killer features of the preview tool is ability to display issue codes which ( with some work) can get you back to a human readable description of the potential problem. When using the --view overview-json JSON view there is a break down of these issues listed under :\n\n{code}\n  \"preview\": {\n    \"warning_count_by_issue_code\": [\n      {\n        \"issue_code\": \"MIGRATE4_AMBIGUOUS_INTEGER\",\n        \"count\": 4190,\n        \"manifests\": {\n          \"/etc/puppetlabs/puppet/environments/future_production/manifests/compliance.pp\": [\n            \"90:17\",\n            \"90:17\",\n            \"90:17\",\n            \"90:17\",\n            \"90:17\",\n{code}\n\nThe manifest key has an array of the lines, which allows when wanting to display a sort \"top ten\" list of issues to filter down and unique the manifest and its respective line position. Whats missing is tying  this back to the node that generate one of the respective issues. Given \"90:17\" is listed multiple times, my guess is the node is the thing that accounts for the duplicate, it's just been stripped out of  output. It would be nice if there was a nodes key for each issue that listed which nodes had which issues. \n\n{code}\n  \"preview\": {\n    \"warning_count_by_issue_code\": [\n      {\n        \"issue_code\": \"MIGRATE4_AMBIGUOUS_INTEGER\",\n        \"count\": 4190,\n        \"manifests\": {\n          \"/etc/puppetlabs/puppet/environments/future_production/manifests/compliance.pp\": [\n            \"90:17\",\n            \"90:17\",\n            \"90:17\",\n            \"90:17\",\n            \"90:17\",\n       \"nodes\": [\n         \"foo.bar.com\",\n         \"bar.baz.com\"\n      ],\n{code}\n{code}", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32670", "fixedVersions": [], "id": "32670", "issueType": "New Feature", "key": "PRE-102", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "warning_count_by_issue_code array items should list nodes affected by issue", "timeSpent": "PT0S", "updated": "2016-05-31T12:58:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": "623cfdfb8d8b9c0068b93e3c", "attachments": [{"attacher": "557058:8872d0b6-d198-4e25-92ad-02776be82d59", "created": "2016-07-01T16:23:00.000000", "name": "pre-101-manifest-v3.8", "uri": "https://puppet.atlassian.net/rest/api/3/attachment/content/12397"}], "comments": [{"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "So, [~accountid:557058:8527c9e8-8e3f-451c-b529-f6fe014233ed] any thoughts on UX for this?\n\n* What should the default be (limited to something like 10, a higher number), or all of them?\n* And we need a setting/flag for it if we like to have a cap on the number.\n* Can we use the same cap/flag for similar lists in all reports?\n\nHowever - the real goals are more like answering:\n\n* How many distinct issues do we have?\n* How hard are the issues we have to fix? (How long will it take?)\n* Which node has a representative set of the most common problems?\n* How different are the nodes from each other?\n\nFrom the node list, a user can infer things by knowing if the nodes have the same role or are otherwise very much like each other in content. In the example issues vary around 65 - but the could be very different.\n\nAnother view shows problems per file (you could have 65 problems in one catalog that all comes from the same manifest).\nYou may indeed have a single problem that accounts for all of them. (although unlikely).\n\nAnd there is the problems per resource type.\n\nI think it should be possible to derive more information from all of that data. For instance \"how similar are the nodes\". Maybe organize them based on how they are classified (from the ENC) ? Then show the top node(s) per classification ?\n\nI wonder what we get if we diff the diffs? That should be able to allow knowing the distance between nodes (how alike they are in terms of problems).\n\nSince we have all the migration check issue codes, we know a lot about the types of problems. After having done a few migrations we may even have heuristics that we can codify (File mode is not an octal string, don't match against 'Debian' as a bare word, etc.). This is specific to the migration to future parser though, and requires quite a lot of work to get right. But it may be of value if the output could present a list of well known patterns - the more such patterns you have vs. unknown stuff, the better you can estimate how long it will take to fix.\n\nJust my 2c worth of input.\n\n", "created": "2016-05-18T18:41:00.000000"}, {"author": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "body": "In trying to format this data currently, there are a few things that are very apparent to me.\n\nI think top 10 is probably fine to leave as it's sort of useful to see the worst of the worst offenders.However I think given it's a static key \"top_ten\" we don't wan't to add things like \"top_twenty\" its likely a new key we are taking about.  That would mean we ditch that key all together and change the schema or add a new key for this information which is what I would prefer. I highly doubt many people have built things on this tool as is, but I may be wrong so we should be careful about changing the schema too often either way, is my thinking there.\n\nI think a new key on the same level with all the nodes (with issues) where the user is left to either pass in an integer to control its length *or* the tools consuming the the data do it on their own i.e. [0..50] is fine. The \"original\" diff tool let you pass this sort of thing in and was a sort of general purpose in https://github.com/acidprime/puppet-catalog-diff/blob/master/lib/puppet/face/catalog/diff.rb#L48-L51  that it defaulted to 10 but you could expand it to be 50/60. Given we don't want to remove something like top_ten from the schema quite yet ,leaving that to the post processor is fine, especially if its an array of ALL nodes as they the post processor can choose the length to display. However If we display this in the CLI/ not just the JSON, then we should make it configuration  option so you can cut down on the default CLI output in large installations. \n\nAs for the content, mostly top_ten's more expanded cousin should also be slightly refactored in my opinion. We should leave the top level \"issue_count\" but this aggregate is in real need of the either  issue codes ( as it sounded like [~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd] was noting ) or more of a breakdown. Myopically looking at the overview json, trying to rebuild this style breakdown from just the top_ten is like trying to uncrack an egg. The nodes are often the most nested key in the output and so trying to reconstitute an \"issue_count\": 60 into what type of issues those were is likely easier for the tool to do rather then the postprocessor.\n\nIn other words, I would want from an end user perspective to see a sorted array of my worst nodes, sorted on the general number of issues that were encountered , but I would then want a breakdown (array) that gave the specific issue codes and their count. I think issue_codes are one of the \"killer\" features of this tool compared to its alternatives, and when they were available having them associated to nodes to their error codes is hugely beneficial.\n\nThat said, if issue codes are too specific to migrations (as noted by [~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd], which I sort of agree with, then an alternative would be to mirror the issue breakdown counts in the existing keys we already defined: i.e. conflicting_resources vs missing_resources if I say had 60 missing_resources and 40 conflicting_resources I would want that to be in this new aggregate key so I could then filter the \"hitlist\" of nodes based on what \"type\" of problems I am having. There are a few varieties of this such additions, subtractions, and differences/conflicts. If I could go back in time I would actually try and define these things as issue_codes rather then just the MIGRATE4_ key name space style future parser codes. However these is the current existing keys such as resource_type_changes,conflicting_resources which are a fine standin.\n\nThis is where I should clarify that my overarching need in UX is mostly to give the user a specific list of files and nodes for which they can plan their subsequent work around. The tool is already extremely decent about indexing issues by file/resource. This is only half of the equation in planning the work. You need to not only know which file to edit, but what nodes to test it on. For the resource breakdowns, the tool lets you know the nodes attached to a given resource, but things like top_ten or new key (which the subject of this ticke)t is to assist the UX around a breakdown of nodes to help you target the resources to work on. I want to attack the code based on the nodes with the most changes. A customer example might be simply trying to identify the nodes with the most changes as they are likely to have to largest impact. If nodes 31-60 in my list is actually my dev nodes, then I don't have to worry about those changes as much as node 62-89 which might be my production. If I look at this from the file perspective I don't have this context, only when I look at it from  the node's perspective. \n\nHaving done this sort of thing at relative scale before, in the large aggregate sets, you start to see patterns in the integer of the \"changes\"/issue_count. Thats why the top level key is still beneficial. Granted thats not as good as what [~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd] lays out in terms of being able to filter that list of 300 nodes into their respective \"roles\". However while if we had some ability to filter that list down into the catalog permutations it would cut the signal to noise ratio, normally you actually start to see this pattern with just the integer counts. This is similar to looking at the number of resources in puppet reports in the PE console, you can effectively start to identify nodes with similar catalogs based on their resource count, or in this example their \"issue_count\". nodes with 77 resources changes likely look this,  nodes with 22 changes look like that. Its not a perfect science and more of role breakdown would be better , but just this breakdown has served me fine in the past. \n\nThe breakdown of the type of issue i.e. missing vs conflict ends up being fairly important as well. This is because as you are refactoring code you might be also consolidating resources, or expanding resources alternatively. These are often red herrings in terms of state, an example at box as was that they added a new class for every user they onboarded. This was not needed and so in the refactor/upgrade we cut the resources down by a few thousand. This wasn't a functional change to the state of the system but changed the catalog massively. Without a breakdown of the type of issues, I can't see that 50% of my issues are simply missing_resources. This is why a breakdown is essential. With that  in the breakdown I can likely start to skip over any nodes that have missing_resources: 1478 ( the number of users in the catalog as an example) and exclude them from subsequent reports. That is an important note,while the tool has some ability to exclude resources right now, you would need to identify the red herrings before you could do that. Identification is all about correlating the aggregate patterns of changes ( often indexed by the node count ). \n\nBy having a large aggregate node list with breakdowns, I can spot check the list just based on the count of a given type of issue. If I check 10 nodes that all have exactly 1478 missing resources, I can likely add that to the exclude list to continue to whittle down my \"hit list\" of changes. The reason this does't need to be an exact science is I will run this process many times and so if two catalogs both had identical issue counts of 1554, but actually had different issues, I might miss this on the first few passes but I likely would not after I can only two classes of integers i.e. 1554 and 1478. Given this is an array, its mostly just trying the nodes at the break points between the integers:\n\n1554<- spot check \n1554\n1554\n1554<- test me\n1478<- test me\n1478\n1478<- spot check\n1478\n\nThis is sort of the poor man's role as your sort of assuming all nodes with that 1478 conflicts are more or less the same configuration , this can be further \"spot checked\" by picking another 1478 at random and seeing if its the same. Even when you do have two nodes with the same integer i.e. where two catalogs have exactly the same 1478 issues,you find this out as play tetris with the commits. If you push a change expected to \"fix\" all nodes with 1478 issues and you still see a few, you can then use them as the spot checks. Often in practice though these integers change each commit when you are working on things like \"base\" modules and thus you really just keep doing the pattern above in lieu of looking explicitly for nodes with 1478. Having a role breakdown would be amazing as it would cut this down quite a bit, but given some catalog differences are based on facts, I think this way is actually still a safer bet potentially. ", "created": "2016-05-19T17:25:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "[~accountid:557058:8527c9e8-8e3f-451c-b529-f6fe014233ed] Thanks for all the thought and feedback. That helps a lot. I get how the counts help you.\nWhat I did not consider was that \"top_ten\" was not just a presentation thing. We should probably just do all in the data model and do the 'top-n' as a presentation option. I think we should do this regardless of the rest of the ideas as those may not be easy to implement.\n\nThe thought I had about roles was to use something simple like the set of classes the ENC gives as classes to include. Perhaps just that (not the parameters of those classes). If there is rich classification in the ENC (rather than just managing some basic things that way) that may reduce the initial set quite a lot and allow you to work on the broad problems first.\n\nAfter having posted my previous comment I went on a hunt for multi variable clustering and quickly ended up wishing I had taken more advanced math courses. Some Data Mining and Bayesian Inference methods looked promising - but yeah.... would need a math wiz to help find and construct the most suitable algorithm. So lets stay on the simple path... ", "created": "2016-05-19T18:01:00.000000"}, {"author": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "body": "+ [~accountid:557058:c1e469c7-5baa-49f5-ab2d-334db44048e7] for UX implications", "created": "2016-05-20T16:56:00.000000"}, {"author": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "body": "[~accountid:557058:8527c9e8-8e3f-451c-b529-f6fe014233ed] [~accountid:557058:c1e469c7-5baa-49f5-ab2d-334db44048e7]\n\nWe need to make calls on:\n\n* Name of the flag to include top-n in reports\n* Default value\n* Is there a cap on the value?\n* What would it look like in the report? (mock-up)\n\nIf you need to, please ping [~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd] for clarification, but otherwise this ball's in your court.", "created": "2016-06-01T14:14:00.000000"}, {"author": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "body": "{quote}\nWe need to make calls on:\n{quote}\n\n{quote}\nName of the flag to include top-n in reports\n{quote}\n\nI would just in the overview-json call it simply nodes. It would follow the same structure as top_ten. But be all nodes, sorted by issue integer like top_ten is. \n\n{quote}\nDefault value\n{quote}\n\n{quote}\nIs there a cap on the value?\n{quote}\n\nI would make it all nodes as the MVP and let you truncate it as v2, I mean its a really minor amount of code to truncate it in ruby but adding an option is likely much more plumbing/testing. Truncating is more a convenience and has to with the output of the CLI as it would likely be annoying to have to scroll on a long list. This was the impetus of me making this configurable in the face.\n\n{quote}\nWhat would it look like in the report? (mock-up)\n{quote}\n\nIt would not be in the report per-se, currently the html MVP output tool for instance: Reads the overview json and then walks the preview directories and reads in each catalog diff report for the per node view. The issue is this is alpha numeric not sorted by issue. To sort by issue I would have to read all the diffs back into memory and then sort them, this why the original tool needs to do this, as to arrive at the top ten list, its implied the tool had access to the un truncated list and then truncated. Its likely able to do that by keeping a running tally, this is easy for the original tool to do but anything consuming the overvie-json would need to uncrack the egg to put this sorted list back together and currently given these are all json blobs that means reading them all off disk. There is also not a cohesive way to retrieve the list of nodes passed from the command line using this read off disk methodology. This means if you pass nodes.txt but then walk the disk to grab the diffs, you might grab nodes not in that list. This \"nodes\" key then also services as a artifact of what nodes were actually requested in the overview which is currently not easy to figure out. So this serves both purposes by simply being an untruncated list sorted by issue. \n\n", "created": "2016-06-06T12:21:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "[~accountid:557058:8527c9e8-8e3f-451c-b529-f6fe014233ed] are you fine with the acceptance criteria?", "created": "2016-06-14T16:01:00.000000"}, {"author": "557058:c1e469c7-5baa-49f5-ab2d-334db44048e7", "body": "[~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd] Thanks for taking a stab at the acceptance criteria.\n\nIf we make the proposed data model the standard, regardless of the number of nodes returned, then we might wish to offer a simpler default behavior that requires the absence or presence of a single switch to change rather than dealing with the combination of a switch + boolean flag.\n\nI think this could play out in two ways:\n\n1) Returning the top ten nodes in the overview becomes the default and we have some sort of --all-nodes switch that expands the list to include all nodes.\n\n2) Returning all nodes in the overview remains the default and we have a --top-ten switch that cuts the list to the top ten nodes.\n\nI'm leaning towards #2 as it allows some users to manage the full output on their own (piped to a pager, file, whatever) or simplify the output to something more immediately management. The remaining question here is how much additional work would it be to add the ability to truncate the list at an arbitrary size vs. a fixed size of --top-ten. My worry with --top-ten is that if we want to add an arbitrary truncation feature in the future, we'll now have 2 ways of shortening the list using different commands and arguments which will lead us down the path to some CLI bloat.\n\n[~accountid:557058:8527c9e8-8e3f-451c-b529-f6fe014233ed] Thoughts?\n\n", "created": "2016-06-14T16:38:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "I think it is over engineering - you either want something short (that does not scroll forever), or you want all of it (piped to your own paging thing, a script, etc). If you are really into scripting, you have all of the data in the data file and you can slice and dice it as much as you want - not need for the simple overview presentation to have lots of bells and whistles - especially if those are available in a UX that allows navigation of the data.\n\nHow do you arrive at a particular number? If your last run you had 20, and you run again, the ones not showing could have just as many errors and you really wanted them to be included. How would you know? You then run with the option to see all. Ah, I wanted to see 30, do you then need to run again (since you just got the list of all)? I can imagine if you ran this on thousands (or tens of thousands) of nodes you would want to set some cap - but then it seems like you are doing it wrong - you probably do not have tens of thousands of snowflakes.\n\nHence my simplified proposal - top-ten, or all.\n\nRemember there is also the opportunity to control for which nodes you are compiling in the first place. Lets say you make a first run, you see top ten are all high. You produce the report again with all nodes. You then select the ones that are representative and then continue running with those nodes only as you make changes (it takes too long to run with a very large set anyway).\n\nIf we really want to be able to set 'show top-n', then it should be a value parameter for the beginning defaulting to '10' say, and where 'all' shows the full list.\n", "created": "2016-06-14T16:53:00.000000"}, {"author": "557058:c1e469c7-5baa-49f5-ab2d-334db44048e7", "body": "[~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd] I think we're in agreement on '--top-ten' and 'all' as the most initially useful options and that the top 10 node output should be the default.\n\nBut, I was hoping to avoid overloading --top-ten to accept arguments (True, False) with a default argument (True) as that's more things to learn and can be potentially avoided by setting the right default behavior for the tool. \n\nYour proposal has --top-ten=True by default, so a user has to do --top-ten=False to get the full list when they could just receive the top 10 as the default and receive all nodes via a more directly named switch like --all-nodes that doesn't need an additional boolean argument to function.", "created": "2016-06-14T17:27:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Actually, all boolean flags are {{\\--no-flag}} for false, and {{\\--flag}} for true. So, my proposal is not very good, as getting all would be {{\\--no-topten}}.\nHence, I think we should have what you propose", "created": "2016-06-15T04:58:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Ping [~accountid:557058:c1e469c7-5baa-49f5-ab2d-334db44048e7] - are you ok with the acceptance criteria now?", "created": "2016-06-15T05:04:00.000000"}, {"author": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "body": "--report-all\n\nseems logical to me, I am sort of wondering what the plan will be for the schema in terms of the key name as I assume its a new key name i.e. nodes vs top_ten. Having all nodes showing in the top_ten key seems a little sloppy is I suppose my point. That said the only (3rd) alternative I could give is to add the key always in the json \n\n--overview-json\nbut not in the CLI output \n\n--overview as json implies a post processor rather then a simplified output. I think that violates the CLI and json being kept in sync which seems to be more a less a standard in the tool.\n", "created": "2016-06-15T10:00:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "If we are very conservative we would need to keep the \"topten\" in the data model. We could also bump the major version number and just rename \"topten\" to \"nodes\" and include all. I doubt there is much integration out there using the top-ten data element.\n\nI imagine {{\\-\\-report-all}} would have no effect on the json output - it would either (pending decision wrt data element top-ten) include both data elements ('top-ten', and 'nodes), or just 'nodes', which makes the option a CLI presentation option only.", "created": "2016-06-15T10:52:00.000000"}, {"author": "557058:c1e469c7-5baa-49f5-ab2d-334db44048e7", "body": "I too imagined {{\\-\\-report-all}} as a presentation option only and think we're better off simplifying the scheme to 'nodes' that either contains 10 or 'all' based on the flag. I agree with [~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd] that there's likely little integration in the wild built around the current 'topten' and we hopefully have many more future users of this tool that benefit from the simplification of the schema.\n\n+1 to the updated acceptance criteria.\n+1 to the simplified 'nodes' schema assuming [~accountid:557058:8527c9e8-8e3f-451c-b529-f6fe014233ed] doesn't have objections. Do you know of any customers with integrations using the current top_ten schema?", "created": "2016-06-15T11:42:00.000000"}, {"author": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "body": "[~accountid:557058:c1e469c7-5baa-49f5-ab2d-334db44048e7] I think you mentioned a customer to me, perhaps but other then that I don't anyone actually using it and further the overview json.", "created": "2016-06-15T14:09:00.000000"}, {"author": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "body": "FWIW there is effectively zero outside adoption/integration of this tool and you should feel free to introduce backwards incompatibilities (with corresponding major version bumps for semver compliance) as needed in order to accomplish the UX and product goals we have in mind.", "created": "2016-06-16T01:29:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Ping [~accountid:557058:c7e2df03-377d-4bf0-9407-106b8483430d] I think the acceptance criteria are clear now. Any additional clarification you think is needed?", "created": "2016-06-16T07:48:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "It's clear. Thank you [~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd].", "created": "2016-06-20T01:26:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Merged to master at: ad610fe", "created": "2016-06-21T14:54:00.000000"}, {"author": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "body": "So I have been testing this with a fork of the html output tool and I am getting some results that make me wonder if this is doing what I thought. Is the ordered nature of the all_nodes dictated by `issue_count` only? In my simple environment I have many nodes that don't have \"issues\" but have high `conflicting_resource_count`. However these nodes also have more resources in their catalogs. That said, intuitively I would still want to see the nodes with the highest conflicts ordered above those with smaller conflicts, even when their catalog has more resources. So unless I am missing something right now, this doesn't seem to be the case, the JSON output for `\"issue_count\": 0` nodes is not futher ordered by the add/remove/conflict integers not just the \"known\" issues which is represented by `issue_count`", "created": "2016-06-28T11:48:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "[~accountid:557058:8527c9e8-8e3f-451c-b529-f6fe014233ed] So first order on issue count (number of warnings and errors), and then on number of diffs? (Please create a separate ticket).", "created": "2016-06-28T14:31:00.000000"}, {"author": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "body": "Filed PRE-103", "created": "2016-06-29T12:31:00.000000"}, {"author": "557058:8872d0b6-d198-4e25-92ad-02776be82d59", "body": "[~accountid:557058:8527c9e8-8e3f-451c-b529-f6fe014233ed] [~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd]\nI don't understand the acceptance criteria.  Specifically, I don't know what you mean when refer to the data model. \n\ne.g.: \n  o That the data model produced for the overview contains a list of all nodes with the same data model as for the top 10 nodes (that is, ordered in descending order on number of diffs/errors).\n\nIs the data model just the output that comes the screen?  the json files in /var/opt/lib/pe-puppet/preview/<nodename> ?\n\nAnother criterion indicates the name one (the) data model has changed from 'top-ten' to 'all-nodes'.  Where is a data model's name?  Is that the same as the header above the list of nodes?\n\n\n\n", "created": "2016-06-30T14:50:00.000000"}, {"author": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "body": "[~accountid:557058:8872d0b6-d198-4e25-92ad-02776be82d59] this is in the json output of the tool and the keys mentioned are top level keys in the json hash.\n\n\ni.e. \n\n{code}\n      \"percent\": 0.7\n    }\n  },\n  \"all_nodes\": [\n    {\n      \"name\": \"agiledbprod2.ussl.uhs\",\n      \"issue_count\": 67\n    },\n    {\n      \"name\": \"odsysrvsdbprod1.ussl.uhs\",\n      \"issue_count\": 67\n    },\n    {\n      \"name\": \"boboprod1.pni.b1p3f3dc.ussl.uhs\",\n      \"issue_count\": 65\n    },\n{code}\n\nThis is the output when the flag `--view overview-json` is passed. ", "created": "2016-06-30T17:41:00.000000"}, {"author": "557058:8872d0b6-d198-4e25-92ad-02776be82d59", "body": "Tested on centos-7, PE server + 12 agents, using manifest attached.\n\nWe take the term 'data model' to mean the structured output from\n{code}\npuppet preview --view overview-json\n{code}\nNote that the {{report-all}} option is only compatible with {{view overview}}. With any other view, or no view specified, {{report-all}} generates an error:\n{code}\n[root@xh7truc0hyxv65a ~]# time puppet preview --view overview-json --report-all --be production --pe preview v0btjk7zdqwtbxt.delivery.puppetlabs.net jc7s46c1lwbtmw1.delivery.puppetlabs.net k7z9xlt6ms2gjjd.delivery.puppetlabs.net rvdu2rt23k9n5g1.delivery.puppetlabs.net n048uaquggaotzy.delivery.puppetlabs.net kju51ad3tnrnz35.delivery.puppetlabs.net sjb67edwaw5r5u7.delivery.puppetlabs.net sn0lkmdc8aae1uu.delivery.puppetlabs.net twqufq6xbovy9va.delivery.puppetlabs.net b2jcz47jp4tti6q.delivery.puppetlabs.net cxjeva1hydeawq8.delivery.puppetlabs.net a4j1y1p6cdxmll1.delivery.puppetlabs.net\nError: Could not run: --report-all can only be used in combination with --view overview\n\nreal\t0m1.408s\nuser\t0m1.300s\nsys\t0m0.109s\n[root@xh7truc0hyxv65a ~]# time puppet preview --report-all --be production --pe preview v0btjk7zdqwtbxt.delivery.puppetlabs.net jc7s46c1lwbtmw1.delivery.puppetlabs.net k7z9xlt6ms2gjjd.delivery.puppetlabs.net rvdu2rt23k9n5g1.delivery.puppetlabs.net n048uaquggaotzy.delivery.puppetlabs.net kju51ad3tnrnz35.delivery.puppetlabs.net sjb67edwaw5r5u7.delivery.puppetlabs.net sn0lkmdc8aae1uu.delivery.puppetlabs.net twqufq6xbovy9va.delivery.puppetlabs.net b2jcz47jp4tti6q.delivery.puppetlabs.net cxjeva1hydeawq8.delivery.puppetlabs.net a4j1y1p6cdxmll1.delivery.puppetlabs.net\nError: Could not run: --report-all can only be used in combination with --view overview\n\nreal\t0m1.419s\nuser\t0m1.316s\nsys\t0m0.101s\n[root@xh7truc0hyxv65a ~]#\n{code}\n\nTesting against the acceptance criteria:\n\n-- That the data model produced for the overview contains a list of all nodes with the same data model as for the top 10 nodes (that is, ordered in descending order on number of diffs/errors).\n\n-- The current 'top-ten' data model is renamed to 'all-nodes' (or 'all_nodes', if underscore based naming is used).\n\n-- That the data model always contains information about all nodes even if only \"top ten\" are displayed\n\nThree critera verified: Data model now contains entries for all nodes specified, even if {{report-all}} is not specified, in decending order of issue count.  The default data model is now named 'all_nodes'.\n{code}\n[root@xh7truc0hyxv65a ~]# time puppet preview --view overview-json --be production --pe preview v0btjk7zdqwtbxt.delivery.puppetlabs.net jc7s46c1lwbtmw1.delivery.puppetlabs.net k7z9xlt6ms2gjjd.delivery.puppetlabs.net rvdu2rt23k9n5g1.delivery.puppetlabs.net n048uaquggaotzy.delivery.puppetlabs.net kju51ad3tnrnz35.delivery.puppetlabs.net sjb67edwaw5r5u7.delivery.puppetlabs.net sn0lkmdc8aae1uu.delivery.puppetlabs.net twqufq6xbovy9va.delivery.puppetlabs.net b2jcz47jp4tti6q.delivery.puppetlabs.net cxjeva1hydeawq8.delivery.puppetlabs.net a4j1y1p6cdxmll1.delivery.puppetlabs.net > preview-result\n\nreal\t0m20.764s\nuser\t0m17.050s\nsys\t0m0.705s\n[root@xh7truc0hyxv65a ~]# cat preview-result\n{\n  \"stats\": {\n    \"node_count\": 12,\n    \"conflicting\": {\n      \"total\": 12,\n      \"percent\": 100.0\n    },\n    \"failures\": {\n\n    }\n  },\n  \"all_nodes\": [\n    {\n      \"name\": \"a4j1y1p6cdxmll1.delivery.puppetlabs.net\",\n      \"issue_count\": 13\n    },\n    {\n      \"name\": \"cxjeva1hydeawq8.delivery.puppetlabs.net\",\n      \"issue_count\": 12\n    },\n    {\n      \"name\": \"b2jcz47jp4tti6q.delivery.puppetlabs.net\",\n      \"issue_count\": 11\n    },\n    {\n      \"name\": \"twqufq6xbovy9va.delivery.puppetlabs.net\",\n      \"issue_count\": 10\n    },\n    {\n      \"name\": \"sn0lkmdc8aae1uu.delivery.puppetlabs.net\",\n      \"issue_count\": 9\n    },\n    {\n      \"name\": \"sjb67edwaw5r5u7.delivery.puppetlabs.net\",\n      \"issue_count\": 8\n    },\n    {\n      \"name\": \"kju51ad3tnrnz35.delivery.puppetlabs.net\",\n      \"issue_count\": 7\n    },\n    {\n      \"name\": \"n048uaquggaotzy.delivery.puppetlabs.net\",\n      \"issue_count\": 6\n    },\n    {\n      \"name\": \"rvdu2rt23k9n5g1.delivery.puppetlabs.net\",\n      \"issue_count\": 5\n    },\n    {\n      \"name\": \"k7z9xlt6ms2gjjd.delivery.puppetlabs.net\",\n      \"issue_count\": 4\n    },\n    {\n      \"name\": \"jc7s46c1lwbtmw1.delivery.puppetlabs.net\",\n      \"issue_count\": 3\n    },\n    {\n      \"name\": \"v0btjk7zdqwtbxt.delivery.puppetlabs.net\",\n      \"issue_count\": 2\n    }\n  ],\n\n...\n\n}\n[root@xh7truc0hyxv65a ~]#\n{code}\n\n-- That the option --report-all (that by default is false), when set to true outputs the same info as what is currently displayed for \"top ten\", but for all nodes.\n\n-- That the heading indicates that the list is for all nodes rather than \"top ten\" when --report-all is true.\n\nThese two criteria are also verified.  {{report-all}} reports all nodes and labels column with \"All nodes\" when true, and only the top ten (with the column labeled \"Top ten nodes with most issues\" when false.  \n\n{code}\n[root@xh7truc0hyxv65a ~]# time puppet preview --view overview --report-all --be production --pe preview v0btjk7zdqwtbxt.delivery.puppetlabs.net jc7s46c1lwbtmw1.delivery.puppetlabs.net k7z9xlt6ms2gjjd.delivery.puppetlabs.net rvdu2rt23k9n5g1.delivery.puppetlabs.net n048uaquggaotzy.delivery.puppetlabs.net kju51ad3tnrnz35.delivery.puppetlabs.net sjb67edwaw5r5u7.delivery.puppetlabs.net sn0lkmdc8aae1uu.delivery.puppetlabs.net twqufq6xbovy9va.delivery.puppetlabs.net b2jcz47jp4tti6q.delivery.puppetlabs.net cxjeva1hydeawq8.delivery.puppetlabs.net a4j1y1p6cdxmll1.delivery.puppetlabs.net\nStats\n  Total number of nodes: 12, 100.0%\n  Conflicting..........: 12, 100.0%\n  Compliant............:  0,   0.0%\n  Equal................:  0,   0.0%\n\nChanges per Resource Type\n  File\n\n    ...\n\n\nAll nodes\n  a4j1y1p6cdxmll1.delivery.puppetlabs.net (13)\n  cxjeva1hydeawq8.delivery.puppetlabs.net (12)\n  b2jcz47jp4tti6q.delivery.puppetlabs.net (11)\n  twqufq6xbovy9va.delivery.puppetlabs.net (10)\n  sn0lkmdc8aae1uu.delivery.puppetlabs.net (9)\n  sjb67edwaw5r5u7.delivery.puppetlabs.net (8)\n  kju51ad3tnrnz35.delivery.puppetlabs.net (7)\n  n048uaquggaotzy.delivery.puppetlabs.net (6)\n  rvdu2rt23k9n5g1.delivery.puppetlabs.net (5)\n  k7z9xlt6ms2gjjd.delivery.puppetlabs.net (4)\n  jc7s46c1lwbtmw1.delivery.puppetlabs.net (3)\n  v0btjk7zdqwtbxt.delivery.puppetlabs.net (2)\n\nreal\t0m20.140s\nuser\t0m16.717s\nsys\t0m0.708s\n[root@xh7truc0hyxv65a ~]# time puppet preview --view overview --be production --pe preview v0btjk7zdqwtbxt.delivery.puppetlabs.net jc7s46c1lwbtmw1.delivery.puppetlabs.net k7z9xlt6ms2gjjd.delivery.puppetlabs.net rvdu2rt23k9n5g1.delivery.puppetlabs.net n048uaquggaotzy.delivery.puppetlabs.net kju51ad3tnrnz35.delivery.puppetlabs.net sjb67edwaw5r5u7.delivery.puppetlabs.net sn0lkmdc8aae1uu.delivery.puppetlabs.net twqufq6xbovy9va.delivery.puppetlabs.net b2jcz47jp4tti6q.delivery.puppetlabs.net cxjeva1hydeawq8.delivery.puppetlabs.net a4j1y1p6cdxmll1.delivery.puppetlabs.net\nStats\n  Total number of nodes: 12, 100.0%\n  Conflicting..........: 12, 100.0%\n  Compliant............:  0,   0.0%\n  Equal................:  0,   0.0%\n\nChanges per Resource Type\n  File\n\n    ...\n\n\nTop ten nodes with most issues\n  a4j1y1p6cdxmll1.delivery.puppetlabs.net (13)\n  cxjeva1hydeawq8.delivery.puppetlabs.net (12)\n  b2jcz47jp4tti6q.delivery.puppetlabs.net (11)\n  twqufq6xbovy9va.delivery.puppetlabs.net (10)\n  sn0lkmdc8aae1uu.delivery.puppetlabs.net (9)\n  sjb67edwaw5r5u7.delivery.puppetlabs.net (8)\n  kju51ad3tnrnz35.delivery.puppetlabs.net (7)\n  n048uaquggaotzy.delivery.puppetlabs.net (6)\n  rvdu2rt23k9n5g1.delivery.puppetlabs.net (5)\n  k7z9xlt6ms2gjjd.delivery.puppetlabs.net (4)\n\nreal\t0m18.942s\nuser\t0m15.667s\nsys\t0m0.696s\n[root@xh7truc0hyxv65a ~]#\n{code}", "created": "2016-07-01T16:12:00.000000"}], "components": [], "created": "2016-05-04T23:28:00.000000", "creator": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Acceptance Criteria", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "* That the data model produced for the overview contains a list of all nodes with the same data model as for the top 10 nodes (that is, ordered in descending order on number of diffs/errors).\n* The current 'top-ten' data model is renamed to 'all-nodes' (or 'all_nodes', if underscore based naming is used).\n* That the option {{\\-\\-report-all}} (that by default is {{false}}), when set to {{true}} outputs the same info as what is currently displayed for \"top ten\", but for all nodes.\n* That the heading indicates that the list is for all nodes rather than \"top ten\" when {{\\-\\-report-all}} is {{true}}.\n* That the data model always contains information about all nodes even if only \"top ten\" are displayed\n"}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@3348f469"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hyn41r:"}, {"fieldName": "Release Notes", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "New Feature"}, {"fieldName": "Release Notes Summary", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "Before this, the command 'puppet preview --view overview ...' would only produce results for at most 10 nodes, the ones with the highest issue counts.  This is still true by default, but now, the option --report-all will tell puppet preview to represent all the nodes in the summary list."}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "1.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "19/May/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "10008_*:*_1_*:*_235382014_*|*_1_*:*_1_*:*_1192444941_*|*_10007_*:*_1_*:*_120214899_*|*_3_*:*_2_*:*_470568520_*|*_5_*:*_1_*:*_0_*|*_10011_*:*_1_*:*_633777561_*|*_10004_*:*_2_*:*_2009477176_*|*_10006_*:*_1_*:*_323638696"}], "description": "When running preview in batch mode, there are often \"clusters\" of problems which affect many hosts.\n\nIn order to determine where the noise of known problems stops and real problems start, it'd be helpful to be able to see a histogram of hosts processed and the number of problems on each. This is sort of available at the bottom of the summary output, but it only presents the top 10 hosts. (There may be a way to retrieve this now but I could not find it.) In our sample data, this list looks like:\n\n{code}\n\nTop ten nodes with most issues\n  bgrlhdbprod2.dom.ain (67)\n  ysrvsdbprod1.dom.ain (67)\n  sfsboboprod1.dom.ain (65)\n  bgyeappprod2.dom.ain (64)\n  plqpappprod1.dom.ain (63)\n  blvayljprod2.dom.ain (63)\n  mysqldbprod1.dom.ain (62)\n  nmoirfindce1.dom.ain (62)\n  owafwiponhs2.dom.ain (61)\n  frvblappvis1.dom.ain (61)\n{code}\n\nTotal sample size was 300 nodes, and as you can see these are all within a pretty close range. It'd be helpful to see the rest of the data to say \"well 90% of them have around 60 changes, but these outliers only have 5 or 10 - I bet we can fix the 90% all at once and take a closer look at the ones at the bottom of the list\".  ", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32771", "fixedVersions": ["PRE 2.2.0"], "id": "32771", "issueType": "Improvement", "key": "PRE-101", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "resolution": "Fixed", "resolutionDate": "2016-07-01T16:19:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Provide the complete list on which \"top 10\" is based", "timeSpent": "PT0S", "updated": "2018-07-16T17:21:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "[~accountid:70121:199f31c7-67c7-42b0-b148-18ad3a391ab0] Any thoughts how we should handle this? If we just fail the compilation in both baseline and preview before the actual compilation it is perhaps not that easy to spot (albeit being reported with a specific error). Do you think we need to account for \"invalid fact set\" separately in reports/overviews (e.g. something like \"nodes with invalid facts: 42\") ?\n\nIt may be tricky to make this improvement as the logic may need to go into Puppet - thus requiring a 3.8.x release. (The check for empty / strange fact-set cannot occur until the compilation have picked up the facts which is done by Puppet). Have to investigate to know how hard it will be.", "created": "2016-05-05T08:56:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "I also suspect we may get some kind of default fact set and that it may be only the node specific facts that are not picked up. If so, this will be very hard to detect by just looking at the node.\n\nThing we need to query separately to figure out if the node has checked in or not. And that preview does that. Maybe require that PuppetDB is installed to perform this check? (Otherwise we are back in the indirector swamp and the possibility of getting a default fact set from the server).", "created": "2016-05-19T10:19:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "The easiest thing to do is to fail the baseline compilation if the node did not get the {{osfamily}} fact (i.e. parameter). Then, there will be no preview compilation (if base did not work, it is not meaningful to do the preview). The node will then show up as a node with compilation error instead of showing lots of complicated diffs. The error could say \"facts seems to be missing, no 'osfamily' fact found for the node\".\n\n[~accountid:70121:199f31c7-67c7-42b0-b148-18ad3a391ab0] Does this sound good enough ?", "created": "2016-05-26T08:56:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "[~accountid:557058:c7e2df03-377d-4bf0-9407-106b8483430d] Suggest we go ahead and implement the simple solution. It should not take more than a few lines of code. If that is not good enough we can always do something else.", "created": "2016-05-27T06:22:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Merged to master at: 1b72e26", "created": "2016-05-31T11:34:00.000000"}, {"author": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "body": "Sorry for my slow response, this approach makes sense to me. thanks for moving forward on it! (y)", "created": "2016-05-31T14:22:00.000000"}, {"author": "557058:8872d0b6-d198-4e25-92ad-02776be82d59", "body": "[~accountid:5f581819110ce00069f59a2a]\nHow do I set up a node with an empty factset?  Is there a facts.yaml file I need to empty or remove in order to see the bad behavior?\n", "created": "2016-06-13T13:30:00.000000"}, {"author": "557058:8872d0b6-d198-4e25-92ad-02776be82d59", "body": "[~accountid:70121:199f31c7-67c7-42b0-b148-18ad3a391ab0]\n^\n", "created": "2016-06-13T13:31:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "[~accountid:557058:8872d0b6-d198-4e25-92ad-02776be82d59] If I understood e0 correctly, it would be enough to ask for a compilation of a node that never called in to the master (no cert, no facts).", "created": "2016-06-13T13:40:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "i think you should be able to try to use these facts in a catalog, and then specify a non-existent node (like Henrik said).", "created": "2016-06-15T14:09:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "this is fixed, but i believe is largely superseded by PRE-95:\n\nvalidated on redhat7 against SHA: 4d1cac25f26805d4acd615fa70f68ed7a9b153ac\n{code}\n[root@tilgi6sxeaeawyi ~]# puppet preview --baseline_environment production --preview_environment test --environmentpath /tmp/preview.KMk38k/environments/ nonesuch\n\nCatalog:\n  Versions......: equal\n  Preview.......: equal\n  Tags..........: compared\n  String/Numeric: type significant compare\n\nResources:\n  Baseline......: 6\n  Preview.......: 6\n  Equal.........: 6\n  Compliant.....: 0\n  Missing.......: 0\n  Added.........: 0\n  Conflicting...: 0\n\nAttributes:\n  Equal.........: 15\n  Compliant.....: 0\n  Missing.......: 0\n  Added.........: 0\n  Conflicting...: 0\n\nEdges:\n  Baseline......: 5\n  Preview.......: 5\n  Missing.......: 0\n  Added.........: 0\n\nOutput:\n  For node......: /opt/puppetlabs/server/data/puppetserver/preview/nonesuch\n\nCatalogs for node '#<PuppetX::Puppetlabs::Migration::OverviewModel::Query::Wrapper:0x00000002d0a0c8>' are equal.\n[root@tilgi6sxeaeawyi ~]# puppet preview --baseline_environment production --preview_environment test --environmentpath /tmp/preview.KMk38k/environments/ nonesuch2\nError: Could not retrieve status for nonesuch2: Failed to find '/pdb/query/v4/nodes/nonesuch2' on any of the following 'server_urls': https://tilgi6sxeaeawyi.delivery.puppetlabs.net:8081\nError: Could not run: No compilation can be performed since none of the given node(s) are active\n[root@tilgi6sxeaeawyi ~]# cat /tmp/preview.KMk38k/\nenvironments/ files/        nodez\n[root@tilgi6sxeaeawyi ~]# cat /tmp/preview.KMk38k/environments/production/manifests/init.pp\n\n    notify{\"yay we be the same\":}\n    notify{\"trusted_authenticated\": message=>\"${trusted['authenticated']}\"}\n    notify{\"::puppetversion\":}\n{code}\n\nshould this be failing compilation as implied by the PR?\nthe only facts this node has is \"myfact\" as inserted into puppetdb.  the facts aren't empty, nor nil, but it also does not have {{osfamily}} ", "created": "2016-07-07T15:29:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Think you have to use {{\\--no-skip-inactive-nodes}} in order to turn off the filtering done in PRE-95.\n\nThe main use case is to filter out inactive nodes (nodes that have never checked in, or nodes that are taken out of circulation). After that, if the filter is turned off (use case, the node is marked inactive, but we have facts for it) the error handling needs to be there if the user fat fingers the node and hits a node that is non existing. The original description of this ticket shows what happens then.", "created": "2016-07-07T15:37:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "hmmm, it still checks for the node in puppetdb, i suppose to fail fast?\n{code}\n# nonesuch is in puppetdb with a single fact (probably should change its certname)\n[root@mn5ax3wmff526b4 ~]# puppet preview --baseline_environment production --preview_environment test --environmentpath /tmp/preview.hehKMI/environments/ nonesuch --no-skip-inactive-nodes\n\nCatalog:\n  Versions......: equal\n  Preview.......: equal\n  Tags..........: compared\n  String/Numeric: type significant compare\n\nResources:\n  Baseline......: 6\n  Preview.......: 6\n  Equal.........: 6\n  Compliant.....: 0\n  Missing.......: 0\n  Added.........: 0\n  Conflicting...: 0\n\nAttributes:\n  Equal.........: 15\n  Compliant.....: 0\n  Missing.......: 0\n  Added.........: 0\n  Conflicting...: 0\n\nEdges:\n  Baseline......: 5\n  Preview.......: 5\n  Missing.......: 0\n  Added.........: 0\n\nOutput:\n  For node......: /opt/puppetlabs/server/data/puppetserver/preview/nonesuch\n\nCatalogs for node '#<PuppetX::Puppetlabs::Migration::OverviewModel::Query::Wrapper:0x00000001b08f50>' are equal.\n[root@mn5ax3wmff526b4 ~]# puppet preview --baseline_environment production --preview_environment test --environmentpath /tmp/preview.hehKMI/environments/ nonesuchasfsd --no-skip-inactive-nodes\nError: Could not retrieve status for nonesuchasfsd: Failed to find '/pdb/query/v4/nodes/nonesuchasfsd' on any of the following 'server_urls': https://mn5ax3wmff526b4.delivery.puppetlabs.net:8081\nError: Could not run: No compilation can be performed since none of the given node(s) are active\n\n[root@mn5ax3wmff526b4 ~]# more /opt/puppetlabs/server/data/puppetserver/yaml/node/nonesuch.yaml\n--- !ruby/object:Puppet::Node\nname: nonesuch\nenvironment: :production\nparameters:\n  myfact: myvalue\n  environment: production\n\n[root@mn5ax3wmff526b4 ~]# cat /tmp/preview.hehKMI/environments/test/manifests/init.pp\n\n    notify{\"yay we be the same, but different\":}\n    notify{\"trusted_authenticated\": message=>\"${trusted['authenticated']}\"}\n    notify{\"::puppetversion\":}\n\n\n{code}", "created": "2016-07-07T16:56:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Merged fix (failing tests) to master at: 5693782", "created": "2016-07-18T04:44:00.000000"}, {"author": "557058:639cd954-0530-45e8-ba35-7be3297421a0", "body": "Tested and verify:\n{code:title=Verify better error message}\n[root@ho9tqd1vqdops6z ~]# puppet preview --baseline_environment production --preview_environment test --environmentpath /tmp/preview.Y77Mqj/environments/ not-existing-node\nERROR: Facts seems to be missing. No 'osfamily' fact found for node 'not-existing-node'\nNode not-existing-node failed baseline compilation.\n{code}\n{code:title=Verify it fails fast right on the baseline compilation}\n[root@ho9tqd1vqdops6z not-existing-node]# pwd\n/var/opt/lib/pe-puppet/preview/not-existing-node\n[root@ho9tqd1vqdops6z not-existing-node]# cat baseline_log.json | python -mjson.tool\n[\n    {\n        \"level\": \"err\", \n        \"message\": \"Facts seems to be missing. No 'osfamily' fact found for node 'not-existing-node'\", \n        \"source\": \"Puppet\", \n        \"tags\": [\n            \"err\"\n        ], \n        \"time\": \"2016-07-26T14:31:01.402797343-07:00\"\n    }\n]\n[root@ho9tqd1vqdops6z not-existing-node]# \n{code}\n\n{code:title=Verify there is no preview compilation, no log recorded}\n/var/opt/lib/pe-puppet/preview/not-existing-node\n[root@ho9tqd1vqdops6z not-existing-node]# cat preview_log.json \n[\n]\n[root@ho9tqd1vqdops6z not-existing-node]#\n{code}\n", "created": "2016-07-26T16:09:00.000000"}, {"author": "557058:639cd954-0530-45e8-ba35-7be3297421a0", "body": "Based on the above test results, I am resolving this ticket, feel free to bring it back to testing if you think it needs to be tested with different scenarios.", "created": "2016-07-27T09:07:00.000000"}], "components": [], "created": "2016-05-04T23:11:00.000000", "creator": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@1dc3e655"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hyn2kf:"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "1.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "05/May/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "10008_*:*_2_*:*_368847137_*|*_1_*:*_1_*:*_35095484_*|*_10007_*:*_2_*:*_99139693_*|*_3_*:*_2_*:*_1211697272_*|*_5_*:*_1_*:*_0_*|*_10011_*:*_3_*:*_3336744212_*|*_10004_*:*_1_*:*_13475009_*|*_10006_*:*_2_*:*_327397794_*|*_10005_*:*_1_*:*_1814548543"}], "description": "When running catalog preview for a node which does not have a valid factset, either from puppetdb or from the yaml cache, preview attempts to compile anyway. This causes errors which only come from the actual code such as empty/missing variable values, which are hard to debug. Some sanity check to make sure basic facts like 'osfamily' or 'hostname' existed from the retrieved facts would help avoid rabbit holes of debugging:\n\n{code}\n[root@pe-384-master application]# puppet preview --baseline_environment production --preview_environment future --migrate 3.8/4.0 nonexistentnode.domain\nWARNING: Could not look up qualified variable '::puppetversion';\nWARNING: Host is missing hostname and/or domain: nonexistentnode.domain\nERROR: Unsupported OS at /etc/puppetlabs/puppet/environments/production/modules/selinux/manifests/params.pp:23 on node nonexistentnode.domain\nERROR: Unsupported OS at /etc/puppetlabs/puppet/environments/production/modules/selinux/manifests/params.pp:23 on node nonexistentnode.domain\nOutput:\n  For node......: /var/opt/lib/pe-puppet/preview/nonexistentnode.domain\n\nNode nonexistentnode.domain failed baseline compilation.\n{code}", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32697", "fixedVersions": ["PRE 2.2.0"], "id": "32697", "issueType": "Bug", "key": "PRE-100", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "resolution": "Fixed", "resolutionDate": "2016-07-27T09:07:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Preview tries to use empty factsets, causing weird errors", "timeSpent": "PT0S", "updated": "2016-07-27T09:07:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "body": "Here's the module team checklist: https://confluence.puppetlabs.com/pages/viewpage.action?spaceKey=ENG&title=Module+Release+Checklist\n\n", "created": "2016-04-29T09:10:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "README, CHANGELOG  and metadata files updated in preparation for the release of 2.1.0", "created": "2016-04-30T19:56:00.000000"}, {"author": "557058:c9e9d862-990b-48eb-b4e3-2e4daf1e6920", "body": "AFAICT there's nothing more for us to do. Release ticket is at FM-5176.", "created": "2016-05-02T12:37:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Waiting for module to be released", "created": "2016-05-04T12:56:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Resolved since the corresponding release ticket is now resolved and 2.1.0 is live on the forge.", "created": "2016-05-09T13:49:00.000000"}], "components": [], "created": "2016-04-20T14:23:00.000000", "creator": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@52aa0507"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hyndv3:"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "1.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "29/Apr/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "1_*:*_1_*:*_288916_*|*_3_*:*_1_*:*_324375374_*|*_5_*:*_1_*:*_0_*|*_10004_*:*_1_*:*_435156557_*|*_10006_*:*_1_*:*_879715793"}], "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32754", "fixedVersions": [], "id": "32754", "issueType": "Task", "key": "PRE-99", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "resolution": "Fixed", "resolutionDate": "2016-05-09T13:48:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "release foss catalog-preview 2.1.0", "timeSpent": "PT0S", "updated": "2016-05-09T13:49:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [], "components": [], "created": "2016-04-06T13:55:00.000000", "creator": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@3f2257a2"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz5i4v:"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}], "description": "i get various confusing errors when specifying an environmentpath to preview that doesn't exist.\n{code}\n[root@pkhwz7yj9whx8nw environments]# puppet preview --preview-environment array $(hostname -f) --environmentpath /tmp/preview.T1hPyQ/environments --diff-array-value --migrate 3.8/4.0\n/usr/share/ruby/vendor_ruby/puppet/defaults.rb:214: warning: Insecure world writable dir /tmp/preview.1dkQTo/environments in PATH, mode 040777\nError: Unknown Puppet subcommand 'preview'\nSee 'puppet help' for help on available puppet subcommands\n{code}\nthe random string T1hPyQ is the part that doesn't exist.  \nwhen i change that to the correct spelling of the path, preview works just fine.\ni suppose this has to do with modulepath searching?\n\n", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32734", "fixedVersions": [], "id": "32734", "issueType": "Bug", "key": "PRE-98", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "preview subcommand not found when specifying an environmentpath that doesn't exist", "timeSpent": "PT0S", "updated": "2016-09-07T16:11:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "body": "Some prior art:\n* Charlie's catalog diff vis: https://confluence.puppetlabs.com/display/~chuck/Files\n* The camptocamp frontend which consumes puppet-catalog-diff output: http://camptocamp.github.io/puppet-catalog-diff-viewer/\n", "created": "2016-03-17T17:33:00.000000"}, {"author": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "body": "Ping [~accountid:557058:684e1700-63fc-4180-8ac6-51c08f6501e9], this is the ticket about catalog preview report improvements, for which we need some design help.", "created": "2016-03-17T17:36:00.000000"}, {"author": "557058:684e1700-63fc-4180-8ac6-51c08f6501e9", "body": "[~accountid:70121:199f31c7-67c7-42b0-b148-18ad3a391ab0] I'll get back to you beginning of next week.", "created": "2016-03-18T16:10:00.000000"}, {"author": "557058:684e1700-63fc-4180-8ac6-51c08f6501e9", "body": "[~accountid:70121:199f31c7-67c7-42b0-b148-18ad3a391ab0]: [~accountid:557058:c1e469c7-5baa-49f5-ab2d-334db44048e7] is your UX lead for this, both design and research.", "created": "2016-03-22T09:33:00.000000"}], "components": [], "created": "2016-03-17T17:30:00.000000", "creator": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@3e68d4f3"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz54sn:"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "18/Mar/16"}], "description": "People who've tried to use the catalog preview to migrate large numbers of nodes to Puppet 4 found the aggregate output hard to understand. The goal of the output should be to guide the reader to the changes that will give them the biggest payoff for their effort. A secondary goal is to provide output which is consumable by less techie folks to that gives an \"executive summary\" at the top indicating how close they are to Puppet 4 language compliance.", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32668", "fixedVersions": [], "id": "32668", "issueType": "New Feature", "key": "PRE-96", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "status": "Open", "statusCategory": "To Do", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Improve aggregate reporting output from catalog preview", "timeSpent": "PT0S", "updated": "2016-09-07T16:11:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "I'm uncertain how to best implement this. There's no enumeration in the node indirector that would give me a list of nodes. Perhaps we could do what a {{puppet cert list --all does}} and not tie this specifically to PuppetDB?", "created": "2016-06-10T09:22:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "There seems to be other PDB issues related to this:\n* Must support the PDB version shipped with Puppet 3.8 (URLs changed later) - the v4 API is supported on PDB 2, but is \"experimental\", and there has been issues fixed since then.\n* Must pick up information about where to call (server where PDB is running) as well as the PDB version.\n* PDB-1595 (query service does not filter out deactivated nodes) - we probably need a query with additional parameters to narrow down the list of nodes or filter the result (v4/nodes endpoint returns deactivation information - https://docs.puppet.com/puppetdb/master/api/query/v4/nodes.html#response-format).\n* Puppet interfaces with PDB via the indirector, and it is PDB that adds the implementation. There is no way to get the node indirection to enumerate available nodes.\n\nThis taken together makes the implementation of this feature snowball...\n\nThomas suggested getting the known certs and use that as a list, but I am not sure that is equivalent to getting the nodes from PDB.\nIf we know the names of the nodes, the rest of the information can be retrieved by existing logic that is aware of the version of PDB and how to query it.\nAlternatively, and what works already is to get the list of nodes independently from PDB and writing them to a file (curl using a suitable query, possibly edit out nodes that are not of interest, then run catalog preview).\n\nPing [~accountid:557058:8527c9e8-8e3f-451c-b529-f6fe014233ed] - how much effort should we spend on this?", "created": "2016-06-10T10:16:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Thomas, it seems we could use part of the logic in place for detection of old PDB (the missing url_path method) together with the information that PDB is used for store configs (i.e. there is a PDB installed). The diff_puppetdb terminus shows how a v4 query is written and executed against the nodes endpoint (the one we have retrieves facts, but it should just be a matter of shortening the URL to just the nodes part).\n\nThat is:\n* if no PDB, error if an attempt is made to use this new feature\n* If PDB is old, use a specific implementation that uses the v4 API with the urls that were then in use\n* If PDB is newer, we need to figure out how to get the first part of the URL (since there is no url_path method in the util that is installed with PDB, but maybe it has other methods that can then be used).\n", "created": "2016-06-10T10:22:00.000000"}, {"author": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "body": "[~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd] yeah I have ran into this deactivation bug in the field. Honestly this ticket is not a huge priority for me. Its a nicety but its not something that can't be scripted around with little effort (unlike say PRE-101). I think the last time I needed to generate a list in the field, I actually read the certs out and then `puppet node status $node` looking for if they are active. So strictly speaking I think this is possible to do by simply querying the nodes itself. Thats a little expensive but its possible to do.\n\n`\nCurrently active\nLast catalog: 2016-06-10T16:48:54.686Z\nLast facts: 2016-06-10T16:48:42.363Z\n`\n\nA simple example of using this and puppet cert and this would basically have the same effect here. Its seems like you could do the same call `puppet node status` is doing behind the scenes. I think IIRC It's just not possible to this in one query. So if it's easy enough to just do a query and then call the node status face/application in ruby I would just do that, its not elegant or efficient though but its better than nothing. Like I said a simple shell example in the readme doing the same thing would be the MVP here.", "created": "2016-06-10T11:20:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "PDB adds a face called {{node}} that returns the status of a given node (it cannot search with wildcard though). The node indirection does not have search at all. Thus, it should be simple to get the status of a node if the node face is present - this eliminates one step from the process.\n\nSo - here is a suggestion:\n* the user writes the list of nodes to a file using one of  2-3 documented examples\n* then preview, if PDB's node face is present, calls {{node status}} on each node via that face, before compiling. If a node is inactive, or does not exist this info is logged for that node, and no preview compilation takes place for it.\n* if the PDB node face is not present, then the compilation proceeds (it will then fail on unreasonable facts return if the node is non existing) - this is existing behaviour in catalog preview.\n\nThe examples should show:\n* using {{puppet list cert --all}} and how to dig out the node names\n* (alternative to puppet list cert) using a PDB 2 version way to query\n* using a pdb query from the command line (for versions of PDB where v4 is supported) - this should show how to filter out inactive nodes (because of PDB-1595) using jquery (or some other method if simpler than jquery).", "created": "2016-06-10T15:48:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "So in essence, your suggestion [~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd], would change this JIRA completely? The only thing that needs to change in the implementation is checking whether a node is active or not? I wonder what happens today if an inactive node is involved. Has anyone tested that? I guess missing nodes will fail on missing facts.\n\nAnother question that comes to mind is if it's OK to skip inactive nodes. I can see use-cases where it would be very valuable to get a diff for nodes even though they are currently not active. Perhaps that should render a flag of it's own {{--[no-]inactive_nodes}}?", "created": "2016-06-13T01:57:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "In essence, I read [~accountid:557058:8527c9e8-8e3f-451c-b529-f6fe014233ed]'s post as that we almost could skip this ticket completely as the list of nodes can be obtained from the list of certs, or from puppet db (if pdb is recent enough). The tricky thing though is knowing if they are historical (inactive) or not. I understand the argument to check an inactive node, and maybe there should be a flag to allow a diff to be made on an inactive, but otherwise fact-wise available node. I proposed the filtering to remove one manual step (that is", "created": "2016-06-13T08:57:00.000000"}, {"author": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "body": "I think doing the activation check automatically makes sense as getting a list of nodes is fairly intuitive, the user only needs to know about the nodes in that case (which they understand as a concept outside of puppet). Activation checking implies they understand the internals of puppetdb and consequences of compiling a catalog for an inactive node. Given puppetdb uses TTLs its more then possible for this to be mostly transparent to the users thus something we should help them out with. \n\nThat said, we likely need to let the user turn this check off as in the case where they have their termius set to use the yaml cache, they might be doing something advanced where they have an empty puppetdb and thus fail the check. It seems like this could be in the error , like when you try to sign a cert with altnames and it shows you the override argument in the error i.e.\n\n{code} Error: not compile catalog for node: xhjfg.foo.com to override this pass --no-check-deactivation {code}\n\nI am not sure I see a huge difference between passing the nodes on the CLI vs the file in terms of turning it off. I might just always do the check unless you turn it off. I say this as the list of nodes comes down to shell logic ( and if you noticed in the README you can pass a file ) and not really your level of puppetdb knowlege. ", "created": "2016-06-15T10:09:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "We would only filter if the terminus in use is puppetdb (that is how we detect if pdb is in use of not for the entire diff compilation).\nAgree we could always filter if puppetdb is in use (irrespective of how the node-names were given). \nGiven that, there should be no need to have an additional flag should it? (ping [~accountid:557058:8527c9e8-8e3f-451c-b529-f6fe014233ed])", "created": "2016-06-15T10:35:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "I have updated the acceptance criteria. Ping [~accountid:557058:8527c9e8-8e3f-451c-b529-f6fe014233ed] (are they ok?), [~accountid:557058:c7e2df03-377d-4bf0-9407-106b8483430d] (are they clear?).\nI will update the ticket title and description when we have agreement on the acceptance criteria.", "created": "2016-06-16T08:00:00.000000"}, {"author": "557058:8527c9e8-8e3f-451c-b529-f6fe014233ed", "body": "I am +1 on the argument name, and it defaulting to true.", "created": "2016-06-16T09:22:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Thomas are you ok with the acceptance critera? If so, I will update the description of this ticket.", "created": "2016-06-16T17:48:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "Yes, it's clear [~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd]. I think the new criteria vouches for a new title as well. \"Skip inactive nodes by default\" or similar. I can't help wonder if this might also be the correct solution for PRE-100?", "created": "2016-06-20T01:31:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "This is different than PRE-100, which is about a node never having called in causing an error and that should fail with meaningful error even if PDB is not in use.", "created": "2016-06-20T04:00:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "What is the desired action when there is no entry in PuppetDB for a given node? Here's a proposal:\n\n1. When PuppetDB doesn't find a node, a warning is printed.\n2. Nodes that are not found by PuppetDB are not compiled.\n3. No flag is needed to control \"not found\" behavior since there's not much point in forcing a compile of a non-existent node.\n\n[~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd], [~accountid:557058:8527c9e8-8e3f-451c-b529-f6fe014233ed], does that sound OK to you?\n\n\n", "created": "2016-06-22T04:02:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "If {{\\--skip-inactive}} is on, non existing, as well as found (but inactive) nodes should simply be skipped. With {{\\--no\\-skip\\-inactive}}, it should compile inactive nodes, and log an error for nodes that are not found (it does not need to compile naturally, but the node needs to show up in the result with that error).\n\nThe rationale is", "created": "2016-06-22T05:10:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "A remark regarding the acceptance criteria where it says \"The flag only has effect if the node terminus is puppetdb\". This is never the case. The node terminus is ''classifier\" in a PE-environment. I suggest that we instead check if the 'node' face has a 'status' action. That action is provided by PuppetDB and preview can use it to obtain the node status.", "created": "2016-06-22T05:26:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Hm, I may have used node-terminus when it should have been the store-configs setting", "created": "2016-06-22T05:31:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Merged to master: fe82156", "created": "2016-06-22T06:30:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "dunno how this made it to testing.  ci is failing:\nhttps://jenkins-modules.puppetlabs.com/view/2.%20linux%20only/view/catalog_preview/view/master/job/platform-lang_puppetlabs-catalog-preview_init-merge_master/37/\nTL:DR:\nthe Gemfile needs updating due to upstream dep changes \n{code}\nGem::InstallError: listen requires Ruby version >= 2.2.3, ~> 2.2.\n05:35:23 An error occurred while installing listen (3.1.5), and Bundler cannot continue.\n{code}\n\nand that's just the init job.  indeed it will fail most of the acceptance tests e.g.:\n{code}\n 30) preview subcommand when using deprecated options should warn that --trusted is deprecated\n      Failure/Error: err = (on master, puppet(\"preview --trusted --preview-environment test --environmentpath #{env_path} --view overview nonesuch\")).stderr\n      Beaker::Host::CommandFailure:\n        Host 'xyl03esjqliq6od.delivery.puppetlabs.net' exited with 1 running:\n         puppet preview --trusted --preview-environment test --environmentpath /tmp/preview.0DpsUg/environments --view overview nonesuch\n        Last 10 lines of output were:\n                Warning: The --trusted option is deprecated and has no effect\n                   (at /opt/puppetlabs/puppet/modules/preview/lib/puppet/application/preview.rb:179:in `main')\n                Error: Could not retrieve status for nonesuch: Failed to find '/pdb/query/v4/nodes/nonesuch' on any of the following 'server_urls': https://xyl03esjqliq6od.delivery.puppetlabs.net:8081\n                Error: Could not run: No compilation can be performed since none of the given node(s) are active\n{code}", "created": "2016-06-29T13:29:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "There's absolutely nothing in the PR that in any way changes requirements on gems or ruby version requirements so whatever it is that causes the above error, I don't think it's related to this JIRA.\n\nThe JIRA is in stage \"In Progress\" with no one assigned to it. [~accountid:557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715] are you doing something with this or waiting for someone else to take any action?", "created": "2016-07-05T04:58:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "[~accountid:557058:c7e2df03-377d-4bf0-9407-106b8483430d], i put it back in doing due to the second part of my comment above:\nthese changes don't pass acceptance tests against foss puppet 4x:\n{code}\n$) BEAKER_setfile=\"spec/integration/nodesets/redhat7-64mda.yaml\" BEAKER_keyfile=\"$HOME/.ssh/id_rsa-acceptance\" be rspec -fd -c spec/integration\n\n[...]\n\n 30) preview subcommand when using deprecated options should warn that --trusted is deprecated\n      Failure/Error: err = (on master, puppet(\"preview --trusted --preview-environment test --environmentpath #{env_path} --view overview nonesuch\")).stderr\n      Beaker::Host::CommandFailure:\n        Host 'udwxmhh1dim2nj1.delivery.puppetlabs.net' exited with 1 running:\n         puppet preview --trusted --preview-environment test --environmentpath /tmp/preview.Crobsd/environments --view overview nonesuch\n        Last 10 lines of output were:\n                Warning: The --trusted option is deprecated and has no effect\n                   (at /opt/puppetlabs/puppet/modules/preview/lib/puppet/application/preview.rb:179:in `main')\n                Error: Could not retrieve status for nonesuch: Failed to find '/pdb/query/v4/nodes/nonesuch' on any of the following 'server_urls': https://udwxmhh1dim2nj1.delivery.puppetlabs.net:8081\n                Error: Could not run: No compilation can be performed since none of the given node(s) are active\n\n      # /home/erict/.rvm/gems/ruby-2.3.0/gems/beaker-2.45.0/lib/beaker/host.rb:351:in `exec'\n      # /home/erict/.rvm/gems/ruby-2.3.0/gems/beaker-2.45.0/lib/beaker/dsl/helpers/host_helpers.rb:83:in `block in on'\n      # /home/erict/.rvm/gems/ruby-2.3.0/gems/beaker-2.45.0/lib/beaker/shared/host_manager.rb:115:in `run_block_on'\n      # /home/erict/.rvm/gems/ruby-2.3.0/gems/beaker-2.45.0/lib/beaker/dsl/patterns.rb:35:in `block_on'\n      # /home/erict/.rvm/gems/ruby-2.3.0/gems/beaker-2.45.0/lib/beaker/dsl/helpers/host_helpers.rb:63:in `on'\n      # ./spec/integration/preview_spec.rb:575:in `block (3 levels) in <top (required)>'\n\nFinished in 1 minute 25.15 seconds (files took 4 minutes 39.7 seconds to load)\n36 examples, 30 failures\n\nFailed examples:\n\nrspec ./spec/integration/preview_spec.rb:282 # preview subcommand should error if using an unsupported --view type with multiple nodes\nrspec ./spec/integration/preview_spec.rb:293 # preview subcommand should output valid json from --view diff\nrspec ./spec/integration/preview_spec.rb:302 # preview subcommand should output valid json from --view overview-json\nrspec ./spec/integration/preview_spec.rb:308 # preview subcommand should output valid json from --view baseline-log\nrspec ./spec/integration/preview_spec.rb:316 # preview subcommand should output valid json from --view preview-log\nrspec ./spec/integration/preview_spec.rb:324 # preview subcommand should produce a report for a successful run with --view overview and --last\nrspec ./spec/integration/preview_spec.rb:345 # preview subcommand should produce a report for a failed run with --view overview\nrspec ./spec/integration/preview_spec.rb:370 # preview subcommand should reconstruct the node list from a previous successful run when using --last\nrspec ./spec/integration/preview_spec.rb:377 # preview subcommand should reconstruct the node list from a previous compile failure when using --last\nrspec ./spec/integration/preview_spec.rb:385 # preview subcommand should produce overview including failed nodes from --last --view overview_json\nrspec ./spec/integration/preview_spec.rb:401 # preview subcommand should --view diff_nodes\nrspec ./spec/integration/preview_spec.rb:409 # preview subcommand should output nothing from --view failed_nodes with no failed nodes\nrspec ./spec/integration/preview_spec.rb:418 # preview subcommand should show the error and the failed nodes with --view failed_nodes\nrspec ./spec/integration/preview_spec.rb:434 # preview subcommand should exit with 2 when baseline compilation fails\nrspec ./spec/integration/preview_spec.rb:442 # preview subcommand should exit with 3 when preview compilation fails\nrspec ./spec/integration/preview_spec.rb:450 # preview subcommand should exit with 4 when -assert equal is used and catalogs are not equal\nrspec ./spec/integration/preview_spec.rb:456 # preview subcommand should exit with 4 when -assert equal is used and catalogs are compliant\nrspec ./spec/integration/preview_spec.rb:462 # preview subcommand should exit with 0 when -assert compliant is used and catalogs are compliant\nrspec ./spec/integration/preview_spec.rb:513 # preview subcommand should exit with 5 when -assert compliant is used and preview is not compliant\nrspec ./spec/integration/preview_spec.rb:223 # preview subcommand when comparing simple catalogs as root, should exit with 0 and produce json logfiles\nrspec ./spec/integration/preview_spec.rb:468 # preview subcommand when using --assert equal with --excludes should exit with 0 when excluding attributes qualified with type, title, and attribute name\nrspec ./spec/integration/preview_spec.rb:473 # preview subcommand when using --assert equal with --excludes should exit with 0 when excluding attributes qualified with type and attribute name\nrspec ./spec/integration/preview_spec.rb:478 # preview subcommand when using --assert equal with --excludes should exit with 0 when excluding conflicting resources qualified with type and title\nrspec ./spec/integration/preview_spec.rb:483 # preview subcommand when using --assert equal with --excludes should exit with 0 when excluding conflicting resources qualified with type\nrspec ./spec/integration/preview_spec.rb:488 # preview subcommand when using --assert equal with --excludes should exit with 0 when excluding missing resources qualified with type and title\nrspec ./spec/integration/preview_spec.rb:494 # preview subcommand when using --assert equal with --excludes should exit with 0 when excluding missing resources qualified with type\nrspec ./spec/integration/preview_spec.rb:500 # preview subcommand when using --assert equal with --excludes should exit with 0 when excluding added resources qualified with type and title\nrspec ./spec/integration/preview_spec.rb:506 # preview subcommand when using --assert equal with --excludes should exit with 0 when excluding added resources qualified with type\nrspec ./spec/integration/preview_spec.rb:554 # preview subcommand when compiling with trusted facts and puppetdb should find the trusted facts\nrspec ./spec/integration/preview_spec.rb:574 # preview subcommand when using deprecated options should warn that --trusted is deprecated\n{code}", "created": "2016-07-05T17:32:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "i removed the reference to this ticket in my PR, you are right, they are unrelated.", "created": "2016-07-05T17:34:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "I looked into this and found that the test-harness doesn't configure PuppetDB correctly when using 3.x (which means that those tests still succeeds since PuppetDB isn't detected) and in 4.x, the nodes for which a compilation is supposed to succeed, aren't added to PuppetDB (they have to be).\n\nSince none of that is caused by this JIRA, I added PRE-106 as a blocker. Putting this one on-hold for now (don't think there's anything wrong with it). It should be retested once PRE-106 is fixed.\n", "created": "2016-07-06T00:03:00.000000"}, {"author": "557058:b3e6b0df-198d-45f8-9ba5-d41f90e80ced", "body": "I may be doing something wrong, put I cannot test the {{--no-skip-inactive-nodes}} functionality due to PRE-115", "created": "2016-07-21T16:33:00.000000"}, {"author": "557058:b3e6b0df-198d-45f8-9ba5-d41f90e80ced", "body": "After discussion with [~accountid:557058:c7e2df03-377d-4bf0-9407-106b8483430d], the solution for the {{--no-skip-inactive-nodes}} functionality is not trivial.\n\nI am removing PRE-115 as a blocker to the {{--skip-inactive-nodes}} functionality. It will have to be noted in the docs that the {{--no-skip-inactive-nodes}} functionality is not present at this time.", "created": "2016-07-22T15:20:00.000000"}, {"author": "557058:b3e6b0df-198d-45f8-9ba5-d41f90e80ced", "body": "Using {{catalog-preview}} at SHA {{e889eee}}, the {{skip--inactive-nodes}} flag succeeds in skipping a node that has been deactivated using {{puppet node deactivate}}.\n\n{code}\n[root@cowlnmi3cj9d5h6 ~]# puppet node status  pl-inactive-node-285064\n\nDeactivated at 2016-07-22T21:25:08.963Z\nNo catalog received\nLast facts: 2016-07-22T21:25:07.999Z\n\ncowlnmi3cj9d5h6.delivery.puppetlabs.net 14:27:34$ puppet preview --skip-inactive-nodes --preview-environment test --environmentpath /tmp/preview.hVw2N9/environments --view baseline pl-inactive-node-285064\n  Notice: Skipping inactive node 'pl-inactive-node-285064'\n  Error: Could not run: No compilation can be performed since none of the given node(s) are active\n{code}", "created": "2016-07-22T15:30:00.000000"}, {"author": "557058:b3e6b0df-198d-45f8-9ba5-d41f90e80ced", "body": "[~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd] can you confirm that the release notes are up to date? I was going to add a note about {{no-skip-inactive-nodes}} not being supported, but it does not align with the currently entered content.", "created": "2016-07-22T15:32:00.000000"}, {"author": "557058:b3e6b0df-198d-45f8-9ba5-d41f90e80ced", "body": "If we are going to ship without {{no-skip-inactive-nodes}}, then we should amend the {{help}} page to reflect that.\n\n{code}\n* --skip-inactive-nodes\n  Skip nodes that are given and found to be inactive. This flag only have effect in a configuration that\n  is using PuppetDB.\n{code}", "created": "2016-07-22T15:35:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Since flag is {{true}} by default, we can just take out the documentation for that option. Does that sound ok?", "created": "2016-07-23T02:03:00.000000"}, {"author": "557058:b3e6b0df-198d-45f8-9ba5-d41f90e80ced", "body": "[~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd] that makes sense to me. I can submit a PR to remove the documentation.", "created": "2016-07-25T09:07:00.000000"}, {"author": "557058:b3e6b0df-198d-45f8-9ba5-d41f90e80ced", "body": "Submitted https://github.com/puppetlabs/puppetlabs-catalog_preview/pull/154", "created": "2016-07-25T09:42:00.000000"}], "components": [], "created": "2016-03-16T15:52:00.000000", "creator": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Acceptance Criteria", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "* That the flag {{\\-\\-\\[no-]skip-inactive-nodes}} (default {{true}}) makes catalog preview skip over nodes that are given and found to be inactive by puppetdb.\n* The flag only has effect if the node terminus is puppetdb\n* If flag is {{false}} a diff compilation is made for all given nodes even if they are inactive. (As a consequence, these nodes may result in errors if there are no facts for them).\n"}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@1d8a09cf"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Highest Test Level", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Acceptance"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hyn2kn:"}, {"fieldName": "Release Notes", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "New Feature"}, {"fieldName": "Release Notes Summary", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "The flag {{\\--env-all-nodes}} makes catalog preview compute the difference between catalogs for all nodes in one environment. This removes the earlier step of having to extract those nodes manually and storing them in a file."}, {"fieldName": "Scope Change Category", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Adopted"}, {"fieldName": "Scope Change Reason", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textfield", "value": "Lifted out of sprint due to decision to delay feature to next release"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "3.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "10/Jun/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "10008_*:*_2_*:*_179233224_*|*_1_*:*_1_*:*_11166_*|*_10007_*:*_3_*:*_188429075_*|*_3_*:*_5_*:*_1764611080_*|*_10009_*:*_1_*:*_240989981_*|*_5_*:*_1_*:*_0_*|*_10011_*:*_3_*:*_1636048048_*|*_10004_*:*_4_*:*_1042416345_*|*_10006_*:*_2_*:*_6433021838"}], "description": "By default, when PDB is the node terminus, catalog preview should skip inactive nodes by asking PDB for the status of the node.\n(Inactive nodes are nodes that exist in the database but are marked inactive).\n\nA flag {{\\-\\-\\[no-]skip-inactive-nodes}} (default {{true}}) makes catalog preview skip over nodes that are given and found to be inactive by puppetdb.\nThe flag only has effect if the node terminus is puppetdb. If the flag is {{false}}, a diff compilation is made for all given nodes even if the are inactive. (As a consequence, these nodes may result in errors if there are no facts for them (PRE-100)).\n\nORIGINAL\n-----\n(The below was the original idea, which was changed to instead obtaining (and possibly pruning) the list of nodes manually, feeding them into catalog preview in a file (already existing feature).\n \nAdd a flag {{\\--env-all-nodes}} that is mutually exclusive with other ways of specifying which nodes to compile diffs for. This options must be combined with {{\\--baseline-environment}} which specifies the environment.\n\nThe set of nodes to operate on should then be extracted from PuppetDB using a query that obtains all nodes in the environment specified by {{--baseline-environment}}. Operation should then continue as if the list of nodes had been manually given.\n\nThe flag {{\\--env-all-nodes}} requires PuppetDB to be available.", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32691", "fixedVersions": ["PRE 2.2.0"], "id": "32691", "issueType": "New Feature", "key": "PRE-95", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "resolution": "Fixed", "resolutionDate": "2016-07-27T14:05:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Skip inactive nodes by default", "timeSpent": "PT0S", "updated": "2016-08-03T17:18:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "At the same time feel free to reduce the help.md to contain only the essential information since having exactly the same information in two places just means more work. The help should be precise and short. Introductory and guide like text should be in the README. \n\nThe command line options with explanation of each should be in both though.", "created": "2016-03-16T06:18:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "merged at: d067c4f", "created": "2016-03-18T17:24:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Moved directly to \"ready for test\" as there is no functionality changed here - only readme text.", "created": "2016-03-18T17:25:00.000000"}], "components": [], "created": "2016-03-16T05:46:00.000000", "creator": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@5c662dad"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz52y7:"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "1_*:*_1_*:*_18749_*|*_10007_*:*_1_*:*_23879190_*|*_3_*:*_1_*:*_4600159_*|*_5_*:*_1_*:*_0_*|*_10011_*:*_1_*:*_416239730_*|*_10006_*:*_1_*:*_186163272"}], "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32785", "fixedVersions": ["PRE 2.1.0"], "id": "32785", "issueType": "Sub-task", "key": "PRE-94", "labels": [], "originalEstimate": "PT0S", "parent": "32722", "parentSummary": "Change all flags to use dash instead of underscore as word separator", "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "resolution": "Fixed", "resolutionDate": "2016-03-23T13:02:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:48 AM", "summary": "Update catalog-preview README.md with dash instead of underscore in flags", "timeSpent": "PT0S", "updated": "2016-03-23T13:02:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Merged to master at: 159c0d7", "created": "2016-03-16T05:44:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "For Testing - this is a documentation change (helpfile update)", "created": "2016-03-16T06:15:00.000000"}], "components": [], "created": "2016-03-15T04:48:00.000000", "creator": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@cf3a4c7"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz529z:"}, {"fieldName": "Release Notes", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Not Needed"}, {"fieldName": "Release Notes Summary", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "Multi-word command line options now use '-' as the word separator.  E.g.: --detailed-exitcodes, --use-nodes.  Before, some options had _ as word separators."}, {"fieldName": "Scope Change Category", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Found"}, {"fieldName": "Scope Change Reason", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textfield", "value": "Need this to be able to negate boolean option --no-diff-array-value in PRE-91"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "1.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "16/Mar/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "10008_*:*_2_*:*_424549822_*|*_1_*:*_1_*:*_39695226_*|*_10007_*:*_1_*:*_45131981_*|*_3_*:*_1_*:*_4892709_*|*_5_*:*_1_*:*_0_*|*_10011_*:*_2_*:*_18719823"}], "description": "Most flags in puppet commands use a dash instead of underscore to separate names. Example\n{code}\n--detailed-exitcodes\n--use-nodes\n--write-catalog-summary\n--allow-dns-alt-names\n--dns-alt-names\n--render-as\n--no-<whatever>\n{code}\nIn fact, the only option I can find in the entire Puppet codebase that uses an underscore is --run_mode (and I imagine that --run-mode will work just as well).\n\nPuppet automatically translates dashes into underscores when creating the symbol that represents the option so this is a no-op from a functional perspective. The documentation for the options should use dashes throughout to be consistent with other Puppet documentation.\n\nAs part of fixing this bug all boolean options should allow a 'no-' prefix, i.e. {{\\-\\-no-diff-string-numeric}}, {{\\-\\-no-skip-tags}}, etc.\n\n\n", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32722", "fixedVersions": ["PRE 2.1.0"], "id": "32722", "issueType": "Bug", "key": "PRE-93", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "resolution": "Fixed", "resolutionDate": "2016-03-21T08:52:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Change all flags to use dash instead of underscore as word separator", "timeSpent": "PT0S", "updated": "2017-08-22T17:49:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "The readme.md is already updated.", "created": "2016-04-30T19:08:00.000000"}], "components": [], "created": "2016-03-09T09:37:00.000000", "creator": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@2c1c5620"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz4yj3:"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "1.0"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "1_*:*_1_*:*_38283_*|*_5_*:*_1_*:*_0_*|*_10006_*:*_1_*:*_4523469206"}], "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32685", "fixedVersions": ["PRE 2.1.0"], "id": "32685", "issueType": "Task", "key": "PRE-92", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "resolution": "Fixed", "resolutionDate": "2016-04-30T19:08:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Update documentation for suppression of [val] vs val in catalog preview diff", "timeSpent": "PT0S", "updated": "2016-04-30T19:08:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [{"attacher": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "created": "2016-04-06T14:01:00.000000", "name": "catalog_diff.json", "uri": "https://puppet.atlassian.net/rest/api/3/attachment/content/12399"}], "comments": [{"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "We have a flag for numeric vs, string that stops those diffs from being reported. We could add a similar flag for value vs. array of same value.\nIn general this is a problem in puppet, and people that want to prevent the unwrapping do things like adding the same value more than once to prevent that from happening. (There are many crazy variations on that theme involving empty arrays).\n\nI think the default should be the way it is", "created": "2016-02-10T10:53:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "For numeric values the flag is --diff_string_numeric and it is false by default.\nWe can add --diff_array_value with a default of true (if we set that to false, we have to do a major release of the tool).\n", "created": "2016-02-10T10:56:00.000000"}, {"author": "557058:79a6b455-622c-4839-88ba-d3ee205f72b0", "body": "[~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd] Yeah that sounds pretty much like what I was thinking off :D glad I made enough sense for it to be apparent.\n", "created": "2016-02-10T11:06:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "[~accountid:557058:79a6b455-622c-4839-88ba-d3ee205f72b0] Note that there is a general way to filter out diffs that are unwanted. It requires a bit more work than just having a flag on the command line. But it allows you to catch value vs. [value] where it actually is a difference. This could perhaps help until there is a new release.\n\nThe filter allows resource type/attributes to be ignored, for one particular resource instance, or for all of that type IIRC.", "created": "2016-02-10T11:13:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "Question.\nThe string_numeric_diff argument is unidirectional. It will consider a string in numeric format from the baseline catalog to be equal to a number in the preview catalog but not the other way around. Should the same be applied to array_value_diff? If the answer is yes, then I would assume that a value in the baseline catalog should be equal to a one element array containing that value in the preview catalog.\n\nPing [~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd]", "created": "2016-03-15T06:01:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Tricky question. \n\nFor numbers the old is more likely to have numbers in string form where it \"actually\" should have been a number. Hence interpreting baseline number in string format as a number. In the unlikely event of the reverse, then that should be reported. So, yes, unidirectional.\n\nThe array problem is that even if you wanted an array (set in source), the result for a one value array is that 3.x unwraps it. And 4.x does not unwrap. Thus, a value {{v}} in baseline should be considered to not be a diff if preview has {{\\[v]}} when the {{\\--diff_array_value}} flag is {{false}}. The reverse is almost impossible to see in practice (going from 3.x to 4.x), and if comparing 4.x to 4.x it should be reported. So, yes, this is also unidirectional.", "created": "2016-03-15T06:49:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "[PR-130|https://github.com/puppetlabs/puppetlabs-catalog_preview/pull/130] is ready to be merged when PRE-93 has been merged.", "created": "2016-03-16T03:16:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Merged to master at: 5dc624e", "created": "2016-03-16T08:04:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "string/numeric comparison has status output in the summary:\n{quote}  String/Numeric: numerically compared{quote}\nshould array/value as well?", "created": "2016-03-30T17:19:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "maybe i'm doing this wrong.\n{code}\nroot@vj7i1r9qxo6k0sy:/tmp/preview.0yAhSa/environments# puppet preview --preview-environment array wat --environmentpath\n/tmp/preview.0yAhSa/environments --no-diff-array-value --migrate 3.8/4.0 --baseline-environment production\n/usr/lib/ruby/vendor_ruby/puppet/defaults.rb:214: warning: Insecure world writable dir /tmp/preview.0yAhSa/environments in PATH, mode 040777\nWarning: Setting templatedir is deprecated. See http://links.puppetlabs.com/env-settings-deprecations\n   (at /usr/lib/ruby/vendor_ruby/puppet/settings.rb:1139:in `issue_deprecation_warning')\n\nCatalog:\n  Versions......: equal\n  Preview.......: conflicting\n  Tags..........: compared\n  String/Numeric: numerically compared\n\nResources:\n  Baseline......: 4\n  Preview.......: 4\n  Equal.........: 3\n  Compliant.....: 0\n  Missing.......: 0\n  Added.........: 0\n  Conflicting...: 1\n\nAttributes:\n  Equal.........: 10\n  Compliant.....: 0\n  Missing.......: 0\n  Added.........: 0\n  Conflicting...: 1\n\nEdges:\n  Baseline......: 3\n  Preview.......: 3\n  Missing.......: 0\n  Added.........: 0\n\nOutput:\n  For node......: /var/lib/puppet/preview/wat\n\nCatalogs for 'wat' are neither equal nor compliant.\n\n\nroot@vj7i1r9qxo6k0sy:/tmp/preview.0yAhSa/environments# puppet preview --preview-environment array wat --environmentpath /tmp/preview.0yAhSa/environments --migrate 3.8/4.0 --baseline-environment production\n/usr/lib/ruby/vendor_ruby/puppet/defaults.rb:214: warning: Insecure world writable dir /tmp/preview.0yAhSa/environments in PATH, mode 040777\nWarning: Setting templatedir is deprecated. See http://links.puppetlabs.com/env-settings-deprecations\n   (at /usr/lib/ruby/vendor_ruby/puppet/settings.rb:1139:in `issue_deprecation_warning')\n\nCatalog:\n  Versions......: equal\n  Preview.......: conflicting\n  Tags..........: compared\n  String/Numeric: numerically compared\n\nResources:\n  Baseline......: 4\n  Preview.......: 4\n  Equal.........: 3\n  Compliant.....: 0\n  Missing.......: 0\n  Added.........: 0\n  Conflicting...: 1\n\nAttributes:\n  Equal.........: 10\n  Compliant.....: 0\n  Missing.......: 0\n  Added.........: 0\n  Conflicting...: 1\n\nEdges:\n  Baseline......: 3\n  Preview.......: 3\n  Missing.......: 0\n  Added.........: 0\n\nOutput:\n  For node......: /var/lib/puppet/preview/wat\n\nCatalogs for 'wat' are neither equal nor compliant.\n\nroot@vj7i1r9qxo6k0sy:/tmp/preview.0yAhSa/environments# cat array/manifests/init.pp\n$array1 = ['array1']\n$array2 = [array1, 'array2']\nnotify{\"arrays\": message => array2}\n\nroot@vj7i1r9qxo6k0sy:/tmp/preview.0yAhSa/environments# cat production/manifests/init.pp\nnotify{\"arrays\": message => \"array1array2\"}\n{code}", "created": "2016-03-30T17:23:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "That would not trigger the difference since it will always interpolate an array into a string. There should be no difference.\nThe diff only occurs when directly assigning an array with one element to a resource attribute.", "created": "2016-03-30T17:31:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "thanks [~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd], i updated the comment above with a better example which i think is doing what you said, but i still don't see a difference in the output summary...\n\nedit: aha.  non-interpolated assignment to an attribute.\n\nedit2: hmmm, that doesn't seem to produce different output either (edited example above).  i also don't understand why this is saying my envs have 4 resources.", "created": "2016-03-30T17:49:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "There is only a difference between a value and an array with a single value. It is the single value array that is problematic.", "created": "2016-03-30T18:29:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "i still can't get this to produce a diff. \nusing this \n{code}\n[root@oqe4f3bgroao5kb environments]# cat array/manifests/init.pp\nfile{'/tmp/array_output': notify => [Notify[a]]}\nfile{'/tmp/array_output2': require => [Notify[a]]}\nnotify {a: require => [Notify[b]] } notify {b: }\nuser{[who]: comment => [yep]}\n{code}\nit says the catalogs are equal, and indeed, look at the catalogs, they are.  both parsers are expanding the array properly.  i've tried it with implied strings, quoted strings, and int values in the arrays.  i've also tried storing the arrays in variables.", "created": "2016-03-31T17:09:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "it appears the code is ignoring the compare of baseline {{String}} to preview {{Numeric}}.\nso i tried this, and i STILL get an equal catalog:\n{code} notify {'yep': message => 42} {code}\nwhen i put \"42\" (quoted) in the baseline manifest", "created": "2016-03-31T17:15:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Ping [~accountid:557058:c7e2df03-377d-4bf0-9407-106b8483430d] what is it [~accountid:557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715] and I are not getting here... The diff has been seen in the wild, not just sure how to produce it or if we made some changes to 3.x so that the diff no longer occurs... (confused).", "created": "2016-03-31T18:19:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "I'm reading the comments and I'm not sure what the problem is.\n\n[~accountid:557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715] writes that \"it appears the code is ignoring the compare of baseline {{String}} to preview {{Numeric}}\", and yes, that is the default behavior. You can make the string/numeric diff count by passing using --diff-string-numeric (default is --no-diff-string-numeric). For the --diff-array-value, it's the opposite where the default is --diff-array-value (report it as a diff). We decided to introduce this inconsistency to not break backward compatibility.\n\nDid that answer the question?\n\n", "created": "2016-04-01T01:08:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "[~accountid:557058:c7e2df03-377d-4bf0-9407-106b8483430d] no, the problem is that we have problems recreating the case that has been reported by users \"that it is annoying to get a diff for \"{{\\[value] vs value}}\". This could be because:\n\n* something is wrong with preview - it compiles the wrong way (produced catalogs do not show the diff)\n* changes were introduced in puppet that made the underlying problem go away in 3.x parser = current\n* the attempts to recreate this are wrong - running the wrong thing etc.\n\nUnfortunately, I think we must drill down into this so we fully understand the issue here. Did we add a flag for something that is not needed? Are we seeing another bug?", "created": "2016-04-01T11:16:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": " [~accountid:557058:79a6b455-622c-4839-88ba-d3ee205f72b0], would it be possible for you to provide version info for both Puppet and Catalog preview that was used by the user?", "created": "2016-04-01T15:18:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "if i put this in the two to compare:\n{code}\nfile{'/tmp/array_output': notify => [Notify[a]]}\nfile{'/tmp/array_output2': require => []}\nfile{'/tmp/array_output3': require => [undef]}\nfile{'/tmp/array_output4': require => undef}\nnotify {a: require => [Notify[b]] } notify {b: }\n{code}\ni get equal manifests\n", "created": "2016-04-05T15:49:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "okay!  not equal manifests:\n{code}\n[root@untj7gyoj3gpyf1 environments]# puppet preview --preview-environment array $(hostname -f) --environmentpath /tmp/preview.T1hPyQ/environments --diff-array-value --migrate 3.8/4.0\n/usr/share/ruby/vendor_ruby/puppet/defaults.rb:214: warning: Insecure world writable dir /tmp/preview.T1hPyQ/environments in PATH, mode 040777\n\nCatalog:\n  Versions......: different\n  Preview.......: compliant\n  Tags..........: compared\n  String/Numeric: numerically compared\n\nResources:\n  Baseline......: 120\n  Preview.......: 130\n  Equal.........: 120\n  Compliant.....: 0\n  Missing.......: 0\n  Added.........: 10\n  Conflicting...: 0\n\nAttributes:\n  Equal.........: 983\n  Compliant.....: 0\n  Missing.......: 0\n  Added.........: 52\n  Conflicting...: 0\n\nEdges:\n  Baseline......: 119\n  Preview.......: 129\n  Missing.......: 0\n  Added.........: 10\n\nOutput:\n  For node......: /var/lib/puppet/preview/untj7gyoj3gpyf1.delivery.puppetlabs.net\n\nCatalogs for 'untj7gyoj3gpyf1.delivery.puppetlabs.net' are not equal but compliant.\n[root@untj7gyoj3gpyf1 environments]# puppet preview --preview-environment array $(hostname -f) --environmentpath /tmp/preview.T1hPyQ/environments --no-diff-array-value --migrate 3.8/4.0\n/usr/share/ruby/vendor_ruby/puppet/defaults.rb:214: warning: Insecure world writable dir /tmp/preview.T1hPyQ/environments in PATH, mode 040777\n\nCatalog:\n  Versions......: different\n  Preview.......: compliant\n  Tags..........: compared\n  String/Numeric: numerically compared\n\nResources:\n  Baseline......: 120\n  Preview.......: 130\n  Equal.........: 120\n  Compliant.....: 0\n  Missing.......: 0\n  Added.........: 10\n  Conflicting...: 0\n\nAttributes:\n  Equal.........: 983\n  Compliant.....: 0\n  Missing.......: 0\n  Added.........: 52\n  Conflicting...: 0\n\nEdges:\n  Baseline......: 119\n  Preview.......: 129\n  Missing.......: 0\n  Added.........: 10\n\nOutput:\n  For node......: /var/lib/puppet/preview/untj7gyoj3gpyf1.delivery.puppetlabs.net\n\nCatalogs for 'untj7gyoj3gpyf1.delivery.puppetlabs.net' are not equal but compliant.\n[root@untj7gyoj3gpyf1 environments]# cat array/manifests/init.pp\nclass{ 'puppetdb': certificate_whitelist => [ $::servername ] }\n{code}\n\nbut... the resources and attributes numbers are the same and don't depend upon the new flag :-(", "created": "2016-04-05T15:59:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "[~accountid:557058:c7e2df03-377d-4bf0-9407-106b8483430d] Can you dive into this? - something is fishy here. Why isn't eric being able to reproduce the problem that was reported? Did we eliminate the need for this flag in a late 3.x change? Is something else going wrong?", "created": "2016-04-05T18:24:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "[~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd], I could, but in order to move forward with this I need an answer from [~accountid:557058:79a6b455-622c-4839-88ba-d3ee205f72b0] regarding what Puppet version and catalog-preview version that was used when the problem manifested itself.  I also need someone to tell me how to access zendesk. As it stands now, I have no chance of reproducing the problem.\n\n[~accountid:557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715], the diff that you managed to get finally, what kind of diff is it? Does it contain array/value diffs at all, or is it something else?\n", "created": "2016-04-06T12:04:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "[~accountid:557058:c7e2df03-377d-4bf0-9407-106b8483430d], sorry i should have mentioned.  diff is based solely on actual catalog differences other than array/value, numerical/string.  it's due to the way puppetdb module installs, i guess.\nattached for reference.", "created": "2016-04-06T14:00:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "OK. So no way to reproduce the problem then, no access to zendesk, and no answer from Adam. I don't know how to proceed so I'm removing myself as assigned to this.", "created": "2016-04-06T14:59:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "[~accountid:557058:c7e2df03-377d-4bf0-9407-106b8483430d] This falls on us I am afraid - is there a problem or not? Do we need the flag or not? Detective work is needed", "created": "2016-04-06T15:17:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "One of Adam's remarks on the zendesk issue caught my attention:\n\n\"I've reviewed the code and data this morning. \nOne thing I did notice is you seem to have 2 versions of the dialog_clientrepo module in the modules folder. \ndialog-clientrepo (v1.0.1) \ndialog-clientrepo (v1.0.0) \nI'm honestly not sure it will course an issue but it will make it hard to identify which version of the module puppet is pulling out because of Ruby.\"\n\nFurther down in the same comment:\n{code}\n\"baseline_value\": \"Class[Clientrepo_pre]\", \n\"preview_value\": [ \n\"Class[Clientrepo_pre]\" \n],\n{code}\nCould it be that the two versions are actually different and that future parser selects one whereas to current parser selects the other? Unfortunately, the module in question doesn't seem to be public (I don't find it at the forge).\n", "created": "2016-04-07T03:24:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "[~accountid:557058:c7e2df03-377d-4bf0-9407-106b8483430d] yes, that could be the cause (two different version, future finds one, current the other), but how does that explain not being able to reproduce that diff - what caused it to unwrap array?\n\nIrrespective of this - it is not worth spending more time on this. Clearly the user scenario has a problem (two versions of the same thing), but that is separate from this issue.\n\nI vote for keeping the feature as merged and then moving on.", "created": "2016-04-14T06:45:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "can't reproduce.  installed puppet 3.4.0.  it also does not appear to expand single arrays differently than 4x.", "created": "2016-04-14T16:45:00.000000"}], "components": [], "created": "2016-02-10T04:08:00.000000", "creator": "557058:79a6b455-622c-4839-88ba-d3ee205f72b0", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@4c26625e"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hyng6f:"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "1.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "10/Feb/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "10008_*:*_2_*:*_608168914_*|*_1_*:*_1_*:*_25551320_*|*_10007_*:*_1_*:*_6960065_*|*_3_*:*_3_*:*_333612804_*|*_5_*:*_1_*:*_0_*|*_10011_*:*_4_*:*_1214809705_*|*_10004_*:*_3_*:*_470901701_*|*_10006_*:*_2_*:*_2911292444_*|*_10005_*:*_1_*:*_89052"}], "description": "Add flag {{\\--diff_array_output}} with a default of {{true}}. When set to false, a diff that is only {{\\[val]}} vs {{val}} the diff should not count as a real diff.\n \nOriginal\n----\nFrom the preview report and catalogue and catalog_diff.json file\nIf you diff the two catalogues you'll see line #40 approx\n\n\n{code:java}\n\"parameters\": { \n\"package_version\": \"1.9.0-1\", \n\"packages\": \"subversion.x86_64\", \n- \"old_version\": \"\", \n- \"require\": \"Class[Clientrepo_pre]\" \n+ \"require\": [ \n+ \"Class[Clientrepo_pre]\" \n+ ] \n} \n},\n\nFrom the actual catalog_diff.json file this is clearer in my opinion in the following json.\n\n\"conflicting_resources\": [ \n{ \n\"type\": \"Class\", \n\"title\": \"Subversion\", \n\"equal_attribute_count\": 5, \n\"added_attributes\": [\n\n], \n\"added_attribute_count\": 0, \n\"missing_attributes\": [ \n{ \n\"name\": \"old_version\", \n\"value\": \"\", \n\"diff_id\": 2 \n} \n], \n\"missing_attribute_count\": 1, \n\"conflicting_attributes\": [ \n{ \n\"name\": \"require\", \n\"baseline_value\": \"Class[Clientrepo_pre]\", \n\"preview_value\": [ \n\"Class[Clientrepo_pre]\" \n], \n\"compliant\": false, \n\"diff_id\": 3 \n} \n], \n\"conflicting_attribute_count\": 1, \n\"diff_id\": 1 \n},\n\n{code}\nand \n\n{code:java}\n'collectives' \n(diff, conflicting) in title: 'Puppet_enterprise::Profile::Mcollective::Agent' at: unknown location on swsrvtest-04.diasemi.com \n{ \n\"name\": \"collectives\", \n\"baseline_value\": \"mcollective\", \n\"preview_value\": [ \n\"mcollective\" \n], \n\"compliant\": false, \n\"diff_id\": 25 \n}\n{code}\n\nThe user basically ad x number of syntax diffs where a string was being produced as a string in a array of 1.\nStrikes me that we could catch these kind of diffs and alert with (diff,syntax) or throw them away entirely, then document to clarify them affectively as warnings.\n\nACCEPTANCE CRITERIA\n----\n* if a an attribute *is assigned an array with a single value* and --diff-array-value is specified, the future/current catalogs should report a diff.\n* Likewise, if --no-diff-array-value is given the same attribute should not be reported as a diff.", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32727", "fixedVersions": ["PRE 2.1.0"], "id": "32727", "issueType": "Improvement", "key": "PRE-91", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:79a6b455-622c-4839-88ba-d3ee205f72b0", "resolution": "Fixed", "resolutionDate": "2016-04-14T16:45:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Add flag to suppress value vs [value] diff to reduce noise", "timeSpent": "PT0S", "updated": "2016-05-11T17:39:00.000000", "votes": "1", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "Catalog Preview works OK without Puppet DB. It will only replace the facts terminus class in case it's already 'puppetdb'. For all other cases it will use the already configured facts terminus. It will hence not error out, gracefully or otherwise, when PuppetDB is not used. Should it?", "created": "2016-03-16T03:28:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Not in the current version. Later it will need to error out as we are adding features that will require PuppetDB. It will probably state a hard requirement on PuppetDB then, so it becomes a moot issue.\n\nIf all works just fine as is without PuppetDB now, then the exploratory testing can be considered done. (All we wanted was for preview to not crash in a spectacular way if there is no PuppetDB). ", "created": "2016-03-16T05:37:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Moved this to Ready for Test, just to let QA have a final think/say on this.", "created": "2016-03-16T05:38:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "we have tests using trusted facts as root/non-root with puppetdb.\nhttps://github.com/puppetlabs/puppetlabs-catalog_preview/blob/master/spec/integration/preview_spec.rb#L550\n\nThese same tests are run against FOSS, but we're also installing/starting puppetdb in that case.\nhttps://github.com/puppetlabs/puppetlabs-catalog_preview/blob/master/spec/spec_helper_integration.rb#L312-L351\n\nwe should probably have some catalogs compared in acceptance that contain \"normal\" facts.  We should probably also test against foss without puppetdb and with puppetdb.\nif i don't hear differently i can ticket those for later", "created": "2016-03-16T10:11:00.000000"}], "components": [], "created": "2016-01-05T18:37:00.000000", "creator": "557058:c9e9d862-990b-48eb-b4e3-2e4daf1e6920", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@25531015"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Highest Test Level", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Acceptance"}, {"fieldName": "QA Risk Probability", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Medium"}, {"fieldName": "QA Risk Severity", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Low"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hynkif:"}, {"fieldName": "Release Notes", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Not Needed"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "3.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "16/Mar/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "1_*:*_1_*:*_4309158395_*|*_5_*:*_1_*:*_0_*|*_10011_*:*_1_*:*_16553108_*|*_10004_*:*_2_*:*_9476737_*|*_10006_*:*_1_*:*_1765391501"}], "description": "Catalog Preview is designed to work with Puppet DB. Before Catalog Preview was open sourced it was guaranteed that Puppet DB was in use (since it always is in PE). Now that Catalog Preview is open sources we need to ensure that Catalog Preview behaves in a reasonable fashion when  Puppet DB is not present. (It is a requirement, so it should error out gracefully).", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32666", "fixedVersions": ["PRE 2.1.0"], "id": "32666", "issueType": "Task", "key": "PRE-90", "labels": [], "originalEstimate": "PT0S", "parent": "32770", "parentSummary": "Prep Open Source Release of Catalog Preview", "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:c9e9d862-990b-48eb-b4e3-2e4daf1e6920", "resolution": "Done", "resolutionDate": "2016-03-16T10:13:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Exploratory test catalog_preview against open source without PDB", "timeSpent": "PT0S", "updated": "2016-04-13T17:43:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:c9e9d862-990b-48eb-b4e3-2e4daf1e6920", "body": "https://github.com/puppetlabs/puppetlabs-catalog_preview/pull/121", "created": "2016-01-05T18:33:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "merged to stable at: 4aeeb25", "created": "2016-01-07T08:02:00.000000"}], "components": [], "created": "2016-01-05T18:26:00.000000", "creator": "557058:c9e9d862-990b-48eb-b4e3-2e4daf1e6920", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@684ba2cc"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz3rq7:"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "1.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "07/Jan/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "10008_*:*_1_*:*_4174294005_*|*_1_*:*_1_*:*_135322527_*|*_5_*:*_1_*:*_0"}], "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32784", "fixedVersions": ["PRE 2.1.0"], "id": "32784", "issueType": "Task", "key": "PRE-88", "labels": [], "originalEstimate": "PT0S", "parent": "32770", "parentSummary": "Prep Open Source Release of Catalog Preview", "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:c9e9d862-990b-48eb-b4e3-2e4daf1e6920", "resolution": "Fixed", "resolutionDate": "2016-02-24T15:33:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:48 AM", "summary": "Update license and metadata.json", "timeSpent": "PT0S", "updated": "2016-04-27T17:27:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "Judging from the code, harmonizing will render the option {{--trusted}} a no-op. I therefore suggest that we keep it and issue a deprecation warning when it's used.\n[~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd], do you agree with this?", "created": "2016-03-14T07:31:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "+1", "created": "2016-03-14T07:36:00.000000"}, {"author": "557058:b3e6b0df-198d-45f8-9ba5-d41f90e80ced", "body": "Validated using {{catalog-preview}} at SHA {{e5abd10f117612e628abf9e8ef4a00bec2026b1d}}.\n\nUsing the {{--trusted}} flag now emits a deprecation warning.\n{code}\n[root@f1sy48dlgvkqq30 modules]# puppet preview --trusted --preview_environment production f1sy48dlgvkqq30.delivery.puppetlabs.net\nWarning: The --trusted option is deprecated and has no effect\n{code}", "created": "2016-03-28T17:11:00.000000"}], "components": [], "created": "2015-12-03T13:48:00.000000", "creator": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@ceb7b1d"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Free ?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:radiobuttons", "value": "Yes"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hynion:"}, {"fieldName": "Release Notes", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Bug Fix"}, {"fieldName": "Release Notes Summary", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "Since PUP-5061 was fixed, there's no longer a reason to have a --trusted\noption. This commit removes the logic that was sensitive to this option\nand adds a deprecation warning in case it is used. The warning is\nprinted conditionally to avoid that it corrupts valid JSON output."}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "1.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "14/Mar/16"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "10008_*:*_2_*:*_619248301_*|*_1_*:*_1_*:*_7179021835_*|*_10007_*:*_1_*:*_158784020_*|*_3_*:*_1_*:*_24594_*|*_5_*:*_1_*:*_0_*|*_10011_*:*_2_*:*_461773127_*|*_10004_*:*_1_*:*_290319_*|*_10006_*:*_2_*:*_1612150801"}], "description": "Change how the {{--trusted}} option works to harmonize with the decision made in PUP-5061.\n\nSpecifically, when catalog preview resurrects trusted information from storage it should do this verbatim and not alter the \"authenticated\" entry (now it is only verbatim if the user uses {{--trusted}} and user is root.\n\nNote that it is not enough to rely on puppet to do this since catalog preview runs against puppet 3.8.x.", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32654", "fixedVersions": ["PRE 2.1.0"], "id": "32654", "issueType": "Improvement", "key": "PRE-86", "labels": ["resolved-issue-added"], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "resolution": "Fixed", "resolutionDate": "2016-03-28T17:17:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "Deprecate --trusted in light of PUP-5061", "timeSpent": "PT0S", "updated": "2017-08-22T17:51:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "when this is fixed, we should update the tests in linked ticket to test as non-root (--trusted tests)", "created": "2015-07-17T17:06:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "The logfile error is a known problem, see  PUP-3756 and PUP-2873. I think it just logs an error and continues to run. Not sure if logging fails at any point after that.\n\nI think it may be that this ticket is just a duplication of PUP-3756 - I marked this ticked as blocked by it.", "created": "2015-07-20T09:32:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "If the result of running as non-root does not set {{$trusted}} at all (even if trusted facts is on), then that is a missing feature in preview which deserves a separate ticket (can be fixed in a minor release).", "created": "2015-07-20T09:34:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "so, we can't test as non-root against puppet <4.0.0, it appears.", "created": "2015-07-20T14:20:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "This ticket has gone a bit stale. Need to figure out what the status of this is before making decisions. What is wrong exactly?", "created": "2016-02-24T15:57:00.000000"}, {"author": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "body": "[~accountid:557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715] can you try to re-create the state of play here? is this still relevant?", "created": "2016-02-25T16:15:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "I encountered this when writing unit tests. The problem is that {{Puppet\\[:user\\]}} defaults to 'puppet'. In my unit tests I fixed it like this:\n{code:ruby}\n    let!(:user) { Etc.getpwuid(Process.uid).name }\n    let!(:group) { Etc.getgrgid(Process.gid).name }\n{code}\nand then the tests assigns them to {{Puppet\\[:user\\]}} and {{Puppet\\[:group\\]}} respectively. That makes sense since the log files are produced by that user/group. I see no problem making this behavior the default in catalog preview when it's not run by root. Perhaps it should be default in puppet too?\n", "created": "2016-03-10T15:41:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "I can't reproduce this.  \nthe tests were updated long ago to run --trusted as non-root.", "created": "2016-03-10T15:50:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "[~accountid:557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715], the reported error {{ERROR: Unable to set ownership of log file}} can be reproduced by running the beaker integration tests. And as I wrote in a previous comment. I have a solution for that. I'm reopening this bug to have something to attache the fix to.", "created": "2016-03-11T00:01:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "[~accountid:557058:c7e2df03-377d-4bf0-9407-106b8483430d] Are you saying that there is still an issue, or can we close this? If you think that puppet in general should handle the logfile permissions differently, please create a separate PUP ticket as it would be a cross team concern (language, client, puppet server).", "created": "2016-03-11T07:03:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "As I mentioned when I reopened this issue, it can be reproduced by running the beaker tests. So yes, it's still an issue. Puppet tries to change the log file permissions to user 'puppet'. That's fine the the process owner is root. It's not fine if it isn't. I can fix this in catalog preview and I don't know if we should regard it as an issue in puppet. Hence my question.", "created": "2016-03-11T09:38:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Ping [~accountid:557058:c9e9d862-990b-48eb-b4e3-2e4daf1e6920] - should this be fixed in puppet as well as preview?\n\n[~accountid:557058:c7e2df03-377d-4bf0-9407-106b8483430d] need to fix this in preview anyway since it supports multiple puppet versions. We will let Kylo decide if this should be changed in puppet.", "created": "2016-03-11T09:42:00.000000"}, {"author": "557058:c9e9d862-990b-48eb-b4e3-2e4daf1e6920", "body": "I'm a little confused here, but please file a PUP ticket so we can discuss there.", "created": "2016-03-11T12:34:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "There's a resolved ticked already, PUP-3756. The problem is that it was fixed in 4.0.0 and hasn't been back ported to 3.x so it doesn't help users that want to migrate a 3.x environment. But since I'll need to fix this in catalog-preview anyway, I'm not sure if it's worth doing a back port.", "created": "2016-03-14T06:14:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "merged to master at: 622a041", "created": "2016-03-14T09:21:00.000000"}, {"author": "557058:c9e9d862-990b-48eb-b4e3-2e4daf1e6920", "body": "[~accountid:557058:c7e2df03-377d-4bf0-9407-106b8483430d] thanks for the context. Given that, I agree that it's not worth backporting to 3.x. Thanks.", "created": "2016-03-14T11:06:00.000000"}, {"author": "557058:8872d0b6-d198-4e25-92ad-02776be82d59", "body": "\nI have checked the current master branch of the catalog_preview module against pe 3.8.3 and found no evidence that puppet is trying to change log or any other file owner ship from root the the non-root user running puppet preview.  When run as a non-root user, preview works in the users home directory, in ~/.puppet (pe-3.8.3).\n\npe-2015.3.3 non-root user puppet preview assumes the environments for comparison are in the user's home directory in .puppetlabs/etc/code/environments.  No evidienct puppet preview is trying to change owner of puppet system artifacts, logs for example.\n", "created": "2016-03-26T14:18:00.000000"}], "components": [], "created": "2015-07-17T17:06:00.000000", "creator": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@26190632"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hyniof:"}, {"fieldName": "Release Notes Summary", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "I think no release note is needed.  The bad behavior reported was identified in July 2015.  The Nov 2015 of puppet preview did not exhibit this problem.  The change here does not seem to make any difference in the user experience."}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "1.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "20/Jul/15"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "10008_*:*_2_*:*_776341060_*|*_1_*:*_1_*:*_19180238041_*|*_10007_*:*_1_*:*_7029309_*|*_3_*:*_1_*:*_4168708_*|*_4_*:*_1_*:*_25452168_*|*_5_*:*_2_*:*_56791_*|*_6_*:*_1_*:*_29309166_*|*_10011_*:*_3_*:*_278231445_*|*_10004_*:*_2_*:*_1548318312"}], "description": "when attempting to run preview as non-root it tries to take ownership of a logfile in an unknown place that doesn't appear to be :logdir (~/.puppet/var/log):\n{code}\n[root@jovt6qh0344glzf ~]# sudo -u erict puppet preview --preview_environment test --environmentpath /tmp/preview.tHQzSC/environments/ --view baseline nonesuch\nERROR: Unable to set ownership of log file\nERROR: trusted is not a hash or array when accessing it with authenticated at /tmp/preview.tHQzSC/environments/production/manifests/init.pp:3 on node nonesuch\nERROR: trusted is not a hash or array when accessing it with authenticated at /tmp/preview.tHQzSC/environments/production/manifests/init.pp:3 on node nonesuch\n\n[root@jovt6qh0344glzf ~]# sudo -u erict puppet apply --configprint logdir\n/home/erict/.puppet/var/log\n{code}\n\nbut it looks like it's not trying to take ownership of master's logdir either:\n{code}\n[root@jovt6qh0344glzf ~]# chown -R erict:erict /var/lib/puppet/preview/\n[root@jovt6qh0344glzf ~]# sudo -u erict puppet preview --preview_environment test --environmentpath /tmp/preview.tHQzSC/environments/ --view baseline nonesuch\nERROR: Unable to set ownership of log file\n{code}", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32718", "fixedVersions": ["PRE 2.1.0"], "id": "32718", "issueType": "Bug", "key": "PRE-72", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "resolution": "Fixed", "resolutionDate": "2016-03-26T14:18:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "preview as non-root trying to take ownership of log file not in :logdir", "timeSpent": "PT0S", "updated": "2016-03-29T23:06:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [], "components": [], "created": "2015-07-17T13:04:00.000000", "creator": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@411887d7"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hz1527:"}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "1_*:*_1_*:*_19194576939_*|*_6_*:*_1_*:*_0_*|*_10006_*:*_1_*:*_289935"}], "description": "right now preview returns $trusted['authenticated'] as 'local' when using --trusted and not.\nshould it lie, so one can compare catalogs when authencated *would be* 'remote' ?\n\nThe semantics of {{$trusted}} was adjusted in puppet. Catalog Preview should work the same way as puppet (i.e. retain \"remote\").", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32732", "fixedVersions": ["PRE 2.1.0"], "id": "32732", "issueType": "New Feature", "key": "PRE-71", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "resolution": "Duplicate", "resolutionDate": "2016-02-24T15:59:00.000000", "status": "Closed", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:47 AM", "summary": "should --trusted as root user lie about $trusted['authenticated']?", "timeSpent": "PT0S", "updated": "2016-02-24T15:59:00.000000", "votes": "0", "watchers": []}, {"affectedVersions": [], "assignee": null, "attachments": [], "comments": [{"author": "557058:6fc1f430-f771-4686-a97e-21c5e35f9100", "body": "[~accountid:557058:97578a32-3955-4c5c-939e-58a878437b49] [~accountid:557058:8527c9e8-8e3f-451c-b529-f6fe014233ed] [~accountid:70121:199f31c7-67c7-42b0-b148-18ad3a391ab0] [~accountid:557058:aa277a93-6688-4f34-ad9d-e53477acf74b]", "created": "2015-06-24T17:52:00.000000"}, {"author": "557058:aa277a93-6688-4f34-ad9d-e53477acf74b", "body": "Seems fair. Especially if {{ln -s /etc/puppetlabs/puppet/environments/production /etc/puppetlabs/puppet/environments/preview}} works.", "created": "2015-06-24T17:55:00.000000"}, {"author": "557058:6fc1f430-f771-4686-a97e-21c5e35f9100", "body": "[~accountid:557058:aa277a93-6688-4f34-ad9d-e53477acf74b] you actually can't do that I would consider it a reasonable workaround but you need to set parser to current and future depending on the environment.  ", "created": "2015-06-24T18:12:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "You have to ln -s the individual directories/files under the environment directory to make it work (since a unique copy of environment.conf is required) - there are not that many (e.g. lib, manifests, modules, datadir).", "created": "2015-06-29T17:13:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "It is probably possible to override the {{environment.conf}} setting for the future parser part of the compilation.", "created": "2016-02-24T15:48:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "This can be achieved by accepting that a {{\\--preview}} environment is not given on the command line (this currently errors).", "created": "2016-02-24T15:50:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "PR looks good, but it needs to also update the help text.", "created": "2016-03-14T08:57:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Merged to master: e5a3077", "created": "2016-03-15T06:54:00.000000"}, {"author": "557058:b64e0a8c-6f57-44f9-adf1-b0b9767a03da", "body": "[~accountid:557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd] The module is now red in CI:  https://jenkins-modules.puppetlabs.com/view/1.%20failing%20jobs/job/platform-lang_puppetlabs-catalog-preview_package-module_master/9/\n\nCan someone look at this?\n\n/cc [~accountid:557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715]", "created": "2016-03-15T08:17:00.000000"}, {"author": "557058:80b1a2d0-6c75-4995-bdc3-c422bab7aabd", "body": "Ping [~accountid:557058:c7e2df03-377d-4bf0-9407-106b8483430d]", "created": "2016-03-15T08:36:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "the packaging job has been fixed.\n\nit appears acceptance is now failing with legit failures against foss:\nhttps://jenkins-modules.puppetlabs.com/job/platform-lang_puppetlabs-catalog-preview_intn-sys_smoke-master/PLATFORM=redhat7-64mda,WORKER_LABEL=beaker/8/consoleFull\n\ne.g.: {{Error: Attempt to assign a value to unknown setting :parser}}", "created": "2016-03-16T18:06:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "[~accountid:557058:c7e2df03-377d-4bf0-9407-106b8483430d] as far as i know, catalog_preview is meant to be able to run against 4x puppet as well.  running stable branch acceptance tests against 4.x and 3.x puppet works fine.   \n\nThe tests confine out certain tests when running against 4x, such as --migrate.  \n\ni get the same errors as CI when i run against 4x with master.  i bisected it back to one of these commits which creates fails using :parser setting:\nhttps://github.com/puppetlabs/puppetlabs-catalog_preview/pull/126/commits", "created": "2016-03-17T16:14:00.000000"}, {"author": "557058:c7e2df03-377d-4bf0-9407-106b8483430d", "body": "[~accountid:557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715], Doh! I pushed a (maint) commit that makes all settings of :parser conditional on Puppet 3.x.", "created": "2016-03-17T17:38:00.000000"}, {"author": "557058:e346dd15-0cb4-4ff2-a5d8-46553d04e715", "body": "validated on ubuntu at master SHA: 95750c304feeab0b971af7432d4e7b3f3474c299\n{code}\nroot@qx589lsecq3a9c1:~# puppet preview --migrate 3.8/4.0 --view overview somenode\nWarning: Setting templatedir is deprecated. See http://links.puppetlabs.com/env-settings-deprecations\n   (at /usr/lib/ruby/vendor_ruby/puppet/settings.rb:1139:in `issue_deprecation_warning')\nStats\n  Total number of nodes: 1, 100.0%\n  Conflicting..........: 0,   0.0%\n  Compliant............: 0,   0.0%\n  Equal................: 1, 100.0%\n\nTop ten nodes with most issues\n  somenode (0)\n{code}", "created": "2016-03-23T14:02:00.000000"}], "components": [], "created": "2015-06-24T17:51:00.000000", "creator": "557058:6fc1f430-f771-4686-a97e-21c5e35f9100", "customFieldValues": [{"fieldName": "Sub-team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Approvals", "fieldType": "com.atlassian.servicedesk.approvals-plugin:sd-approvals", "value": "com.atlassian.servicedesk.plugins.approvals.internal.customfield.ApprovalsCFValue@49704bfa"}, {"fieldName": "Epic/Theme", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:labels", "value": []}, {"fieldName": "Capitalized?", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Yes"}, {"fieldName": "People Involved", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multiuserpicker", "value": []}, {"fieldName": "Flagged", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes", "value": []}, {"fieldName": "QA Highest Test Level", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Acceptance"}, {"fieldName": "QA Status", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Reviewed"}, {"fieldName": "Rank", "fieldType": "com.pyxis.greenhopper.jira:gh-lexo-rank", "value": "0|hynki7:"}, {"fieldName": "Release Notes", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "New Feature"}, {"fieldName": "Release Notes Summary", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:textarea", "value": "Previously one had to setup equivalent code in two different environments to allow catalog preview to compare. This required extraneous merges and a bit of other extra work. This change adds a feature where one can compile a single environment against both parsers and return the diff, when using the --migrate option."}, {"fieldName": "Scrum Team", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:select", "value": "Language"}, {"fieldName": "Story Points", "fieldType": "com.atlassian.jira.plugin.system.customfieldtypes:float", "value": "3.0"}, {"fieldName": "[CHART] Date of First Response", "fieldType": "com.atlassian.jira.ext.charting:firstresponsedate", "value": "24/Jun/15"}, {"fieldName": "[CHART] Time in Status", "fieldType": "com.atlassian.jira.ext.charting:timeinstatus", "value": "10008_*:*_2_*:*_507780966_*|*_1_*:*_1_*:*_21164421123_*|*_10007_*:*_1_*:*_89403633_*|*_3_*:*_1_*:*_361934687_*|*_5_*:*_1_*:*_0_*|*_10011_*:*_2_*:*_209136265_*|*_10006_*:*_1_*:*_1240781648"}], "description": "I believe a valuable use case for the puppet preview tool would be if you could compile a single environment against both parsers and return the diff.  \n\nRight now if my goal is to ensure that my code works against both the future and current parser I need to maintain two feature branch environments and keep the code in sync to avoid fixing an error or warning that causes a change in the catalog to show up as a new difference in the output.  I believe this creates a lot of extraneous merging that detracts from the experience.   \n\nI believe the multi-environment setup for comparing the original code, the new code against 3.x, and the new code against 4.x is a great use case but I'm not sure how many people are going to understand how to do this and it's effectively impossible for users that aren't using a version control system.  \n\nIn order to provide a lower barrier to entry we should allow compiling an environment against both parsers.  \n\nUPDATE\n----\nAllow that {{\\--preview_environment}} does not have to be given on the command line. This means that the environment selected as base will compiled twice with exactly the same content, but (naturally) with the second enforcing parser=future.", "epicLinkSummary": null, "estimate": "PT0S", "externalId": "32777", "fixedVersions": ["PRE 2.1.0"], "id": "32777", "issueType": "New Feature", "key": "PRE-66", "labels": [], "originalEstimate": "PT0S", "parent": null, "parentSummary": null, "priority": "Normal", "projectDescription": "Puppet catalog preview compiler", "projectKey": "PRE", "projectLead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "projectName": "Puppet Catalog Preview", "projectType": "software", "projectUrl": null, "reporter": "557058:6fc1f430-f771-4686-a97e-21c5e35f9100", "resolution": "Fixed", "resolutionDate": "2016-03-23T14:02:00.000000", "status": "Resolved", "statusCategory": "Done", "statuscategorychangedate": "11/Mar/23 9:48 AM", "summary": "Allow Puppet Preview to Compile the Same Environment Against Future and Current Parser", "timeSpent": "PT0S", "updated": "2016-03-23T18:01:00.000000", "votes": "0", "watchers": []}], "key": "PRE", "lead": "70121:199f31c7-67c7-42b0-b148-18ad3a391ab0", "name": "Puppet Catalog Preview", "template": "com.pyxis.greenhopper.jira:gh-simplified-scrum-classic", "type": "software", "url": "", "versions": [{"name": "PRE-1.0.1", "releaseDate": "2015-05-05", "released": true}, {"name": "PRE-2.0.0", "releaseDate": "2015-06-30", "released": true}, {"name": "PRE-2.0.1", "releaseDate": "2015-07-14", "released": true}, {"name": "PRE 3.0.0", "releaseDate": "", "released": false}, {"name": "PRE 2.0.2", "releaseDate": "2015-08-04", "released": true}, {"name": "PRE 2.0.3", "releaseDate": "2015-12-08", "released": true}, {"name": "PRE 2.1.0", "releaseDate": "", "released": false}, {"name": "PUP 2.1.0", "releaseDate": "", "released": false}, {"name": "PRE 2.2.0", "releaseDate": "", "released": false}, {"name": "PRE 2.2.1", "releaseDate": "", "released": false}]}]}