github.com/sacloud/iaas-api-go@v1.12.0/internal/tools/gen-api-fake-data/main.go (about) 1 // Copyright 2022-2023 The sacloud/iaas-api-go Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package main 16 17 import ( 18 "context" 19 "log" 20 "os" 21 "path/filepath" 22 23 "github.com/sacloud/iaas-api-go" 24 "github.com/sacloud/iaas-api-go/helper/query" 25 "github.com/sacloud/iaas-api-go/internal/tools" 26 "github.com/sacloud/iaas-api-go/ostype" 27 "github.com/sacloud/iaas-api-go/search" 28 "github.com/sacloud/iaas-api-go/search/keys" 29 "github.com/sacloud/iaas-api-go/types" 30 ) 31 32 func init() { 33 log.SetFlags(0) 34 log.SetPrefix("gen-api-fake-data: ") 35 } 36 37 var fakeDataDefines = []struct { 38 destination string 39 template string 40 parameterFunc func() interface{} 41 }{ 42 { 43 destination: "fake/zz_init_archive.go", 44 template: tmplArchive, 45 parameterFunc: collectArchives, 46 }, 47 { 48 destination: "fake/zz_init_cdrom.go", 49 template: tmplCDROM, 50 parameterFunc: collectCDROMs, 51 }, 52 } 53 54 func main() { 55 for _, generator := range fakeDataDefines { 56 param := generator.parameterFunc() 57 tools.WriteFileWithTemplate(&tools.TemplateConfig{ 58 OutputPath: filepath.Join(tools.ProjectRootPath(), generator.destination), 59 Template: generator.template, 60 Parameter: param, 61 }) 62 log.Printf("generated: %s\n", filepath.Join(tools.ProjectRootPath(), generator.destination)) 63 } 64 } 65 66 func collectArchives() interface{} { 67 if os.Getenv("SAKURACLOUD_ACCESS_TOKEN") == "" || 68 os.Getenv("SAKURACLOUD_ACCESS_TOKEN_SECRET") == "" { 69 log.Fatal("required: SAKURACLOUD_ACCESS_TOKEN and SAKURACLOUD_ACCESS_TOKEN_SECRET") 70 } 71 caller := iaas.NewClientFromEnv() 72 tmplParam := map[string][]*iaas.Archive{} 73 archiveOp := iaas.NewArchiveOp(caller) 74 ctx := context.Background() 75 76 for _, zone := range iaas.SakuraCloudZones { 77 var archives []*iaas.Archive 78 for _, ost := range ostype.ArchiveOSTypes { 79 archive, err := query.FindArchiveByOSType(ctx, archiveOp, zone, ost) 80 if err != nil { 81 log.Fatal(err) 82 } 83 archives = append(archives, archive) 84 } 85 tmplParam[zone] = archives 86 } 87 return tmplParam 88 } 89 90 const tmplArchive = `// generated by 'github.com/sacloud/iaas-api-go/internal/tools/gen-api-fake-data'; DO NOT EDIT 91 92 package fake 93 94 import ( 95 "github.com/sacloud/iaas-api-go" 96 "github.com/sacloud/iaas-api-go/types" 97 ) 98 99 var initArchives = map[string][]*iaas.Archive{ 100 {{ range $zone, $archives := . -}} 101 "{{$zone}}": { 102 {{ range $archives -}} 103 { 104 ID: types.ID({{.ID}}), 105 Name: "{{.Name}}", 106 Description: "fake", 107 Tags: types.Tags{ {{range .Tags}}"{{.}}",{{ end }} }, 108 DisplayOrder: {{.DisplayOrder}}, 109 Availability: types.EAvailability("{{.Availability}}"), 110 Scope: types.EScope("{{.Scope}}"), 111 SizeMB: {{.SizeMB}}, 112 DiskPlanID: types.ID({{.DiskPlanID}}), 113 DiskPlanName: "{{.DiskPlanName}}", 114 DiskPlanStorageClass: "{{.DiskPlanStorageClass}}", 115 }, 116 {{ end -}} 117 }, 118 {{ end -}} 119 } 120 ` 121 122 func collectCDROMs() interface{} { 123 if os.Getenv("SAKURACLOUD_ACCESS_TOKEN") == "" || 124 os.Getenv("SAKURACLOUD_ACCESS_TOKEN_SECRET") == "" { 125 log.Fatal("required: SAKURACLOUD_ACCESS_TOKEN and SAKURACLOUD_ACCESS_TOKEN_SECRET") 126 } 127 caller := iaas.NewClientFromEnv() 128 129 tmplParam := map[string][]*iaas.CDROM{} 130 cdromOp := iaas.NewCDROMOp(caller) 131 ctx := context.Background() 132 133 for _, zone := range iaas.SakuraCloudZones { 134 var cdroms []*iaas.CDROM 135 136 searched, err := cdromOp.Find(ctx, zone, &iaas.FindCondition{ 137 Filter: search.Filter{ 138 search.Key(keys.Scope): string(types.Scopes.Shared), 139 }, 140 }) 141 if err != nil { 142 log.Fatal(err) 143 } 144 145 cdroms = append(cdroms, searched.CDROMs...) 146 tmplParam[zone] = cdroms 147 } 148 return tmplParam 149 } 150 151 const tmplCDROM = `// generated by 'github.com/sacloud/iaas-api-go/internal/tools/gen-api-fake-data'; DO NOT EDIT 152 153 package fake 154 155 import ( 156 "github.com/sacloud/iaas-api-go" 157 "github.com/sacloud/iaas-api-go/types" 158 ) 159 160 var initCDROM = map[string][]*iaas.CDROM{ 161 {{ range $zone, $data := . -}} 162 "{{$zone}}": { 163 {{ range $data -}} 164 { 165 ID: types.ID({{.ID}}), 166 Name: "{{.Name}}", 167 Description: "fake", 168 Tags: types.Tags{ {{range .Tags}}"{{.}}",{{ end }} }, 169 DisplayOrder: {{.DisplayOrder}}, 170 Availability: types.EAvailability("{{.Availability}}"), 171 Scope: types.EScope("{{.Scope}}"), 172 SizeMB: {{.SizeMB}}, 173 }, 174 {{ end -}} 175 }, 176 {{ end -}} 177 } 178 `