github.com/verrazzano/verrazzano@v1.7.0/tools/oam-converter/pkg/resources/createresources.go (about) 1 // Copyright (c) 2023, Oracle and/or its affiliates. 2 // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. 3 4 package resources 5 6 import ( 7 "fmt" 8 coallateHosts "github.com/verrazzano/verrazzano/pkg/ingresstrait" 9 azp "github.com/verrazzano/verrazzano/tools/oam-converter/pkg/resources/authorizationpolicy" 10 destination "github.com/verrazzano/verrazzano/tools/oam-converter/pkg/resources/destinationrule" 11 gw "github.com/verrazzano/verrazzano/tools/oam-converter/pkg/resources/gateway" 12 vs "github.com/verrazzano/verrazzano/tools/oam-converter/pkg/resources/virtualservice" 13 "github.com/verrazzano/verrazzano/tools/oam-converter/pkg/resources/workloads" 14 "github.com/verrazzano/verrazzano/tools/oam-converter/pkg/types" 15 istioclient "istio.io/client-go/pkg/apis/networking/v1alpha3" 16 vsapi "istio.io/client-go/pkg/apis/networking/v1beta1" 17 clisecurity "istio.io/client-go/pkg/apis/security/v1beta1" 18 "sigs.k8s.io/controller-runtime/pkg/client" 19 ) 20 21 func CreateResources(cli client.Client, conversionComponents []*types.ConversionComponents) (*types.KubeResources, error) { 22 23 var virtualServices []*vsapi.VirtualService 24 var destinationRules []*istioclient.DestinationRule 25 var authzPolicies []*clisecurity.AuthorizationPolicy 26 var virtualService []*vsapi.VirtualService 27 var destinationRule []*istioclient.DestinationRule 28 var authzPolicy []*clisecurity.AuthorizationPolicy 29 outputResources := types.KubeResources{} 30 31 gateway, allHostsForTrait, err := gw.CreateGatewayResource(cli, conversionComponents) 32 33 if err != nil { 34 return nil, err 35 } 36 listGateway, err := gw.CreateListGateway(gateway) 37 if err != nil { 38 return nil, err 39 } 40 41 for _, conversionComponent := range conversionComponents { 42 43 if conversionComponent.Weblogicworkload != nil || conversionComponent.Coherenceworkload != nil { 44 45 virtualService, destinationRule, authzPolicy, err = createChildResources(cli, conversionComponent, gateway, allHostsForTrait) 46 if err != nil { 47 return nil, fmt.Errorf("failed to create Child resources from Weblogic workload %w", err) 48 49 } 50 virtualServices = append(virtualServices, virtualService...) 51 destinationRules = append(destinationRules, destinationRule...) 52 authzPolicies = append(authzPolicies, authzPolicy...) 53 54 } 55 if conversionComponent.Helidonworkload != nil || conversionComponent.Service != nil { 56 virtualService, destinationRule, authzPolicy, err = workloads.CreateIngressChildResourcesFromWorkload(cli, conversionComponent, gateway, allHostsForTrait) 57 if err != nil { 58 return nil, fmt.Errorf("failed to create Child resources from workload %w", err) 59 60 } 61 virtualServices = append(virtualServices, virtualService...) 62 destinationRules = append(destinationRules, destinationRule...) 63 authzPolicies = append(authzPolicies, authzPolicy...) 64 65 } 66 } 67 //Appending it to Kube Resources to print the output 68 outputResources.DestinationRules = destinationRules 69 outputResources.AuthPolicies = authzPolicies 70 outputResources.VirtualServices = virtualServices 71 outputResources.Gateway = listGateway 72 return &outputResources, nil 73 } 74 75 func createChildResources(cli client.Client, conversionComponent *types.ConversionComponents, gateway *vsapi.Gateway, allHostsForTrait []string) ([]*vsapi.VirtualService, []*istioclient.DestinationRule, []*clisecurity.AuthorizationPolicy, error) { 76 77 if conversionComponent.IngressTrait != nil { 78 rules := conversionComponent.IngressTrait.Spec.Rules 79 var virtualServices []*vsapi.VirtualService 80 var destinationRules []*istioclient.DestinationRule 81 var authzPolicies []*clisecurity.AuthorizationPolicy 82 for index, rule := range rules { 83 84 // Find the services associated with the trait in the application configuration. 85 86 vsHosts, err := coallateHosts.CreateHostsFromIngressTraitRule(cli, rule, conversionComponent.IngressTrait, conversionComponent.AppName, conversionComponent.AppNamespace) 87 88 if err != nil { 89 print(err) 90 return nil, nil, nil, err 91 } 92 vsName := fmt.Sprintf("%s-rule-%d-vs", conversionComponent.IngressTrait.Name, index) 93 drName := fmt.Sprintf("%s-rule-%d-dr", conversionComponent.IngressTrait.Name, index) 94 authzPolicyName := fmt.Sprintf("%s-rule-%d-authz", conversionComponent.IngressTrait.Name, index) 95 virtualService, err := vs.CreateVirtualService(conversionComponent.IngressTrait, rule, vsHosts, vsName, gateway) 96 virtualServices = append(virtualServices, virtualService) 97 98 if err != nil { 99 return nil, nil, nil, err 100 } 101 destinationRule, err := destination.CreateDestinationRule(conversionComponent.IngressTrait, rule, drName) 102 destinationRules = append(destinationRules, destinationRule) 103 if err != nil { 104 return nil, nil, nil, err 105 } 106 authzPolicy, err := azp.CreateAuthorizationPolicies(conversionComponent.IngressTrait, rule, authzPolicyName, allHostsForTrait) 107 if err != nil { 108 return nil, nil, nil, err 109 } 110 authzPolicies = append(authzPolicies, authzPolicy) 111 } 112 return virtualServices, destinationRules, authzPolicies, nil 113 } 114 115 return nil, nil, nil, fmt.Errorf("ingress Trait is empty") 116 117 }