Skip to content

Commit

Permalink
Various fixes to applying kube tf and added flags
Browse files Browse the repository at this point in the history
Added --init and --apply flags to generate command, removed "Deploy" config
Added dependencies to kubernetes terraform to prevent errors when creating namespaces
Merged fluentd and cloudwatch agent modules into monitoring, otherwise dependencies wouldn't work
  • Loading branch information
bmonkman committed Nov 12, 2019
1 parent 280c651 commit bb21fe9
Show file tree
Hide file tree
Showing 19 changed files with 71 additions and 83 deletions.
7 changes: 5 additions & 2 deletions cmd/generate.go
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
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)
}
5 changes: 2 additions & 3 deletions internal/config/config.go
Expand Up @@ -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
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
14 changes: 6 additions & 8 deletions internal/generate/kubernetes/generate.go
Expand Up @@ -19,14 +19,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(":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)
}
36 changes: 26 additions & 10 deletions internal/generate/terraform/generate.go
Expand Up @@ -37,6 +37,7 @@ 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)

Expand All @@ -54,8 +55,8 @@ func GetOutputs(config *config.Commit0Config, pathPrefix string, outputs []strin
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(":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"]
}
}
}
3 changes: 3 additions & 0 deletions templates/commit0/commit0.tmpl
Expand Up @@ -13,11 +13,14 @@ infrastructure:
region: us-east-1
eks:
clusterName: staging
<<<<<<< HEAD
deploy: true
cognito:
deploy: true
s3_hosting:
deploy: true
=======
>>>>>>> Various fixes to applying kube tf and added flags

frontend:
framework: {{.FrontendFramework}}
Expand Down
11 changes: 10 additions & 1 deletion templates/kubernetes/terraform/modules/kubernetes/ingress/main.tf 100755 → 100644
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]
# }
@@ -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.

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.

Expand Up @@ -22,17 +22,3 @@ resource "aws_iam_role_policy_attachment" "k8s_monitoring_role_policy" {
role = "${aws_iam_role.k8s_monitoring.id}"
policy_arn = "${data.aws_iam_policy.CloudWatchAgentServerPolicy.arn}"
}

module "fluentd" {
source = "./fluentd"
environment = var.environment
region = var.region
cluster_name = var.cluster_name
}

module "cloudwatch_agent" {
source = "./cloudwatch_agent"
environment = var.environment
region = var.region
cluster_name = var.cluster_name
}
4 changes: 2 additions & 2 deletions templates/terraform/modules/environment/main.tf
Expand Up @@ -43,14 +43,14 @@ module "kube2iam" {
iam_account_id = data.aws_caller_identity.current.account_id
}

# {{ if .Config.Infrastructure.AWS.Cognito.Deploy }}
# {{ if .Config.Infrastructure.AWS.Cognito.Enabled }}
resource "cognito" "auth" {
user_pool = var.user_pool
hostname = var.hostname
}
# {{- end}}

# {{ if .Config.Infrastructure.AWS.S3Hosting.Deploy }}
# {{ if .Config.Infrastructure.AWS.S3Hosting.Enabled }}
resource "s3_hosting" "assets" {
bucket_name = var.s3_hosting_bucket_name
}
Expand Down

0 comments on commit bb21fe9

Please sign in to comment.