Ver Fonte

switching

Stefan McShane há 2 anos atrás
pai
commit
2bbaadba91

+ 0 - 0
local/chart/Chart.lock → local/1/chart/Chart.lock


+ 17 - 0
local/1/chart/Chart.yaml

@@ -0,0 +1,17 @@
+name: umbrella
+type: application
+version: 0.97.0
+apiVersion: v2
+description: Porter app composed of web, worker and job charts
+home: https://getporter.dev/
+icon: https://user-images.githubusercontent.com/65516095/111255214-07d3da80-85ed-11eb-99e2-fddcbdb99bdb.png
+keywords:
+  - porter
+  - application
+  - service
+  - web
+dependencies: 
+- name: web
+  version: "0.136.0"
+  repository: "https://charts.getporter.dev"
+  alias: "porter-web"

+ 0 - 0
local/chart/charts/web-0.136.0.tgz → local/1/chart/charts/web-0.136.0.tgz


Diff do ficheiro suprimidas por serem muito extensas
+ 288 - 0
local/1/secret-non-umbrella-diffed.yaml


Diff do ficheiro suprimidas por serem muito extensas
+ 30 - 0
local/1/secret-non-umbrella.yaml


Diff do ficheiro suprimidas por serem muito extensas
+ 339 - 0
local/1/secret-umbrella.yaml


+ 342 - 0
local/1/secret-umbrella2.yaml

