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  }