in pkg/cmd/run.go [501:592]
func (o *runCmdOptions) createOrUpdateIntegration(cmd *cobra.Command, c client.Client, sources []string) (*v1.Integration, error) {
namespace := o.Namespace
name := o.GetIntegrationName(sources)
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)
if err := o.applyAnnotations(cmd, c, integration); err != nil {
return nil, err
}
if err := o.resolveSources(cmd, sources, integration); err != nil {
return nil, err
}
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, c, integration, name); err != nil {
return nil, err
}
if len(o.Traits) > 0 {
catalog := trait.NewCatalog(c)
if err := 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
}