diff --git a/lxd/network/acl/driver_common.go b/lxd/network/acl/driver_common.go index 9d863a3c29a0..08b83ac401f1 100644 --- a/lxd/network/acl/driver_common.go +++ b/lxd/network/acl/driver_common.go @@ -751,33 +751,48 @@ func (d *common) Delete() error { // GetLog gets the ACL log. func (d *common) GetLog(clientType request.ClientType) (string, error) { // ACLs aren't specific to a particular network type but the log only works with OVN. - logPath := shared.HostPath("/var/log/ovn/ovn-controller.log") - if !shared.PathExists(logPath) { - return "", fmt.Errorf("Only OVN log entries may be retrieved at this time") - } + var logEntries []string + var err error + prefix := fmt.Sprintf("lxd_acl%d-", d.id) + // First, check if we can resolve the /run/openvswitch symlink to determine if OVN is in use. + // This is used in case of a MicroOVN deployment is interfaced with LXD. + targetPath, err := os.Readlink("/run/openvswitch") + if err == nil && strings.HasSuffix(targetPath, "/microovn/chassis/switch") { + logEntries, err = ovnParseLogEntriesFromJournald("snap.microovn.chassis.service", prefix) + if err != nil { + return "", fmt.Errorf("Failed to get OVN log entries from syslog: %v\n", err) + } + } else { + // Else, if the /run/openvswitch symlink doesn't exist (which might be the case for a non-snap installation of LXD), + // then try to read the OVN controller log file directly. + logEntries = []string{} + logPath := shared.HostPath("/var/log/ovn/ovn-controller.log") + if !shared.PathExists(logPath) { + return "", fmt.Errorf("Only OVN log entries may be retrieved at this time") + } - // Open the log file. - logFile, err := os.Open(logPath) - if err != nil { - return "", fmt.Errorf("Couldn't open OVN log file: %w", err) - } + // Open the log file. + logFile, err := os.Open(logPath) + if err != nil { + return "", fmt.Errorf("Couldn't open OVN log file: %w", err) + } - defer func() { _ = logFile.Close() }() + defer func() { _ = logFile.Close() }() - logEntries := []string{} - scanner := bufio.NewScanner(logFile) - for scanner.Scan() { - logEntry := ovnParseLogEntry(scanner.Text(), fmt.Sprintf("lxd_acl%d-", d.id)) - if logEntry == "" { - continue - } + scanner := bufio.NewScanner(logFile) + for scanner.Scan() { + logEntry := ovnParseLogEntry(scanner.Text(), "", prefix) + if logEntry == "" { + continue + } - logEntries = append(logEntries, logEntry) - } + logEntries = append(logEntries, logEntry) + } - err = scanner.Err() - if err != nil { - return "", fmt.Errorf("Failed to read OVN log file: %w", err) + err = scanner.Err() + if err != nil { + return "", fmt.Errorf("Failed to read OVN log file: %w", err) + } } // Aggregates the entries from the rest of the cluster.