8383import java .util .Collections ;
8484import java .util .Comparator ;
8585import java .util .HashMap ;
86+ import java .util .LinkedHashMap ;
8687import java .util .LinkedHashSet ;
8788import java .util .List ;
8889import java .util .Map ;
104105import org .springframework .http .HttpStatus ;
105106import org .springframework .stereotype .Service ;
106107import org .springframework .web .client .RestTemplate ;
108+ import org .yaml .snakeyaml .DumperOptions ;
109+ import org .yaml .snakeyaml .Yaml ;
107110import software .amazon .awssdk .services .s3 .S3Client ;
108111
109112@ Service
@@ -207,6 +210,70 @@ private void exchangeTokenForKubernetes(OidcTokenId requestedWithToken,
207210 oauth2TokenService .setAccessToken (requestedWithToken , newToken );
208211 }
209212
213+ public static String resolveTemplate (String yamlTemplate ) {
214+ Yaml yaml = new Yaml ();
215+ Object rootObj = yaml .load (yamlTemplate );
216+
217+ if (!(rootObj instanceof Map )) {
218+ throw new IllegalArgumentException (
219+ "Template not valid" );
220+ }
221+
222+ Map <String , Object > root = (Map <String , Object >) rootObj ;
223+
224+ // Extract inputs
225+ Map <String , Object > inputs = new HashMap <>();
226+ if (root .containsKey ("inputs" )) {
227+ Map <String , Object > inputDefs = (Map <String , Object >) root .get ("inputs" );
228+ for (Map .Entry <String , Object > entry : inputDefs .entrySet ()) {
229+ Object val = entry .getValue ();
230+ if (val instanceof Map && ((Map <String , Object >) val ).containsKey ("default" )) {
231+ inputs .put (entry .getKey (), ((Map <String , Object >) val ).get ("default" ));
232+ }
233+ }
234+ }
235+
236+ // Resolve inputs
237+ Object resolvedRoot = resolve (root , inputs );
238+
239+ // Dump resolved template
240+ DumperOptions options = new DumperOptions ();
241+ options .setDefaultFlowStyle (DumperOptions .FlowStyle .BLOCK );
242+ options .setPrettyFlow (true );
243+ Yaml dumper = new Yaml (options );
244+
245+ return dumper .dump (resolvedRoot );
246+ }
247+
248+ // Recursive method to resolve get_input in a node
249+ @ SuppressWarnings ("unchecked" )
250+ private static Object resolve (Object node , Map <String , Object > inputs ) {
251+ if (node instanceof Map ) {
252+ Map <String , Object > map = (Map <String , Object >) node ;
253+
254+ // Caso singolo: { get_input: qualcosa }
255+ if (map .size () == 1 && map .containsKey ("get_input" )) {
256+ String key = String .valueOf (map .get ("get_input" ));
257+ return inputs .getOrDefault (key , map );
258+ }
259+
260+ Map <String , Object > resolved = new LinkedHashMap <>();
261+ for (Map .Entry <String , Object > entry : map .entrySet ()) {
262+ resolved .put (entry .getKey (), resolve (entry .getValue (), inputs ));
263+ }
264+ return resolved ;
265+
266+ } else if (node instanceof List ) {
267+ List <Object > resolvedList = new ArrayList <>();
268+ for (Object item : (List <?>) node ) {
269+ resolvedList .add (resolve (item , inputs ));
270+ }
271+ return resolvedList ;
272+ }
273+
274+ return node ;
275+ }
276+
210277 private void deleteExternalResources (RestTemplate restTemplate ,
211278 Map <Boolean , Set <Resource >> resources , String userGroup , Boolean isForce , String accessToken )
212279 throws S3ServiceException {
@@ -586,7 +653,12 @@ public boolean doDeploy(DeploymentMessage deploymentMessage) {
586653 toscaService .setDeploymentClientIam (ar , iamTemplateOutput );
587654 toscaService .setDeploymentS3Buckets (ar , s3TemplateOutput );
588655
589- String imCustomizedTemplate = toscaService .serialize (ar );
656+ List <CloudProviderEndpoint > cloudProviderEndpoints =
657+ deployment .getCloudProviderEndpoint ().getAllCloudProviderEndpoint ();
658+ String imCustomizedTemplate =
659+ cloudProviderEndpoints .get (0 ).getIaasType ().equals (IaaSType .KUBERNETES )
660+ ? resolveTemplate (deployment .getTemplate ())
661+ : toscaService .serialize (ar );
590662
591663 ObjectMapper objectMapper = new ObjectMapper ();
592664
@@ -609,10 +681,8 @@ public boolean doDeploy(DeploymentMessage deploymentMessage) {
609681 LOG .error (e .getMessage ());
610682 }
611683
612- List <CloudProviderEndpoint > cloudProviderEndpoints =
613- deployment .getCloudProviderEndpoint ().getAllCloudProviderEndpoint ();
614-
615684 if (cloudProviderEndpoints .get (0 ).getIaasType ().equals (IaaSType .KUBERNETES )) {
685+ LOG .info (imCustomizedTemplate );
616686 try {
617687 exchangeTokenForKubernetes (requestedWithToken , cloudProviderEndpoints );
618688 } catch (RuntimeException e ) {
0 commit comments