Skip to content

Various fixes to applying kube tf and added flags #76

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Nov 12, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions cmd/generate.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,13 @@ import (
)

var configPath string
var runInit bool
var runApply bool

func init() {

generateCmd.PersistentFlags().StringVarP(&configPath, "config", "c", util.CommitYml, "config path")
generateCmd.PersistentFlags().BoolVarP(&runInit, "init", "", false, "Initialize config after generating")
generateCmd.PersistentFlags().BoolVarP(&runApply, "apply", "", false, "Apply config after generating")

rootCmd.AddCommand(generateCmd)
}
Expand All @@ -29,7 +32,7 @@ var generateCmd = &cobra.Command{
cfg := config.LoadConfig(configPath)
cfg.Print()

generate.GenerateArtifactsHelper(t, cfg, "")
generate.GenerateArtifactsHelper(t, cfg, "", runInit, runApply)

},
}
2 changes: 1 addition & 1 deletion internal/api/create_project.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,5 +49,5 @@ func GenerateArtifacts(projectConfig util.ProjectConfiguration) {
cfg := config.LoadConfig(generatedYml)
cfg.Print()

generate.GenerateArtifactsHelper(t, cfg, projectConfig.ProjectName)
generate.GenerateArtifactsHelper(t, cfg, projectConfig.ProjectName, false, false)
}
7 changes: 3 additions & 4 deletions internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ type aws struct {
Region string
EKS eks
Cognito cognito
S3Hosting s3Hosting `yaml:"s3_hosting"`
S3Hosting s3Hosting `yaml:"s3Hosting"`
Terraform terraform
}

Expand All @@ -87,17 +87,16 @@ type terraform struct {
}

type cognito struct {
Deploy bool
Enabled bool
}

type s3Hosting struct {
Deploy bool
Enabled bool // @TODO Remove this option? If they have frontend and AWS enabled we should set up S3, etc.
}

type eks struct {
ClusterName string `yaml:"clusterName"`
WorkerAMI string `yaml:"workerAMI"`
Deploy bool
}

