Skip to content

Commit 5017b8a

Browse files
authored
Merge pull request #100 from aegypius/add-env-argument-for-secret-mounts
feat: add env argument for secret mounts
2 parents dba56a7 + 74c2936 commit 5017b8a

File tree

3 files changed

+16
-6
lines changed

3 files changed

+16
-6
lines changed

src/Language/Docker/Parser/Run.hs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ data RunFlag
1919
deriving (Show)
2020

2121
data RunMountArg
22-
= MountArgFromImage Text
22+
= MountArgEnv Text
23+
| MountArgFromImage Text
2324
| MountArgId Text
2425
| MountArgMode Text
2526
| MountArgReadOnly Bool
@@ -161,13 +162,14 @@ secretMount args =
161162
Left e -> customError e
162163
Right as -> return $ foldr secretOpts def as
163164
where
164-
allowed = Set.fromList ["target", "id", "required", "source", "mode", "uid", "gid"]
165+
allowed = Set.fromList ["target", "id", "required", "source", "mode", "uid", "gid", "env"]
165166
required = Set.empty
166167
secretOpts :: RunMountArg -> SecretOpts -> SecretOpts
167168
secretOpts (MountArgTarget path) co = co {sTarget = Just path}
168169
secretOpts (MountArgId i) co = co {sCacheId = Just i}
169170
secretOpts (MountArgRequired r) co = co {sIsRequired = Just r}
170171
secretOpts (MountArgSource path) co = co {sSource = Just path}
172+
secretOpts (MountArgEnv e) co = co {sEnv = Just e}
171173
secretOpts (MountArgMode m) co = co {sMode = Just m}
172174
secretOpts (MountArgUid u) co = co {sUid = Just u}
173175
secretOpts (MountArgGid g) co = co {sGid = Just g}
@@ -223,7 +225,8 @@ mountChoices mountType =
223225
mountArgSource,
224226
mountArgMode,
225227
mountArgUid,
226-
mountArgGid
228+
mountArgGid,
229+
mountArgEnv
227230
]
228231

229232
stringArg :: (?esc :: Char) => Parser Text
@@ -239,6 +242,9 @@ cacheSharing :: Parser CacheSharing
239242
cacheSharing =
240243
choice [Private <$ string "private", Shared <$ string "shared", Locked <$ string "locked"]
241244

245+
mountArgEnv :: (?esc :: Char) => Parser RunMountArg
246+
mountArgEnv = MountArgEnv <$> key "env" stringArg
247+
242248
mountArgFromImage :: (?esc :: Char) => Parser RunMountArg
243249
mountArgFromImage = MountArgFromImage <$> key "from" stringArg
244250

@@ -317,6 +323,7 @@ mountArgUid :: (?esc :: Char) => Parser RunMountArg
317323
mountArgUid = MountArgUid <$> key "uid" stringArg
318324

319325
toArgName :: RunMountArg -> Text
326+
toArgName (MountArgEnv _) = "env"
320327
toArgName (MountArgFromImage _) = "from"
321328
toArgName (MountArgGid _) = "gid"
322329
toArgName (MountArgId _) = "id"

src/Language/Docker/Syntax.hs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,14 +297,15 @@ data SecretOpts
297297
sCacheId :: !(Maybe Text),
298298
sIsRequired :: !(Maybe Bool),
299299
sSource :: !(Maybe SourcePath),
300+
sEnv :: !(Maybe Text),
300301
sMode :: !(Maybe Text),
301302
sUid :: !(Maybe Text),
302303
sGid :: !(Maybe Text)
303304
}
304305
deriving (Eq, Show, Ord)
305306

306307
instance Default SecretOpts where
307-
def = SecretOpts Nothing Nothing Nothing Nothing Nothing Nothing Nothing
308+
def = SecretOpts Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing
308309

309310
data CacheSharing
310311
= Shared

test/Language/Docker/ParseRunSpec.hs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,14 +186,15 @@ spec = do
186186
[ Run $ RunArgs (ArgumentsText "echo foo") flags
187187
]
188188
it "--mount=type=secret all modifiers" $
189-
let file = Text.unlines ["RUN --mount=type=secret,target=/foo,id=a,required,source=/bar,mode=0700,uid=0,gid=0 echo foo"]
189+
let file = Text.unlines ["RUN --mount=type=secret,target=/foo,env=baz,id=a,required,source=/bar,mode=0700,uid=0,gid=0 echo foo"]
190190
flags =
191191
def
192192
{ mount =
193193
Set.singleton $
194194
SecretMount
195195
( def
196196
{ sTarget = Just "/foo",
197+
sEnv = Just "baz",
197198
sCacheId = Just "a",
198199
sIsRequired = Just True,
199200
sSource = Just "/bar",
@@ -208,14 +209,15 @@ spec = do
208209
[ Run $ RunArgs (ArgumentsText "echo foo") flags
209210
]
210211
it "--mount=type=secret all modifiers, required explicit" $
211-
let file = Text.unlines ["RUN --mount=type=secret,target=/foo,id=a,required=true,source=/bar,mode=0700,uid=0,gid=0 echo foo"]
212+
let file = Text.unlines ["RUN --mount=type=secret,target=/foo,env=baz,id=a,required=true,source=/bar,mode=0700,uid=0,gid=0 echo foo"]
212213
flags =
213214
def
214215
{ mount =
215216
Set.singleton $
216217
SecretMount
217218
( def
218219
{ sTarget = Just "/foo",
220+
sEnv = Just "baz",
219221
sCacheId = Just "a",
220222
sIsRequired = Just True,
221223
sSource = Just "/bar",

0 commit comments

Comments
 (0)