Add Append method to bundle interface
This method would allow us to append bundle with new documents Change-Id: I201a2a0f2e7f707556a53495538c0f075ce6fe17 Relates-To: #238
This commit is contained in:
parent
6a2fba6f21
commit
edf09b0fd5
@ -18,8 +18,10 @@ import (
|
||||
"io"
|
||||
"strings"
|
||||
|
||||
"sigs.k8s.io/kustomize/api/k8sdeps/kunstruct"
|
||||
"sigs.k8s.io/kustomize/api/krusty"
|
||||
"sigs.k8s.io/kustomize/api/resmap"
|
||||
"sigs.k8s.io/kustomize/api/resource"
|
||||
"sigs.k8s.io/kustomize/api/types"
|
||||
|
||||
"opendev.org/airship/airshipctl/pkg/environment"
|
||||
@ -53,6 +55,7 @@ type Bundle interface {
|
||||
GetByAnnotation(annotationSelector string) ([]Document, error)
|
||||
GetByLabel(labelSelector string) ([]Document, error)
|
||||
GetAllDocuments() ([]Document, error)
|
||||
Append(Document) error
|
||||
}
|
||||
|
||||
// NewBundleByPath helper function that returns new document.Bundle interface based on clusterType and
|
||||
@ -338,6 +341,20 @@ func (b *BundleFactory) GetByGvk(group, version, kind string) ([]Document, error
|
||||
return b.Select(selector)
|
||||
}
|
||||
|
||||
// Append bundle with the document, this only works with document interface implementation
|
||||
// that is provided by this package
|
||||
func (b *BundleFactory) Append(doc Document) error {
|
||||
yaml, err := doc.AsYAML()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
res, err := resource.NewFactory(kunstruct.NewKunstructuredFactoryImpl()).FromBytes(yaml)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return b.ResMap.Append(res)
|
||||
}
|
||||
|
||||
// Write will write out the entire bundle resource map
|
||||
func (b *BundleFactory) Write(out io.Writer) error {
|
||||
for _, res := range b.ResMap.Resources() {
|
||||
|
@ -151,6 +151,30 @@ func TestBundleDocumentFiltering(t *testing.T) {
|
||||
// obviously, this should be improved
|
||||
assert.Contains(b.String(), "workflow-controller")
|
||||
})
|
||||
|
||||
t.Run("BundleAppend", func(t *testing.T) {
|
||||
doc, err := document.NewDocumentFromBytes([]byte(`apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: append-secret
|
||||
namespace: metal3
|
||||
type: Opaque
|
||||
stringData:
|
||||
username: append-username
|
||||
password: append-password`))
|
||||
require.NoError(err)
|
||||
err = bundle.Append(doc)
|
||||
require.NoError(err)
|
||||
secretDoc, err := bundle.SelectOne(document.NewSelector().ByKind("Secret").ByName("append-secret"))
|
||||
require.NoError(err)
|
||||
require.NotNil(t, secretDoc)
|
||||
password, err := secretDoc.GetString("stringData.password")
|
||||
require.NoError(err)
|
||||
username, err := secretDoc.GetString("stringData.username")
|
||||
require.NoError(err)
|
||||
assert.Equal(password, "append-password")
|
||||
assert.Equal(username, "append-username")
|
||||
})
|
||||
}
|
||||
|
||||
func TestBundleOrder(t *testing.T) {
|
||||
|
Loading…
Reference in New Issue
Block a user