func BuildSDKVirtualNodeSpec()

in pkg/virtualnode/resource_manager.go [334:371]


func BuildSDKVirtualNodeSpec(vn *appmesh.VirtualNode, vsByKey map[types.NamespacedName]*appmesh.VirtualService) (*appmeshsdk.VirtualNodeSpec, error) {
	converter := conversion.NewConverter(conversion.DefaultNameFunc)
	converter.RegisterUntypedConversionFunc((*appmesh.VirtualNodeSpec)(nil), (*appmeshsdk.VirtualNodeSpec)(nil), func(a, b interface{}, scope conversion.Scope) error {
		return conversions.Convert_CRD_VirtualNodeSpec_To_SDK_VirtualNodeSpec(a.(*appmesh.VirtualNodeSpec), b.(*appmeshsdk.VirtualNodeSpec), scope)
	})
	sdkVSRefConvertFunc := references.BuildSDKVirtualServiceReferenceConvertFunc(vn, vsByKey)
	converter.RegisterUntypedConversionFunc((*appmesh.VirtualServiceReference)(nil), (*string)(nil), func(a, b interface{}, scope conversion.Scope) error {
		return sdkVSRefConvertFunc(a.(*appmesh.VirtualServiceReference), b.(*string), scope)
	})
	sdkVNSpec := &appmeshsdk.VirtualNodeSpec{}
	tempSpec := vn.Spec.DeepCopy()
	backendMap := make(map[types.NamespacedName]bool)

	for _, backend := range tempSpec.Backends {
		if backend.VirtualService.VirtualServiceRef != nil {
			vsKey := references.ObjectKeyForVirtualServiceReference(vn, *backend.VirtualService.VirtualServiceRef)
			backendMap[vsKey] = true
		}
	}

	for vsKey, vs := range vsByKey {
		if _, ok := backendMap[vsKey]; ok {
			continue
		}
		tempSpec.Backends = append(tempSpec.Backends, appmesh.Backend{
			VirtualService: appmesh.VirtualServiceBackend{
				VirtualServiceRef: &appmesh.VirtualServiceReference{
					Namespace: aws.String(vs.Namespace),
					Name:      vs.Name,
				},
			},
		})
	}
	if err := converter.Convert(tempSpec, sdkVNSpec, nil); err != nil {
		return nil, err
	}
	return sdkVNSpec, nil
}