virtlib

package
v0.0.0-...-e0012a9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 1, 2022 License: Apache-2.0 Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var DefaultCreateDomainOpt = DomainCreateOpt{
	Type: "kvm",
	Name: "ubuntu",
	Uuid: "c7a5fdbd-cdaf-9455-926a-d65c16db1809",
	Memory: struct {
		Text string `xml:",chardata"`
		Unit string `xml:"unit,attr"`
	}{
		Text: "4",
		Unit: "GiB",
	},
	Vcpu: "4",
	Os: __os{
		Type: struct {
			Text    string `xml:",chardata"`
			Arch    string `xml:"arch,attr"`
			Machine string `xml:"machine,attr"`
		}{
			Text:    "hvm",
			Arch:    "x86_64",
			Machine: "pc",
		},
		Boot: []__boot{
			{Dev: "hd"},
			{Dev: "cdrom"},
		},
	},
	Devices: __devices{
		Emulator: "/usr/bin/qemu-system-x86_64",
		Disk: []__disk{{
			Type:   "file",
			Device: "cdrom",
			Source: __source{
				File: "/home/fangaoyang/work/ubuntu-20.04.3-desktop-amd64.iso",
			},
			Target: __target{
				Dev: "hdc",
			},
		}, {
			Type:   "file",
			Device: "disk",
			Driver: &__driver{
				Name: "qemu",
				Type: "qcow2",
			},
			Source: __source{
				File: "/home/fangaoyang/work/desktop.qcow2",
			},
			Target: __target{
				Dev: "hda",
			},
		}},
		Interface: __interface{
			Type:   "network",
			Source: __interSource{Network: "default"},
		},
		Graphics: __graphics{
			Type:   "vnc",
			Port:   "-1",
			Listen: "0.0.0.0",
			Passwd: "123",
			Keymap: "en-us",
		},
		Serial: __serial{
			Type: "pty",
			Target: __serTarget{
				Port: "0",
			},
		},
		Console: __console{
			Type: "pty",
			Target: __conTarget{
				Type: "serial",
				Port: "0",
			},
		},
	},
}

Functions

func PortInUse

func PortInUse(port int) bool

func ProxyVNCToWebSocket

func ProxyVNCToWebSocket(vncPort int) (int, error)

Types

type ACPI

type ACPI struct {
	Default Default `xml:"_default"`
	Toggle  Support `xml:"_toggle"`
}

type Arch

type Arch struct {
	Wordsize string        `xml:"wordsize"`
	Emulator string        `xml:"emulator"`
	Machine  *MachineUnion `xml:"machine"`
	Domain   *DomainUnion  `xml:"domain"`
	Name     string        `xml:"_name"`
}

type Bank

type Bank struct {
	ID    string `xml:"_id"`
	Level string `xml:"_level"`
	Type  string `xml:"_type"`
	Size  string `xml:"_size"`
	Unit  string `xml:"_unit"`
	Cpus  string `xml:"_cpus"`
}

type Baselabel

type Baselabel struct {
	Type Type   `xml:"_type"`
	Text string `xml:"__text"`
}

type CPUElement

type CPUElement struct {
	ID       string `xml:"_id"`
	SocketID string `xml:"_socket_id"`
	CoreID   string `xml:"_core_id"`
	Siblings string `xml:"_siblings"`
}

type CPUPage

type CPUPage struct {
	Unit string `xml:"_unit"`
	Size string `xml:"_size"`
}

type CPUTopology

type CPUTopology struct {
	Sockets string `xml:"_sockets"`
	Cores   string `xml:"_cores"`
	Threads string `xml:"_threads"`
}

type Cache

type Cache struct {
	Bank Bank `xml:"bank"`
}

type Capabilities

type Capabilities struct {
	Host  Host    `xml:"host"`
	Guest []Guest `xml:"guest"`
}

type Capability

