in pkg/trait/openapi.go [193:317]
func (t *openAPITrait) createNewOpenAPIConfigMap(e *Environment, resource v1.DataSpec, tmpDir, generatedContentName string) error {
tmpDir = filepath.Join(tmpDir, generatedContentName)
err := os.MkdirAll(tmpDir, os.ModePerm)
if err != nil {
return err
}
content := []byte(resource.Content)
if resource.Compression {
content, err = gzip.UncompressBase64(content)
if err != nil {
return err
}
}
in := filepath.Join(tmpDir, resource.Name)
out := filepath.Join(tmpDir, "openapi-dsl.xml")
err = os.WriteFile(in, content, 0o400)
if err != nil {
return err
}
project, err := t.generateMavenProject(e)
if err != nil {
return err
}
mc := maven.NewContext(tmpDir)
mc.LocalRepository = e.Platform.Status.Build.Maven.LocalRepository
mc.AdditionalArguments = e.Platform.Status.Build.Maven.CLIOptions
mc.AddArgument("-Dopenapi.spec=" + in)
mc.AddArgument("-Ddsl.out=" + out)
if settings, err := kubernetes.ResolveValueSource(e.Ctx, e.Client, e.Platform.Namespace, &e.Platform.Status.Build.Maven.Settings); err != nil {
return err
} else if settings != "" {
mc.UserSettings = []byte(settings)
}
settings, err := maven.NewSettings(maven.DefaultRepositories, maven.ProxyFromEnvironment)
if err != nil {
return err
}
data, err := settings.MarshalBytes()
if err != nil {
return err
}
mc.GlobalSettings = data
secrets := e.Platform.Status.Build.Maven.CASecrets
if secrets != nil {
certsData, err := kubernetes.GetSecretsRefData(e.Ctx, e.Client, e.Platform.Namespace, secrets)
if err != nil {
return err
}
trustStoreName := "trust.jks"
trustStorePass := jvm.NewKeystorePassword()
err = jvm.GenerateKeystore(e.Ctx, tmpDir, trustStoreName, trustStorePass, certsData)
if err != nil {
return err
}
mc.ExtraMavenOpts = append(mc.ExtraMavenOpts,
"-Djavax.net.ssl.trustStore="+trustStoreName,
"-Djavax.net.ssl.trustStorePassword="+trustStorePass,
)
}
ctx, cancel := context.WithTimeout(e.Ctx, e.Platform.Status.Build.GetTimeout().Duration)
defer cancel()
err = project.Command(mc).Do(ctx)
if err != nil {
return err
}
content, err = util.ReadFile(out)
if err != nil {
return err
}
if resource.Compression {
c, err := gzip.CompressBase64(content)
if err != nil {
return err
}
content = c
}
// Compute the input digest and store it along with the configmap
hash, err := digest.ComputeForResource(resource)
if err != nil {
return err
}
// Store the generated rest xml in a separate config map in order
// not to pollute the integration with generated data
cm := corev1.ConfigMap{
TypeMeta: metav1.TypeMeta{
Kind: "ConfigMap",
APIVersion: "v1",
},
ObjectMeta: metav1.ObjectMeta{
Name: generatedContentName,
Namespace: e.Integration.Namespace,
Labels: map[string]string{
v1.IntegrationLabel: e.Integration.Name,
},
Annotations: map[string]string{
"camel.apache.org/source.language": string(v1.LanguageXML),
"camel.apache.org/source.name": resource.Name,
"camel.apache.org/source.compression": strconv.FormatBool(resource.Compression),
"camel.apache.org/source.generated": "true",
"camel.apache.org/source.type": "openapi",
"camel.apache.org/source.digest": hash,
},
},
Data: map[string]string{
"content": string(content),
},
}
e.Resources.Add(&cm)
return nil
}