{"action":"created","issue":{"url":"https://api.github.com/repos/deis/router/issues/63","labels_url":"https://api.github.com/repos/deis/router/issues/63/labels{/name}","comments_url":"https://api.github.com/repos/deis/router/issues/63/comments","events_url":"https://api.github.com/repos/deis/router/issues/63/events","html_url":"https://github.com/deis/router/issues/63","id":123043095,"number":63,"title":"Can we not use JSON in annotations for manually configured things?","user":{"login":"technosophos","id":89193,"avatar_url":"https://avatars.githubusercontent.com/u/89193?v=3","gravatar_id":"","url":"https://api.github.com/users/technosophos","html_url":"https://github.com/technosophos","followers_url":"https://api.github.com/users/technosophos/followers","following_url":"https://api.github.com/users/technosophos/following{/other_user}","gists_url":"https://api.github.com/users/technosophos/gists{/gist_id}","starred_url":"https://api.github.com/users/technosophos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/technosophos/subscriptions","organizations_url":"https://api.github.com/users/technosophos/orgs","repos_url":"https://api.github.com/users/technosophos/repos","events_url":"https://api.github.com/users/technosophos/events{/privacy}","received_events_url":"https://api.github.com/users/technosophos/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":8,"created_at":"2015-12-18T23:26:00Z","updated_at":"2015-12-19T16:23:06Z","closed_at":null,"body":"Currently we have to manually edit annotations, but annotations are in YAML in JSON even though they are just simple key/value lists:\r\n\r\n```\r\n⇒  kdy get rc deis-router\r\napiVersion: v1\r\nkind: ReplicationController\r\nmetadata:\r\n  annotations:\r\n    chart.helm.sh/description: For testing only!\r\n    chart.helm.sh/file: /Users/mattbutcher/Code/helm_home/workspace/charts/deis/manifests/deis-router-rc.yaml\r\n    chart.helm.sh/name: deis\r\n    chart.helm.sh/version: 2.0.0-pre-alpha\r\n    deis.io/routerConfig: |\r\n      {\r\n        \"domain\": \"10.254.1.3.xip.io\",\r\n        \"useProxyProtocol\": false\r\n      }\r\n```\r\n\r\nIs there a reason why we can't simply make these separate annotations?\r\n\r\nThey are error prone to edit, require additional work to parse, and require additional tooling for things like Helm.\r\n\r\n"},"comment":{"url":"https://api.github.com/repos/deis/router/issues/comments/166001259","html_url":"https://github.com/deis/router/issues/63#issuecomment-166001259","issue_url":"https://api.github.com/repos/deis/router/issues/63","id":166001259,"user":{"login":"krancour","id":1821014,"avatar_url":"https://avatars.githubusercontent.com/u/1821014?v=3","gravatar_id":"","url":"https://api.github.com/users/krancour","html_url":"https://github.com/krancour","followers_url":"https://api.github.com/users/krancour/followers","following_url":"https://api.github.com/users/krancour/following{/other_user}","gists_url":"https://api.github.com/users/krancour/gists{/gist_id}","starred_url":"https://api.github.com/users/krancour/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/krancour/subscriptions","organizations_url":"https://api.github.com/users/krancour/orgs","repos_url":"https://api.github.com/users/krancour/repos","events_url":"https://api.github.com/users/krancour/events{/privacy}","received_events_url":"https://api.github.com/users/krancour/received_events","type":"User","site_admin":false},"created_at":"2015-12-19T16:23:06Z","updated_at":"2015-12-19T16:23:06Z","body":"Ok... so my last comment was late at night...\r\n\r\nI don't think I accurately conveyed that what is proposed above _will_ work just fine... _as long as_ there can be a way to deal with lists and nested config objects.\r\n\r\nThe latter can simply be addressed through router code.  For instance `router.deis.io/gzip/compressionLevel` can be understood by the code to be an attribute of the `RouterConfig` object's nested `GzipConfig`.  That's easy enough to do.\r\n\r\nThe former (lists) is tougher.  I think the answer is to just settle for strings containing comna delimited lists.  This will work fine for the sort of things for which we need a list-- e.g. domains.\r\n\r\nI think what happened is that between k8s docs passing mention that annotations may contain structured data and Go's awesome JSON support, I got lured down a path that used those to compensate for the lack of arbitrarily deep pathing in annotations.\r\n\r\nBefore I OR this (for beta), one question is, are we ok with the repetition of `router.config.io/` as a prefix to every router config setting.  To me, that looks not quite a DRY exception, but very just as out of place in YAML doc as JSON looks.  (One would typucally expect, instead, the very sort of pathing that k8s doesn't allow in annotations.)  As long as we are ok with this, I can start."}}