@@ -0,0 +1,342 @@
+{
+  "name": "a",
+  "info": {
+    "first_deployed": "2023-09-05T22:52:44.480159294Z",
+    "last_deployed": "2023-09-05T22:52:44.480159294Z",
+    "deleted": "",
+    "description": "Install complete",
+    "status": "deployed"
+  },
+  "chart": {
+    "metadata": {
+      "name": "umbrella",
+      "home": "https://getporter.dev/",
+      "version": "0.96.0",
+      "description": "Web application that is exposed to external traffic.",
+      "keywords": [
+        "porter",
+        "application",
+        "service",
+        "umbrella"
+      ],
+      "icon": "https://user-images.githubusercontent.com/65516095/111255214-07d3da80-85ed-11eb-99e2-fddcbdb99bdb.png",
+      "apiVersion": "v2",
+      "dependencies": [
+        {
+          "name": "asdfaa-web",
+          "version": "0.136.0",
+          "repository": "http://chartmuseum:8080",
+          "enabled": true,
+          "alias": "asdfa-web"
+        }
+      ],
+      "type": "application"
+    },
+    "lock": null,
+    "templates": null,
+    "values": {
+      "asdfa-web": {
+        "albIngress": {
+          "custom_paths": [],
+          "enabled": false,
+          "external_dns": false,
+          "hosts": [],
+          "scheme": "internet-facing",
+          "target_type": "ip"
+        },
+        "auto_deploy": true,
+        "autoscaling": {
+          "enabled": false,
+          "maxReplicas": 10,
+          "minReplicas": 1,
+          "targetCPUUtilizationPercentage": 50,
+          "targetMemoryUtilizationPercentage": 50
+        },
+        "bluegreen": {
+          "disablePrimaryDeployment": false,
+          "enabled": false,
+          "imageTags": []
+        },
+        "cloudsql": {
+          "additionalConnection": {
+            "connectionName": "",
+            "dbPort": 5432,
+            "enabled": false
+          },
+          "connectionName": "",
+          "dbPort": 5432,
+          "enabled": false,
+          "serviceAccountJSON": ""
+        },
+        "container": {
+          "args": null,
+          "command": null,
+          "env": {
+            "normal": null
+          },
+          "lifecycle": {},
+          "port": 80
+        },
+        "customNodePort": {
+          "enabled": false,
+          "port": 30000
+        },
+        "datadog": {
+          "enabled": false
+        },
+        "emptyDir": {
+          "enabled": false,
+          "mountPath": "/mypath"
+        },
+        "global": {
+          "image": {
+            "repository": "nginx",
+            "tag": "latest"
+          }
+        },
+        "health": {
+          "livenessCommand": {
+            "command": "ls -l",
+            "enabled": false,
+            "failureThreshold": 3,
+            "initialDelaySeconds": 5,
+            "periodSeconds": 5,
+            "successThreshold": 1,
+            "timeoutSeconds": 1
+          },
+          "livenessProbe": {
+            "auth": {
+              "enabled": false,
+              "password": "",
+              "username": ""
+            },
+            "enabled": false,
+            "failureThreshold": 3,
+            "httpHeaders": [],
+            "initialDelaySeconds": 0,
+            "path": "/livez",
+            "periodSeconds": 5,
+            "scheme": "HTTP",
+            "successThreshold": 1,
+            "timeoutSeconds": 1
+          },
+          "readinessProbe": {
+            "auth": {
+              "enabled": false,
+              "password": "",
+              "username": ""
+            },
+            "enabled": false,
+            "failureThreshold": 3,
+            "httpHeaders": [],
+            "initialDelaySeconds": 0,
+            "path": "/readyz",
+            "periodSeconds": 5,
+            "scheme": "HTTP",
+            "successThreshold": 1,
+            "timeoutSeconds": 1
+          },
+          "startupProbe": {
+            "auth": {
+              "enabled": false,
+              "password": "",
+              "username": ""
+            },
+            "enabled": false,
+            "failureThreshold": 3,
+            "httpHeaders": [],
+            "path": "/startupz",
+            "periodSeconds": 5,
+            "scheme": "HTTP",
+            "timeoutSeconds": 1
+          }
+        },
+        "hostAliases": [],
+        "image": {
+          "pullPolicy": "Always",
+          "repository": "public.ecr.aws/o1j4x7p4/hello-porter",
+          "tag": "latest"
+        },
+        "ingress": {
+          "annotations": {},
+          "customTls": {
+            "enabled": false
+          },
+          "custom_domain": false,
+          "custom_paths": [],
+          "enabled": true,
+          "hosts": [],
+          "porter_hosts": [],
+          "provider": "aws",
+          "rewriteCustomPathsEnabled": true,
+          "tls": true,
+          "useDefaultIngressTLSSecret": false,
+          "wildcard": false
+        },
+        "keda": {
+          "cooldownPeriod": 300,
+          "enabled": false,
+          "fallback": {
+            "failureReplicas": 6,
+            "failureThreshold": 3
+          },
+          "hpa": {
+            "scaleDown": {
+              "policy": {
+                "periodSeconds": 300,
+                "type": "Percent",
+                "value": 10
+              },
+              "stabilizationWindowSeconds": 300
+            },
+            "scaleUp": {
+              "policy": {
+                "periodSeconds": 300,
+                "type": "Percent",
+                "value": 10
+              },
+              "stabilizationWindowSeconds": 300
+            }
+          },
+          "maxReplicaCount": 10,
+          "minReplicaCount": 1,
+          "pollingInterval": 30,
+          "trigger": {
+            "metricName": "",
+            "metricQuery": "",
+            "metricThreshold": "",
+            "metricType": "AverageValue"
+          },
+          "triggers": []
+        },
+        "nodeSelector": {},
+        "podLabels": {},
+        "privateIngress": {
+          "annotations": {},
+          "clusterIssuer": "letsencrypt-prod-private",
+          "custom_paths": [],
+          "enabled": false,
+          "hosts": [],
+          "tls": false
+        },
+        "pvc": {
+          "enabled": false,
+          "existingVolume": "",
+          "mountPath": "/mypath",
+          "storage": "20Gi"
+        },
+        "replicaCount": 1,
+        "resources": {
+          "requests": {
+            "cpu": "100m",
+            "memory": "256Mi"
+          }
+        },
+        "service": {
+          "port": 80
+        },
+        "serviceAccount": {
+          "annotations": {},
+          "create": true,
+          "name": ""
+        },
+        "stack": {
+          "enabled": false,
+          "name": "",
+          "revision": 0
+        },
+        "statefulset": {
+          "enabled": false
+        },
+        "terminationGracePeriodSeconds": 30,
+        "tolerations": [],
+        "topology": {
+          "enabled": false,
+          "labelSelector": {
+            "enabled": false,
+            "matchLabels": {}
+          }
+        }
+      }
+    },
+    "schema": null,
+    "files": null
+  },
+  "config": {
+    "asdfa-web": {
+      "autoscaling": {
+        "enabled": false,
+        "maxReplicas": "10",
+        "minReplicas": "1",
+        "targetCPUUtilizationPercentage": "50",
+        "targetMemoryUtilizationPercentage": "50"
+      },
+      "cloudsql": {
+        "connectionName": "",
+        "dbPort": "5432",
+        "enabled": false,
+        "serviceAccountJSON": ""
+      },
+      "container": {
+        "command": "",
+        "env": {
+          "normal": {},
+          "synced": []
+        },
+        "port": "3000"
+      },
+      "health": {
+        "livenessProbe": {
+          "enabled": false,
+          "failureThreshold": "3",
+          "path": "/livez",
+          "periodSeconds": "5"
+        },
+        "readinessProbe": {
+          "enabled": false,
+          "failureThreshold": "3",
+          "initialDelaySeconds": "0",
+          "path": "/readyz"
+        },
+        "startupProbe": {
+          "enabled": false,
+          "failureThreshold": "3",
+          "path": "/startupz",
+          "periodSeconds": "5"
+        }
+      },
+      "ingress": {
+        "annotations": {},
+        "custom_domain": false,
+        "enabled": false,
+        "hosts": [],
+        "porter_hosts": []
+      },
+      "labels": {
+        "porter.run/porter-application": "true"
+      },
+      "nodeSelector": {},
+      "podLabels": {
+        "porter.run/porter-application": "true"
+      },
+      "replicaCount": "1",
+      "resources": {
+        "requests": {
+          "cpu": "100m",
+          "memory": "256Mi"
+        }
+      },
+      "service": {
+        "port": "3000"
+      }
+    },
+    "global": {
+      "image": {
+        "repository": "nginx",
+        "tag": "latest"
+      }
+    }
+  },
+  "version": 1,
+  "namespace": "porter-stack-a"
+}

