[ch2531] | [Anoop] | Change accepted structure for rds in manifest
This commit is contained in:
38
bindata.go
38
bindata.go
@@ -108,7 +108,7 @@ func bindataTemplatesRdstfDeploysh() (*asset, error) {
|
||||
size: 343,
|
||||
md5checksum: "",
|
||||
mode: os.FileMode(420),
|
||||
modTime: time.Unix(1578918947, 0),
|
||||
modTime: time.Unix(1578927242, 0),
|
||||
}
|
||||
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
@@ -117,22 +117,22 @@ func bindataTemplatesRdstfDeploysh() (*asset, error) {
|
||||
}
|
||||
|
||||
var _bindataTemplatesRdstfMaintf = []byte(
|
||||
"\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x53\x4d\x8f\x9b\x30\x10\xbd\xf3\x2b\xac\xdc\x0d\xaa\x7a\x8b\xb4\x52" +
|
||||
"\xab\x76\x5b\x6d\x0f\xd5\xaa\x5f\x57\x64\xec\x81\x58\xd8\x63\xe2\x31\xa1\x59\x96\xff\x5e\x81\x21\x0b\x65\x7b\xa8" +
|
||||
"\x6f\x79\x79\x1f\xf3\x9e\x44\x00\xef\x45\xe9\xbc\x65\x7d\xc2\x58\x21\x64\x0d\xa8\xd8\x81\xde\x1e\x26\x80\xb1\xa2" +
|
||||
"\x95\x35\x04\xb6\x7d\x77\xec\x80\xe2\xa2\x79\x21\xb0\xe6\x37\x0b\x2e\x9d\xb5\x02\x15\xa7\x20\x02\x1c\x26\xb9\x87" +
|
||||
"\x4a\x3b\xdc\xcb\x45\xc3\xc9\xb5\xe1\xc4\xdf\x44\x5e\x0d\x57\xb6\x7b\x77\xec\xe0\x15\x45\x42\xe7\x7c\x4d\x8d\x90" +
|
||||
"\x90\xd7\x70\xcd\x1b\x0f\xa5\xfe\x3d\x13\x62\x1e\x65\x7d\xcf\xd2\x6f\x8a\xd2\x07\xa4\x20\x50\xc2\x57\x61\x81\x0d" +
|
||||
"\x43\xd4\x37\xde\x95\xda\xc0\x2e\x40\x5a\x15\x09\x42\x9a\x57\x2f\x88\x03\x70\xd7\x21\x78\x5e\xb6\xc6\x70\xe9\x30" +
|
||||
"\x78\x67\x46\xd9\x90\x0c\x49\x62\x9d\x6a\x0d\xc4\x5b\xa7\xd5\xc8\xb5\x5e\xc2\xca\xa3\xd2\xe1\x78\x24\x3a\x1d\xb3" +
|
||||
"\xac\xd2\xe1\x5d\xa5\xc3\xa9\x2d\x52\x69\x55\x3a\xcd\x18\x40\x9e\x52\x8d\xd9\xf4\x43\x63\xe9\x45\xe6\x15\xa5\x95" +
|
||||
"\x0e\x63\x06\xe0\x45\x7b\x87\x16\x30\x4c\x6e\x63\xcd\xfb\x15\xf6\xcc\xce\xad\x0b\x63\xd3\x84\x31\x3d\x77\xcf\x71" +
|
||||
"\x2c\x1f\xc9\xbb\x4d\x36\x8a\x46\x10\x75\xce\xab\xe5\xd8\x45\xf1\xb8\xe0\x1b\x36\xe9\x27\x58\xcf\xb3\xb0\xbf\xeb" +
|
||||
"\x27\x78\xc0\xcf\x45\x64\xb5\x04\xfe\x35\xd6\xcf\x11\x5f\xf9\x25\x8c\x29\x11\x44\x21\x08\xe8\x2f\xea\xc7\x1b\xfe" +
|
||||
"\xcc\x6c\x4b\xe1\x87\xfb\x42\x0e\x67\x51\xdf\x73\xa6\xcb\x48\x7c\xdf\xd1\x52\xee\x83\x11\x44\xf1\x02\xd1\x51\x7e" +
|
||||
"\xdb\x42\x4e\xf8\x8b\xf7\x4e\xb2\xa9\x38\x9a\x8f\x1f\xc1\x3e\xea\x91\xce\xe6\x93\xb0\xda\x5c\xe7\xe9\xe8\x6c\xf2" +
|
||||
"\x32\x02\xab\xe1\x5e\x58\xff\xe1\x7b\x8f\x95\x46\xf8\x05\x9e\x74\xac\x39\xdb\xc3\x84\xe7\x97\xf9\x8f\x6d\xcc\x56" +
|
||||
"\xf4\xaf\xb4\x21\xf9\x13\x00\x00\xff\xff\x5e\x09\x8e\x45\xe6\x03\x00\x00")
|
||||
"\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x53\x4d\x8f\x9b\x30\x10\xbd\xf3\x2b\x46\xb9\x9b\xa8\xea\x2d\xd2\x4a" +
|
||||
"\xad\xba\xdb\x6a\x7b\xa8\x56\xea\xc7\x15\x19\x33\x10\x0b\x7b\x4c\x3c\x26\x34\xcb\xf2\xdf\x2b\x30\xd9\xc2\x26\x39" +
|
||||
"\xac\x6f\xcc\xbc\x37\xef\x43\x22\xa0\xf7\xb2\x74\xde\x42\x9f\x00\xe4\x52\xd5\x48\x05\x6c\xf8\xe3\x66\x1a\x00\xe4" +
|
||||
"\xad\xaa\x31\xc0\xfa\xdd\xc1\x86\xe4\x51\x8b\x5c\x52\x2d\x5e\x4f\x08\xe5\xac\x95\x54\x08\x0e\x32\xe0\x66\xa2\x7b" +
|
||||
"\xac\xb4\xa3\x4b\xba\x6c\x04\xbb\x36\xec\xc5\x87\x88\xab\xf1\x04\x17\xef\x0e\x36\xbe\xe0\x08\xe8\x9c\xaf\xb9\x91" +
|
||||
"\x0a\xb3\x1a\x4f\x59\xe3\xb1\xd4\x7f\x67\x40\xd4\xe3\x6d\xdf\x43\x7a\x2f\x83\xcc\x25\x63\xfa\x48\x1c\x24\x29\xfc" +
|
||||
"\x21\x2d\xc2\x30\xc4\x23\x8d\x77\xa5\x36\x78\xa1\xa2\x6c\x11\x01\x52\x99\xab\x36\x62\x0b\xc2\x75\x84\x5e\x94\xad" +
|
||||
"\x31\x42\x39\x0a\xde\x99\x91\x36\x24\x43\x92\x58\x57\xb4\x06\xa3\xe1\xa9\x3a\x76\xad\x57\xb8\xb8\x51\xe9\xb0\xdb" +
|
||||
"\x31\xef\x77\xdb\x6d\xa5\xc3\xa7\x4a\x87\x7d\x9b\xa7\xca\x16\xe9\xd4\x65\x40\xb5\x4f\x35\x6d\xa7\x0f\x4d\xa5\x97" +
|
||||
"\x5b\x5f\x70\x5a\xe9\x30\x6a\x20\x1d\xb5\x77\x64\x91\xc2\x74\x6d\xcc\xfa\xb0\x98\xbd\xc0\xa1\x75\x61\x4c\x9a\x00" +
|
||||
"\xe8\x39\x7b\x46\x63\xf8\x08\xbe\x5e\xcc\x8a\xd6\x48\xe6\xce\xf9\xe2\xec\x78\x45\x7b\x3a\x2f\x57\x14\xd6\xcf\xb8" +
|
||||
"\x2c\x6a\x45\xf9\xa9\x9f\xf1\x91\xbe\xe5\x11\xda\x32\xfa\x9b\xd0\xdf\xe3\x72\x71\x39\x01\x28\xe6\x1d\x5f\xc3\xdf" +
|
||||
"\xe7\xa3\x7d\x86\x17\xb0\x2d\x87\x5f\xee\x3b\x3b\x9a\x79\x7d\x2f\x40\x97\x0b\xec\xe7\x8e\xcf\x99\xbf\x18\xc9\x1c" +
|
||||
"\xed\xc8\x8e\xb3\xd7\x9e\xd4\x34\x7f\xa3\x71\xc1\x5b\x25\x1f\x65\xc6\x5f\xe5\x86\xe8\x13\x1f\xcc\x57\x69\xb5\x39" +
|
||||
"\xcd\xdd\xf2\xc1\x64\x65\x1c\xbc\x6d\xf6\x3f\xf4\xbd\x0a\x0f\x54\x69\xc2\x3f\xe8\x59\xc7\xfc\xb3\x10\x4e\xf3\xec" +
|
||||
"\x38\x2f\xae\x08\xae\x99\xb7\x74\x87\xe4\x5f\x00\x00\x00\xff\xff\xf5\xc3\xcf\xc3\x20\x04\x00\x00")
|
||||
|
||||
func bindataTemplatesRdstfMaintfBytes() ([]byte, error) {
|
||||
return bindataRead(
|
||||
@@ -151,10 +151,10 @@ func bindataTemplatesRdstfMaintf() (*asset, error) {
|
||||
|
||||
info := bindataFileInfo{
|
||||
name: "templates/rds-tf/main.tf",
|
||||
size: 998,
|
||||
size: 1056,
|
||||
md5checksum: "",
|
||||
mode: os.FileMode(420),
|
||||
modTime: time.Unix(1578901238, 0),
|
||||
modTime: time.Unix(1578995480, 0),
|
||||
}
|
||||
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
|
||||
17
main.go
17
main.go
@@ -14,13 +14,13 @@ func init() {
|
||||
|
||||
func parseManifest(manifestPath string) (*Manifest, error) {
|
||||
manifestContent, err := ioutil.ReadFile(manifestPath)
|
||||
if(err != nil) {
|
||||
if err != nil {
|
||||
log.Fatalf("\nErr: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
var manifest Manifest
|
||||
json.Unmarshal(manifestContent, &manifest)
|
||||
manifest.Infra.Workspace = workspaceMap[manifest.Infra.Environment]
|
||||
manifest.ExtraResources.Workspace = workspaceMap[manifest.ExtraResources.Environment]
|
||||
return &manifest, nil
|
||||
}
|
||||
|
||||
@@ -37,19 +37,24 @@ func main() {
|
||||
Aliases: []string{"m"},
|
||||
Required: true,
|
||||
},
|
||||
&cli.BoolFlag{
|
||||
Name: "template-only",
|
||||
Usage: "Provisions just the template for given resource",
|
||||
Aliases: []string{"t"},
|
||||
},
|
||||
},
|
||||
|
||||
Commands: []*cli.Command{
|
||||
{
|
||||
Name: "rds",
|
||||
Usage: "Provision rds instance",
|
||||
Name: "database",
|
||||
Usage: "Provision database instance",
|
||||
Action: func(c *cli.Context) error {
|
||||
manifest, err := parseManifest(c.String("manifest"))
|
||||
if(err != nil) {
|
||||
if err != nil {
|
||||
log.Fatalf("\nErr: %v", err)
|
||||
return err
|
||||
}
|
||||
err = provisionResource("rds", "rds-tf", manifest)
|
||||
err = provisionResource("rds", "rds-tf", manifest, c.Bool("template-only"))
|
||||
if err != nil {
|
||||
log.Fatalf("\nErr: %v", err)
|
||||
return err
|
||||
|
||||
25
resource.go
25
resource.go
@@ -12,18 +12,19 @@ import (
|
||||
const TEMPLATES_DIR = "templates"
|
||||
const INIT_SCRIPT = "./deploy.sh"
|
||||
|
||||
func provisionResource(resourceName, resourceDir string, manifest *Manifest) error {
|
||||
func provisionResource(resourceName, resourceDir string, manifest *Manifest, templateOnly bool) error {
|
||||
err := templateResourceTf(resourceName, resourceDir, manifest)
|
||||
if(err != nil) {
|
||||
if err != nil {
|
||||
log.Fatalf("\nErr: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
err = executeResourceTf(resourceDir)
|
||||
if(err != nil) {
|
||||
log.Fatalf("\nErr: %v", err)
|
||||
return err
|
||||
if !templateOnly {
|
||||
err = executeResourceTf(resourceDir)
|
||||
if(err != nil) {
|
||||
log.Fatalf("\nErr: %v", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -31,6 +32,7 @@ func provisionResource(resourceName, resourceDir string, manifest *Manifest) err
|
||||
|
||||
|
||||
func templateResourceTf(templateName, resourceDir string, manifest *Manifest) error {
|
||||
log.Printf("Creating templates for %s in %s", templateName, resourceDir)
|
||||
|
||||
tfFiles, err := AssetDir(strings.Join([]string{TEMPLATES_DIR, resourceDir}, "/"))
|
||||
if err != nil {
|
||||
@@ -42,13 +44,13 @@ func templateResourceTf(templateName, resourceDir string, manifest *Manifest) er
|
||||
t := template.Must(template.New(templateName).Funcs(sprig.TxtFuncMap()).Parse(string(tfBytes)))
|
||||
|
||||
tfOut, err := createFile(resourceDir, tfFile)
|
||||
if(err != nil) {
|
||||
if err != nil {
|
||||
log.Fatalf("\nErr: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
err = t.Execute(tfOut, manifest.Infra)
|
||||
if(err != nil) {
|
||||
err = t.Execute(tfOut, manifest.ExtraResources)
|
||||
if err != nil {
|
||||
log.Fatalf("\nErr: %v", err)
|
||||
return err
|
||||
}
|
||||
@@ -59,12 +61,13 @@ func templateResourceTf(templateName, resourceDir string, manifest *Manifest) er
|
||||
}
|
||||
|
||||
func executeResourceTf(resourceDir string) error {
|
||||
log.Printf("Running terraform for %s", resourceDir)
|
||||
cmd := exec.Command(INIT_SCRIPT)
|
||||
cmd.Dir = resourceDir
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
err := cmd.Run()
|
||||
if(err != nil) {
|
||||
if err != nil {
|
||||
log.Fatalf("\nErr: %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"infra": {
|
||||
"extraResources": {
|
||||
"environment": "prod",
|
||||
"rds": {
|
||||
"database": {
|
||||
"instanceName": "auth-service",
|
||||
"user": "auth_service_user",
|
||||
"password": "auth_service_password",
|
||||
"sizeInGb": 7,
|
||||
"databases": ["auth_service"]
|
||||
"dbNames": ["auth_service"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ terraform {
|
||||
bucket = "navi-bank-terraform-command-state"
|
||||
region = "ap-south-1"
|
||||
key = "rds"
|
||||
workspace_key_prefix = "rds-states/{{ .Rds.InstanceName }}"
|
||||
workspace_key_prefix = "rds-states/{{ .Database.InstanceName }}"
|
||||
profile = "cmd"
|
||||
acl = "bucket-owner-full-control"
|
||||
}
|
||||
@@ -12,22 +12,22 @@ terraform {
|
||||
module "rds" {
|
||||
source = "git::ssh://git@github.cmd.navi-tech.in/navi-infra/rds.git"
|
||||
environment = {{ .Environment | quote }}
|
||||
instance_name = {{ .Rds.InstanceName | quote }}
|
||||
password = {{ .Rds.Password | quote }}
|
||||
size = {{ .Rds.SizeInGb }}
|
||||
user = {{ .Rds.User | quote }}
|
||||
instance_name = {{ .Database.InstanceName | quote }}
|
||||
password = {{ .Database.Password | quote }}
|
||||
size = {{ .Database.SizeInGb }}
|
||||
user = {{ .Database.User | quote }}
|
||||
|
||||
databases = {{ .Rds.Databases | mustToJson }}
|
||||
databases = {{ .Database.DbNames | mustToJson }}
|
||||
|
||||
{{- if .Rds.AwsInstanceClass }}
|
||||
aws_instance_class = {{ .Rds.AwsInstanceClass | quote }}
|
||||
{{- if .Database.AwsInstanceClass }}
|
||||
aws_instance_class = {{ .Database.AwsInstanceClass | quote }}
|
||||
{{- end }}
|
||||
|
||||
{{- if .Rds.PsqlFamily }}
|
||||
psql_family = {{ .Rds.PsqlFamily | quote }}
|
||||
{{- if .Database.PsqlFamily }}
|
||||
psql_family = {{ .Database.PsqlFamily | quote }}
|
||||
{{- end }}
|
||||
|
||||
{{- if .Rds.PsqlEngineVersion }}
|
||||
psql_engine_version = {{ .Rds.PsqlEngineVersion | quote }}
|
||||
{{- if .Database.PsqlEngineVersion }}
|
||||
psql_engine_version = {{ .Database.PsqlEngineVersion | quote }}
|
||||
{{- end }}
|
||||
}
|
||||
|
||||
11
types.go
11
types.go
@@ -5,24 +5,23 @@ var workspaceMap = map[string]string {
|
||||
}
|
||||
|
||||
type Manifest struct {
|
||||
Infra Infra `json:"infra"`
|
||||
ExtraResources ExtraResources `json:"extraResources"`
|
||||
}
|
||||
|
||||
type Infra struct {
|
||||
type ExtraResources struct {
|
||||
Environment string `json:"environment"`
|
||||
Workspace string
|
||||
Rds Rds `json:"rds"`
|
||||
Database Database `json:"database"`
|
||||
}
|
||||
|
||||
//We provide defaults in respective terraforms instead of here to keep all values at one place
|
||||
type Rds struct {
|
||||
type Database struct {
|
||||
AwsInstanceClass string `json:"awsInstanceClass"`
|
||||
PsqlFamily string `json:"psqlFamily"`
|
||||
PsqlEngineVersion string `json:"psqlEngineVersion"`
|
||||
User string `json:"user"`
|
||||
Password string `json:"password"`
|
||||
SizeInGb int `json:"sizeInGb"`
|
||||
Databases []string `json:"databases"`
|
||||
DbNames []string `json:"dbNames"`
|
||||
InstanceName string `json:"instanceName"`
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user