11-12 4 views
定义模板
这里定义的是阿里云的ECS,考虑通用性,未使用扩展模块,而是使用了循环生成的方式提高灵活性,所以传入的是一个列表
range . 对于当前这个模板来说,最外层只有一个可遍历的对象,所以可以这样用
index 表示按索引取值,.Tags 是个列表,所以需要使用index
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
TerraformBaseTemplate = ` provider "alicloud" { access_key = "${var.access_key}" secret_key = "${var.secret_key}" region = "${var.region}" } {{ range . }} resource "alicloud_instance" "{{.ShortName}}" { image_id = "{{.ImageId}}" vswitch_id = "{{.VSWitchId}}" security_groups = ["{{.SGroupsId}}"] instance_type = "{{.InstanceType}}" system_disk_size = 40 system_disk_category = "{{ .DiskCateGory }}" instance_name = "{{ .HostName }}" host_name = "{{ .HostName }}" instance_charge_type = "{{ .ChargeType }}" tags = { "project": "{{index .Tags 0 }}", "app": "{{index .Tags 1 }}"} } {{ end }} ` |
定义数据模型
1 2 3 4 5 6 7 8 9 10 11 |
type TerraFormBaseTemplateModel struct { ShortName string ImageId string VSWitchId string SGroupsId string InstanceType string DiskCateGory string HostName string ChargeType string Tags []string } |
渲染
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import ( "io/ioutil" "log" "os" "path" "text/template" ) func RenderFile(v []TerraFormBaseTemplateModel) error { workDir, _ := ioutil.TempDir("", "terraform") tmpl, err := template.New("").Parse(TerraformBaseTemplate) if err != nil { log.Println("template.New, err:", err) return err } f, err := os.OpenFile(path.Join(WorkDir, "terraform.tf"), os.O_WRONLY|os.O_CREATE, 0644) defer f.Close() if err != nil { log.Println(err) return err } if err = tmpl.Execute(f, v); err != nil { log.Println(err) return err } return nil } |
如果想赏钱,可以用微信扫描下面的二维码,一来能刺激我写博客的欲望,二来好维护云主机的费用; 另外再次标注博客原地址 itnotebooks.com 感谢!