type Capability struct {
	XMLName xml.Name `xml:"capabilities"`
	Text    string   `xml:",chardata"`
	Host    struct {
		Text string `xml:",chardata"`
		Uuid string `xml:"uuid"`
		Cpu  struct {
			Text      string `xml:",chardata"`
			Arch      string `xml:"arch"`
			Model     string `xml:"model"`
			Vendor    string `xml:"vendor"`
			Microcode struct {
				Text    string `xml:",chardata"`
				Version string `xml:"version,attr"`
			} `xml:"microcode"`
			Counter struct {
				Text      string `xml:",chardata"`
				Name      string `xml:"name,attr"`
				Frequency string `xml:"frequency,attr"`
				Scaling   string `xml:"scaling,attr"`
			} `xml:"counter"`
			Topology struct {
				Text    string `xml:",chardata"`
				Sockets string `xml:"sockets,attr"`
				Cores   string `xml:"cores,attr"`
				Threads string `xml:"threads,attr"`
			} `xml:"topology"`
			Feature []struct {
				Text string `xml:",chardata"`
				Name string `xml:"name,attr"`
			} `xml:"feature"`
			Pages []struct {
				Text string `xml:",chardata"`
				Unit string `xml:"unit,attr"`
				Size string `xml:"size,attr"`
			} `xml:"pages"`
		} `xml:"cpu"`
		PowerManagement struct {
			Text          string `xml:",chardata"`
			SuspendMem    string `xml:"suspend_mem"`
			SuspendDisk   string `xml:"suspend_disk"`
			SuspendHybrid string `xml:"suspend_hybrid"`
		} `xml:"power_management"`
		Iommu struct {
			Text    string `xml:",chardata"`
			Support string `xml:"support,attr"`
		} `xml:"iommu"`
		MigrationFeatures struct {
			Text          string `xml:",chardata"`
			Live          string `xml:"live"`
			URITransports struct {
				Text         string   `xml:",chardata"`
				URITransport []string `xml:"uri_transport"`
			} `xml:"uri_transports"`
		} `xml:"migration_features"`
		Topology struct {
			Text  string `xml:",chardata"`
			Cells struct {
				Text string `xml:",chardata"`
				Num  string `xml:"num,attr"`
				Cell struct {
					Text   string `xml:",chardata"`
					ID     string `xml:"id,attr"`
					Memory struct {
						Text string `xml:",chardata"`
						Unit string `xml:"unit,attr"`
					} `xml:"memory"`
					Pages []struct {
						Text string `xml:",chardata"`
						Unit string `xml:"unit,attr"`
						Size string `xml:"size,attr"`
					} `xml:"pages"`
					Distances struct {
						Text    string `xml:",chardata"`
						Sibling struct {
							Text  string `xml:",chardata"`
							ID    string `xml:"id,attr"`
							Value string `xml:"value,attr"`
						} `xml:"sibling"`
					} `xml:"distances"`
					Cpus struct {
						Text string `xml:",chardata"`
						Num  string `xml:"num,attr"`
						Cpu  []struct {
							Text     string `xml:",chardata"`
							ID       string `xml:"id,attr"`
							SocketID string `xml:"socket_id,attr"`
							CoreID   string `xml:"core_id,attr"`
							Siblings string `xml:"siblings,attr"`
						} `xml:"cpu"`
					} `xml:"cpus"`
				} `xml:"cell"`
			} `xml:"cells"`
		} `xml:"topology"`
		Cache struct {
			Text string `xml:",chardata"`
			Bank struct {
				Text  string `xml:",chardata"`
				ID    string `xml:"id,attr"`
				Level string `xml:"level,attr"`
				Type  string `xml:"type,attr"`
				Size  string `xml:"size,attr"`
				Unit  string `xml:"unit,attr"`
				Cpus  string `xml:"cpus,attr"`
			} `xml:"bank"`
		} `xml:"cache"`
		Secmodel []struct {
			Text      string `xml:",chardata"`
			Model     string `xml:"model"`
			Doi       string `xml:"doi"`
			Baselabel []struct {
				Text string `xml:",chardata"`
				Type string `xml:"type,attr"`
			} `xml:"baselabel"`
		} `xml:"secmodel"`
	} `xml:"host"`
	Guest []struct {
		Text   string `xml:",chardata"`
		OsType string `xml:"os_type"`
		Arch   struct {
			Text     string `xml:",chardata"`
			Name     string `xml:"name,attr"`
			Wordsize string `xml:"wordsize"`
			Emulator string `xml:"emulator"`
			Machine  []struct {
				Text      string `xml:",chardata"`
				MaxCpus   string `xml:"maxCpus,attr"`
				Canonical string `xml:"canonical,attr"`
			} `xml:"machine"`
			Domain []struct {
				Text string `xml:",chardata"`
				Type string `xml:"type,attr"`
			} `xml:"domain"`
		} `xml:"arch"`
		Features struct {
			Text         string `xml:",chardata"`
			Cpuselection string `xml:"cpuselection"`
			Deviceboot   string `xml:"deviceboot"`
			Disksnapshot struct {
				Text    string `xml:",chardata"`
				Default string `xml:"default,attr"`
				Toggle  string `xml:"toggle,attr"`
			} `xml:"disksnapshot"`
			Acpi struct {
				Text    string `xml:",chardata"`
				Default string `xml:"default,attr"`
				Toggle  string `xml:"toggle,attr"`
			} `xml:"acpi"`
			Pae    string `xml:"pae"`
			Nonpae string `xml:"nonpae"`
			Apic   struct {
				Text    string `xml:",chardata"`
				Default string `xml:"default,attr"`
				Toggle  string `xml:"toggle,attr"`
			} `xml:"apic"`
		} `xml:"features"`
	} `xml:"guest"`
}

