github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/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 <guest dev='{{$nic.InterfaceName}}'/> 53 </interface> 54 {{end}} 55 </devices> 56 </domain> 57 ` 58 59 func WriteTemplate(path string, params CreateMachineParams) (err error) { 60 defer errors.DeferredAnnotatef(&err, "cannot write kvm container config") 61 62 tmpl, err := template.New("kvm").Parse(kvmTemplate) 63 if err != nil { 64 return err 65 } 66 67 var buf bytes.Buffer 68 if err := tmpl.Execute(&buf, params); err != nil { 69 return err 70 } 71 72 f, err := os.Create(path) 73 if err != nil { 74 return err 75 } 76 defer f.Close() 77 _, err = f.WriteString(buf.String()) 78 return err 79 }