in internal/kubectl.go [268:320]
func (c Kubectl) GetMeta(resource, namespace string, w io.Writer) error {
r := c.factory.NewBuilder().
Unstructured().
NamespaceParam(namespace).DefaultNamespace().AllNamespaces(false).
ResourceTypeOrNameArgs(true, resource).
ContinueOnError().
Latest().
Flatten().
Do()
r.IgnoreErrors(apierrors.IsNotFound)
if err := r.Err(); err != nil {
return err
}
type MetaList struct {
Items []interface{}
}
var metas MetaList
metaAccess := meta.NewAccessor()
infos, err := r.Infos()
if err != nil {
return err
}
for i := range infos {
obj := infos[i].Object
annotations, err := metaAccess.Annotations(obj)
if err != nil {
return err
}
// last-applied-configuration can contain sensitive data let's remove it
delete(annotations, corev1.LastAppliedConfigAnnotation)
if err := metaAccess.SetAnnotations(obj, annotations); err != nil {
return err
}
unstructured, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj)
if err != nil {
return err
}
// remove the actual secret data
delete(unstructured, "data")
// or spec for other objects
delete(unstructured, "spec")
metas.Items = append(metas.Items, unstructured)
}
bytes, err := json.MarshalIndent(metas, "", " ")
if err != nil {
return err
}
_, err = w.Write(bytes)
return err
}