{"action":"created","issue":{"url":"https://api.github.com/repos/puppetlabs/puppet-docs/issues/557","labels_url":"https://api.github.com/repos/puppetlabs/puppet-docs/issues/557/labels{/name}","comments_url":"https://api.github.com/repos/puppetlabs/puppet-docs/issues/557/comments","events_url":"https://api.github.com/repos/puppetlabs/puppet-docs/issues/557/events","html_url":"https://github.com/puppetlabs/puppet-docs/pull/557","id":113410661,"number":557,"title":"On modules parameters and reusability","user":{"login":"alvagante","id":283804,"avatar_url":"https://avatars.githubusercontent.com/u/283804?v=3","gravatar_id":"","url":"https://api.github.com/users/alvagante","html_url":"https://github.com/alvagante","followers_url":"https://api.github.com/users/alvagante/followers","following_url":"https://api.github.com/users/alvagante/following{/other_user}","gists_url":"https://api.github.com/users/alvagante/gists{/gist_id}","starred_url":"https://api.github.com/users/alvagante/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alvagante/subscriptions","organizations_url":"https://api.github.com/users/alvagante/orgs","repos_url":"https://api.github.com/users/alvagante/repos","events_url":"https://api.github.com/users/alvagante/events{/privacy}","received_events_url":"https://api.github.com/users/alvagante/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"milestone":null,"comments":1,"created_at":"2015-10-26T17:42:30Z","updated_at":"2015-12-21T22:13:42Z","closed_at":"2015-12-21T22:13:42Z","pull_request":{"url":"https://api.github.com/repos/puppetlabs/puppet-docs/pulls/557","html_url":"https://github.com/puppetlabs/puppet-docs/pull/557","diff_url":"https://github.com/puppetlabs/puppet-docs/pull/557.diff","patch_url":"https://github.com/puppetlabs/puppet-docs/pull/557.patch"},"body":"I wouldn't  actually remove the whole paragraph, this PR is not intended to be merged as is, consider it an attempt to raise a discussion with what is written in this page (and removed in this PR):\r\n- Is it really an antipattern to have a parameter that allows customisation of templates? IMHO it is a **necessary** reusability feature, allowing users to have their own configurations for cases not covered by the module\r\n- Is it really a good thing to expose parameters for any possible configuration entry of an application? What happens when a new version of that application is released and new parameters are added? If you can't provide a custom template and don't have parameters to configure the new settings of the application you have to wait for a module update to be able to configure the new version of the application: not a great deal, imho.\r\n- Do we do a favour to the module user if, in order to configure an application in the needed way he has to study all the parameters of the relevant classes/defines and find the right combination that matches the wanted output?\r\n- What are the performance effects due to [Hiera] data bindings on a class that has a huge number of parameters (one for each possible configuration entry of the managed application)? \r\n\r\nSome rationale behind my stance on this matter is here:\r\nhttp://www.example42.com/2014/10/29/reusability-features-every-module-should-have/\r\n\r\nwhich we can sum up with:\r\ncustom (or default) template + generic options_hash + default options\r\ncan do with 2 parameters and more flexibility what is done with:\r\ndozens of parameters + a forced template\r\n(and with Puppet 4 we can validate also each entry in the generic options_hash)\r\nThis doesn't necessarily mean that we should not have any parameter at all, for the application configurations.\r\n\r\nmy2c"},"comment":{"url":"https://api.github.com/repos/puppetlabs/puppet-docs/issues/comments/166438208","html_url":"https://github.com/puppetlabs/puppet-docs/pull/557#issuecomment-166438208","issue_url":"https://api.github.com/repos/puppetlabs/puppet-docs/issues/557","id":166438208,"user":{"login":"nfagerlund","id":484309,"avatar_url":"https://avatars.githubusercontent.com/u/484309?v=3","gravatar_id":"","url":"https://api.github.com/users/nfagerlund","html_url":"https://github.com/nfagerlund","followers_url":"https://api.github.com/users/nfagerlund/followers","following_url":"https://api.github.com/users/nfagerlund/following{/other_user}","gists_url":"https://api.github.com/users/nfagerlund/gists{/gist_id}","starred_url":"https://api.github.com/users/nfagerlund/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nfagerlund/subscriptions","organizations_url":"https://api.github.com/users/nfagerlund/orgs","repos_url":"https://api.github.com/users/nfagerlund/repos","events_url":"https://api.github.com/users/nfagerlund/events{/privacy}","received_events_url":"https://api.github.com/users/nfagerlund/received_events","type":"User","site_admin":false},"created_at":"2015-12-21T22:13:42Z","updated_at":"2015-12-21T22:13:42Z","body":"@alvagante Hey Alessandro! Sorry for the delay getting to this. \r\n\r\nThis sort of conversation is liable to get lost in the PRs to the docs project, and it should really be either:\r\n\r\n* A conversation on the puppet-users list\r\n* A ticket to [the public DOCUMENT jira project](https://tickets.puppetlabs.com/browse/DOCUMENT)\r\n\r\n(Or possibly both.) \r\n\r\nI'm going to close the PR, since as you said, it's not ready for a merge. Could you move the discussion to a higher-profile venue? "}}