Diff do ficheiro suprimidas por serem muito extensas
+ 2 - 0
local/1/secret.yaml


+ 39 - 0
local/1/umbrella-values.yaml

@@ -0,0 +1,39 @@
+porter-web:
+  auto_deploy: true
+  autoscaling:
+    enabled: false
+  clusterId: 1
+  container:
+    env:
+      normal: null
+    lifecycle: {}
+    port: 80
+  currentCluster:
+    service:
+      is_aws: false
+      is_do: false
+      is_gcp: false
+  health:
+    livenessProbe:
+      enabled: false
+    readinessProbe:
+      enabled: false
+    startupProbe:
+      enabled: false
+  image:
+    repository: nginx
+    tag: latest
+  ingress:
+    annotations: {}
+    custom_domain: false
+    enabled: false
+    hosts: []
+    porter_hosts: []
+  namespace: default
+  replicaCount: 1
+  resources:
+    requests:
+      cpu: 100m
+      memory: 256Mi
+  showStartCommand: true
+  terminationGracePeriodSeconds: 30

+ 6 - 0
local/2/chart/Chart.lock

@@ -0,0 +1,6 @@
+dependencies:
+- name: web
+  repository: https://charts.getporter.dev
+  version: 0.136.0
+digest: sha256:05729e432d7a2cec7a6a93bceb64b5cc7f711f2bb86585db97fe74ed315cee67
+generated: "2023-09-06T11:53:12.0395-04:00"

+ 2 - 2
local/chart/Chart.yaml → local/2/chart/Chart.yaml

@@ -10,8 +10,8 @@ keywords:
   - application
   - service
   - web
-dependencies:
+dependencies: 
 - name: web
   version: "0.136.0"
   repository: "https://charts.getporter.dev"
-  alias: "myname"
+  alias: "web"

BIN
local/2/chart/charts/web-0.136.0.tgz


+ 37 - 0
local/2/non-umbrella.yaml

@@ -0,0 +1,37 @@
+auto_deploy: true
+autoscaling:
+  enabled: false
+clusterId: 1
+container:
+  env:
+    normal: null
+  lifecycle: {}
+  port: 80
+currentCluster:
+  service:
+    is_aws: false
+    is_do: false
+    is_gcp: false
+health:
+  livenessProbe:
+    enabled: false
+  readinessProbe:
+    enabled: false
+  startupProbe:
+    enabled: false
+image:
+  repository: nginx
+  tag: latest
+ingress:
+  annotations: {}
+  custom_domain: false
+  enabled: false
+  provider: ""
+namespace: default
+replicaCount: 1
+resources:
+  requests:
+    cpu: 100m
+    memory: 256Mi
+showStartCommand: true
+terminationGracePeriodSeconds: 30

