1212// See the License for the specific language governing permissions and
1313// limitations under the License.
1414
15- package main
15+ package internal
1616
1717import (
1818 "context"
@@ -24,31 +24,89 @@ import (
2424 "sync"
2525
2626 "github.com/google/android-cuttlefish/container/src/libcfcontainer"
27- "github.com/google/android-cuttlefish/container/src/podcvd/internal"
2827)
2928
29+ func Main (args []string ) {
30+ cvdArgs := ParseCvdArgs (args )
31+ if len (cvdArgs .SubCommandArgs ) == 0 {
32+ cvdArgs .SubCommandArgs = []string {"help" }
33+ }
34+
35+ ccm , err := CuttlefishContainerManager ()
36+ if err != nil {
37+ log .Fatal (err )
38+ }
39+
40+ subcommand := cvdArgs .SubCommandArgs [0 ]
41+ if cvdArgs .HasHelpFlagOnSubCommandArgs () {
42+ switch subcommand {
43+ case "cache" , "clear" , "create" , "display" , "env" , "fetch" , "fleet" , "help" , "lint" , "load" , "login" , "powerbtn" , "powerwash" , "remove" , "reset" , "restart" , "resume" , "screen_recording" , "snapshot_take" , "status" , "stop" , "suspend" , "version" :
44+ cvdArgs .SubCommandArgs = []string {subcommand , "--help" }
45+ if err := handleToolingSubcommands (ccm , cvdArgs ); err != nil {
46+ log .Fatal (err )
47+ }
48+ case "bugreport" , "start" :
49+ // TODO(seungjaeyoo): Support help flag for other subcommands of cvd as well.
50+ log .Fatalf ("help flag support for subcommand %q is not implemented yet" , subcommand )
51+ default :
52+ log .Fatalf ("unknown subcommand %q" , subcommand )
53+ }
54+ } else {
55+ if err := CheckDeviceAccessible (); err != nil {
56+ log .Fatal (err )
57+ }
58+ switch subcommand {
59+ case "bugreport" , "create" , "display" , "env" , "powerbtn" , "powerwash" , "remove" , "restart" , "resume" , "screen_recording" , "snapshot_take" , "start" , "status" , "stop" , "suspend" :
60+ if err := handleSubcommandsForSingleInstanceGroup (ccm , cvdArgs ); err != nil {
61+ log .Fatal (err )
62+ }
63+ case "clear" , "reset" :
64+ if err := clearAllCuttlefishHosts (ccm ); err != nil {
65+ log .Fatal (err )
66+ }
67+ case "fleet" :
68+ if err := fleetAllCuttlefishHosts (ccm ); err != nil {
69+ log .Fatal (err )
70+ }
71+ case "help" , "login" , "version" :
72+ if err := handleToolingSubcommands (ccm , cvdArgs ); err != nil {
73+ log .Fatal (err )
74+ }
75+ case "fetch" :
76+ if err := ExecFetchCmdOnDisposableHost (ccm , cvdArgs ); err != nil {
77+ log .Fatal (err )
78+ }
79+ case "cache" , "lint" :
80+ // TODO(seungjaeyoo): Support other subcommands of cvd as well.
81+ log .Fatalf ("subcommand %q is not implemented yet" , subcommand )
82+ default :
83+ log .Fatalf ("unknown subcommand %q" , subcommand )
84+ }
85+ }
86+ }
87+
3088func disconnectAdb (ccm libcfcontainer.CuttlefishContainerManager , groupName string ) error {
31- stdout , err := ccm .ExecOnContainer (context .Background (), internal . ContainerName (groupName ), false , []string {"cvd" , "fleet" })
89+ stdout , err := ccm .ExecOnContainer (context .Background (), ContainerName (groupName ), false , []string {"cvd" , "fleet" })
3290 if err != nil {
3391 return err
3492 }
35- instanceGroup , err := internal . ParseInstanceGroups (stdout , groupName )
93+ instanceGroup , err := ParseInstanceGroups (stdout , groupName )
3694 if err != nil {
3795 return err
3896 }
39- return internal . DisconnectAdb (ccm , * instanceGroup )
97+ return DisconnectAdb (ccm , * instanceGroup )
4098}
4199
42- func handleSubcommandsForSingleInstanceGroup (ccm libcfcontainer.CuttlefishContainerManager , cvdArgs * internal. CvdArgs ) error {
100+ func handleSubcommandsForSingleInstanceGroup (ccm libcfcontainer.CuttlefishContainerManager , cvdArgs * CvdArgs ) error {
43101 subcommand := cvdArgs .SubCommandArgs [0 ]
44102 switch subcommand {
45103 case "create" :
46- if err := internal . CreateCuttlefishHost (ccm , cvdArgs .CommonArgs ); err != nil {
104+ if err := CreateCuttlefishHost (ccm , cvdArgs .CommonArgs ); err != nil {
47105 return err
48106 }
49107 default :
50108 if cvdArgs .CommonArgs .GroupName == "" {
51- groupNameIpAddrMap , err := internal . Ipv4AddressesByGroupNames (ccm )
109+ groupNameIpAddrMap , err := Ipv4AddressesByGroupNames (ccm )
52110 if err != nil {
53111 return fmt .Errorf ("failed to get IPv4 addresses for group names: %w" , err )
54112 }
@@ -70,30 +128,30 @@ func handleSubcommandsForSingleInstanceGroup(ccm libcfcontainer.CuttlefishContai
70128 // If the subcommand is 'remove', it doesn't need to execute cvd on the
71129 // container instance as it should be removed in the end.
72130 if subcommand == "remove" {
73- return internal . DeleteCuttlefishHost (ccm , cvdArgs .CommonArgs .GroupName )
131+ return DeleteCuttlefishHost (ccm , cvdArgs .CommonArgs .GroupName )
74132 }
75133 }
76134 args := append ([]string {"cvd" }, cvdArgs .SerializeCommonArgs ()... )
77135 args = append (args , cvdArgs .SubCommandArgs ... )
78- stdout , err := ccm .ExecOnContainer (context .Background (), internal . ContainerName (cvdArgs .CommonArgs .GroupName ), true , args )
136+ stdout , err := ccm .ExecOnContainer (context .Background (), ContainerName (cvdArgs .CommonArgs .GroupName ), true , args )
79137 if err != nil {
80138 return err
81139 }
82140 switch subcommand {
83141 case "create" , "start" :
84- instanceGroup , err := internal . ParseInstanceGroup (stdout , cvdArgs .CommonArgs .GroupName )
142+ instanceGroup , err := ParseInstanceGroup (stdout , cvdArgs .CommonArgs .GroupName )
85143 if err != nil {
86144 return err
87145 }
88- if err := internal . ConnectAdb (ccm , * instanceGroup ); err != nil {
146+ if err := ConnectAdb (ccm , * instanceGroup ); err != nil {
89147 return err
90148 }
91149 }
92150 return nil
93151}
94152
95153func clearAllCuttlefishHosts (ccm libcfcontainer.CuttlefishContainerManager ) error {
96- groupNameIpAddrMap , err := internal . Ipv4AddressesByGroupNames (ccm )
154+ groupNameIpAddrMap , err := Ipv4AddressesByGroupNames (ccm )
97155 if err != nil {
98156 return fmt .Errorf ("failed to get IPv4 addresses for group names: %w" , err )
99157 }
@@ -107,12 +165,12 @@ func clearAllCuttlefishHosts(ccm libcfcontainer.CuttlefishContainerManager) erro
107165 errCh <- err
108166 return
109167 }
110- errCh <- internal . DeleteCuttlefishHost (ccm , groupName )
168+ errCh <- DeleteCuttlefishHost (ccm , groupName )
111169 }()
112170 }
113171 go func () {
114172 defer wg .Done ()
115- errCh <- internal . DeleteToolingHost (ccm )
173+ errCh <- DeleteToolingHost (ccm )
116174 }()
117175 wg .Wait ()
118176 close (errCh )
@@ -128,7 +186,7 @@ func fleetAllCuttlefishHosts(ccm libcfcontainer.CuttlefishContainerManager) erro
128186 Groups []json.RawMessage `json:"groups"`
129187 }
130188
131- groupNameIpAddrMap , err := internal . Ipv4AddressesByGroupNames (ccm )
189+ groupNameIpAddrMap , err := Ipv4AddressesByGroupNames (ccm )
132190 if err != nil {
133191 return fmt .Errorf ("failed to get IPv4 addresses for group names: %w" , err )
134192 }
@@ -139,7 +197,7 @@ func fleetAllCuttlefishHosts(ccm libcfcontainer.CuttlefishContainerManager) erro
139197 for groupName := range groupNameIpAddrMap {
140198 go func () {
141199 defer wg .Done ()
142- stdout , err := ccm .ExecOnContainer (context .Background (), internal . ContainerName (groupName ), false , []string {"cvd" , "fleet" })
200+ stdout , err := ccm .ExecOnContainer (context .Background (), ContainerName (groupName ), false , []string {"cvd" , "fleet" })
143201 if err != nil {
144202 errCh <- err
145203 return
@@ -172,73 +230,14 @@ func fleetAllCuttlefishHosts(ccm libcfcontainer.CuttlefishContainerManager) erro
172230 return nil
173231}
174232
175- func handleToolingSubcommands (ccm libcfcontainer.CuttlefishContainerManager , cvdArgs * internal. CvdArgs ) error {
176- if err := internal . CreateToolingHost (ccm ); err != nil {
233+ func handleToolingSubcommands (ccm libcfcontainer.CuttlefishContainerManager , cvdArgs * CvdArgs ) error {
234+ if err := CreateToolingHost (ccm ); err != nil {
177235 return err
178236 }
179237 args := append ([]string {"cvd" }, cvdArgs .SerializeCommonArgs ()... )
180238 args = append (args , cvdArgs .SubCommandArgs ... )
181- if _ , err := ccm .ExecOnContainer (context .Background (), internal . ToolingContainerName , true , args ); err != nil {
239+ if _ , err := ccm .ExecOnContainer (context .Background (), ToolingContainerName , true , args ); err != nil {
182240 return err
183241 }
184242 return nil
185243}
186-
187- func main () {
188- cvdArgs := internal .ParseCvdArgs (os .Args [1 :])
189- if len (cvdArgs .SubCommandArgs ) == 0 {
190- cvdArgs .SubCommandArgs = []string {"help" }
191- }
192-
193- ccm , err := internal .CuttlefishContainerManager ()
194- if err != nil {
195- log .Fatal (err )
196- }
197-
198- subcommand := cvdArgs .SubCommandArgs [0 ]
199- if cvdArgs .HasHelpFlagOnSubCommandArgs () {
200- switch subcommand {
201- case "cache" , "clear" , "create" , "display" , "env" , "fetch" , "fleet" , "help" , "lint" , "load" , "login" , "powerbtn" , "powerwash" , "remove" , "reset" , "restart" , "resume" , "screen_recording" , "snapshot_take" , "status" , "stop" , "suspend" , "version" :
202- cvdArgs .SubCommandArgs = []string {subcommand , "--help" }
203- if err := handleToolingSubcommands (ccm , cvdArgs ); err != nil {
204- log .Fatal (err )
205- }
206- case "bugreport" , "start" :
207- // TODO(seungjaeyoo): Support help flag for other subcommands of cvd as well.
208- log .Fatalf ("help flag support for subcommand %q is not implemented yet" , subcommand )
209- default :
210- log .Fatalf ("unknown subcommand %q" , subcommand )
211- }
212- } else {
213- if err := internal .CheckDeviceAccessible (); err != nil {
214- log .Fatal (err )
215- }
216- switch subcommand {
217- case "bugreport" , "create" , "display" , "env" , "powerbtn" , "powerwash" , "remove" , "restart" , "resume" , "screen_recording" , "snapshot_take" , "start" , "status" , "stop" , "suspend" :
218- if err := handleSubcommandsForSingleInstanceGroup (ccm , cvdArgs ); err != nil {
219- log .Fatal (err )
220- }
221- case "clear" , "reset" :
222- if err := clearAllCuttlefishHosts (ccm ); err != nil {
223- log .Fatal (err )
224- }
225- case "fleet" :
226- if err := fleetAllCuttlefishHosts (ccm ); err != nil {
227- log .Fatal (err )
228- }
229- case "help" , "login" , "version" :
230- if err := handleToolingSubcommands (ccm , cvdArgs ); err != nil {
231- log .Fatal (err )
232- }
233- case "fetch" :
234- if err := internal .ExecFetchCmdOnDisposableHost (ccm , cvdArgs ); err != nil {
235- log .Fatal (err )
236- }
237- case "cache" , "lint" :
238- // TODO(seungjaeyoo): Support other subcommands of cvd as well.
239- log .Fatalf ("subcommand %q is not implemented yet" , subcommand )
240- default :
241- log .Fatalf ("unknown subcommand %q" , subcommand )
242- }
243- }
244- }
0 commit comments