type Cell

type Cell struct {
	Memory    Memory     `xml:"memory"`
	Pages     []CellPage `xml:"pages"`
	Distances Distances  `xml:"distances"`
	Cpus      Cpus       `xml:"cpus"`
	ID        string     `xml:"_id"`
}

type CellPage

type CellPage struct {
	Unit string `xml:"_unit"`
	Size string `xml:"_size"`
	Text string `xml:"__text"`
}

type Cells

type Cells struct {
	Cell Cell   `xml:"cell"`
	Num  string `xml:"_num"`
}

type Counter

type Counter struct {
	Name      string  `xml:"_name"`
	Frequency string  `xml:"_frequency"`
	Scaling   Support `xml:"_scaling"`
}

type Cpus

type Cpus struct {
	CPU []CPUElement `xml:"cpu"`
	Num string       `xml:"_num"`
}

type Default

type Default string
const (
	On Default = "on"
)

type Distances

type Distances struct {
	Sibling Sibling `xml:"sibling"`
}

type Domain

type Domain struct {
	XMLName       xml.Name      `xml:"domain"`
	Type          string        `xml:"type,attr"`
	ID            string        `xml:"id,attr"`
	Name          string        `xml:"name"`
	Uuid          string        `xml:"uuid"`
	Memory        memory        `xml:"memory"`
	CurrentMemory currentMemory `xml:"currentMemory"`
	Vcpu          vcpu          `xml:"vcpu"`
	Resource      resource      `xml:"resource"`
	Os            os            `xml:"os"`
	Cpu           cpu           `xml:"cpu"`
	Clock         clock         `xml:"clock"`
	OnPoweroff    string        `xml:"on_poweroff"`
	OnReboot      string        `xml:"on_reboot"`
	OnCrash       string        `xml:"on_crash"`
	Devices       devices       `xml:"devices"`
	Seclabel      seclabel      `xml:"seclabel"`
}

type DomainCreateOpt

type DomainCreateOpt struct {
	XMLName       xml.Name        `xml:"domain"`
	Text          string          `xml:",chardata"`
	Type          string          `xml:"type,attr"`
	Name          string          `xml:"name"`
	Uuid          string          `xml:"uuid"`
	Memory        __memo          `xml:"memory"`
	CurrentMemory __currentMemory `xml:"currentMemory"`
	Vcpu          string          `xml:"vcpu"`
	Os            __os            `xml:"os"`
	Devices       __devices       `xml:"devices"`
}

type DomainElement

type DomainElement struct {
	Type Type `xml:"_type"`
}

type DomainSnapshot

type DomainSnapshot struct {
	XMLName     xml.Name `xml:"domainsnapshot"`
	Text        string   `xml:",chardata"`
	Name        string   `xml:"name,omitempty"`
	Description string   `xml:"description,omitempty"`
}

type DomainState

type DomainState struct {
	State     string
	MaxMemory uint32
	Memory    uint32
	VirCPU    uint32
	CPUTime   uint32
}

type DomainUnion

type DomainUnion struct {
	DomainElement      *DomainElement
	DomainElementArray []DomainElement
}

type Feature

type Feature struct {
	Name string `xml:"_name"`
}

type Features

type Features struct {
	Cpuselection string  `xml:"cpuselection"`
	Deviceboot   string  `xml:"deviceboot"`
	Disksnapshot ACPI    `xml:"disksnapshot"`
	ACPI         *ACPI   `xml:"acpi,omitempty"`
	Pae          *string `xml:"pae,omitempty"`
	Nonpae       *string `xml:"nonpae,omitempty"`
	APIC         *ACPI   `xml:"apic,omitempty"`
}

