newSecretsObject constructs a kubernetes Secret object to store a release. Each secret data entry is the base64 encoded gzipped string of a release. The following labels are used within each secret: "modifiedAt" - timestamp indicating when this secret was last modified. (set in Update) "creat
(key string, rls *rspb.Release, lbs labels)
| 244 | // "owner" - owner of the secret, currently "helm". |
| 245 | // "name" - name of the release. |
| 246 | func newSecretsObject(key string, rls *rspb.Release, lbs labels) (*v1.Secret, error) { |
| 247 | const owner = "helm" |
| 248 | |
| 249 | // encode the release |
| 250 | s, err := encodeRelease(rls) |
| 251 | if err != nil { |
| 252 | return nil, err |
| 253 | } |
| 254 | |
| 255 | if lbs == nil { |
| 256 | lbs.init() |
| 257 | } |
| 258 | |
| 259 | // apply custom labels |
| 260 | lbs.fromMap(rls.Labels) |
| 261 | |
| 262 | // apply labels |
| 263 | lbs.set("name", rls.Name) |
| 264 | lbs.set("owner", owner) |
| 265 | lbs.set("status", rls.Info.Status.String()) |
| 266 | lbs.set("version", strconv.Itoa(rls.Version)) |
| 267 | |
| 268 | // create and return secret object. |
| 269 | // Helm 3 introduced setting the 'Type' field |
| 270 | // in the Kubernetes storage object. |
| 271 | // Helm defines the field content as follows: |
| 272 | // <helm_domain>/<helm_object>.v<helm_object_version> |
| 273 | // Type field for Helm 3: helm.sh/release.v1 |
| 274 | // Note: Version starts at 'v1' for Helm 3 and |
| 275 | // should be incremented if the release object |
| 276 | // metadata is modified. |
| 277 | // This would potentially be a breaking change |
| 278 | // and should only happen between major versions. |
| 279 | return &v1.Secret{ |
| 280 | ObjectMeta: metav1.ObjectMeta{ |
| 281 | Name: key, |
| 282 | Labels: lbs.toMap(), |
| 283 | }, |
| 284 | Type: "helm.sh/release.v1", |
| 285 | Data: map[string][]byte{"release": []byte(s)}, |
| 286 | }, nil |
| 287 | } |
searching dependent graphs…