Skip to content

Commit 5fa712a

Browse files
Remove decoder and refactor accordingly (#122)
1 parent bbec62e commit 5fa712a

File tree

158 files changed

+10934
-14018
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

158 files changed

+10934
-14018
lines changed

api/converter/converter.go

Lines changed: 27 additions & 566 deletions
Large diffs are not rendered by default.

api/deploy/deploy.go

Lines changed: 45 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -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

269185
type 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

310224
type 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
}

api/errors/errors.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package errors
22

33
import (
44
"fmt"
5-
pberr "github.com/multycloud/multy/api/proto/errors"
5+
pberr "github.com/multycloud/multy/api/proto/errorspb"
66
"github.com/multycloud/multy/validate"
77
"google.golang.org/genproto/googleapis/rpc/code"
88
spb "google.golang.org/genproto/googleapis/rpc/status"

0 commit comments

Comments
 (0)