in tooling/mcerepkg/internal/rukpak/convert/registryv1.go [58:156]
func RegistryV1ToPlain(rv1 fs.FS, installNamespace string, watchNamespaces []string) (fs.FS, RegistryV1, error) {
reg := RegistryV1{}
fileData, err := fs.ReadFile(rv1, filepath.Join("metadata", "annotations.yaml"))
if err != nil {
return nil, reg, err
}
annotationsFile := registry.AnnotationsFile{}
if err := yaml.Unmarshal(fileData, &annotationsFile); err != nil {
return nil, reg, err
}
reg.PackageName = annotationsFile.Annotations.PackageName
var objects []*unstructured.Unstructured
const manifestsDir = "manifests"
entries, err := fs.ReadDir(rv1, manifestsDir)
if err != nil {
return nil, reg, err
}
for _, e := range entries {
if e.IsDir() {
return nil, reg, fmt.Errorf("subdirectories are not allowed within the %q directory of the bundle image filesystem: found %q", manifestsDir, filepath.Join(manifestsDir, e.Name()))
}
fileData, err := fs.ReadFile(rv1, filepath.Join(manifestsDir, e.Name()))
if err != nil {
return nil, reg, err
}
dec := apimachyaml.NewYAMLOrJSONDecoder(bytes.NewReader(fileData), 1024)
for {
obj := unstructured.Unstructured{}
err := dec.Decode(&obj)
if errors.Is(err, io.EOF) {
break
}
if err != nil {
return nil, reg, fmt.Errorf("read %q: %v", e.Name(), err)
}
objects = append(objects, &obj)
}
}
for _, obj := range objects {
obj := obj
switch obj.GetObjectKind().GroupVersionKind().Kind {
case "ClusterServiceVersion":
csv := v1alpha1.ClusterServiceVersion{}
if err := runtime.DefaultUnstructuredConverter.FromUnstructured(obj.Object, &csv); err != nil {
return nil, reg, err
}
reg.CSV = csv
case "CustomResourceDefinition":
crd := apiextensionsv1.CustomResourceDefinition{}
if err := runtime.DefaultUnstructuredConverter.FromUnstructured(obj.Object, &crd); err != nil {
return nil, reg, err
}
reg.CRDs = append(reg.CRDs, crd)
default:
reg.Others = append(reg.Others, *obj)
}
}
plain, err := Convert(reg, installNamespace, watchNamespaces)
if err != nil {
return nil, reg, err
}
var manifest bytes.Buffer
for _, obj := range plain.Objects {
yamlData, err := yaml.Marshal(obj)
if err != nil {
return nil, reg, err
}
if _, err := fmt.Fprintf(&manifest, "---\n%s\n", string(yamlData)); err != nil {
return nil, reg, err
}
}
now := time.Now()
plainFS := fstest.MapFS{
".": &fstest.MapFile{
Data: nil,
Mode: fs.ModeDir | 0o755,
ModTime: now,
},
"manifests": &fstest.MapFile{
Data: nil,
Mode: fs.ModeDir | 0o755,
ModTime: now,
},
"manifests/manifest.yaml": &fstest.MapFile{
Data: manifest.Bytes(),
Mode: 0o644,
ModTime: now,
},
}
return plainFS, reg, nil
}