mirror of https://github.com/fluxcd/cli-utils.git
				
				
				
			update events to include indentifier and error
This commit is contained in:
		
							parent
							
								
									41980533f6
								
							
						
					
					
						commit
						5d8fb759a0
					
				| 
						 | 
				
			
			@ -10,7 +10,6 @@ import (
 | 
			
		|||
 | 
			
		||||
	"github.com/stretchr/testify/assert"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/runtime/schema"
 | 
			
		||||
	"k8s.io/cli-runtime/pkg/genericclioptions"
 | 
			
		||||
	"sigs.k8s.io/cli-utils/pkg/apply/event"
 | 
			
		||||
| 
						 | 
				
			
			@ -241,7 +240,7 @@ func TestFormatter_FormatDeleteEvent(t *testing.T) {
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func createObject(group, kind, namespace, name string) runtime.Object {
 | 
			
		||||
func createObject(group, kind, namespace, name string) *unstructured.Unstructured {
 | 
			
		||||
	return &unstructured.Unstructured{
 | 
			
		||||
		Object: map[string]interface{}{
 | 
			
		||||
			"apiVersion": fmt.Sprintf("%s/v1", group),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,6 @@ import (
 | 
			
		|||
 | 
			
		||||
	"github.com/stretchr/testify/assert"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/runtime/schema"
 | 
			
		||||
	"k8s.io/cli-runtime/pkg/genericclioptions"
 | 
			
		||||
	"sigs.k8s.io/cli-utils/pkg/apply/event"
 | 
			
		||||
| 
						 | 
				
			
			@ -386,7 +385,7 @@ func assertOutput(t *testing.T, expectedMap map[string]interface{}, actual strin
 | 
			
		|||
	return assert.Equal(t, expectedMap, m)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func createObject(group, kind, namespace, name string) runtime.Object {
 | 
			
		||||
func createObject(group, kind, namespace, name string) *unstructured.Unstructured {
 | 
			
		||||
	return &unstructured.Unstructured{
 | 
			
		||||
		Object: map[string]interface{}{
 | 
			
		||||
			"apiVersion": fmt.Sprintf("%s/v1", group),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,11 +13,12 @@ func _() {
 | 
			
		|||
	var x [1]struct{}
 | 
			
		||||
	_ = x[ApplyEventResourceUpdate-0]
 | 
			
		||||
	_ = x[ApplyEventCompleted-1]
 | 
			
		||||
	_ = x[ApplyEventFailed-2]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const _ApplyEventType_name = "ApplyEventResourceUpdateApplyEventCompleted"
 | 
			
		||||
const _ApplyEventType_name = "ApplyEventResourceUpdateApplyEventCompletedApplyEventFailed"
 | 
			
		||||
 | 
			
		||||
var _ApplyEventType_index = [...]uint8{0, 24, 43}
 | 
			
		||||
var _ApplyEventType_index = [...]uint8{0, 24, 43, 59}
 | 
			
		||||
 | 
			
		||||
func (i ApplyEventType) String() string {
 | 
			
		||||
	if i < 0 || i >= ApplyEventType(len(_ApplyEventType_index)-1) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,11 +13,12 @@ func _() {
 | 
			
		|||
	var x [1]struct{}
 | 
			
		||||
	_ = x[DeleteEventResourceUpdate-0]
 | 
			
		||||
	_ = x[DeleteEventCompleted-1]
 | 
			
		||||
	_ = x[DeleteEventFailed-2]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const _DeleteEventType_name = "DeleteEventResourceUpdateDeleteEventCompleted"
 | 
			
		||||
const _DeleteEventType_name = "DeleteEventResourceUpdateDeleteEventCompletedDeleteEventFailed"
 | 
			
		||||
 | 
			
		||||
var _DeleteEventType_index = [...]uint8{0, 25, 45}
 | 
			
		||||
var _DeleteEventType_index = [...]uint8{0, 25, 45, 62}
 | 
			
		||||
 | 
			
		||||
func (i DeleteEventType) String() string {
 | 
			
		||||
	if i < 0 || i >= DeleteEventType(len(_DeleteEventType_index)-1) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,7 @@
 | 
			
		|||
package event
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 | 
			
		||||
	pollevent "sigs.k8s.io/cli-utils/pkg/kstatus/polling/event"
 | 
			
		||||
	"sigs.k8s.io/cli-utils/pkg/object"
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			@ -81,6 +81,7 @@ type ApplyEventType int
 | 
			
		|||
const (
 | 
			
		||||
	ApplyEventResourceUpdate ApplyEventType = iota
 | 
			
		||||
	ApplyEventCompleted
 | 
			
		||||
	ApplyEventFailed
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
//go:generate stringer -type=ApplyEventOperation
 | 
			
		||||
| 
						 | 
				
			
			@ -96,7 +97,9 @@ const (
 | 
			
		|||
type ApplyEvent struct {
 | 
			
		||||
	Type       ApplyEventType
 | 
			
		||||
	Operation  ApplyEventOperation
 | 
			
		||||
	Object    runtime.Object
 | 
			
		||||
	Object     *unstructured.Unstructured
 | 
			
		||||
	Identifier object.ObjMetadata
 | 
			
		||||
	Error      error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//go:generate stringer -type=StatusEventType
 | 
			
		||||
| 
						 | 
				
			
			@ -110,6 +113,7 @@ const (
 | 
			
		|||
type StatusEvent struct {
 | 
			
		||||
	Type     StatusEventType
 | 
			
		||||
	Resource *pollevent.ResourceStatus
 | 
			
		||||
	Error    error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//go:generate stringer -type=PruneEventType
 | 
			
		||||
| 
						 | 
				
			
			@ -118,6 +122,7 @@ type PruneEventType int
 | 
			
		|||
const (
 | 
			
		||||
	PruneEventResourceUpdate PruneEventType = iota
 | 
			
		||||
	PruneEventCompleted
 | 
			
		||||
	PruneEventFailed
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
//go:generate stringer -type=PruneEventOperation
 | 
			
		||||
| 
						 | 
				
			
			@ -131,7 +136,9 @@ const (
 | 
			
		|||
type PruneEvent struct {
 | 
			
		||||
	Type       PruneEventType
 | 
			
		||||
	Operation  PruneEventOperation
 | 
			
		||||
	Object    runtime.Object
 | 
			
		||||
	Object     *unstructured.Unstructured
 | 
			
		||||
	Identifier object.ObjMetadata
 | 
			
		||||
	Error      error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//go:generate stringer -type=DeleteEventType
 | 
			
		||||
| 
						 | 
				
			
			@ -140,6 +147,7 @@ type DeleteEventType int
 | 
			
		|||
const (
 | 
			
		||||
	DeleteEventResourceUpdate DeleteEventType = iota
 | 
			
		||||
	DeleteEventCompleted
 | 
			
		||||
	DeleteEventFailed
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
//go:generate stringer -type=DeleteEventOperation
 | 
			
		||||
| 
						 | 
				
			
			@ -153,5 +161,7 @@ const (
 | 
			
		|||
type DeleteEvent struct {
 | 
			
		||||
	Type       DeleteEventType
 | 
			
		||||
	Operation  DeleteEventOperation
 | 
			
		||||
	Object    runtime.Object
 | 
			
		||||
	Object     *unstructured.Unstructured
 | 
			
		||||
	Identifier object.ObjMetadata
 | 
			
		||||
	Error      error
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,11 +13,12 @@ func _() {
 | 
			
		|||
	var x [1]struct{}
 | 
			
		||||
	_ = x[PruneEventResourceUpdate-0]
 | 
			
		||||
	_ = x[PruneEventCompleted-1]
 | 
			
		||||
	_ = x[PruneEventFailed-2]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const _PruneEventType_name = "PruneEventResourceUpdatePruneEventCompleted"
 | 
			
		||||
const _PruneEventType_name = "PruneEventResourceUpdatePruneEventCompletedPruneEventFailed"
 | 
			
		||||
 | 
			
		||||
var _PruneEventType_index = [...]uint8{0, 24, 43}
 | 
			
		||||
var _PruneEventType_index = [...]uint8{0, 24, 43, 59}
 | 
			
		||||
 | 
			
		||||
func (i PruneEventType) String() string {
 | 
			
		||||
	if i < 0 || i >= PruneEventType(len(_PruneEventType_index)-1) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,7 +21,6 @@ import (
 | 
			
		|||
	"k8s.io/apimachinery/pkg/api/meta"
 | 
			
		||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/sets"
 | 
			
		||||
	"k8s.io/client-go/dynamic"
 | 
			
		||||
	"k8s.io/klog"
 | 
			
		||||
| 
						 | 
				
			
			@ -188,7 +187,7 @@ func preventDeleteAnnotation(annotations map[string]string) bool {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
// createPruneEvent is a helper function to package a prune event.
 | 
			
		||||
func createPruneEvent(obj runtime.Object, op event.PruneEventOperation) event.Event {
 | 
			
		||||
func createPruneEvent(obj *unstructured.Unstructured, op event.PruneEventOperation) event.Event {
 | 
			
		||||
	return event.Event{
 | 
			
		||||
		Type: event.PruneType,
 | 
			
		||||
		PruneEvent: event.PruneEvent{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,9 +7,11 @@ import (
 | 
			
		|||
	"fmt"
 | 
			
		||||
	"io"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
			
		||||
	"k8s.io/cli-runtime/pkg/printers"
 | 
			
		||||
	"sigs.k8s.io/cli-utils/pkg/apply/event"
 | 
			
		||||
	"sigs.k8s.io/cli-utils/pkg/object"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// KubectlPrinterAdapter is a workaround for capturing progress from
 | 
			
		||||
| 
						 | 
				
			
			@ -36,7 +38,8 @@ func (r *resourcePrinterImpl) PrintObj(obj runtime.Object, _ io.Writer) error {
 | 
			
		|||
		ApplyEvent: event.ApplyEvent{
 | 
			
		||||
			Type:       event.ApplyEventResourceUpdate,
 | 
			
		||||
			Operation:  r.applyOperation,
 | 
			
		||||
			Object:    obj,
 | 
			
		||||
			Object:     obj.(*unstructured.Unstructured),
 | 
			
		||||
			Identifier: object.RuntimeToObjMeta(obj),
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,8 +9,7 @@ import (
 | 
			
		|||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"github.com/stretchr/testify/assert"
 | 
			
		||||
	appsv1 "k8s.io/api/apps/v1"
 | 
			
		||||
	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 | 
			
		||||
	"sigs.k8s.io/cli-utils/pkg/apply/event"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -27,14 +26,14 @@ func TestKubectlPrinterAdapter(t *testing.T) {
 | 
			
		|||
	resourcePrinter, err := toPrinterFunc(operation)
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
 | 
			
		||||
	deployment := appsv1.Deployment{
 | 
			
		||||
		TypeMeta: v1.TypeMeta{
 | 
			
		||||
			APIVersion: "apps/v1",
 | 
			
		||||
			Kind:       "Deployment",
 | 
			
		||||
	deployment := &unstructured.Unstructured{
 | 
			
		||||
		Object: map[string]interface{}{
 | 
			
		||||
			"apiVersion": "apps/v1",
 | 
			
		||||
			"kind":       "Deployment",
 | 
			
		||||
			"metadata": map[string]interface{}{
 | 
			
		||||
				"name":      "name",
 | 
			
		||||
				"namespace": "namespace",
 | 
			
		||||
			},
 | 
			
		||||
		ObjectMeta: v1.ObjectMeta{
 | 
			
		||||
			Name:      "name",
 | 
			
		||||
			Namespace: "namespace",
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -44,12 +43,12 @@ func TestKubectlPrinterAdapter(t *testing.T) {
 | 
			
		|||
	wg.Add(1)
 | 
			
		||||
	go func() {
 | 
			
		||||
		defer wg.Done()
 | 
			
		||||
		err = resourcePrinter.PrintObj(&deployment, &buffer)
 | 
			
		||||
		err = resourcePrinter.PrintObj(deployment, &buffer)
 | 
			
		||||
	}()
 | 
			
		||||
	msg := <-ch
 | 
			
		||||
	wg.Wait()
 | 
			
		||||
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
	assert.Equal(t, event.ServersideApplied, msg.ApplyEvent.Operation)
 | 
			
		||||
	assert.Equal(t, &deployment, msg.ApplyEvent.Object)
 | 
			
		||||
	assert.Equal(t, deployment, msg.ApplyEvent.Object)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,7 +24,9 @@ import (
 | 
			
		|||
 | 
			
		||||
	corev1 "k8s.io/api/core/v1"
 | 
			
		||||
	rbacv1 "k8s.io/api/rbac/v1"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/api/meta"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/runtime/schema"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/validation"
 | 
			
		||||
	"k8s.io/cli-runtime/pkg/resource"
 | 
			
		||||
| 
						 | 
				
			
			@ -218,6 +220,15 @@ func UnstructuredToObjMeta(obj *unstructured.Unstructured) ObjMetadata {
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func RuntimeToObjMeta(obj runtime.Object) ObjMetadata {
 | 
			
		||||
	accessor, _ := meta.Accessor(obj)
 | 
			
		||||
	return ObjMetadata{
 | 
			
		||||
		Namespace: accessor.GetNamespace(),
 | 
			
		||||
		Name:      accessor.GetName(),
 | 
			
		||||
		GroupKind: obj.GetObjectKind().GroupVersionKind().GroupKind(),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CalcHash returns a hash of the sorted strings from
 | 
			
		||||
// the object metadata, or an error if one occurred.
 | 
			
		||||
func Hash(objs []ObjMetadata) (string, error) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue