libvirt-go 探索(入门)

基于https://github.com/libvirt/libvirt-go README

确保已安装libvirt-dev版本支持1.2.0版本之后的libvirt默认情况下,绑定将支持libvirt.so,libvirt-qemu.so和libvirt-lxc.so中的API。可以使用构建标记'without_qemu'或'without_lxc'分别从构建中删除后两个库。Go API被认为是生产就绪的,旨在保持未来版本的稳定性。

libvirt项目旨在将libvirt-go添加到主libvirt C库后立即添加对新API的支持。如果要提交对libvirt C库API的更改,请同时提交libvirt-go更改。

测试核心API单元测试都是使用内置的测试驱动程序(test:///default)编写的,因此它们与主机OS环境没有交互。

使用自动化测试验证libvirt C库API /常量的覆盖范围。这些可以通过传递'api'构建标记来运行。例如,go test -tags api

对于测试驱动程序缺乏功能的区域,可以使用QEMU或LXC驱动程序来执行代码。这些测试必须是'integration_test.go'文件的一部分,但只有在传递'integration'构建标记时才会运行。例如,go test -tags integration

为了运行单元测试,应将libvirtd配置为允许您的用户帐户以无密码进行读写访问。这可以使用polkit配置文件轻松完成

# cat > /etc/polkit-1/localauthority/50-local.d/50-libvirt.pkla  <<EOF
[Passwordless libvirt access]
Identity=unix-group:jahentao
Action=org.libvirt.unix.manage
ResultAny=yes
ResultInactive=yes
ResultActive=yes
EOF

将'jahentao'替换为您的UNIX用户名。

Polkit是用于实现权限管理的, 通过给非特权进程授权,允许具有特权的进程(或者库文件lib)> 给非特权进程提供服务。

其中一个集成测试还要求libvirtd正在侦听localhost上的TCP连接,使用sasl auth。

这可以通过编辑/etc/libvirt/libvirtd.conf进行设置来设置

  listen_tls=0
  listen_tcp=1
  auth_tcp=“sasl” # 注意加 “”双引号,在 virsh --connect qemu:///system 测试
  listen_addr="127.0.0.1" # 写0.0.0.0也没事

然后修改 vim /etc/default/libvirtd(在vagrant虚拟机中是 /etc/sysconfig/libvirtd) 添加--listen标志

start_libvirtd="yes"
libvirtd_opts=" --listen"

PS:修改密码机制和存储位置/etc/sasl2/libvirt.conf

vim /etc/sasl2/libvirt.conf
// 内容
sasldb_path: /etc/libvirt/passwd.db

其实 sasldb_path 不改也行,默认在 /etc/sasldb2

重启libvirtd服务

service libvirtd restart

然后创建一个sasl用户

# saslpasswd2 -a libvirt user 

并输入"pass"作为密码

查看用户名(注意前面是否修改密码存储路径)

# sudo sasldblistusers2 -f /etc/libvirt/passwd.db 

PS:修改Vagrant的boxes存储位置

Vagrant的boxes默认是放在~/.vagrant.d/boxes下面的

修改box存放路径:
1. copy ~/.vagrant.d/下面的目录到新目录

cp ~/.vagrant.d/   /path/to/vagrant_home/ 

2. 设置环境变量

vim ~/.bashrc
// 加上如下
export VAGRANT_HOME='/path/to/vagrant_home'

就这样,重新登录shell后,boxes的存放目录就在 /path/to/vagrant_home/boxes 下面了

PS:vagrant使用代理

For Mac/Linux (in Bash)

export http_proxy="http://user:password@host:port"
export https_proxy="http://user:password@host:port"
vagrant plugin install vagrant-proxyconf

then

export VAGRANT_HTTP_PROXY=${http_proxy}
export VAGRANT_NO_PROXY="127.0.0.1"
vagrant up

For Windows use set instead of export.

set http_proxy=http://user:password@host:port
set https_proxy=%http_proxy%
vagrant plugin install vagrant-proxyconf

then

set VAGRANT_HTTP_PROXY="%http_proxy%"
set VAGRANT_NO_PROXY="127.0.0.1"
vagrant up

PS:安装插件可能遇到问题,可能需要临时禁用Ipv6
https://github.com/hashicorp/vagrant/issues/8893
或者是代理配置的问题比如socks5协议

运行集成测试需要Vagrantfile,需要使用virtualbox。

cd ./vagrant
vagrant up #配置虚拟机
vagrant ssh #登录虚拟机

在里面,做上面集成测试需要的修改。

其中一个集成测试还要求libvirtd正在侦听localhost上的TCP连接,使用sasl auth,这可以通过编辑/etc/libvirt/libvirtd.conf进行设置来设置

listen_tls=0
listen_tcp=1
auth_tcp=“sasl” # 注意加 “”双引号,在 virsh --connect qemu:///system 测试
listen_addr="127.0.0.1"

然后修改 ,在vagrant虚拟机中是 /etc/sysconfig/libvirtd 添加--listen标志

LIBVIRTD_ARGS="--listen" 

然后

sudo su -
go test -tags integration libvirt

在vagrant box中可能遇到问题,就是没有就行上述集成测试的修改。

Connection refused