{"action":"created","issue":{"url":"https://api.github.com/repos/helm/helm-classic/issues/465","repository_url":"https://api.github.com/repos/helm/helm-classic","labels_url":"https://api.github.com/repos/helm/helm-classic/issues/465/labels{/name}","comments_url":"https://api.github.com/repos/helm/helm-classic/issues/465/comments","events_url":"https://api.github.com/repos/helm/helm-classic/issues/465/events","html_url":"https://github.com/helm/helm-classic/issues/465","id":153124943,"number":465,"title":"Tweak `helm [un]install` to make upgrades easier","user":{"login":"mboersma","id":73019,"avatar_url":"https://avatars.githubusercontent.com/u/73019?v=3","gravatar_id":"","url":"https://api.github.com/users/mboersma","html_url":"https://github.com/mboersma","followers_url":"https://api.github.com/users/mboersma/followers","following_url":"https://api.github.com/users/mboersma/following{/other_user}","gists_url":"https://api.github.com/users/mboersma/gists{/gist_id}","starred_url":"https://api.github.com/users/mboersma/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mboersma/subscriptions","organizations_url":"https://api.github.com/users/mboersma/orgs","repos_url":"https://api.github.com/users/mboersma/repos","events_url":"https://api.github.com/users/mboersma/events{/privacy}","received_events_url":"https://api.github.com/users/mboersma/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/helm/helm-classic/labels/proposal","name":"proposal","color":"0052cc"}],"state":"open","locked":false,"assignee":{"login":"mboersma","id":73019,"avatar_url":"https://avatars.githubusercontent.com/u/73019?v=3","gravatar_id":"","url":"https://api.github.com/users/mboersma","html_url":"https://github.com/mboersma","followers_url":"https://api.github.com/users/mboersma/followers","following_url":"https://api.github.com/users/mboersma/following{/other_user}","gists_url":"https://api.github.com/users/mboersma/gists{/gist_id}","starred_url":"https://api.github.com/users/mboersma/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mboersma/subscriptions","organizations_url":"https://api.github.com/users/mboersma/orgs","repos_url":"https://api.github.com/users/mboersma/repos","events_url":"https://api.github.com/users/mboersma/events{/privacy}","received_events_url":"https://api.github.com/users/mboersma/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/helm/helm-classic/milestones/8","html_url":"https://github.com/helm/helm-classic/milestones/0.8.0","labels_url":"https://api.github.com/repos/helm/helm-classic/milestones/8/labels","id":1750149,"number":8,"title":"0.8.0","description":"","creator":{"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},"open_issues":4,"closed_issues":0,"state":"open","created_at":"2016-05-05T17:52:07Z","updated_at":"2016-05-05T18:03:58Z","due_on":null,"closed_at":null},"comments":11,"created_at":"2016-05-04T22:00:30Z","updated_at":"2016-05-09T19:00:47Z","closed_at":null,"body":"To upgrade Deis Workflow (as one example of a complex Chart), it's required that cluster ingress is preserved. Essentialy any DNS pointing toward a `LoadBalancer` should not need to be recreated. That requires that the `Namespace` in which it lives is also not destroyed.\r\n\r\nThis is possible by running a passel o' `kubectl` commands (here is [a quick-and-dirty version](https://gist.github.com/mboersma/10a7dece39900c8760ecd9c595032afe)). I propose we modify `helmc` behavior slightly to accomodate this.\r\n\r\n`helmc uninstall --upgrading` would change the current `uninstall` behavior to leave intact:\r\n\r\n1. k8s `Service`s containing either a `LoadBalancer` or `NodePort`\r\n2. `Namespace`s\r\n\r\n`helmc install --upgrading` would change the current `install` behavior to use `kubectl apply` instead of `kubectl create`. This should create any missing resources while updating the definitions of those that already exist.\r\n\r\n`kubectl apply` may not effect runtime changes on an existing `Service`, but my assumption is that will be rare and can be worked around. The onus is on on the Chart developer to maintain compatibility with `--upgrade`: essentially \"don't make important changes to an externally routed `Service` definition without providing additional upgrade instructions.\"\r\n\r\nWhile this is designed to solve the immediate needs of upgrading Deis Workflow charts, it's a general mechanism. Here's a typical upgrade process based on this change:\r\n\r\n```console\r\n$ helmc uninstall --upgrading -n deis -y workflow-beta3\r\n$ helmc fetch deis/workflow-beta4\r\n$ helmc generate -x manifests workflow-beta4\r\n$ helmc install --upgrading workflow-beta4\r\n```\r\n\r\nping @smothiki @krancour \r\n\r\nSee also #324."},"comment":{"url":"https://api.github.com/repos/helm/helm-classic/issues/comments/217957139","html_url":"https://github.com/helm/helm-classic/issues/465#issuecomment-217957139","issue_url":"https://api.github.com/repos/helm/helm-classic/issues/465","id":217957139,"user":{"login":"mboersma","id":73019,"avatar_url":"https://avatars.githubusercontent.com/u/73019?v=3","gravatar_id":"","url":"https://api.github.com/users/mboersma","html_url":"https://github.com/mboersma","followers_url":"https://api.github.com/users/mboersma/followers","following_url":"https://api.github.com/users/mboersma/following{/other_user}","gists_url":"https://api.github.com/users/mboersma/gists{/gist_id}","starred_url":"https://api.github.com/users/mboersma/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mboersma/subscriptions","organizations_url":"https://api.github.com/users/mboersma/orgs","repos_url":"https://api.github.com/users/mboersma/repos","events_url":"https://api.github.com/users/mboersma/events{/privacy}","received_events_url":"https://api.github.com/users/mboersma/received_events","type":"User","site_admin":false},"created_at":"2016-05-09T19:00:47Z","updated_at":"2016-05-09T19:00:47Z","body":"@krancour I was actually thinking of making this an annotation (in the YAML/JSON), not a header. I could make the annotation `helm: keep`, or I can explore putting it in the manifest header instead."}}