Skip to content

Commit 18b8deb

Browse files
author
Yang Guo
committed
optimize logic where env variables in run shell cmd
1 parent 41bf37c commit 18b8deb

File tree

4 files changed

+31
-22
lines changed

4 files changed

+31
-22
lines changed

platform-api/src/main/java/com/flow/platform/api/domain/EnvObject.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,31 @@
1717
package com.flow.platform.api.domain;
1818

1919
import com.flow.platform.api.envs.EnvKey;
20+
import com.flow.platform.api.envs.EnvUtil;
2021
import com.flow.platform.api.envs.EnvValue;
2122
import com.flow.platform.domain.Jsonable;
2223
import com.flow.platform.yml.parser.annotations.YmlSerializer;
2324
import com.google.gson.annotations.Expose;
24-
import java.util.HashMap;
25+
import java.util.LinkedHashMap;
2526
import java.util.Map;
2627

2728
/**
2829
* The object with environment variables map
2930
*
3031
* @author yang
3132
*/
32-
public abstract class EnvObject extends Jsonable {
33+
public class EnvObject extends Jsonable {
3334

3435
@YmlSerializer(required = false)
3536
@Expose
36-
protected Map<String, String> envs = new HashMap<>();
37+
protected Map<String, String> envs = new LinkedHashMap<>();
38+
39+
public EnvObject() {
40+
}
41+
42+
public EnvObject(Map<String, String> envs) {
43+
this.envs = envs;
44+
}
3745

3846
public Map<String, String> getEnvs() {
3947
return envs;
@@ -82,6 +90,10 @@ public void putEnv(EnvKey key, String value) {
8290
envs.put(key.name(), value);
8391
}
8492

93+
public void putAll(Map<String, String> envs) {
94+
EnvUtil.merge(envs, this.envs, true);
95+
}
96+
8597
public void removeEnv(EnvKey key) {
8698
envs.remove(key.name());
8799
}

platform-api/src/main/java/com/flow/platform/api/service/job/CmdService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@
1616

1717
package com.flow.platform.api.service.job;
1818

19+
import com.flow.platform.api.domain.EnvObject;
1920
import com.flow.platform.api.domain.job.Job;
2021
import com.flow.platform.api.domain.node.Node;
2122
import com.flow.platform.core.exception.IllegalStatusException;
2223
import com.flow.platform.domain.AgentPath;
2324
import com.flow.platform.domain.CmdInfo;
24-
import java.util.Map;
2525

2626
/**
2727
* Control center cmd service gateway
@@ -49,7 +49,7 @@ public interface CmdService {
4949
* @return CmdInfo instance
5050
* @throws IllegalStatusException throw cmd cannot be sent
5151
*/
52-
CmdInfo runShell(Job job, Node node, String cmdId, Map<String, String> extra);
52+
CmdInfo runShell(Job job, Node node, String cmdId, EnvObject envVars);
5353

5454
/**
5555
* Send shutdown cmd to agent, and shutdown host machine

platform-api/src/main/java/com/flow/platform/api/service/job/CmdServiceImpl.java

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@
1616

1717
package com.flow.platform.api.service.job;
1818

19-
import com.flow.platform.api.envs.AgentEnvs;
20-
import com.flow.platform.api.envs.FlowEnvs;
19+
import com.flow.platform.api.domain.EnvObject;
2120
import com.flow.platform.api.domain.job.Job;
2221
import com.flow.platform.api.domain.node.Node;
22+
import com.flow.platform.api.envs.AgentEnvs;
23+
import com.flow.platform.api.envs.FlowEnvs;
2324
import com.flow.platform.api.util.PlatformURL;
2425
import com.flow.platform.core.exception.HttpException;
2526
import com.flow.platform.core.exception.IllegalParameterException;
@@ -35,9 +36,7 @@
3536
import com.flow.platform.util.http.HttpResponse;
3637
import com.flow.platform.util.http.HttpURL;
3738
import com.google.common.base.Strings;
38-
import com.google.common.collect.ImmutableMap;
3939
import java.io.UnsupportedEncodingException;
40-
import java.util.Map;
4140
import org.apache.http.entity.ContentType;
4241
import org.springframework.beans.factory.annotation.Autowired;
4342
import org.springframework.beans.factory.annotation.Value;
@@ -102,20 +101,15 @@ public void deleteSession(Job job) {
102101
}
103102

104103
@Override
105-
public CmdInfo runShell(Job job, Node node, String cmdId, Map<String, String> extra) {
106-
Map<String, String> envs = ImmutableMap.<String, String>builder()
107-
.putAll(node.getEnvs())
108-
.putAll(extra)
109-
.build();
110-
104+
public CmdInfo runShell(Job job, Node node, String cmdId, EnvObject envVars) {
111105
CmdInfo cmdInfo = new CmdInfo(zone, null, CmdType.RUN_SHELL, node.getScript());
112-
cmdInfo.setInputs(envs);
106+
cmdInfo.setInputs(envVars.getEnvs());
113107
cmdInfo.setWebhook(buildCmdWebhook(job));
114-
cmdInfo.setOutputEnvFilter(job.getEnv(FlowEnvs.FLOW_ENV_OUTPUT_PREFIX, "FLOW_OUTPUT"));
108+
cmdInfo.setOutputEnvFilter(envVars.getEnv(FlowEnvs.FLOW_ENV_OUTPUT_PREFIX, "FLOW_OUTPUT"));
115109
cmdInfo.setSessionId(job.getSessionId());
116110
cmdInfo.setExtra(node.getPath()); // use cmd.extra to keep node path info
117111
cmdInfo.setCustomizedId(cmdId);
118-
cmdInfo.setWorkingDir(job.getEnv(AgentEnvs.FLOW_AGENT_WORKSPACE, null));
112+
cmdInfo.setWorkingDir(envVars.getEnv(AgentEnvs.FLOW_AGENT_WORKSPACE, null));
119113

120114
try {
121115
LOGGER.traceMarker("RunShell", "step name - %s, node path - %s", node.getName(), node.getPath());

platform-api/src/main/java/com/flow/platform/api/service/job/JobServiceImpl.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.flow.platform.api.dao.job.JobYmlDao;
2828
import com.flow.platform.api.dao.job.NodeResultDao;
2929
import com.flow.platform.api.domain.CmdCallbackQueueItem;
30+
import com.flow.platform.api.domain.EnvObject;
3031
import com.flow.platform.api.domain.job.Job;
3132
import com.flow.platform.api.domain.job.JobCategory;
3233
import com.flow.platform.api.domain.job.JobStatus;
@@ -362,21 +363,23 @@ private void run(Node node, Job job) {
362363
return;
363364
}
364365

365-
// pass job env to node
366-
EnvUtil.merge(job.getEnvs(), node.getEnvs(), false);
366+
// create env vars instance which will pass to agent
367+
EnvObject envVars = new EnvObject();
368+
envVars.putAll(job.getEnvs());
367369

368370
// pass root node output to current node
369371
NodeResult rootResult = nodeResultService.find(tree.root().getPath(), job.getId());
370-
EnvUtil.merge(rootResult.getOutputs(), node.getEnvs(), false);
372+
envVars.putAll(rootResult.getOutputs());
371373

372374
// to run node with customized cmd id
373375
try {
374376
NodeResult nodeResult = nodeResultService.find(node.getPath(), job.getId());
375377

376378
Map<String, String> credentialEnvs = credentialService.find(node);
377379
EnvUtil.keepNewlineForEnv(credentialEnvs, null);
380+
envVars.putAll(credentialEnvs);
378381

379-
CmdInfo cmd = cmdService.runShell(job, node, nodeResult.getCmdId(), credentialEnvs);
382+
CmdInfo cmd = cmdService.runShell(job, node, nodeResult.getCmdId(), envVars);
380383
} catch (IllegalStatusException e) {
381384
CmdInfo rawCmd = (CmdInfo) e.getData();
382385
rawCmd.setStatus(CmdStatus.EXCEPTION);

0 commit comments

Comments
 (0)