@@ -31,6 +31,7 @@ data RunMountArg
3131 | MountArgType MountType
3232 | MountArgUid Text
3333 | MountArgGid Text
34+ | MountArgRelabel Relabel
3435 deriving (Show )
3536
3637data MountType
@@ -87,11 +88,11 @@ runFlagMount = do
8788 args <- mountArgs `sepBy1` string " ,"
8889 mt <- parseTypeFromArgs args
8990 case mt of
90- Bind -> BindMount <$> ( bindMount $ filter (not . isMountArgType) args)
91- Cache -> CacheMount <$> ( cacheMount $ filter (not . isMountArgType) args)
92- Tmpfs -> TmpfsMount <$> ( tmpfsMount $ filter (not . isMountArgType) args)
93- Secret -> SecretMount <$> ( secretMount $ filter (not . isMountArgType) args)
94- Ssh -> SshMount <$> ( secretMount $ filter (not . isMountArgType) args)
91+ Bind -> BindMount <$> bindMount ( filter (not . isMountArgType) args)
92+ Cache -> CacheMount <$> cacheMount ( filter (not . isMountArgType) args)
93+ Tmpfs -> TmpfsMount <$> tmpfsMount ( filter (not . isMountArgType) args)
94+ Secret -> SecretMount <$> secretMount ( filter (not . isMountArgType) args)
95+ Ssh -> SshMount <$> secretMount ( filter (not . isMountArgType) args)
9596
9697parseTypeFromArgs :: [RunMountArg ] -> Parser MountType
9798parseTypeFromArgs args =
@@ -101,8 +102,8 @@ parseTypeFromArgs args =
101102 -- input arguments and not consume any input.
102103 case filter isMountArgType args of
103104 [] -> Bind <$ notFollowedBy eof
104- [( MountArgType t) ] -> t <$ notFollowedBy eof
105- _: _ -> fail $ " --mount with multiple `type` arguments"
105+ [MountArgType t] -> t <$ notFollowedBy eof
106+ _: _ -> fail " --mount with multiple `type` arguments"
106107
107108isMountArgType :: RunMountArg -> Bool
108109isMountArgType (MountArgType _) = True
@@ -114,13 +115,14 @@ bindMount args =
114115 Left e -> customError e
115116 Right as -> return $ foldr bindOpts def as
116117 where
117- allowed = Set. fromList [" target" , " source" , " from" , " ro" ]
118+ allowed = Set. fromList [" target" , " source" , " from" , " ro" , " relabel " ]
118119 required = Set. singleton " target"
119120 bindOpts :: RunMountArg -> BindOpts -> BindOpts
120121 bindOpts (MountArgTarget path) bo = bo {bTarget = path}
121122 bindOpts (MountArgSource path) bo = bo {bSource = Just path}
122123 bindOpts (MountArgFromImage img) bo = bo {bFromImage = Just img}
123124 bindOpts (MountArgReadOnly ro) bo = bo {bReadOnly = Just ro}
125+ bindOpts (MountArgRelabel re) bo = bo {bRelabel = Just re}
124126 bindOpts invalid _ = error $ " unhandled " <> show invalid <> " please report this bug"
125127
126128cacheMount :: [RunMountArg ] -> Parser CacheOpts
@@ -204,6 +206,7 @@ mountArgs =
204206 mountArgId,
205207 mountArgMode,
206208 mountArgReadOnly,
209+ mountArgRelabel,
207210 mountArgRequired,
208211 mountArgSharing,
209212 mountArgSource,
@@ -318,6 +321,12 @@ mountType =
318321mountArgUid :: (? esc :: Char ) => Parser RunMountArg
319322mountArgUid = MountArgUid <$> key " uid" stringArg
320323
324+ mountArgRelabel :: Parser RunMountArg
325+ mountArgRelabel = MountArgRelabel <$> key " relabel" relabel
326+
327+ relabel :: Parser Relabel
328+ relabel = choice [RelabelShared <$ string " shared" , RelabelPrivate <$ string " private" ]
329+
321330toArgName :: RunMountArg -> Text
322331toArgName (MountArgEnv _) = " env"
323332toArgName (MountArgFromImage _) = " from"
@@ -331,3 +340,4 @@ toArgName (MountArgSource _) = "source"
331340toArgName (MountArgTarget _) = " target"
332341toArgName (MountArgType _) = " type"
333342toArgName (MountArgUid _) = " uid"
343+ toArgName (MountArgRelabel _) = " relabel"
0 commit comments