diff --git a/cmd/init.go b/cmd/init.go index b49b2cf1..e03bbe28 100644 --- a/cmd/init.go +++ b/cmd/init.go @@ -264,5 +264,6 @@ func init() { initCmd.PersistentFlags().StringArrayVar(&initOptions.OrgNames, "org-name", []string{}, "Organization name") initCmd.PersistentFlags().StringArrayVar(&initOptions.NodeNames, "node-name", []string{}, "Node name") initCmd.PersistentFlags().BoolVar(&initOptions.RemoteNodeDeploy, "remote-node-deploy", false, "Enable or disable deployment of FireFly contracts on remote nodes") + initCmd.PersistentFlags().StringVarP(&initOptions.CustomPath, "override", "o", "", "copy data from custom path to docker-compose.override.yml") rootCmd.AddCommand(initCmd) } diff --git a/internal/stacks/stack_manager.go b/internal/stacks/stack_manager.go index a239ce0d..aa53c449 100644 --- a/internal/stacks/stack_manager.go +++ b/internal/stacks/stack_manager.go @@ -188,6 +188,11 @@ func (s *StackManager) InitStack(options *types.InitOptions) (err error) { if err := s.writeDockerComposeOverride(compose); err != nil { return fmt.Errorf("failed to write docker-compose.override.yml: %s", err) } + if options.CustomPath != "" { + if err := s.copyToDockerComposeOverride(options.CustomPath); err != nil { + return fmt.Errorf("failed to copy file data to docker-compose.override.yml: %s", err) + } + } return s.writeConfig(options) } @@ -416,6 +421,20 @@ func (s *StackManager) writeDockerComposeOverride(compose *docker.DockerComposeC return os.WriteFile(filepath.Join(s.Stack.StackDir, "docker-compose.override.yml"), bytes, 0755) } +func (s *StackManager) copyToDockerComposeOverride(dockerComposePath string) error { + comments := "# Copy custom file to docker-compose.override.yml file\n" + bytes := []byte(comments) + + dockerPath := filepath.Join(s.Stack.StackDir, dockerComposePath) + overrideComposeContent, err := os.ReadFile(dockerPath) + if err != nil && os.IsNotExist(err) { + return err + } + bytes = append(bytes, overrideComposeContent...) + override := filepath.Join(s.Stack.StackDir, "docker-compose.override.yml") + return os.WriteFile(override, bytes, 0775) +} + func (s *StackManager) writeStackConfig() error { stackConfigBytes, err := json.MarshalIndent(s.Stack, "", " ") if err != nil { diff --git a/pkg/types/options.go b/pkg/types/options.go index 7d182744..95e1ffb7 100644 --- a/pkg/types/options.go +++ b/pkg/types/options.go @@ -64,6 +64,7 @@ type InitOptions struct { ChaincodeName string CustomPinSupport bool RemoteNodeDeploy bool + CustomPath string } const IPFSMode = "ipfs_mode"