func setDisabled()

in vmextension/enabledisable.go [182:224]


func setDisabled(ext *VMExtension, disabled bool) error {
	disabledFile := path.Join(ext.HandlerEnv.ConfigFolder, disabledFileName)
	exists, err := doesFileExistDisableDependency(disabledFile)
	if err != nil {
		ext.ExtensionLogger.Error("doesFileExit error detected: %v", err.Error())
	}
	if exists != disabled {
		if disabled {
			// Create the file
			ext.ExtensionLogger.Info("Disabling extension")
			b := []byte("1")
			err := disableDependency.writeFile(disabledFile, b, 0644)
			if err != nil {
				ext.ExtensionLogger.Error("Could not disable the extension: %v", err)
				return err
			}

			ext.ExtensionLogger.Info("Disabled extension")
		} else {
			// Remove the file
			ext.ExtensionLogger.Info("Un-disabling extension")
			err := disableDependency.remove(disabledFile)
			if err == nil {
				ext.ExtensionLogger.Info("Re-enabled extension")
				return nil
			}

			// despite the check above, sometimes the disable file doesn't exist due to concurrent issue
			// catch errors that may arise from trying to disable a non existent file
			pathError, isPathError := err.(*os.PathError)
			if isPathError {
				if pathError.Err == syscall.ENOENT {
					ext.ExtensionLogger.Warn("Disable file was not present ignoring error")
					return nil
				}
			}

			ext.ExtensionLogger.Error("Could not re-enable the extension: %v", err)
			return err
		}
	}
	return nil
}