Skip to content

Commit 2d263c8

Browse files
feat: added no-default-provisioners flag to score-compose init (#293)
Signed-off-by: 7h3-3mp7y-m4n <[email protected]>
1 parent 94a9aac commit 2d263c8

File tree

2 files changed

+35
-19
lines changed

2 files changed

+35
-19
lines changed

internal/command/init.go

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,12 @@ service:
6969
7070
resources: {}
7171
`
72-
initCmdFileFlag = "file"
73-
initCmdFileProjectFlag = "project"
74-
initCmdFileNoSampleFlag = "no-sample"
75-
initCmdProvisionerFlag = "provisioners"
76-
initCmdPatchTemplateFlag = "patch-templates"
72+
initCmdFileFlag = "file"
73+
initCmdFileProjectFlag = "project"
74+
initCmdFileNoSampleFlag = "no-sample"
75+
initCmdProvisionerFlag = "provisioners"
76+
initCmdPatchTemplateFlag = "patch-templates"
77+
initCmdNoDefaultProvisionersFlag = "no-default-provisioners"
7778
)
7879

7980
//go:embed default.provisioners.yaml
@@ -208,21 +209,34 @@ URI Retrieval:
208209
}
209210

210211
// create and write the default provisioners file if it doesn't already exist
211-
dst := "zz-default" + loader.DefaultSuffix
212-
if f, err := os.Stat(filepath.Join(sd.Path, "99-default"+loader.DefaultSuffix)); err == nil {
213-
slog.Info(fmt.Sprintf("Default provisioners yaml file '%s' already exists, not overwriting it", f.Name()))
214-
} else if f, err := os.OpenFile(filepath.Join(sd.Path, dst), os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0644); err != nil {
215-
if !errors.Is(err, os.ErrExist) {
216-
return fmt.Errorf("failed to open default provisioners for writing: %w", err)
212+
disableDefaultProvisioners, err := cmd.Flags().GetBool(initCmdNoDefaultProvisionersFlag)
213+
if err != nil {
214+
return fmt.Errorf("failed to parse --%s flag: %w", initCmdNoDefaultProvisionersFlag, err)
215+
}
216+
217+
if !disableDefaultProvisioners {
218+
defaultProvisioners := filepath.Join(sd.Path, "zz-default.provisioners.yaml")
219+
220+
if _, err := os.Stat(defaultProvisioners); err != nil {
221+
if !errors.Is(err, os.ErrNotExist) {
222+
return fmt.Errorf("failed to check for existing default provisioners file: %w", err)
223+
}
224+
225+
f, err := os.OpenFile(defaultProvisioners, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0644)
226+
if err != nil {
227+
return fmt.Errorf("failed to create default provisioners file: %w", err)
228+
}
229+
defer f.Close()
230+
231+
slog.Info("Writing default provisioners file", "path", defaultProvisioners)
232+
if _, err := f.WriteString(defaultProvisionersContent); err != nil {
233+
return fmt.Errorf("failed to write default provisioners content: %w", err)
234+
}
235+
} else {
236+
slog.Info("Default provisioners file already exists, skipping", "path", defaultProvisioners)
217237
}
218-
slog.Info(fmt.Sprintf("Default provisioners yaml file '%s' already exists, not overwriting it", dst))
219238
} else {
220-
defer f.Close()
221-
slog.Info(fmt.Sprintf("Writing default provisioners yaml file '%s'", dst))
222-
if _, err = f.WriteString(defaultProvisionersContent); err != nil {
223-
return fmt.Errorf("failed to write provisioners: %w", err)
224-
}
225-
_ = f.Close()
239+
slog.Info("Skipping default provisioners due to --no-default-provisioners flag")
226240
}
227241
}
228242

@@ -270,7 +284,7 @@ URI Retrieval:
270284
slog.Debug(fmt.Sprintf("Successfully loaded %d resource provisioners", len(provs)))
271285
}
272286

273-
slog.Info(fmt.Sprintf("Read more about the Score specification at https://docs.score.dev/docs/"))
287+
slog.Info("Read more about the Score specification at https://docs.score.dev/docs/")
274288

275289
return nil
276290
},
@@ -282,6 +296,7 @@ func init() {
282296
initCmd.Flags().Bool(initCmdFileNoSampleFlag, false, "Disable generation of the sample score file")
283297
initCmd.Flags().StringArray(initCmdProvisionerFlag, nil, "Provisioner files to install. May be specified multiple times. Supports URI retrieval.")
284298
initCmd.Flags().StringArray(initCmdPatchTemplateFlag, nil, "Patching template files to include. May be specified multiple times. Supports URI retrieval.")
299+
initCmd.Flags().Bool(initCmdNoDefaultProvisionersFlag, false, "Disable generation of the default provisioners file")
285300

286301
rootCmd.AddCommand(initCmd)
287302
}

internal/command/init_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ URI Retrieval:
8888
Flags:
8989
-f, --file string The score file to initialize (default "./score.yaml")
9090
-h, --help help for init
91+
--no-default-provisioners Disable generation of the default provisioners file
9192
--no-sample Disable generation of the sample score file
9293
--patch-templates stringArray Patching template files to include. May be specified multiple times. Supports URI retrieval.
9394
-p, --project string Set the name of the docker compose project (defaults to the current directory name)

0 commit comments

Comments
 (0)