Skip to content

Commit

Permalink
Merge branch 'master' of github.com:leapfrogtechnology/shift
Browse files Browse the repository at this point in the history
  • Loading branch information
pratishshr committed Sep 11, 2019
2 parents ec1b4ba + 7fd46ed commit 8d34c7e
Show file tree
Hide file tree
Showing 6 changed files with 987 additions and 58 deletions.
4 changes: 2 additions & 2 deletions core/services/mq/mq.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func getQueue(ch *amqp.Channel, queueName string) *amqp.Queue {
false, // no-wait
nil, // arguments
)
logger.FailOnError(err, "Failed to declare a queue: "+ queueName)
logger.FailOnError(err, "Failed to declare a queue: "+queueName)
return &q
}

Expand All @@ -35,7 +35,7 @@ func Consume(ch *amqp.Channel, qName string) <-chan amqp.Delivery {
messages, err := ch.Consume(
q.Name, //name
"", //consumer
false, //autoAck
true, //autoAck
false, // exclusive
false, //noLocal
false, //noWait
Expand Down
86 changes: 70 additions & 16 deletions infrastructure/infrastructure/infrastrucutre.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,42 @@ package infrastrucuture

import (
"encoding/json"
"errors"
"fmt"
"github.com/leapfrogtechnology/shift/core/utils/logger"
"github.com/leapfrogtechnology/shift/infrastructure/internal/terraform"
"github.com/leapfrogtechnology/shift/infrastructure/internal/terraform/templates/providers/aws/frontend-architecture"
backendHaArchitecture "github.com/leapfrogtechnology/shift/infrastructure/internal/terraform/templates/providers/aws/backend-ha-architecture"
frontendArchitecture "github.com/leapfrogtechnology/shift/infrastructure/internal/terraform/templates/providers/aws/frontend-architecture"
"github.com/leapfrogtechnology/shift/infrastructure/utils"
"io/ioutil"
"path/filepath"
"strings"
)

type terraformOutput struct {
Sensitive bool `json:"sensitive"`
Type string `json:"type"`
Value string `json:"value"`
}
type FrontendTerraformOutput struct {
BucketName terraformOutput `json:"bucket_name"`
FrontendWebUrl terraformOutput `json:"frontend_web_url"`
func Initialize(ClientArgs []byte) (string, error) {
var clientArgs utils.Client
err := json.Unmarshal(ClientArgs, &clientArgs)
if err != nil {
logger.LogError(err, "Error Parsing Body")
return "", err
}
if strings.EqualFold(clientArgs.Deployment.Type, "frontend") {
out, err := InitializeFrontend(ClientArgs)
return out, err
} else if strings.EqualFold(clientArgs.Deployment.Type, "backend") {
out, err := InitializeBackend(ClientArgs)
return out, err
} else {
return "", errors.New(fmt.Sprintf("Unknown Deployment Type:\t%s", clientArgs.Deployment.Type))
}

}

func InitializeFrontend(ClientArgs []byte) (string, error) {
workspaceRoot := "/tmp"

var clientArgs utils.Client
var frontendTerraformOutput FrontendTerraformOutput
var frontendTerraformOutput utils.FrontendTerraformOutput

logger.LogInfo("Gathering Info")

Expand All @@ -32,9 +46,9 @@ func InitializeFrontend(ClientArgs []byte) (string, error) {
logger.LogError(err, "Error Parsing Body")
return "", err
}
workspaceDir := filepath.Join(workspaceRoot, clientArgs.Deployment.Name)
workspaceDir := filepath.Join(workspaceRoot, clientArgs.Project, clientArgs.Deployment.Name, clientArgs.Deployment.Type)
logger.LogInfo("Generating Template")
err = utils.GenerateFrontendTemplateFile(frontend_architecture.InfrastructureTemplate, clientArgs, workspaceDir)
err = utils.GenerateFrontendTemplateFile(frontendArchitecture.InfrastructureTemplate, clientArgs, workspaceDir)
if err != nil {
logger.LogError(err, "Cannot Generate Template")
return "", err
Expand All @@ -49,15 +63,55 @@ func InitializeFrontend(ClientArgs []byte) (string, error) {
result := utils.FrontendResult{
Project: clientArgs.Project,
Deployment: clientArgs.Deployment,
Data: utils.Frontend{
BucketName: frontendTerraformOutput.BucketName.Value,
Url: frontendTerraformOutput.FrontendWebUrl.Value,
},
Data: frontendTerraformOutput,
}

out, err := json.Marshal(result)
if err != nil {
logger.LogError(err, "Error Marshalling output")
return "", err
}
logger.LogOutput(string(out))
return string(out), err
}

func InitializeBackend(ClientArgs []byte) (string, error) {
workspaceRoot := "/tmp"
var clientArgs utils.Client
var backendTerraformOutput utils.BackendTerraformOutput
logger.LogInfo("Gathering Info")

err := json.Unmarshal(ClientArgs, &clientArgs)
if err != nil {
logger.LogError(err, "Error Parsing Body")
return "", err
}
workspaceDir := filepath.Join(workspaceRoot, clientArgs.Project, clientArgs.Deployment.Name, clientArgs.Deployment.Type)
logger.LogInfo("Generating Template")
err = utils.GenerateFrontendTemplateFile(backendHaArchitecture.InfrastructureTemplate, clientArgs, workspaceDir)
containerTemplateFile := workspaceDir + "/sample.json.tpl"
_ = ioutil.WriteFile(containerTemplateFile, []byte(backendHaArchitecture.ContainerTemplate), 0600)
if err != nil {
logger.LogError(err, "Cannot Generate Template")
return "", err
}
logger.LogInfo("Running Infrastructure Changes")
terraformOutput, err := terraform.RunInfrastructureChanges(workspaceDir)
if err != nil {
logger.LogError(err, "Cannot Run Changes")
return "", err
}
_ = json.Unmarshal([]byte(terraformOutput), &backendTerraformOutput)
result := utils.BackendResult{
Project: clientArgs.Project,
Deployment: clientArgs.Deployment,
Data: backendTerraformOutput,
}
out, err := json.Marshal(result)
if err != nil {
logger.LogError(err, "Error Marshalling output")
return "", err
}
logger.LogOutput(string(out))
return string(out), err
}
Loading

0 comments on commit 8d34c7e

Please sign in to comment.