@@ -2,7 +2,9 @@ import System.Environment (getArgs)
2
2
import System.Exit (exitSuccess , exitFailure )
3
3
import System.IO (hFlush , stdout )
4
4
import Control.Monad (unless , forM , forM_ )
5
+ import Control.Monad.IO.Class (liftIO )
5
6
import Control.Arrow (returnA )
7
+ import Control.Exception (throwIO )
6
8
import Control.Distributed.Process.Backend.Azure
7
9
( AzureParameters (azureSshUserName )
8
10
, defaultAzureParameters
@@ -35,6 +37,9 @@ import Options.Applicative
35
37
, switch
36
38
)
37
39
import Options.Applicative.Arrows (runA , asA )
40
+ import Control.Distributed.Process (getSelfPid , RemoteTable )
41
+ import Control.Distributed.Process.Node (newLocalNode , runProcess , initRemoteTable )
42
+ import Network.Transport.TCP (createTransport , defaultTCPParameters )
38
43
39
44
--------------------------------------------------------------------------------
40
45
-- Command line options --
@@ -83,7 +88,10 @@ data Command =
83
88
deriving Show
84
89
85
90
data OnVmCommand =
86
- OnVmRun
91
+ OnVmRun {
92
+ onVmIP :: String
93
+ , onVmPort :: String
94
+ }
87
95
deriving Show
88
96
89
97
azureOptionsParser :: Parser AzureOptions
@@ -161,7 +169,15 @@ runOnParser = RunOn
161
169
<*> targetParser
162
170
163
171
onVmRunParser :: Parser OnVmCommand
164
- onVmRunParser = pure OnVmRun
172
+ onVmRunParser = OnVmRun
173
+ <$> strOption ( long " host"
174
+ & metavar " IP"
175
+ & help " IP address"
176
+ )
177
+ <*> strOption ( long " port"
178
+ & metavar " PORT"
179
+ & help " port number"
180
+ )
165
181
166
182
onVmCommandParser :: Parser Command
167
183
onVmCommandParser = OnVmCommand <$> subparser
@@ -212,7 +228,8 @@ main = do
212
228
runOnVM backend vm
213
229
putStrLn " Done"
214
230
OnVmCommand (vmCmd@ OnVmRun {}) -> do
215
- putStrLn " Hello"
231
+ let rtable = initRemoteTable
232
+ onVmRun rtable (onVmIP vmCmd) (onVmPort vmCmd)
216
233
SSH. exit
217
234
where
218
235
opts = info (helper <*> commandParser)
@@ -240,3 +257,16 @@ azureParameters opts (Just sshOpts) = do
240
257
return params {
241
258
azureSshUserName = remoteUser sshOpts
242
259
}
260
+
261
+ onVmRun :: RemoteTable -> String -> String -> IO ()
262
+ onVmRun rtable host port = do
263
+ mTransport <- createTransport host port defaultTCPParameters
264
+ case mTransport of
265
+ Left err -> throwIO err
266
+ Right transport -> do
267
+ node <- newLocalNode transport rtable
268
+ runProcess node $ do
269
+ pid <- getSelfPid
270
+ liftIO . putStrLn $ " Azure controller has pid " ++ show pid
271
+
272
+
0 commit comments