{"action":"created","issue":{"url":"https://api.github.com/repos/deis/helm/issues/118","labels_url":"https://api.github.com/repos/deis/helm/issues/118/labels{/name}","comments_url":"https://api.github.com/repos/deis/helm/issues/118/comments","events_url":"https://api.github.com/repos/deis/helm/issues/118/events","html_url":"https://github.com/deis/helm/issues/118","id":113952282,"number":118,"title":"PROPOSAL: Chart tables for Adding Custom (Public or Private) Repos","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":[{"url":"https://api.github.com/repos/deis/helm/labels/proposal","name":"proposal","color":"0052cc"}],"state":"open","locked":false,"assignee":{"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},"milestone":null,"comments":13,"created_at":"2015-10-29T00:05:19Z","updated_at":"2015-11-03T18:34:08Z","closed_at":null,"body":"In nautical terminology, a Chart Table is a place where charts are\r\nstored. This proposal outlines a way to extend Helm's notion of charts\r\nto include arbitrary external sources, which we call Chart Tables.\r\n\r\n**Changes:**\r\n- Change `charttable` to `table`.\r\n- Added Namespacing section\r\n- Changed Charttables.yaml to Tables.yaml\r\n\r\n## TL;DR\r\n\r\nAdd a method for supplying external \"chart tables\" (chart repositories),\r\nand seemlessly use them within the tool.\r\n\r\n```\r\n$ helm table list\r\n charts (default)\r\n$ helm table add mycharts https://github.com/myname/myrepo\r\n----> Added new repo named 'myrepo'\r\n$ helm table list\r\n charts (default)\r\n mycharts\r\n$ helm update\r\n----> Updated 'charts'\r\n----> Updated 'myrepo'\r\n$ helm search myrepo/*\r\n mychart1\r\n mychart2\r\n$ helm fetch myrepo/mychart2\r\n----> Installing 'myrepo/mychart2` into $HELM_HOME/workspace\r\n....\r\n```\r\n\r\n## Goals\r\n\r\n- Keep a base repository where many prominent charts can go\r\n- Allow users to add _ad hoc_ public Git-based repositories\r\n- Support private repositories, too!\r\n\r\nNon-goal: We are not trying to switch to a fully distributed\r\nchart-per-repo model.\r\n\r\n## What Is A Chart Table?\r\n\r\nA chart table is an extra source of charts. The default chart table, which\r\nis built into Helm, is `github.com/deis/charts`. This spec defines how\r\nadditional chart tables are added, stored, and utilized.\r\n\r\nTo build a chart table, we need three pieces of information:\r\n\r\n- the local name of the chart table\r\n- the remote access point\r\n- the protocol(s) used to access the remote\r\n\r\nAt this point, we suggest that (a) all remote access points are Git\r\nrepos, and (b) only git protocols are suppoted.\r\n\r\n## The Structure of the $HELM_HOME Chart Tables\r\n\r\nInside of `$HELM_HOME`, charts are currently stored inside of\r\n`cache/charts`. The `cache` directory has no other subdirectories. The\r\nreasoning for having it this way is so that there is a place to put\r\nextra chart tables. So we can carry out the initial design by adding\r\nstructure as follows:\r\n\r\n```\r\n$HELM_HOME\r\n    |\r\n    |- cache/\r\n        |\r\n        |- charts/    # Default charts\r\n        |\r\n        |- CHARTTABLE1/\r\n        |\r\n        |- CHARTTABLE2/\r\n```\r\n\r\nIn the above, each chart table (`charts`, `CHARTTABLE1`, `CHARTTABLE2`) contains\r\nany number of charts.\r\n\r\n### Namespace Model\r\n\r\nThe chart tables are organized into namespaces of the form `tablename/chartname`. \r\n\r\nTherefore, to install a chart named `nginx` in a table named `jackfrancis`, the proper install command is:\r\n\r\n```\r\n$ helm install jackfrancis/nginx\r\n```\r\n\r\nExactly one table may be specified as the _default_ chart table. By default, the `github.com/deis/charts` repository is the default. A _default_ table does not require a prefix. Consider the following command:\r\n\r\n```\r\n$ helm install nginx\r\n```\r\n\r\nThis will look for a chart named `nginx` _in the default table_. If no such chart is found in the default table, an error is returned. There is no other hierarchy or resolution order for other tables.\r\n\r\nOther commands are expected to follow this convention, with _one notable exception_. Searching may be done across chart tables. (In the future, other operations may be added that follow that rule.)\r\n\r\n## The Tables.yaml File\r\n\r\nMetadata about chart tables are stored inside of\r\n`$HELM_HOME/cache/Tables.yaml`. The general structure of this file\r\nis as follows:\r\n\r\n```yaml\r\ndefault: charts\r\ntables:\r\n  - name: charts\r\n    repo: github.com/deis/charts\r\n  - name: mycharts\r\n    repo: github.com/technosophos/mycharts\r\n```\r\n\r\nThis defines two top-level entities: the `default` keyword, which\r\nreferences one of the tables by name, and the `tables` keyword, which\r\nsupplies a list of tables.\r\n\r\nEach chart table has a `name` and a `repo`, where the name is\r\nuser-supplied and the `repo` is the remote destination.\r\n\r\n- `name` is composed of alphanumeric characters plus `-`, `_`, and `.`.\r\n  It MUST begin with an alphanumeric character (as defined by Unicode)\r\n- `repo` is a repository URL. TODO: Do we require protocol prefix, or\r\n  guess it?\r\n\r\n**OPEN QUESTION:** What is the best way to allow users to authenticate\r\nto private repos? I am assuming we can use the default Git method for\r\nkeypairs. Am I missing alternatives?\r\n\r\n## Additions to the Helm Command\r\n\r\nThe following new commands are added to Helm:\r\n\r\n- `helm table add [NAME] [REPO]`: Add a new chart table with the name\r\n  `NAME` and the repository URL `REPO`. The user may give her/his own\r\n  names to the repositories.\r\n- `helm table remove [NAME]`: Remove a table by name\r\n- `helm table` or `helm table list`: List all known tables.\r\n\r\n## Modifications to the Helm Command\r\n\r\nOne flag is deleted: `--repo`\r\n\r\nThe following commands are modified:\r\n\r\n- `helm update`: Now updates ALL chart tables.\r\n- `helm update NAME`: Now updates a specific chart table by name\r\n- `helm search`: Now searches all tables, optionally takes a chart table\r\n  prefix (`helm search foo/*` searches only the `foo` table)\r\n- `helm install` and `helm update`: These accept namespaced charts. Any\r\n  chart that does not have a table prefix is assumed to be in the\r\n  default table.\r\n\r\n## Modifications to Manifests\r\n\r\nManifests ought to expose labels indicating their origin chart.\r\n\r\n```yaml\r\nlabels:\r\n  chart: mytable/chart1\r\n```\r\n"},"comment":{"url":"https://api.github.com/repos/deis/helm/issues/comments/153447694","html_url":"https://github.com/deis/helm/issues/118#issuecomment-153447694","issue_url":"https://api.github.com/repos/deis/helm/issues/118","id":153447694,"user":{"login":"bacongobbler","id":1360539,"avatar_url":"https://avatars.githubusercontent.com/u/1360539?v=3","gravatar_id":"","url":"https://api.github.com/users/bacongobbler","html_url":"https://github.com/bacongobbler","followers_url":"https://api.github.com/users/bacongobbler/followers","following_url":"https://api.github.com/users/bacongobbler/following{/other_user}","gists_url":"https://api.github.com/users/bacongobbler/gists{/gist_id}","starred_url":"https://api.github.com/users/bacongobbler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bacongobbler/subscriptions","organizations_url":"https://api.github.com/users/bacongobbler/orgs","repos_url":"https://api.github.com/users/bacongobbler/repos","events_url":"https://api.github.com/users/bacongobbler/events{/privacy}","received_events_url":"https://api.github.com/users/bacongobbler/received_events","type":"User","site_admin":false},"created_at":"2015-11-03T18:34:08Z","updated_at":"2015-11-03T18:34:08Z","body":"so should we rename deis/charts to something else or are we keeping that name and just calling them repos?"}}