Skip to content

Commit 4424d63

Browse files
committed
start: support file:// URL
Signed-off-by: Akihiro Suda <[email protected]>
1 parent 2676a15 commit 4424d63

File tree

1 file changed

+26
-3
lines changed

1 file changed

+26
-3
lines changed

cmd/limactl/start.go

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func loadOrCreateInstance(cmd *cobra.Command, args []string) (*store.Instance, e
5656
const yBytesLimit = 4 * 1024 * 1024 // 4MiB
5757

5858
if argSeemsHTTPURL(arg) {
59-
instName, err = instNameFromHTTPURL(arg)
59+
instName, err = instNameFromURL(arg)
6060
if err != nil {
6161
return nil, err
6262
}
@@ -70,6 +70,21 @@ func loadOrCreateInstance(cmd *cobra.Command, args []string) (*store.Instance, e
7070
if err != nil {
7171
return nil, err
7272
}
73+
} else if argSeemsFileURL(arg) {
74+
instName, err = instNameFromURL(arg)
75+
if err != nil {
76+
return nil, err
77+
}
78+
logrus.Debugf("interpreting argument %q as a file url for instance %q", arg, instName)
79+
r, err := os.Open(strings.TrimPrefix(arg, "file://"))
80+
if err != nil {
81+
return nil, err
82+
}
83+
defer r.Close()
84+
yBytes, err = readAtMaximum(r, yBytesLimit)
85+
if err != nil {
86+
return nil, err
87+
}
7388
} else if argSeemsYAMLPath(arg) {
7489
instName, err = instNameFromYAMLPath(arg)
7590
if err != nil {
@@ -276,6 +291,14 @@ func argSeemsHTTPURL(arg string) bool {
276291
return true
277292
}
278293

294+
func argSeemsFileURL(arg string) bool {
295+
u, err := url.Parse(arg)
296+
if err != nil {
297+
return false
298+
}
299+
return u.Scheme == "file"
300+
}
301+
279302
func argSeemsYAMLPath(arg string) bool {
280303
if strings.Contains(arg, "/") {
281304
return true
@@ -284,8 +307,8 @@ func argSeemsYAMLPath(arg string) bool {
284307
return strings.HasSuffix(lower, ".yml") || strings.HasSuffix(lower, ".yaml")
285308
}
286309

287-
func instNameFromHTTPURL(httpURL string) (string, error) {
288-
u, err := url.Parse(httpURL)
310+
func instNameFromURL(urlStr string) (string, error) {
311+
u, err := url.Parse(urlStr)
289312
if err != nil {
290313
return "", err
291314
}

0 commit comments

Comments
 (0)