@@ -793,6 +793,46 @@ func (s *service) buildRootDrive(req *proto.CreateVMRequest) []models.Drive {
793
793
return builder .Build ()
794
794
}
795
795
796
+ func (s * service ) newIOProxy (logger * logrus.Entry , stdin , stdout , stderr string , extraData * proto.ExtraData ) (vm.IOProxy , error ) {
797
+ var ioConnectorSet vm.IOProxy
798
+
799
+ relVSockPath , err := s .jailer .JailPath ().FirecrackerVSockRelPath ()
800
+ if err != nil {
801
+ return nil , errors .Wrapf (err , "failed to get relative path to firecracker vsock" )
802
+ }
803
+
804
+ if vm .IsAgentOnlyIO (stdout , logger ) {
805
+ ioConnectorSet = vm .NewNullIOProxy ()
806
+ } else {
807
+ var stdinConnectorPair * vm.IOConnectorPair
808
+ if stdin != "" {
809
+ stdinConnectorPair = & vm.IOConnectorPair {
810
+ ReadConnector : vm .ReadFIFOConnector (stdin ),
811
+ WriteConnector : vm .VSockDialConnector (relVSockPath , extraData .StdinPort ),
812
+ }
813
+ }
814
+
815
+ var stdoutConnectorPair * vm.IOConnectorPair
816
+ if stdout != "" {
817
+ stdoutConnectorPair = & vm.IOConnectorPair {
818
+ ReadConnector : vm .VSockDialConnector (relVSockPath , extraData .StdoutPort ),
819
+ WriteConnector : vm .WriteFIFOConnector (stdout ),
820
+ }
821
+ }
822
+
823
+ var stderrConnectorPair * vm.IOConnectorPair
824
+ if stderr != "" {
825
+ stderrConnectorPair = & vm.IOConnectorPair {
826
+ ReadConnector : vm .VSockDialConnector (relVSockPath , extraData .StderrPort ),
827
+ WriteConnector : vm .WriteFIFOConnector (stderr ),
828
+ }
829
+ }
830
+
831
+ ioConnectorSet = vm .NewIOConnectorProxy (stdinConnectorPair , stdoutConnectorPair , stderrConnectorPair )
832
+ }
833
+ return ioConnectorSet , nil
834
+ }
835
+
796
836
func (s * service ) Create (requestCtx context.Context , request * taskAPI.CreateTaskRequest ) (* taskAPI.CreateTaskResponse , error ) {
797
837
logger := s .logger .WithField ("task_id" , request .ID )
798
838
defer logPanicAndDie (logger )
@@ -863,41 +903,9 @@ func (s *service) Create(requestCtx context.Context, request *taskAPI.CreateTask
863
903
return nil , err
864
904
}
865
905
866
- relVSockPath , err := s .jailer . JailPath (). FirecrackerVSockRelPath ( )
906
+ ioConnectorSet , err := s .newIOProxy ( logger , request . Stdin , request . Stdout , request . Stderr , extraData )
867
907
if err != nil {
868
- return nil , errors .Wrapf (err , "failed to get relative path to firecracker vsock" )
869
- }
870
-
871
- var ioConnectorSet vm.IOProxy
872
-
873
- if vm .IsAgentOnlyIO (request .Stdout , logger ) {
874
- ioConnectorSet = vm .NewNullIOProxy ()
875
- } else {
876
- var stdinConnectorPair * vm.IOConnectorPair
877
- if request .Stdin != "" {
878
- stdinConnectorPair = & vm.IOConnectorPair {
879
- ReadConnector : vm .FIFOConnector (request .Stdin ),
880
- WriteConnector : vm .VSockDialConnector (relVSockPath , extraData .StdinPort ),
881
- }
882
- }
883
-
884
- var stdoutConnectorPair * vm.IOConnectorPair
885
- if request .Stdout != "" {
886
- stdoutConnectorPair = & vm.IOConnectorPair {
887
- ReadConnector : vm .VSockDialConnector (relVSockPath , extraData .StdoutPort ),
888
- WriteConnector : vm .FIFOConnector (request .Stdout ),
889
- }
890
- }
891
-
892
- var stderrConnectorPair * vm.IOConnectorPair
893
- if request .Stderr != "" {
894
- stderrConnectorPair = & vm.IOConnectorPair {
895
- ReadConnector : vm .VSockDialConnector (relVSockPath , extraData .StderrPort ),
896
- WriteConnector : vm .FIFOConnector (request .Stderr ),
897
- }
898
- }
899
-
900
- ioConnectorSet = vm .NewIOConnectorProxy (stdinConnectorPair , stdoutConnectorPair , stderrConnectorPair )
908
+ return nil , err
901
909
}
902
910
903
911
// override the request with the bundle dir that should be used inside the VM
@@ -993,41 +1001,9 @@ func (s *service) Exec(requestCtx context.Context, req *taskAPI.ExecProcessReque
993
1001
return nil , err
994
1002
}
995
1003
996
- relVSockPath , err := s .jailer . JailPath (). FirecrackerVSockRelPath ( )
1004
+ ioConnectorSet , err := s .newIOProxy ( logger , req . Stdin , req . Stdout , req . Stderr , extraData )
997
1005
if err != nil {
998
- return nil , errors .Wrapf (err , "failed to get relative path to firecracker vsock" )
999
- }
1000
-
1001
- var ioConnectorSet vm.IOProxy
1002
-
1003
- if vm .IsAgentOnlyIO (req .Stdout , logger ) {
1004
- ioConnectorSet = vm .NewNullIOProxy ()
1005
- } else {
1006
- var stdinConnectorPair * vm.IOConnectorPair
1007
- if req .Stdin != "" {
1008
- stdinConnectorPair = & vm.IOConnectorPair {
1009
- ReadConnector : vm .FIFOConnector (req .Stdin ),
1010
- WriteConnector : vm .VSockDialConnector (relVSockPath , extraData .StdinPort ),
1011
- }
1012
- }
1013
-
1014
- var stdoutConnectorPair * vm.IOConnectorPair
1015
- if req .Stdout != "" {
1016
- stdoutConnectorPair = & vm.IOConnectorPair {
1017
- ReadConnector : vm .VSockDialConnector (relVSockPath , extraData .StdoutPort ),
1018
- WriteConnector : vm .FIFOConnector (req .Stdout ),
1019
- }
1020
- }
1021
-
1022
- var stderrConnectorPair * vm.IOConnectorPair
1023
- if req .Stderr != "" {
1024
- stderrConnectorPair = & vm.IOConnectorPair {
1025
- ReadConnector : vm .VSockDialConnector (relVSockPath , extraData .StderrPort ),
1026
- WriteConnector : vm .FIFOConnector (req .Stderr ),
1027
- }
1028
- }
1029
-
1030
- ioConnectorSet = vm .NewIOConnectorProxy (stdinConnectorPair , stdoutConnectorPair , stderrConnectorPair )
1006
+ return nil , err
1031
1007
}
1032
1008
1033
1009
resp , err := s .taskManager .ExecProcess (requestCtx , req , s .agentClient , ioConnectorSet )
0 commit comments