Skip to content

Commit fe68f30

Browse files
committed
add config_map usage
1 parent 38db5b3 commit fe68f30

1 file changed

Lines changed: 74 additions & 4 deletions

File tree

src/main/java/it/reply/orchestrator/service/deployment/providers/ImServiceImpl.java

Lines changed: 74 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@
8383
import java.util.Collections;
8484
import java.util.Comparator;
8585
import java.util.HashMap;
86+
import java.util.LinkedHashMap;
8687
import java.util.LinkedHashSet;
8788
import java.util.List;
8889
import java.util.Map;
@@ -104,6 +105,8 @@
104105
import org.springframework.http.HttpStatus;
105106
import org.springframework.stereotype.Service;
106107
import org.springframework.web.client.RestTemplate;
108+
import org.yaml.snakeyaml.DumperOptions;
109+
import org.yaml.snakeyaml.Yaml;
107110
import 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

Comments
 (0)