Revision eb62691c src/Ganeti/Block/Drbd/Parser.hs

b/src/Ganeti/Block/Drbd/Parser.hs
31 31
import qualified Data.Attoparsec.Text as A
32 32
import qualified Data.Attoparsec.Combinator as AC
33 33
import Data.Attoparsec.Text (Parser)
34
import Data.List
34 35
import Data.Maybe
35 36
import Data.Text (Text, unpack)
36 37

  
......
61 62
optional parser = (Just <$> parser) <|> pure Nothing
62 63

  
63 64
-- | The parser for a whole DRBD status file.
64
drbdStatusParser :: Parser DRBDStatus
65
drbdStatusParser =
65
drbdStatusParser :: [DrbdInstMinor] -> Parser DRBDStatus
66
drbdStatusParser instMinor =
66 67
  DRBDStatus <$> versionInfoParser
67
             <*> deviceParser `AC.manyTill` A.endOfInput
68
             <*> deviceParser instMinor `AC.manyTill` A.endOfInput
68 69
             <* A.endOfInput
69 70

  
70 71
-- | The parser for the version information lines.
......
111 112
              <* A.endOfLine
112 113

  
113 114
-- | The parser for a (multi-line) string representing a device.
114
deviceParser :: Parser DeviceInfo
115
deviceParser = do
115
deviceParser :: [DrbdInstMinor] -> Parser DeviceInfo
116
deviceParser instMinor = do
116 117
  deviceNum <- skipSpaces *> A.decimal <* A.char ':'
117 118
  cs <- skipSpacesAndString "cs:" connStateParser
118 119
  if cs == Unconfigured
......
129 130
      reS <- optional resyncParser
130 131
      act <- optional actLogParser
131 132
      _ <- additionalEOL
133
      let inst = find ((deviceNum ==) . dimMinor) instMinor
134
          iName = fmap dimInstName inst
132 135
      return $ DeviceInfo deviceNum cs ro ds replicProtocol io pIndicators
133
                          syncS reS act
136
                          syncS reS act iName
134 137

  
135 138
    where conditionalSyncStatusParser SyncSource = Just <$> syncStatusParser
136 139
          conditionalSyncStatusParser SyncTarget = Just <$> syncStatusParser

Also available in: Unified diff