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  }