@@ -2,7 +2,9 @@ import System.Environment (getArgs)
2import System.Exit (exitSuccess, exitFailure)
2import System.Exit (exitSuccess, exitFailure)
3import System.IO (hFlush, stdout)
3import System.IO (hFlush, stdout)
4import Control.Monad (unless, forM, forM_)
4import Control.Monad (unless, forM, forM_)
5+import Control.Monad.IO.Class (liftIO)
5import Control.Arrow (returnA)
6import Control.Arrow (returnA)
7+import Control.Exception (throwIO)
6import Control.Distributed.Process.Backend.Azure
8import Control.Distributed.Process.Backend.Azure
7 ( AzureParameters(azureSshUserName)
9 ( AzureParameters(azureSshUserName)
8 , defaultAzureParameters
10 , defaultAzureParameters
@@ -35,6 +37,9 @@ import Options.Applicative
37import Options.Applicative.Arrows (runA, asA)
39import 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)
39--------------------------------------------------------------------------------
44--------------------------------------------------------------------------------
40-- Command line options --
45-- Command line options --
@@ -83,7 +88,10 @@ data Command =
83 deriving Show
88 deriving Show
85data OnVmCommand =
90data OnVmCommand =
87 deriving Show
95 deriving Show
89azureOptionsParser :: Parser AzureOptions
97azureOptionsParser :: Parser AzureOptions
@@ -161,7 +169,15 @@ runOnParser = RunOn
161 <*> targetParser
169 <*> targetParser
163onVmRunParser :: Parser OnVmCommand
171onVmRunParser :: Parser OnVmCommand
164−onVmRunParser = pure OnVmRun
172+onVmRunParser = OnVmRun
173+ <$> strOption ( long "host"
177+ <*> strOption ( long "port"
179+ & help "port number"
166onVmCommandParser :: Parser Command
182onVmCommandParser :: Parser Command
167onVmCommandParser = OnVmCommand <$> subparser
183onVmCommandParser = OnVmCommand <$> subparser
@@ -212,7 +228,8 @@ main = do
212 runOnVM backend vm
228 runOnVM backend vm
213 putStrLn "Done"
229 putStrLn "Done"
214 OnVmCommand (vmCmd@OnVmRun {}) -> do
230 OnVmCommand (vmCmd@OnVmRun {}) -> do
215− putStrLn "Hello"
231+ let rtable = initRemoteTable
232+ onVmRun rtable (onVmIP vmCmd) (onVmPort vmCmd)
218 opts = info (helper <*> commandParser)
235 opts = info (helper <*> commandParser)
@@ -240,3 +257,16 @@ azureParameters opts (Just sshOpts) = do
240 return params {
257 return params {
241 azureSshUserName = remoteUser sshOpts
258 azureSshUserName = remoteUser sshOpts
261+onVmRun :: RemoteTable -> String -> String -> IO ()
262+onVmRun rtable host port = do
263+ mTransport <- createTransport host port defaultTCPParameters
265+ Left err -> throwIO err
266+ Right transport -> do
267+ node <- newLocalNode transport rtable
268+ runProcess node $ do
270+ liftIO . putStrLn $ "Azure controller has pid " ++ show pid