{"action":"created","issue":{"url":"https://api.github.com/repos/kubernetes/kubernetes/issues/11492","labels_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/11492/labels{/name}","comments_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/11492/comments","events_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/11492/events","html_url":"https://github.com/kubernetes/kubernetes/issues/11492","id":95767910,"number":11492,"title":"Config template parameterization","user":{"login":"bgrant0607","id":7725777,"avatar_url":"https://avatars.githubusercontent.com/u/7725777?v=3","gravatar_id":"","url":"https://api.github.com/users/bgrant0607","html_url":"https://github.com/bgrant0607","followers_url":"https://api.github.com/users/bgrant0607/followers","following_url":"https://api.github.com/users/bgrant0607/following{/other_user}","gists_url":"https://api.github.com/users/bgrant0607/gists{/gist_id}","starred_url":"https://api.github.com/users/bgrant0607/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bgrant0607/subscriptions","organizations_url":"https://api.github.com/users/bgrant0607/orgs","repos_url":"https://api.github.com/users/bgrant0607/repos","events_url":"https://api.github.com/users/bgrant0607/events{/privacy}","received_events_url":"https://api.github.com/users/bgrant0607/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/kubernetes/kubernetes/labels/area/app-config-deployment","name":"area/app-config-deployment","color":"fb6420"},{"url":"https://api.github.com/repos/kubernetes/kubernetes/labels/priority/P1","name":"priority/P1","color":"eb6420"},{"url":"https://api.github.com/repos/kubernetes/kubernetes/labels/team/ux","name":"team/ux","color":"d2b48c"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":23,"created_at":"2015-07-18T00:03:07Z","updated_at":"2015-12-08T22:51:44Z","closed_at":null,"body":"Forked from #1743\r\n\r\nOne of the critical features we're lacking on the configuration front is template parameterization. We should decide on what approach we want to take.\r\n\r\nWorking list of requirements:\r\n* It should be schema-respecting, not arbitrary textual transformation, in order to facilitate schema validation and independent substitution/decoration passes.\r\n* Input parameters should be clearly declared, such as to facilitate form generation, as discussed in #4210 and #6487.\r\n* Templates should be encapsulated. Arbitrary fields shouldn't be overridable, since that would make templates unmaintainable. \r\n* Substitution should be independent of reconciliation, as per @ghodss's comment. "},"comment":{"url":"https://api.github.com/repos/kubernetes/kubernetes/issues/comments/163046441","html_url":"https://github.com/kubernetes/kubernetes/issues/11492#issuecomment-163046441","issue_url":"https://api.github.com/repos/kubernetes/kubernetes/issues/11492","id":163046441,"user":{"login":"jackgr","id":5607565,"avatar_url":"https://avatars.githubusercontent.com/u/5607565?v=3","gravatar_id":"","url":"https://api.github.com/users/jackgr","html_url":"https://github.com/jackgr","followers_url":"https://api.github.com/users/jackgr/followers","following_url":"https://api.github.com/users/jackgr/following{/other_user}","gists_url":"https://api.github.com/users/jackgr/gists{/gist_id}","starred_url":"https://api.github.com/users/jackgr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackgr/subscriptions","organizations_url":"https://api.github.com/users/jackgr/orgs","repos_url":"https://api.github.com/users/jackgr/repos","events_url":"https://api.github.com/users/jackgr/events{/privacy}","received_events_url":"https://api.github.com/users/jackgr/received_events","type":"User","site_admin":false},"created_at":"2015-12-08T22:51:44Z","updated_at":"2015-12-08T22:51:44Z","body":"So, yes, that's possible. However, it's not optimal, since the state must be marshalled, sent to the server, unmarshalled and stored, after the fact. All additional points of failure.\r\n\r\nThat said, there's another reason not to expand templates on the client. Client side expansion puts requirements on the client. Specifically, the client needs to be configured with whatever expansion technology the templates require. To your earlier point about supporting a plethora of languages, we now have a client configuration problem. \r\n\r\nAlso, expanding on the client puts the client at risk if the template expansion contains computation of any kind. On the server, where expansion will run in a container, the risk can be mitigated by reducing the privileges of the expansion container.\r\n\r\nBottom line, putting expansion on the server has multiple benefits, including less intrusion on the client."}}