+ 8 - 0
local/2/umbrella-values.yaml

@@ -0,0 +1,8 @@
+
+web:
+  ingress:
+    annotations: {}
+    custom_domain: false
+    enabled: false
+    hosts: []
+    porter_hosts: []

+ 21 - 0
local/3/depchart/Chart.yaml

@@ -0,0 +1,21 @@
+apiVersion: v2
+name: testchart
+description: A Helm chart for Kubernetes
+
+# A chart can be either an 'application' or a 'library' chart.
+#
+# Application charts are a collection of templates that can be packaged into versioned archives
+# to be deployed.
+#
+# Library charts provide useful utilities or functions for the chart developer. They're included as
+# a dependency of application charts to inject those utilities and functions into the rendering
+# pipeline. Library charts do not define any templates and therefore cannot be deployed.
+type: application
+
+# This is the chart version. This version number should be incremented each time you make changes
+# to the chart and its templates, including the app version.
+version: 0.1.0
+
+# This is the version number of the application being deployed. This version number should be
+# incremented each time you make changes to the application.
+appVersion: 1.0.0

+ 18 - 0
local/3/depchart/templates/deployment.yaml

@@ -0,0 +1,18 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: {{ .Values.MyName }}
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: nginx
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+      - name: {{ .Values.MyName }}
+        image: busybox
+        command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3000']

+ 0 - 0
local/3/depchart/values.yaml


+ 21 - 0
local/3/testchart/Chart.yaml

@@ -0,0 +1,21 @@
+apiVersion: v2
+name: testchart
+description: A Helm chart for Kubernetes
+
+# A chart can be either an 'application' or a 'library' chart.
+#
+# Application charts are a collection of templates that can be packaged into versioned archives
+# to be deployed.
+#
+# Library charts provide useful utilities or functions for the chart developer. They're included as
+# a dependency of application charts to inject those utilities and functions into the rendering
+# pipeline. Library charts do not define any templates and therefore cannot be deployed.
+type: application
+
+# This is the chart version. This version number should be incremented each time you make changes
+# to the chart and its templates, including the app version.
+version: 0.1.0
+
+# This is the version number of the application being deployed. This version number should be
+# incremented each time you make changes to the application.
+appVersion: 1.0.0

+ 18 - 0
local/3/testchart/templates/deployment.yaml

@@ -0,0 +1,18 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: {{ .Release.Name }}
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: nginx
+  template:
+    metadata:
+      labels:
+        app: nginx
+    spec:
+      containers:
+      - name: {{ .Release.Name }}
+        image: busybox
+        command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 1000']

+ 2 - 0
local/3/testchart/values.yaml

@@ -0,0 +1,2 @@
+addAnnotations: false
+addLabels: false

+ 9 - 0
local/3/testumbrella/Chart.lock

@@ -0,0 +1,9 @@
+dependencies:
+- name: testchart
+  repository: file://../depchart
+  version: 0.1.0
+- name: testchart
+  repository: file://../depchart
+  version: 0.1.0
+digest: sha256:5778b10b5e5eeecd1e7d6c4d9848d7c888a13abb104d954868d0b41b2cbf611f
+generated: "2023-09-06T18:48:32.799658-04:00"

+ 31 - 0
local/3/testumbrella/Chart.yaml

@@ -0,0 +1,31 @@
+apiVersion: v2
+name: testchart
+description: A Helm chart for Kubernetes
+
+# A chart can be either an 'application' or a 'library' chart.
+#
+# Application charts are a collection of templates that can be packaged into versioned archives
+# to be deployed.
+#
+# Library charts provide useful utilities or functions for the chart developer. They're included as
+# a dependency of application charts to inject those utilities and functions into the rendering
+# pipeline. Library charts do not define any templates and therefore cannot be deployed.
+type: application
+
+# This is the chart version. This version number should be incremented each time you make changes
+# to the chart and its templates, including the app version.
+version: 0.1.0
+
+# This is the version number of the application being deployed. This version number should be
+# incremented each time you make changes to the application.
+appVersion: 1.0.0
+
+dependencies: 
+- name: testchart
+  alias: foo
+  version: "0.1.0"
+  repository: "file://../depchart"
+- name: testchart
+  alias: bar
+  version: "0.1.0"
+  repository: "file://../depchart"