type Guest

type Guest struct {
	OSType   OSType   `xml:"os_type"`
	Arch     Arch     `xml:"arch"`
	Features Features `xml:"features"`
}

type Host

type Host struct {
	UUID              string            `xml:"uuid"`
	CPU               HostCPU           `xml:"cpu"`
	PowerManagement   PowerManagement   `xml:"power_management"`
	Iommu             Iommu             `xml:"iommu"`
	MigrationFeatures MigrationFeatures `xml:"migration_features"`
	Topology          HostTopology      `xml:"topology"`
	Cache             Cache             `xml:"cache"`
	Secmodel          []Secmodel        `xml:"secmodel"`
}

type HostCPU

type HostCPU struct {
	Arch      string      `xml:"arch"`
	Model     string      `xml:"model"`
	Vendor    string      `xml:"vendor"`
	Microcode Microcode   `xml:"microcode"`
	Counter   Counter     `xml:"counter"`
	Topology  CPUTopology `xml:"topology"`
	Feature   []Feature   `xml:"feature"`
	Pages     []CPUPage   `xml:"pages"`
}

type HostTopology

type HostTopology struct {
	Cells Cells `xml:"cells"`
}

type Iommu

type Iommu struct {
	Support Support `xml:"_support"`
}

type Lib

type Lib struct {
	// contains filtered or unexported fields
}

func GetConnectedLib

func GetConnectedLib() *Lib

func New

func New(ip net.IP, port string) (*Lib, error)

func (*Lib) Connect

func (l *Lib) Connect() error

func (*Lib) CreateDomain

func (l *Lib) CreateDomain(opt DomainCreateOpt) error

func (*Lib) CreateSnapshot

func (l *Lib) CreateSnapshot(name string, opt DomainSnapshot) error

CreateSnapshot

libvirt不支持对于external snapshot的管理操作:恢复快照、删除快照会有如下报错:
unsupported configuration: deletion of 1 external disk snapshots not supported yet.
而如果在创建快照时flag为libvirt.DomainSnapshotCreateDiskOnly(libvirt.DomainSnapshotCreateFlags)时,
快照会被保存到外部,即快照是external的。这就需要手动来管理这些external的快照。

创建:将 libvirt.DomainSnapshotCreateFlags 传入函数,即可在Domain对应的镜像文件所在的目录中生成一个镜像文件,
	镜像文件的后缀是snapshot的名称。
回滚:只能调用带 libvirt.DomainSnapshotDeleteMetadataOnly flag的函数,删除镜像元数据,然后手动将xml中的镜像
	文件修改为parent的快照,并删除要删除的镜像文件。

手工操作可参考: https://fabianlee.org/2021/01/10/kvm-creating-and-reverting-libvirt-external-snapshots/

func (*Lib) DeleteSnapshot

func (l *Lib) DeleteSnapshot(name, snapshotName string, args libvirt.DomainSnapshotDeleteFlags) error

DeleteSnapshot

args: libvirt.DomainSnapshotDeleteChildren 此快照和任何后代快照都将被删除
libvirt.DomainSnapshotDeleteChildrenOnly 删除任何后代快照,但保留此快照
libvirt.DomainSnapshotDeleteMetadataOnly 任何由libvirt追踪的快照元数据都会被移除,同时保持快照内容不变;
如果管理程序不需要任何libvirt元数据来追踪快照,那么这个标志会被默默地忽略。
=> 可以删除external快照的metadata,但不删除文件,需要手动管理文件

func (*Lib) DestroyDomain

func (l *Lib) DestroyDomain(name string) error

DestroyDomain 删除

func (*Lib) DisConnect

func (l *Lib) DisConnect() error

func (*Lib) GetAllInterfaces

func (l *Lib) GetAllInterfaces()

func (*Lib) GetCapabilities

func (l *Lib) GetCapabilities() (string, error)

func (*Lib) GetCurrentSnapshot

func (l *Lib) GetCurrentSnapshot(domainName string) (libvirt.DomainSnapshot, error)

func (*Lib) GetDomCPUTime

func (l *Lib) GetDomCPUTime(domName string) ([]libvirt.TypedParam, error)

func (*Lib) GetDomCPUUsage

func (l *Lib) GetDomCPUUsage(domName string, interval int) (float64, error)

func (*Lib) GetDomDiskUsage

func (l *Lib) GetDomDiskUsage(domName string) (float64, error)

