in pkg/cmd/run.go [524:627]
func (o *runCmdOptions) createOrUpdateIntegration(cmd *cobra.Command, c client.Client, sources []string) (*v1.Integration, error) {
namespace := o.Namespace
name, err := o.GetIntegrationName(sources)
if err != nil {
return nil, err
}
if name == "" {
return nil, errors.New("unable to determine integration name")
}
integration, existing, err := o.getIntegration(cmd, c, namespace, name)
if err != nil {
return nil, err
}
var integrationKit *corev1.ObjectReference
if o.IntegrationKit != "" {
integrationKit = &corev1.ObjectReference{
Namespace: namespace,
Name: o.IntegrationKit,
}
}
integration.Spec = v1.IntegrationSpec{
Dependencies: make([]string, 0, len(o.Dependencies)),
IntegrationKit: integrationKit,
Configuration: make([]v1.ConfigurationSpec, 0),
Repositories: o.Repositories,
Profile: v1.TraitProfileByName(o.Profile),
}
o.applyLabels(integration)
o.applyAnnotations(integration)
//nolint:gocritic
if o.isSourceLess() {
// Resolve resources
if err := o.resolveSources(cmd, sources, integration); err != nil {
return nil, err
}
} else if o.ContainerImage != "" {
// Self Managed Integration as the user provided a container image built externally
o.Traits = append(o.Traits, fmt.Sprintf("container.image=%s", o.ContainerImage))
} else if o.GitRepo != "" {
integration.Spec.Git = &v1.GitConfigSpec{
URL: o.GitRepo,
}
} else {
return nil, errors.New("you must provide a source, an image or a git repository parameters")
}
if err := resolvePodTemplate(context.Background(), cmd, o.PodTemplate, &integration.Spec); err != nil {
return nil, err
}
if err := o.convertOptionsToTraits(cmd, c, integration); err != nil {
return nil, err
}
if err := o.applyDependencies(cmd, integration); err != nil {
return nil, err
}
if len(o.Traits) > 0 {
catalog := trait.NewCatalog(c)
if err := trait.ConfigureTraits(o.Traits, &integration.Spec.Traits, catalog); err != nil {
return nil, err
}
}
if o.ServiceAccount != "" {
integration.Spec.ServiceAccountName = o.ServiceAccount
}
if o.OutputFormat != "" {
return nil, showIntegrationOutput(cmd, integration, o.OutputFormat)
}
if existing == nil {
err = c.Create(o.Context, integration)
if err != nil {
return nil, err
}
fmt.Fprintln(cmd.OutOrStdout(), `Integration "`+name+`" created`)
} else {
patch := ctrl.MergeFrom(existing)
d, err := patch.Data(integration)
if err != nil {
return nil, err
}
if string(d) == "{}" {
fmt.Fprintln(cmd.OutOrStdout(), `Integration "`+name+`" unchanged`)
return integration, nil
}
err = c.Patch(o.Context, integration, patch)
if err != nil {
return nil, err
}
fmt.Fprintln(cmd.OutOrStdout(), `Integration "`+name+`" updated`)
}
return integration, nil
}