BIN
local/3/testumbrella/charts/testchart-0.1.0.tgz


+ 2 - 0
local/3/testumbrella/values.yaml

@@ -0,0 +1,2 @@
+foo:
+  MyName: foo

+ 188 - 0
local/attempts.md

@@ -0,0 +1,188 @@
+Setup kind cluster with 2 projects, both pointing to the same cluster. 1 project with simplified view and validate featureflag enabled, 1 with non-simplified view
+
+Setup SQL:
+
+```sql
+INSERT INTO projects (name, simplified_view_enabled, validate_apply_v2) values ('simplified', TRUE, TRUE), ('legacy', FALSE, FALSE);
+INSERT INTO roles (kind, user_id, project_id) values('admin', 1, 1),('admin', 1, 2);
+
+INSERT INTO "public"."kube_integrations"("created_at","updated_at","deleted_at","mechanism","user_id","project_id","client_certificate_data","client_key_data","token","username","password","kubeconfig")
+SELECT
+"created_at","updated_at","deleted_at","mechanism","user_id","project_id","client_certificate_data","client_key_data","token","username","password","kubeconfig"
+FROM kube_integrations where id = 1;
+UPDATE kube_integrations set project_id=1 where id = 2;
+INSERT INTO "public"."kube_integrations"("created_at","updated_at","deleted_at","mechanism","user_id","project_id","client_certificate_data","client_key_data","token","username","password","kubeconfig")
+SELECT
+"created_at","updated_at","deleted_at","mechanism","user_id","project_id","client_certificate_data","client_key_data","token","username","password","kubeconfig"
+FROM kube_integrations where id = 1;
+UPDATE kube_integrations set project_id=2 where id = 3;
+
+INSERT INTO "public"."clusters"("created_at","updated_at","deleted_at","auth_mechanism","project_id","agent_integration_enabled","name","vanity_name","server","cluster_location_of_origin","tls_server_name","insecure_skip_tls_verify","proxy_url","user_location_of_origin","user_impersonate","user_impersonate_groups","infra_id","notifications_disabled","preview_envs_enabled","aws_cluster_id","status","provisioned_by","cloud_provider","cloud_provider_credential_identifier","kube_integration_id","o_id_c_integration_id","gcp_integration_id","aws_integration_id","do_integration_id","azure_integration_id","token_cache_id","certificate_authority_data","monitor_helm_releases")
+SELECT "created_at","updated_at","deleted_at","auth_mechanism","project_id","agent_integration_enabled","name","vanity_name","server","cluster_location_of_origin","tls_server_name","insecure_skip_tls_verify","proxy_url","user_location_of_origin","user_impersonate","user_impersonate_groups","infra_id","notifications_disabled","preview_envs_enabled","aws_cluster_id","status","provisioned_by","cloud_provider","cloud_provider_credential_identifier","kube_integration_id","o_id_c_integration_id","gcp_integration_id","aws_integration_id","do_integration_id","azure_integration_id","token_cache_id","certificate_authority_data","monitor_helm_releases"
+from clusters where id = 1;
+update clusters set project_id = 2, kube_integration_id = 3 where id = 2;
+
+INSERT INTO "public"."clusters"("created_at","updated_at","deleted_at","auth_mechanism","project_id","agent_integration_enabled","name","vanity_name","server","cluster_location_of_origin","tls_server_name","insecure_skip_tls_verify","proxy_url","user_location_of_origin","user_impersonate","user_impersonate_groups","infra_id","notifications_disabled","preview_envs_enabled","aws_cluster_id","status","provisioned_by","cloud_provider","cloud_provider_credential_identifier","kube_integration_id","o_id_c_integration_id","gcp_integration_id","aws_integration_id","do_integration_id","azure_integration_id","token_cache_id","certificate_authority_data","monitor_helm_releases")
+SELECT "created_at","updated_at","deleted_at","auth_mechanism","project_id","agent_integration_enabled","name","vanity_name","server","cluster_location_of_origin","tls_server_name","insecure_skip_tls_verify","proxy_url","user_location_of_origin","user_impersonate","user_impersonate_groups","infra_id","notifications_disabled","preview_envs_enabled","aws_cluster_id","status","provisioned_by","cloud_provider","cloud_provider_credential_identifier","kube_integration_id","o_id_c_integration_id","gcp_integration_id","aws_integration_id","do_integration_id","azure_integration_id","token_cache_id","certificate_authority_data","monitor_helm_releases"
+from clusters where id = 1;
+update clusters set project_id = 1, kube_integration_id = 2 where id = 1;
+
+insert into deployment_targets (id, cluster_id, project_id, selector, selector_type) values (gen_random_uuid(), 1, 1, 'default', 'NAMESPACE'),(gen_random_uuid(), 2, 2, 'default', 'NAMESPACE');
+
+/** connect registry **/
+INSERT INTO "public"."aws_assume_role_chains"(id, "project_id","source_arn","target_arn","external_id")
+VALUES
+(gen_random_uuid(), 1,E'arn:aws:iam::026281491146:role/OrganizationAccountAccessRole',E'arn:aws:iam::026281491146:role/porter-manager',E'f4dfb0ab-2120-4ca1-a78b-d0fe07f38daa'),
+(gen_random_uuid(), 1,E'arn:aws:iam::975032674314:user/stefan',E'arn:aws:iam::026281491146:role/OrganizationAccountAccessRole',E''),
+(gen_random_uuid(), 2,E'arn:aws:iam::026281491146:role/OrganizationAccountAccessRole',E'arn:aws:iam::026281491146:role/porter-manager',E'f4dfb0ab-2120-4ca1-a78b-d0fe07f38daa'),
+(gen_random_uuid(), 2,E'arn:aws:iam::975032674314:user/stefan',E'arn:aws:iam::026281491146:role/OrganizationAccountAccessRole',E'');
+
+INSERT INTO registries(name, url, project_id) values ('first', 'https://026281491146.dkr.ecr.us-east-1.amazonaws.com', 1), ('second', 'https://026281491146.dkr.ecr.us-east-1.amazonaws.com', 2);
+
+```
+
+Pull helm values from existing helm chart (Run all in `porter/local`)
+
+`helm get values nginxa > non-umbrella.yaml`
+
+`porter apply -f porter.yaml`
+
+## New Attempt: 1
+
+- Create empty umbrella chart release `helm install -n porter-stack-appc appc ./chart` -> creates empty umbrella with a hello-porter charts
+- Get values on `helm -n porter-stack-appc get values appc > umbrella-values.yaml`
+- Create app with legacy chart `helm install porter porter/web -f non-umbrella.yaml --namespace porter-stack-appc`
+- Get legacy chart's values `helm -n porter-stack-appc get values porter > legacy.yaml`
+- Indent legacy values to match umbrella charts values (key should be the chart's name .i.e `porter-web`) into a new file called `umbrella-values.yaml`
+
+- retag legacy chart
+  `app.kubernetes.io/name` label should be web
+  `meta.helm.sh/release-name` annotation needs to be the name of the app before web
+
+example:
+
+given an existing app called porter-web, we would need:
+`app.kubernetes.io/name=web`
+`meta.helm.sh/release-name=porter`
+This means that when we create the new umbrella chart with no dependencies, it should be called a combination of these names
+
+```
+KIND=deployment
+NAME=porter-web
+RELEASE_NAME=appc
+NAMESPACE=porter-stack-appc
+kubectl annotate $KIND $NAME meta.helm.sh/release-name=$RELEASE_NAME -n $NAMESPACE --overwrite
+kubectl annotate $KIND $NAME meta.helm.sh/release-namespace=$NAMESPACE -n $NAMESPACE --overwrite
+kubectl label $KIND $NAME app.kubernetes.io/managed-by=Helm -n $NAMESPACE
+```
+
+- Add legacy web chart as a dependency to the Chart.yaml
+
+```yaml
+dependencies:
+  - name: web
+    version: "0.136.0"
+    repository: "https://charts.getporter.dev"
+    alias: "porter-web"
+```
+
+- Upgrade new umbrella chart with new values file `helm upgrade -n porter-stack-appc appc ./chart -f umbrella-values.yaml`
+
+Outcome: created a new revision of the umbrella chart with all the same values in the same namespace, instantiating the legacy app under its control. Legacy app was left running still. Helm list still showed legacy app. Unable to change port on UI
+
+## New Attempt: 2
+
+- Create app with legacy chart `helm install porter porter/web -f non-umbrella.yaml --namespace porter-stack-appc`
+- ensure no deps in chart.yaml, then create hello-world porter app `helm -n porter-stack-appc template new-umbrella chart --set addAnnotations=true,addLabels=true | k apply -n porter-stack-appc -f - `
+
+```
+helm -n porter-stack-appc template new-umbrella chart | k apply -n porter-stack-appc -f -
+
+```
+
+<!-- KIND=deployment
+NAME=new-umbrella-web
+RELEASE_NAME=new-umbrella
+NAMESPACE=porter-stack-appc
+kubectl annotate $KIND $NAME meta.helm.sh/release-name=$RELEASE_NAME -n $NAMESPACE --overwrite
+kubectl annotate $KIND $NAME meta.helm.sh/release-namespace=$NAMESPACE -n $NAMESPACE --overwrite
+kubectl label $KIND $NAME app.kubernetes.io/managed-by=Helm -n $NAMESPACE -->
+
+## Attempt 3 - not using web and umbrella, trying only on pod for now
+
+Install foo with kubectl, not helm, then import it into helm, then run a revision update.
+Edit the chart templates before upgrade to see changes in the pod
+
+```
+KIND=deployment
+NAME=foo
+TARGET_RELEASE_NAME=foo
+NAMESPACE=default
+
+helm template $TARGET_RELEASE_NAME testchart | kubectl create -f -
+
+kubectl annotate $KIND $NAME meta.helm.sh/release-name=$TARGET_RELEASE_NAME -n $NAMESPACE --overwrite
+kubectl annotate $KIND $NAME meta.helm.sh/release-namespace=$NAMESPACE -n $NAMESPACE --overwrite
+kubectl label $KIND $NAME app.kubernetes.io/managed-by=Helm -n $NAMESPACE
+
+helm install foo testchart
+helm upgrade foo testchart
+```
+
+Create `bar`, another helm chart, then attempt to import it into foo, and run an update on foo
+
+```
+helm install bar testchart
+helm upgrade bar testchart
+
+KIND=deployment
+NAME=bar
+TARGET_RELEASE_NAME=foo
+NAMESPACE=default
+
+kubectl annotate $KIND $NAME meta.helm.sh/release-name=$TARGET_RELEASE_NAME -n $NAMESPACE --overwrite
+kubectl annotate $KIND $NAME meta.helm.sh/release-namespace=$NAMESPACE -n $NAMESPACE --overwrite
+kubectl label $KIND $NAME app.kubernetes.io/managed-by=Helm -n $NAMESPACE
+
+# Running upgrade bar here, reverts the changes to the labels and annotations
+
+helm upgrade foo testchart
+```
+
+DOESNT WORK BECAUSE OF RELEASE NAMES (SUSPECTED).
+Trying again with umbrella importing dependencies
+
+```
+helm dependency build testumbrella
+
+KIND=deployment
+NAME=foo
+TARGET_RELEASE_NAME=foo
+NAMESPACE=default
+
+helm template $TARGET_RELEASE_NAME testumbrella --set foo.MyName=foo | kubectl create -f -
+
+kubectl annotate $KIND $NAME meta.helm.sh/release-name=$TARGET_RELEASE_NAME -n $NAMESPACE --overwrite
+kubectl annotate $KIND $NAME meta.helm.sh/release-namespace=$NAMESPACE -n $NAMESPACE --overwrite
+kubectl label $KIND $NAME app.kubernetes.io/managed-by=Helm -n $NAMESPACE
+
+helm install foo testumbrella --set foo.MyName=foo
+
+# make changes to depchart
+
+helm dependency update testumbrella
+helm upgrade foo testumbrella
+
+### foo can be updated within the umbrella chart. Lets try create and import bar
+helm install bar testchart
+helm upgrade bar testchart
+
+KIND=deployment
+NAME=bar
+kubectl annotate $KIND $NAME meta.helm.sh/release-name=$TARGET_RELEASE_NAME -n $NAMESPACE --overwrite
+kubectl annotate $KIND $NAME meta.helm.sh/release-namespace=$NAMESPACE -n $NAMESPACE --overwrite
+kubectl label $KIND $NAME app.kubernetes.io/managed-by=Helm -n $NAMESPACE
+
+# Add bar to the chart
+helm upgrade foo testumbrella --set bar.MyName=bar --reuse-values
+```

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff