@@ -5,23 +5,18 @@ import (
55 "context"
66 "encoding/json"
77 "fmt"
8- "github.com/hashicorp/hcl/v2"
98 "github.com/multycloud/multy/api/converter"
109 "github.com/multycloud/multy/api/errors"
11- "github.com/multycloud/multy/api/proto/common"
12- "github.com/multycloud/multy/api/proto/config"
13- "github.com/multycloud/multy/api/proto/creds"
14- "github.com/multycloud/multy/api/proto/resources"
10+ "github.com/multycloud/multy/api/proto/commonpb"
11+ "github.com/multycloud/multy/api/proto/configpb"
12+ "github.com/multycloud/multy/api/proto/credspb"
1513 "github.com/multycloud/multy/api/util"
16- "github.com/multycloud/multy/decoder"
1714 "github.com/multycloud/multy/encoder"
18- common_resources "github.com/multycloud/multy/resources"
19- cloud_providers "github.com/multycloud/multy/resources/common"
15+ "github.com/multycloud/multy/resources"
16+ "github.com/multycloud/multy/resources/common"
2017 "github.com/multycloud/multy/resources/output"
2118 rg "github.com/multycloud/multy/resources/resource_group"
2219 "github.com/multycloud/multy/resources/types"
23- "github.com/zclconf/go-cty/cty"
24- "github.com/zclconf/go-cty/cty/function"
2520 "google.golang.org/grpc/codes"
2621 "google.golang.org/grpc/status"
2722 "log"
@@ -43,98 +38,24 @@ var (
4338 AzureCredsNotSetErr = status .Error (codes .InvalidArgument , "azure credentials are required but not set" )
4439)
4540
46- func Translate (credentials * creds .CloudCredentials , c * config .Config , prev * config .Resource , curr * config .Resource ) (string , error ) {
41+ func Translate (credentials * credspb .CloudCredentials , c * configpb .Config , prev * configpb .Resource , curr * configpb .Resource ) (string , error ) {
4742 // TODO: get rid of this translation layer and instead use protos directly
48- translated := map [string ]common_resources.CloudSpecificResource {}
43+ translated := map [string ]resources.Resource {}
44+
4945 for _ , r := range c .Resources {
50- // TODO: move this to Converters
5146 resourceMessage := r .ResourceArgs .ResourceArgs
52- if resourceMessage .MessageIs (& resources.VirtualNetworkArgs {}) {
53- err := addMultyResource (r , translated , & converter.VnConverter {})
54- if err != nil {
55- return "" , err
56- }
57- } else if resourceMessage .MessageIs (& resources.SubnetArgs {}) {
58- err := addMultyResource (r , translated , & converter.SubnetConverter {})
59- if err != nil {
60- return "" , err
61- }
62- } else if resourceMessage .MessageIs (& resources.NetworkInterfaceArgs {}) {
63- err := addMultyResource (r , translated , & converter.NetworkInterfaceConverter {})
64- if err != nil {
65- return "" , err
66- }
67- } else if resourceMessage .MessageIs (& resources.RouteTableArgs {}) {
68- err := addMultyResource (r , translated , & converter.RouteTableConverter {})
69- if err != nil {
70- return "" , err
71- }
72- } else if resourceMessage .MessageIs (& resources.RouteTableAssociationArgs {}) {
73- err := addMultyResource (r , translated , & converter.RouteTableAssociationConverter {})
74- if err != nil {
75- return "" , err
76- }
77- } else if resourceMessage .MessageIs (& resources.NetworkSecurityGroupArgs {}) {
78- err := addMultyResource (r , translated , & converter.NetworkSecurityGroupConverter {})
79- if err != nil {
80- return "" , err
81- }
82- } else if resourceMessage .MessageIs (& resources.DatabaseArgs {}) {
83- err := addMultyResource (r , translated , & converter.DatabaseConverter {})
84- if err != nil {
85- return "" , err
86- }
87- } else if resourceMessage .MessageIs (& resources.ObjectStorageArgs {}) {
88- err := addMultyResource (r , translated , & converter.ObjectStorageConverter {})
89- if err != nil {
90- return "" , err
91- }
92- } else if resourceMessage .MessageIs (& resources.ObjectStorageObjectArgs {}) {
93- err := addMultyResource (r , translated , & converter.ObjectStorageObjectConverter {})
94- if err != nil {
95- return "" , err
96- }
97- } else if resourceMessage .MessageIs (& resources.PublicIpArgs {}) {
98- err := addMultyResource (r , translated , & converter.PublicIpConverter {})
99- if err != nil {
100- return "" , err
101- }
102- } else if resourceMessage .MessageIs (& resources.KubernetesClusterArgs {}) {
103- err := addMultyResource (r , translated , & converter.KubernetesClusterConverter {})
104- if err != nil {
105- return "" , err
106- }
107- } else if resourceMessage .MessageIs (& resources.KubernetesNodePoolArgs {}) {
108- err := addMultyResource (r , translated , & converter.KubernetesNodePoolConverter {})
109- if err != nil {
110- return "" , err
111- }
112- } else if resourceMessage .MessageIs (& resources.LambdaArgs {}) {
113- err := addMultyResource (r , translated , & converter.LambdaConverter {})
114- if err != nil {
115- return "" , err
116- }
117- } else if resourceMessage .MessageIs (& resources.VaultArgs {}) {
118- err := addMultyResource (r , translated , & converter.VaultConverter {})
119- if err != nil {
120- return "" , err
121- }
122- } else if resourceMessage .MessageIs (& resources.VaultAccessPolicyArgs {}) {
123- err := addMultyResource (r , translated , & converter.VaultAccessPolicyConverter {})
124- if err != nil {
125- return "" , err
126- }
127- } else if resourceMessage .MessageIs (& resources.VaultSecretArgs {}) {
128- err := addMultyResource (r , translated , & converter.VaultSecretConverter {})
129- if err != nil {
130- return "" , err
131- }
132- } else if resourceMessage .MessageIs (& resources.VirtualMachineArgs {}) {
133- err := addMultyResource (r , translated , & converter.VirtualMachineConverter {})
134- if err != nil {
135- return "" , err
47+ added := false
48+ for messageType , conv := range converter .Converters {
49+ if resourceMessage .MessageIs (messageType ) {
50+ err := addMultyResourceNew (r , translated , conv )
51+ if err != nil {
52+ return "" , err
53+ }
54+ added = true
55+ break
13656 }
137- } else {
57+ }
58+ if ! added {
13859 return "" , fmt .Errorf ("unknown resource type %s" , resourceMessage .MessageName ())
13960 }
14061 }
@@ -145,13 +66,8 @@ func Translate(credentials *creds.CloudCredentials, c *config.Config, prev *conf
14566 }
14667
14768 // TODO add s3 state file backend
148- decodedResources := decoder .DecodedResources {
69+ decodedResources := encoder .DecodedResources {
14970 Resources : translated ,
150- GlobalConfig : decoder.DecodedGlobalConfig {
151- Location : "ireland" ,
152- Clouds : cloud_providers .GetAllCloudProviders (),
153- DefaultRgName : rg .GetDefaultResourceGroupId (),
154- },
15571 Providers : provider ,
15672 }
15773
@@ -164,10 +80,10 @@ func Translate(credentials *creds.CloudCredentials, c *config.Config, prev *conf
16480 }
16581
16682 for _ , r := range translated {
167- if string ( r . Cloud ) == "aws" && (credentials .GetAwsCreds ().GetAccessKey () == "" || credentials .GetAwsCreds ().GetSecretKey () == "" ) {
83+ if r . GetCloud ( ) == commonpb . CloudProvider_AWS && (credentials .GetAwsCreds ().GetAccessKey () == "" || credentials .GetAwsCreds ().GetSecretKey () == "" ) {
16884 return hclOutput , AwsCredsNotSetErr
16985 }
170- if string ( r . Cloud ) == "azure" && (credentials .GetAzureCreds ().GetSubscriptionId () == "" ||
86+ if r . GetCloud ( ) == commonpb . CloudProvider_AZURE && (credentials .GetAzureCreds ().GetSubscriptionId () == "" ||
17187 credentials .GetAzureCreds ().GetClientId () == "" ||
17288 credentials .GetAzureCreds ().GetTenantId () == "" ||
17389 credentials .GetAzureCreds ().GetClientSecret () == "" ) {
@@ -178,7 +94,7 @@ func Translate(credentials *creds.CloudCredentials, c *config.Config, prev *conf
17894 return hclOutput , nil
17995}
18096
181- func Deploy (ctx context.Context , c * config .Config , prev * config .Resource , curr * config .Resource ) (* output.TfState , error ) {
97+ func Deploy (ctx context.Context , c * configpb .Config , prev * configpb .Resource , curr * configpb .Resource ) (* output.TfState , error ) {
18298 credentials , err := util .ExtractCloudCredentials (ctx )
18399 if err != nil {
184100 return nil , err
@@ -267,67 +183,64 @@ func GetState(userId string) (*output.TfState, error) {
267183}
268184
269185type hasCommonArgs interface {
270- GetCommonParameters () * common .ResourceCommonArgs
186+ GetCommonParameters () * commonpb .ResourceCommonArgs
271187}
272188
273- func addMultyResource (r * config .Resource , translated map [string ]common_resources. CloudSpecificResource , c converter.MultyResourceConverter ) error {
189+ func addMultyResourceNew (r * configpb .Resource , translated map [string ]resources. Resource , metadata converter.ResourceMetadata ) error {
274190 m , err := r .ResourceArgs .ResourceArgs .UnmarshalNew ()
275191 if err != nil {
276192 return err
277193 }
278194 // TODO: refactor this
279195 if commonArgs , ok := m .(hasCommonArgs ); ok {
280196 if commonArgs .GetCommonParameters ().ResourceGroupId == "" {
281- rgId , _ := decoder .GetRgId (rg .GetDefaultResourceGroupId (), nil , & hcl.EvalContext {
282- Variables : map [string ]cty.Value {},
283- Functions : map [string ]function.Function {},
284- }, c .GetResourceType ())
197+ rgId := rg .GetDefaultResourceGroupIdString (metadata .AbbreviatedName )
285198 if rgId != "" {
286199 commonArgs .GetCommonParameters ().ResourceGroupId = rgId
287- resourceGroup := common_resources.CloudSpecificResource {
288- ImplicitlyCreated : true ,
289- Cloud : cloud_providers .CloudProvider (strings .ToLower (commonArgs .GetCommonParameters ().CloudProvider .String ())),
290- Resource : & rg.Type {
291- ResourceId : rgId ,
292- Name : rgId ,
293- Location : strings .ToLower (commonArgs .GetCommonParameters ().Location .String ()),
294- },
200+ if commonArgs .GetCommonParameters ().CloudProvider == commonpb .CloudProvider_AZURE {
201+ resourceGroup :=
202+ & rg.Type {
203+ ResourceId : rgId ,
204+ Name : rgId ,
205+ Location : strings .ToLower (commonArgs .GetCommonParameters ().Location .String ()),
206+ Cloud : commonArgs .GetCommonParameters ().CloudProvider ,
207+ }
208+
209+ translated [resourceGroup .GetResourceId ()] = resourceGroup
295210 }
296- translated [resourceGroup .GetResourceId ()] = resourceGroup
297211 }
298212 }
299213 }
300214
301- translatedResource , err := c . ConvertToMultyResource (r .ResourceId , m , translated )
215+ translatedResource , err := metadata . InitFunc (r .ResourceId , m , translated )
302216 if err != nil {
303217 return err
304218 }
305- translated [translatedResource .Resource . GetResourceId ()] = translatedResource
219+ translated [translatedResource .GetResourceId ()] = translatedResource
306220
307221 return nil
308222}
309223
310224type WithCommonParams interface {
311- GetCommonParameters () * common .ResourceCommonArgs
225+ GetCommonParameters () * commonpb .ResourceCommonArgs
312226}
313227
314- func getExistingProvider (r * config .Resource ) (map [cloud_providers .CloudProvider ]map [string ]* types.Provider , error ) {
228+ func getExistingProvider (r * configpb .Resource ) (map [commonpb .CloudProvider ]map [string ]* types.Provider , error ) {
315229 if r != nil {
316230 args := r .GetResourceArgs ().GetResourceArgs ()
317231 m , err := args .UnmarshalNew ()
318232 if err != nil {
319233 return nil , err
320234 }
321235 if wcp , ok := m .(WithCommonParams ); ok {
322- cloud := cloud_providers .CloudProvider (strings .ToLower (wcp .GetCommonParameters ().CloudProvider .String ()))
323- location , err := cloud_providers .GetCloudLocation (strings .ToLower (wcp .GetCommonParameters ().Location .String ()), cloud )
236+ location , err := common .GetCloudLocation (strings .ToLower (wcp .GetCommonParameters ().Location .String ()), wcp .GetCommonParameters ().CloudProvider )
324237 if err != nil {
325238 return nil , err
326239 }
327- return map [cloud_providers .CloudProvider ]map [string ]* types.Provider {
328- cloud : {
240+ return map [commonpb .CloudProvider ]map [string ]* types.Provider {
241+ wcp . GetCommonParameters (). CloudProvider : {
329242 location : & types.Provider {
330- Cloud : cloud ,
243+ Cloud : wcp . GetCommonParameters (). CloudProvider ,
331244 Location : location ,
332245 IsDefaultProvider : false ,
333246 NumResources : 1 ,
@@ -339,5 +252,5 @@ func getExistingProvider(r *config.Resource) (map[cloud_providers.CloudProvider]
339252
340253 }
341254
342- return map [cloud_providers .CloudProvider ]map [string ]* types.Provider {}, nil
255+ return map [commonpb .CloudProvider ]map [string ]* types.Provider {}, nil
343256}
0 commit comments