(ctx context.Context, project *types.Project, service types.ServiceConfig, path, command string)
| 204 | } |
| 205 | |
| 206 | func (s *composeService) setupPluginCommand(ctx context.Context, project *types.Project, service types.ServiceConfig, path, command string) (*exec.Cmd, error) { |
| 207 | cmdOptionsMetadata := s.getPluginMetadata(path, service.Provider.Type, project) |
| 208 | var currentCommandMetadata CommandMetadata |
| 209 | switch command { |
| 210 | case "up": |
| 211 | currentCommandMetadata = cmdOptionsMetadata.Up |
| 212 | case "down": |
| 213 | currentCommandMetadata = cmdOptionsMetadata.Down |
| 214 | case "stop": |
| 215 | if cmdOptionsMetadata.Stop == nil { |
| 216 | return nil, nil |
| 217 | } |
| 218 | currentCommandMetadata = *cmdOptionsMetadata.Stop |
| 219 | } |
| 220 | |
| 221 | provider := *service.Provider |
| 222 | commandMetadataIsEmpty := cmdOptionsMetadata.IsEmpty() |
| 223 | if err := currentCommandMetadata.CheckRequiredParameters(provider); !commandMetadataIsEmpty && err != nil { |
| 224 | return nil, err |
| 225 | } |
| 226 | |
| 227 | args := []string{"compose", fmt.Sprintf("--project-name=%s", project.Name), command} |
| 228 | for k, v := range provider.Options { |
| 229 | for _, value := range v { |
| 230 | if _, ok := currentCommandMetadata.GetParameter(k); commandMetadataIsEmpty || ok { |
| 231 | args = append(args, fmt.Sprintf("--%s=%s", k, value)) |
| 232 | } |
| 233 | } |
| 234 | } |
| 235 | args = append(args, service.Name) |
| 236 | |
| 237 | cmd := exec.CommandContext(ctx, path, args...) |
| 238 | |
| 239 | err := s.prepareShellOut(ctx, project.Environment, cmd) |
| 240 | if err != nil { |
| 241 | return nil, err |
| 242 | } |
| 243 | return cmd, nil |
| 244 | } |
| 245 | |
| 246 | func (s *composeService) getPluginMetadata(path, command string, project *types.Project) ProviderMetadata { |
| 247 | cmd := exec.Command(path, "compose", "metadata") |
no test coverage detected