github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/container/kvm/template.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package kvm 5 6 import ( 7 "bytes" 8 "os" 9 "text/template" 10 11 "github.com/juju/errors" 12 ) 13 14 var kvmTemplate = ` 15 <domain type='kvm'> 16 <name>{{.Hostname}}</name> 17 <vcpu placement='static'>1</vcpu> 18 <os> 19 <type>hvm</type> 20 </os> 21 <features> 22 <acpi/> 23 <apic/> 24 <pae/> 25 </features> 26 <devices> 27 <controller type='usb' index='0'> 28 <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> 29 </controller> 30 <controller type='pci' index='0' model='pci-root'/> 31 <serial type='stdio'> 32 <target port='0'/> 33 </serial> 34 <console type='stdio'> 35 <target type='serial' port='0'/> 36 </console> 37 <input type='mouse' bus='ps2'/> 38 <input type='keyboard' bus='ps2'/> 39 <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'> 40 <listen type='address' address='127.0.0.1'/> 41 </graphics> 42 <video> 43 <model type='cirrus' vram='9216' heads='1'/> 44 <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> 45 </video> 46 47 {{$bridge := .NetworkBridge}}{{range $nic := .Interfaces}} 48 <interface type='bridge'> 49 <mac address='{{$nic.MACAddress}}'/> 50 <model type='virtio'/> 51 <source bridge='{{$nic.ParentInterfaceName}}'/> 52 </interface> 53 {{end}} 54 </devices> 55 </domain> 56 ` 57 58 func WriteTemplate(path string, params CreateMachineParams) (err error) { 59 defer errors.DeferredAnnotatef(&err, "cannot write kvm container config") 60 61 tmpl, err := template.New("kvm").Parse(kvmTemplate) 62 if err != nil { 63 return err 64 } 65 66 var buf bytes.Buffer 67 if err := tmpl.Execute(&buf, params); err != nil { 68 return err 69 } 70 71 f, err := os.Create(path) 72 if err != nil { 73 return err 74 } 75 defer f.Close() 76 _, err = f.WriteString(buf.String()) 77 return err 78 }