func LoadConfig(filePath string) *Commit0Config {
Expand Down
22 changes: 8 additions & 14 deletions internal/generate/generate_helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import (
"github.com/logrusorgru/aurora"
)

func GenerateArtifactsHelper(t *templator.Templator, cfg *config.Commit0Config, pathPrefix string) {
func GenerateArtifactsHelper(t *templator.Templator, cfg *config.Commit0Config, pathPrefix string, runInit bool, runApply bool) {
var wg sync.WaitGroup
if !util.ValidateLanguage(cfg.Frontend.Framework) {
log.Fatalln(aurora.Red(emoji.Sprintf(":exclamation: '%s' is not a supported framework.", cfg.Frontend.Framework)))
Expand Down Expand Up @@ -50,21 +50,15 @@ func GenerateArtifactsHelper(t *templator.Templator, cfg *config.Commit0Config,
// Wait for all the templates to be generated
wg.Wait()

log.Println("Executing commands")
// @TODO : Move this stuff to another command? Or genericize it a bit.
if cfg.Infrastructure.AWS.EKS.Deploy {
terraform.Execute(cfg, pathPrefix)
kubernetes.Execute(cfg, pathPrefix)
log.Println(aurora.Cyan(emoji.Sprintf("Initializing Infrastructure")))
if cfg.Infrastructure.AWS.EKS.ClusterName != "" && runInit {
terraform.Init(cfg, pathPrefix)
}

if cfg.Infrastructure.AWS.Cognito.Deploy {
outputs := []string{
"cognito_pool_id",
"cognito_client_id",
}
outputValues := terraform.GetOutputs(cfg, pathPrefix, outputs)
cfg.Frontend.Env.CognitoPoolID = outputValues["cognito_pool_id"]
cfg.Frontend.Env.CognitoClientID = outputValues["cognito_client_id"]
log.Println(aurora.Cyan(emoji.Sprintf("Creating Infrastructure")))
if cfg.Infrastructure.AWS.EKS.ClusterName != "" && runApply {
terraform.Execute(cfg, pathPrefix)
kubernetes.Execute(cfg, pathPrefix)
}

// @TODO : This strucuture probably needs to be adjusted. Probably too generic.
Expand Down
15 changes: 7 additions & 8 deletions internal/generate/kubernetes/generate.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/commitdev/commit0/internal/config"
"github.com/commitdev/commit0/internal/templator"
"github.com/commitdev/commit0/internal/util"
"github.com/kyokomi/emoji"
"github.com/logrusorgru/aurora"
)

Expand All @@ -19,14 +20,12 @@ func Generate(t *templator.Templator, cfg *config.Commit0Config, wg *sync.WaitGr
}

// Execute terrafrom init & plan
func Execute(config *config.Commit0Config, pathPrefix string) {
if config.Infrastructure.AWS.EKS.Deploy {
envars := util.MakeAwsEnvars(util.GetSecrets())
func Execute(cfg *config.Commit0Config, pathPrefix string) {
envars := util.MakeAwsEnvars(util.GetSecrets())

pathPrefix = filepath.Join(pathPrefix, "kubernetes/terraform")
pathPrefix = filepath.Join(pathPrefix, "kubernetes/terraform")

log.Println(aurora.Cyan(":alarm_clock: Applying kubernetes configuration..."))
util.ExecuteCommand(exec.Command("terraform", "init"), filepath.Join(pathPrefix, "environments/staging/kubernetes"), envars)
util.ExecuteCommand(exec.Command("terraform", "plan"), filepath.Join(pathPrefix, "environments/staging/kubernetes"), envars)
}
log.Println(aurora.Cyan(emoji.Sprintf(":alarm_clock: Applying kubernetes configuration...")))
util.ExecuteCommand(exec.Command("terraform", "init"), filepath.Join(pathPrefix, "environments/staging"), envars)
util.ExecuteCommand(exec.Command("terraform", "apply", "-auto-approve"), filepath.Join(pathPrefix, "environments/staging"), envars)
}
40 changes: 28 additions & 12 deletions internal/generate/terraform/generate.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,25 +37,26 @@ func Generate(t *templator.Templator, cfg *config.Commit0Config, wg *sync.WaitGr
t.Terraform.TemplateFiles(data, false, wg, pathPrefix)
}

// GetOutputs captures the terraform output for the specific variables
func GetOutputs(config *config.Commit0Config, pathPrefix string, outputs []string) map[string]string {
outputsMap := make(map[string]string)

log.Println("Preparing aws environment...")

envars := util.MakeAwsEnvars(util.GetSecrets())

path := filepath.Join(pathPrefix, "terraform")
pathPrefix = filepath.Join(pathPrefix, "environments/staging")

for _, output := range outputs {
outputValue := util.ExecuteCommandOutput(exec.Command("terraform", "output", output), path, envars)
outputValue := util.ExecuteCommandOutput(exec.Command("terraform", "output", output), pathPrefix, envars)
outputsMap[output] = outputValue
}

return outputsMap
}

// Execute terrafrom init & plan
func Execute(config *config.Commit0Config, pathPrefix string) {
// Init sets up anything required by Execute
func Init(config *config.Commit0Config, pathPrefix string) {
// @TODO : Change this check. Most likely we should discover the accountid
if config.Infrastructure.AWS.AccountId != "" {
log.Println("Preparing aws environment...")
Expand All @@ -68,16 +69,31 @@ func Execute(config *config.Commit0Config, pathPrefix string) {
log.Println(aurora.Cyan(emoji.Sprintf(":alarm_clock: Initializing remote backend...")))
util.ExecuteCommand(exec.Command("terraform", "init"), filepath.Join(pathPrefix, "bootstrap/remote-state"), envars)
util.ExecuteCommand(exec.Command("terraform", "apply", "-auto-approve"), filepath.Join(pathPrefix, "bootstrap/remote-state"), envars)
}
}

log.Println(aurora.Cyan(":alarm_clock: Planning infrastructure..."))
util.ExecuteCommand(exec.Command("terraform", "init"), filepath.Join(pathPrefix, "environments/staging"), envars)
util.ExecuteCommand(exec.Command("terraform", "plan"), filepath.Join(pathPrefix, "environments/staging"), envars)
// Execute terrafrom init & plan. May modify the config passed in
func Execute(cfg *config.Commit0Config, pathPrefix string) {
// @TODO : Change this check. Most likely we should discover the accountid
if cfg.Infrastructure.AWS.AccountId != "" {
log.Println("Preparing aws environment...")

log.Println(aurora.Cyan(":alarm_clock: Applying infrastructure configuration..."))
util.ExecuteCommand(exec.Command("terraform", "apply"), filepath.Join(pathPrefix, "environments/staging"), envars)
envars := util.MakeAwsEnvars(util.GetSecrets())

pathPrefix = filepath.Join(pathPrefix, "terraform")

log.Println(aurora.Cyan(":alarm_clock: Applying kubernetes configuration..."))
util.ExecuteCommand(exec.Command("terraform", "init"), filepath.Join(pathPrefix, "environments/staging/kubernetes"), envars)
util.ExecuteCommand(exec.Command("terraform", "plan"), filepath.Join(pathPrefix, "environments/staging/kubernetes"), envars)
log.Println(aurora.Cyan(emoji.Sprintf(":alarm_clock: Applying infrastructure configuration...")))
util.ExecuteCommand(exec.Command("terraform", "init"), filepath.Join(pathPrefix, "environments/staging"), envars)
util.ExecuteCommand(exec.Command("terraform", "apply", "-auto-approve"), filepath.Join(pathPrefix, "environments/staging"), envars)

if cfg.Infrastructure.AWS.Cognito.Enabled {
outputs := []string{
"cognito_pool_id",
"cognito_client_id",
}
outputValues := GetOutputs(cfg, pathPrefix, outputs)
cfg.Frontend.Env.CognitoPoolID = outputValues["cognito_pool_id"]
cfg.Frontend.Env.CognitoClientID = outputValues["cognito_client_id"]
}
}
}
2 changes: 1 addition & 1 deletion internal/util/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ func ExecuteCommandOutput(cmd *exec.Cmd, pathPrefix string, envars []string) str

out, err := cmd.CombinedOutput()
if err != nil {
log.Fatalf("Executing terraform output failed: %v\n", err)
log.Fatalf("Executing command failed: (%v) %s\n", err, out)
}
return string(out)
}
7 changes: 3 additions & 4 deletions templates/commit0/commit0.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,10 @@ infrastructure:
region: us-east-1
eks:
clusterName: staging
deploy: true
cognito:
deploy: true
s3_hosting:
deploy: true
enabled: true
s3Hosting:
enabled: true

frontend:
framework: {{.FrontendFramework}}
Expand Down
11 changes: 10 additions & 1 deletion templates/kubernetes/terraform/modules/kubernetes/ingress/main.tf
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ resource "kubernetes_config_map" "nginx_configuration" {
use-forwarded-headers = "true",
use-proxy-protocol = "false"
}
depends_on = [kubernetes_namespace.ingress_nginx]
}

# resource "kubernetes_config_map" "nginx_configuration" {
Expand All @@ -33,6 +34,7 @@ resource "kubernetes_config_map" "nginx_configuration" {
# "app.kubernetes.io/part-of" = "ingress-nginx"
# }
# }
# depends_on = [kubernetes_namespace.ingress_nginx]
# }

resource "kubernetes_config_map" "tcp_services" {
Expand All @@ -44,6 +46,7 @@ resource "kubernetes_config_map" "tcp_services" {
"app.kubernetes.io/part-of" = "ingress-nginx"
}
}
depends_on = [kubernetes_namespace.ingress_nginx]
}

resource "kubernetes_config_map" "udp_services" {
Expand All @@ -55,6 +58,7 @@ resource "kubernetes_config_map" "udp_services" {
"app.kubernetes.io/part-of" = "ingress-nginx"
}
}
depends_on = [kubernetes_namespace.ingress_nginx]
}

resource "kubernetes_service_account" "nginx_ingress_serviceaccount" {
Expand All @@ -66,6 +70,7 @@ resource "kubernetes_service_account" "nginx_ingress_serviceaccount" {
"app.kubernetes.io/part-of" = "ingress-nginx"
}
}
depends_on = [kubernetes_namespace.ingress_nginx]
}

resource "kubernetes_cluster_role" "nginx_ingress_clusterrole" {
Expand Down Expand Up @@ -138,6 +143,7 @@ resource "kubernetes_role" "nginx_ingress_role" {
api_groups = [""]
resources = ["endpoints"]
}
depends_on = [kubernetes_namespace.ingress_nginx]
}

resource "kubernetes_role_binding" "nginx_ingress_role_nisa_binding" {
Expand All @@ -159,6 +165,7 @@ resource "kubernetes_role_binding" "nginx_ingress_role_nisa_binding" {
kind = "Role"
name = "nginx-ingress-role"
}
depends_on = [kubernetes_namespace.ingress_nginx]
}

resource "kubernetes_cluster_role_binding" "nginx_ingress_clusterrole_nisa_binding" {
Expand Down Expand Up @@ -324,6 +331,7 @@ resource "kubernetes_service" "ingress_nginx" {
type = "LoadBalancer"
external_traffic_policy = "Local"
}
depends_on = [kubernetes_namespace.ingress_nginx]
}

# HTTPS Load balancer
Expand Down Expand Up @@ -359,4 +367,5 @@ resource "kubernetes_service" "ingress_nginx" {
# }
# type = "LoadBalancer"
# }
# }
# depends_on = [kubernetes_namespace.ingress_nginx]
# }
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
data "aws_iam_policy" "CloudWatchAgentServerPolicy" {
arn = "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy"
}

resource "kubernetes_service_account" "cloudwatch_agent" {
metadata {
name = "cloudwatch-agent"
namespace = "amazon-cloudwatch"
}
depends_on = [kubernetes_namespace.amazon_cloudwatch]
}

resource "kubernetes_cluster_role" "cloudwatch_agent_role" {
Expand Down Expand Up @@ -76,6 +73,7 @@ resource "kubernetes_config_map" "cwagentconfig" {
}
)
}
depends_on = [kubernetes_namespace.amazon_cloudwatch]
}

resource "kubernetes_daemonset" "cloudwatch_agent" {
Expand Down Expand Up @@ -217,4 +215,4 @@ resource "kubernetes_daemonset" "cloudwatch_agent" {
}
}
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,15 @@ resource "kubernetes_config_map" "cluster_info" {
"cluster.name" = var.cluster_name
"logs.region" = var.region
}
depends_on = [kubernetes_namespace.amazon_cloudwatch]
}

resource "kubernetes_service_account" "fluentd" {
metadata {
name = "fluentd"
namespace = "amazon-cloudwatch"
}
depends_on = [kubernetes_namespace.amazon_cloudwatch]
}

resource "kubernetes_cluster_role" "fluentd_role" {
Expand Down Expand Up @@ -57,6 +59,7 @@ resource "kubernetes_cluster_role_binding" "fluentd_role_binding" {
kind = "ClusterRole"
name = "fluentd-role"
}
depends_on = [kubernetes_service_account.fluentd]
}

resource "kubernetes_config_map" "fluentd_config" {
Expand All @@ -71,6 +74,7 @@ resource "kubernetes_config_map" "fluentd_config" {
"host.conf" = data.local_file.host.content
"systemd.conf" = data.local_file.systemd.content
}
depends_on = [kubernetes_namespace.amazon_cloudwatch]
}

resource "kubernetes_daemonset" "fluentd_cloudwatch" {
Expand Down Expand Up @@ -217,4 +221,4 @@ resource "kubernetes_daemonset" "fluentd_cloudwatch" {
}
}
}
}
}

This file was deleted.

Loading