rbd: check for nbd cookie support

Change checkRbdNbdTools() to setRbdNbdToolFeatures()

Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
This commit is contained in:
Prasanna Kumar Kalever 2021-09-29 19:43:16 +05:30 committed by mergify[bot]
parent b95f3cdcbc
commit 793b22cf27

View File

@ -67,10 +67,13 @@ const (
setNbdIOTimeout = "io-timeout" setNbdIOTimeout = "io-timeout"
) )
var hasNBD = false var (
hasNBD = true
hasNBDCookieSupport = false
)
func init() { func init() {
hasNBD = checkRbdNbdTools() setRbdNbdToolFeatures()
} }
// rbdDeviceInfo strongly typed JSON spec for rbd device list output (of type krbd). // rbdDeviceInfo strongly typed JSON spec for rbd device list output (of type krbd).
@ -193,27 +196,30 @@ func waitForPath(ctx context.Context, pool, namespace, image string, maxRetries
return "", false return "", false
} }
// Check if rbd-nbd tools are installed. // set features available with rbd-nbd, and NBD module loaded status.
func checkRbdNbdTools() bool { func setRbdNbdToolFeatures() {
// check if the module is loaded or compiled in // check if the module is loaded or compiled in
_, err := os.Stat(fmt.Sprintf("/sys/module/%s", moduleNbd)) _, err := os.Stat(fmt.Sprintf("/sys/module/%s", moduleNbd))
if os.IsNotExist(err) { if os.IsNotExist(err) {
// try to load the module // try to load the module
_, _, err = util.ExecCommand(context.TODO(), "modprobe", moduleNbd) _, _, err = util.ExecCommand(context.TODO(), "modprobe", moduleNbd)
if err != nil { if err != nil {
log.ExtendedLogMsg("rbd-nbd: nbd modprobe failed with error %v", err) hasNBD = false
log.WarningLogMsg("rbd-nbd: nbd modprobe failed with error %v", err)
return false
} }
} }
if _, _, err := util.ExecCommand(context.TODO(), rbdTonbd, "--version"); err != nil {
log.ExtendedLogMsg("rbd-nbd: running rbd-nbd --version failed with error %v", err)
return false stdout, stderr, err := util.ExecCommand(context.TODO(), rbdTonbd, "--help")
if err != nil || stderr != "" {
hasNBD = false
log.WarningLogMsg("running rbd-nbd --help failed with error:%v, stderr:%s", err, stderr)
} }
log.ExtendedLogMsg("rbd-nbd tools were found.")
return true if strings.Contains(stdout, "--cookie") {
hasNBDCookieSupport = true
}
log.DefaultLog("NBD module loaded: %t, rbd-nbd supported features, cookie: %t", hasNBD, hasNBDCookieSupport)
} }
func attachRBDImage(ctx context.Context, volOptions *rbdVolume, device string, cr *util.Credentials) (string, error) { func attachRBDImage(ctx context.Context, volOptions *rbdVolume, device string, cr *util.Credentials) (string, error) {