Extend the LVInfo data structure with the field for storing the name of
the instance it is paired with.

Update the tests accordingly.

Signed-off-by: Michele Tartara <[email protected]>
---
 src/Ganeti/Storage/Lvm/LVParser.hs          | 3 ++-
 src/Ganeti/Storage/Lvm/Types.hs             | 2 ++
 test/hs/Test/Ganeti/Storage/Lvm/LVParser.hs | 9 +++++++--
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/Ganeti/Storage/Lvm/LVParser.hs 
b/src/Ganeti/Storage/Lvm/LVParser.hs
index 9d355d9..54d1bdf 100644
--- a/src/Ganeti/Storage/Lvm/LVParser.hs
+++ b/src/Ganeti/Storage/Lvm/LVParser.hs
@@ -112,7 +112,8 @@ oneLvParser =
         <$> uuidP <*> nameP <*> attrP <*> majorP <*> minorP <*> kernelMajorP
         <*> kernelMinorP <*> sizeP <*> segCountP <*> tagsP <*> modulesP
         <*> vgUuidP <*> vgNameP <*> segtypeP <*> segStartP <*> segStartPeP
-        <*> segSizeP <*> segTagsP <*> segPeRangesP <*> devicesP <* A.endOfLine
+        <*> segSizeP <*> segTagsP <*> segPeRangesP <*> devicesP 
+        <*> return Nothing <* A.endOfLine
 
 -- | The parser for a whole diskstatus file.
 lvParser :: Parser [LVInfo]
diff --git a/src/Ganeti/Storage/Lvm/Types.hs b/src/Ganeti/Storage/Lvm/Types.hs
index 162e2be..e4c096f 100644
--- a/src/Ganeti/Storage/Lvm/Types.hs
+++ b/src/Ganeti/Storage/Lvm/Types.hs
@@ -54,4 +54,6 @@ $(buildObject "LVInfo" "lvi"
   , simpleField "seg_tags"          [t| String |]
   , simpleField "seg_pe_ranges"     [t| String |]
   , simpleField "devices"           [t| String |]
+  , optionalNullSerField $
+    simpleField "instance"          [t| String |]
   ])
diff --git a/test/hs/Test/Ganeti/Storage/Lvm/LVParser.hs 
b/test/hs/Test/Ganeti/Storage/Lvm/LVParser.hs
index 0971e64..7c3d7bd 100644
--- a/test/hs/Test/Ganeti/Storage/Lvm/LVParser.hs
+++ b/test/hs/Test/Ganeti/Storage/Lvm/LVParser.hs
@@ -49,16 +49,18 @@ case_lvs_lv = testParser lvParser "lvs_lv.txt"
       (negate 1) 253 0 1073741824 1
       "originstname+instance1.example.com" ""
       "uZgXit-eiRr-vRqe-xpEo-e9nU-mTuR-9nfVIU" "xenvg" "linear" 0 0 1073741824
-      "" "/dev/sda5:0-15" "/dev/sda5(0)"
+      "" "/dev/sda5:0-15" "/dev/sda5(0)" Nothing
   , LVInfo "5fW5mE-SBSs-GSU0-KZDg-hnwb-sZOC-zZt736"
       "df9ff3f6-a833-48ff-8bd5-bff2eaeab759.disk0_meta" "-wi-ao" (negate 1)
       (negate 1) 253 1 134217728 1
       "originstname+instance1.example.com" ""
       "uZgXit-eiRr-vRqe-xpEo-e9nU-mTuR-9nfVIU" "xenvg" "linear" 0 0 134217728 
""
-      "/dev/sda5:16-17" "/dev/sda5(16)"
+      "/dev/sda5:16-17" "/dev/sda5(16)" Nothing
   ]
 
 -- | Serialize a LVInfo in the same format that is output by @lvs@.
+-- The "instance" field is not serialized because it's not provided by @lvs@
+-- so it is not part of this test.
 serializeLVInfo :: LVInfo -> String
 serializeLVInfo l = intercalate ";"
   [ lviUuid l
@@ -88,6 +90,8 @@ serializeLVInfos :: [LVInfo] -> String
 serializeLVInfos = concatMap serializeLVInfo
 
 -- | Arbitrary instance for LVInfo.
+-- The instance is always Nothing because it is not part of the parsed data:
+-- it is added afterwards from a different source.
 instance Arbitrary LVInfo where
   arbitrary =
     LVInfo
@@ -111,6 +115,7 @@ instance Arbitrary LVInfo where
       <*> genName        -- seg_tags
       <*> genName        -- seg_pe_ranges
       <*> genName        -- devices
+      <*> return Nothing -- instance
 
 -- | Test if a randomly generated LV lvs output is properly parsed.
 prop_parse_lvs_lv :: [LVInfo] -> Property
-- 
1.8.3

Reply via email to