in hack/operatorhub/internal/operatorhub/operatorhub.go [303:365]
func extractYAMLParts(stream io.Reader) (*yamlExtracts, error) {
if err := apiextv1beta1.AddToScheme(scheme.Scheme); err != nil {
return nil, fmt.Errorf("while registering apiextensions/v1beta1: %w", err)
}
if err := apiextv1.AddToScheme(scheme.Scheme); err != nil {
return nil, fmt.Errorf("while registering apiextensions/v1: %w", err)
}
if err := admissionv1.AddToScheme(scheme.Scheme); err != nil {
return nil, fmt.Errorf("while registering admissionregistration/v1: %w", err)
}
decoder := scheme.Codecs.UniversalDeserializer()
yamlReader := yaml.NewYAMLReader(bufio.NewReader(stream))
parts := &yamlExtracts{
crds: make(map[string]*CRD),
}
for {
yamlBytes, err := yamlReader.Read()
if err != nil {
if errors.Is(err, io.EOF) {
return parts, nil
}
return nil, fmt.Errorf("while reading CRD YAML: %w", err)
}
yamlBytes = normalizeTrailingNewlines(yamlBytes)
runtimeObj, _, err := decoder.Decode(yamlBytes, nil, nil)
if err != nil {
return nil, fmt.Errorf("while decoding CRD YAML: %w", err)
}
switch obj := runtimeObj.(type) {
case *apiextv1beta1.CustomResourceDefinition:
parts.crds[obj.Name] = &CRD{
Name: obj.Name,
Group: obj.Spec.Group,
Kind: obj.Spec.Names.Kind,
Version: obj.Spec.Version,
Def: yamlBytes,
}
case *apiextv1.CustomResourceDefinition:
parts.crds[obj.Name] = &CRD{
Name: obj.Name,
Group: obj.Spec.Group,
Kind: obj.Spec.Names.Kind,
Version: obj.Spec.Versions[0].Name,
Def: yamlBytes,
}
case *rbacv1.ClusterRole:
if obj.Name == operatorName {
parts.operatorRBAC = obj.Rules
}
case *admissionv1.ValidatingWebhookConfiguration:
parts.operatorWebhooks = append(parts.operatorWebhooks, *obj)
}
}
}