Merge pull request #11842 from leoluk/libvirt-permissions-revisited

kvm: only check libvirt membership if we failed to connect to it
pull/12069/head
Medya Ghazizadeh 2021-07-28 12:27:47 -07:00 committed by GitHub
commit 654a1b5b55
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 28 additions and 24 deletions

View File

@ -122,34 +122,38 @@ func status() registry.State {
return registry.State{Error: err, Fix: "Install libvirt", Doc: docURL}
}
member, err := isCurrentUserLibvirtGroupMember()
if err != nil {
return registry.State{
Installed: true,
Running: true,
// keep the error messsage in sync with reason.providerIssues(Kind.ID: "PR_KVM_USER_PERMISSION") regexp
Error: fmt.Errorf("libvirt group membership check failed:\n%v", err.Error()),
Reason: "PR_KVM_USER_PERMISSION",
Fix: "Check that libvirtd is properly installed and that you are a member of the appropriate libvirt group (remember to relogin for group changes to take effect!)",
Doc: docURL,
}
}
if !member {
return registry.State{
Installed: true,
Running: true,
// keep the error messsage in sync with reason.providerIssues(Kind.ID: "PR_KVM_USER_PERMISSION") regexp
Error: fmt.Errorf("libvirt group membership check failed:\nuser is not a member of the appropriate libvirt group"),
Reason: "PR_KVM_USER_PERMISSION",
Fix: "Check that libvirtd is properly installed and that you are a member of the appropriate libvirt group (remember to relogin for group changes to take effect!)",
Doc: docURL,
}
}
// On Ubuntu 19.10 (libvirt 5.4), this fails if LIBVIRT_DEFAULT_URI is unset
cmd := exec.CommandContext(ctx, path, "domcapabilities", "--virttype", "kvm")
cmd.Env = append(os.Environ(), fmt.Sprintf("LIBVIRT_DEFAULT_URI=%s", defaultURI()))
out, err := cmd.CombinedOutput()
// If we fail to connect to libvirt, first check whether we're member of the libvirt group.
if err != nil {
member, err := isCurrentUserLibvirtGroupMember()
if err != nil {
return registry.State{
Installed: true,
Running: true,
// keep the error messsage in sync with reason.providerIssues(Kind.ID: "PR_KVM_USER_PERMISSION") regexp
Error: fmt.Errorf("libvirt group membership check failed:\n%v", err.Error()),
Reason: "PR_KVM_USER_PERMISSION",
Fix: "Check that libvirtd is properly installed and that you are a member of the appropriate libvirt group (remember to relogin for group changes to take effect!)",
Doc: docURL,
}
}
if !member {
return registry.State{
Installed: true,
Running: true,
// keep the error messsage in sync with reason.providerIssues(Kind.ID: "PR_KVM_USER_PERMISSION") regexp
Error: fmt.Errorf("libvirt group membership check failed:\nuser is not a member of the appropriate libvirt group"),
Reason: "PR_KVM_USER_PERMISSION",
Fix: "Check that libvirtd is properly installed and that you are a member of the appropriate libvirt group (remember to relogin for group changes to take effect!)",
Doc: docURL,
}
}
}
if ctx.Err() == context.DeadlineExceeded {
return registry.State{
Installed: true,