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