Skip to content

Commit 0e49030

Browse files
committed
Move podcvd/main.go into podcvd/cmd/podcvd/main.go
1 parent 927add3 commit 0e49030

File tree

4 files changed

+107
-82
lines changed

4 files changed

+107
-82
lines changed

container/debian/rules

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,18 @@
99

1010
GOBIN := $$(which go || echo /usr/lib/$$(ls /usr/lib | grep "^go-1." | sort -V | tail -1)/bin/go)
1111
PODCVD_SOURCE_DIR := src/podcvd
12+
PODCVD_BIN_DIR := ./cmd/podcvd
1213

1314
%:
1415
dh $@ --with=config-package
1516

1617
.PHONY: override_dh_auto_build
1718
override_dh_auto_build:
18-
(cd ${PODCVD_SOURCE_DIR} && $(GOBIN) build -v -buildmode=pie -ldflags="-w")
19+
(cd ${PODCVD_SOURCE_DIR} && $(GOBIN) build -v -buildmode=pie -ldflags="-w" ${PODCVD_BIN_DIR})
1920

2021
.PHONY: override_dh_auto_test
2122
override_dh_auto_test:
22-
(cd ${PODCVD_SOURCE_DIR} && $(GOBIN) test)
23+
(cd ${PODCVD_SOURCE_DIR} && $(GOBIN) test ./...)
2324
dh_auto_test
2425

2526
.PHONY: override_dh_installinit

container/src/podcvd/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ execute `cvd help` or `cvd create` after installing `cuttlefish-base`.
3737

3838
### Manually build podcvd binary
3939

40-
Execute `go build` from `container/src/podcvd` directory.
40+
Execute `go build ./cmd/podcvd` from `container/src/podcvd` directory.
4141

4242
### Manually build cuttlefish-podcvd debian package
4343

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
// Copyright (C) 2026 The Android Open Source Project
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package main
16+
17+
import (
18+
"os"
19+
20+
"github.com/google/android-cuttlefish/container/src/podcvd/internal"
21+
)
22+
23+
func main() {
24+
internal.Main(os.Args[1:])
25+
}
Lines changed: 78 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
package main
15+
package internal
1616

1717
import (
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+
3088
func 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

95153
func 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

Comments
 (0)