func (*Lib) GetDomMemStats

func (l *Lib) GetDomMemStats(domName string) ([]libvirt.DomainMemoryStat, error)

func (*Lib) GetDomMemUsage

func (l *Lib) GetDomMemUsage(domName string) (float64, error)

func (*Lib) GetDomainByName

func (l *Lib) GetDomainByName(name string) (libvirt.Domain, error)

func (*Lib) GetDomainDiskPath

func (l *Lib) GetDomainDiskPath(name string) string

func (*Lib) GetDomainIP

func (l *Lib) GetDomainIP(name string)

GetDomainIP error

func (*Lib) GetDomainIPAddress

func (l *Lib) GetDomainIPAddress(name string) (string, error)

GetDomainIPAddress 不知道为什么会返回一个数组

func (*Lib) GetDomainState

func (l *Lib) GetDomainState(name string) (DomainState, error)

func (*Lib) GetDomainVNCPort

func (l *Lib) GetDomainVNCPort(name string) string

func (*Lib) GetDomainXML

func (l *Lib) GetDomainXML(name string) Domain

func (*Lib) GetNodeCPUStats

func (l *Lib) GetNodeCPUStats() ([]libvirt.NodeGetCPUStats, error)

func (*Lib) GetNodeMemStats

func (l *Lib) GetNodeMemStats() ([]libvirt.NodeGetMemoryStats, error)

func (*Lib) GetSnapshotByName

func (l *Lib) GetSnapshotByName(domain, snapshotName string) (libvirt.DomainSnapshot, error)

func (*Lib) ListSnapshots

func (l *Lib) ListSnapshots(name string) ([]libvirt.DomainSnapshot, error)

func (*Lib) PullAllSnapshots

func (l *Lib) PullAllSnapshots(domainName string) error

func (*Lib) RebootDomain

func (l *Lib) RebootDomain(name string) error

RebootDomain 重启

func (*Lib) ResumeDomain

func (l *Lib) ResumeDomain(name string) error

ResumeDomain 恢复(挂起的反动作)

func (*Lib) RevertSnapshot

func (l *Lib) RevertSnapshot(name string) error

func (*Lib) ShutdownDomain

func (l *Lib) ShutdownDomain(name string) error

ShutdownDomain 关机

func (*Lib) StartDomain

func (l *Lib) StartDomain(name string) error

func (*Lib) SuspendDomain

func (l *Lib) SuspendDomain(name string) error

SuspendDomain 挂起

func (*Lib) UnDefineDomain

func (l *Lib) UnDefineDomain(name string) error

type MachineElement

type MachineElement struct {
	MaxCpus   string  `xml:"_maxCpus"`
	Text      string  `xml:"__text"`
	Canonical *string `xml:"_canonical,omitempty"`
}

type MachineUnion

type MachineUnion struct {
	MachineElementArray []MachineElement
	PurpleMachine       *PurpleMachine
}

type Memory

type Memory struct {
	Unit string `xml:"_unit"`
	Text string `xml:"__text"`
}

type Microcode

type Microcode struct {
	Version string `xml:"_version"`
}

type MigrationFeatures

type MigrationFeatures struct {
	Live          string        `xml:"live"`
	URITransports URITransports `xml:"uri_transports"`
}

type OSType

type OSType string
const (
	Hvm OSType = "hvm"
)

type PowerManagement

type PowerManagement struct {
	SuspendMem    string `xml:"suspend_mem"`
	SuspendDisk   string `xml:"suspend_disk"`
	SuspendHybrid string `xml:"suspend_hybrid"`
}

type PurpleMachine

type PurpleMachine struct {
	MaxCpus string `xml:"_maxCpus"`
	Text    string `xml:"__text"`
}

type Secmodel

type Secmodel struct {
	Model     string      `xml:"model"`
	Doi       string      `xml:"doi"`
	Baselabel []Baselabel `xml:"baselabel,omitempty"`
}

type Sibling

type Sibling struct {
	ID    string `xml:"_id"`
	Value string `xml:"_value"`
}

type Support

type Support string
const (
	No  Support = "no"
	Yes Support = "yes"
)

type Type

type Type string
const (
	KVM  Type = "kvm"
	Qemu Type = "qemu"
)

type URITransports

type URITransports struct {
	URITransport []string `xml:"uri_transport"`
}

type Welcome4

type Welcome4 struct {
	Capabilities Capabilities `xml:"capabilities"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL