mirror of https://github.com/micromata/borgbackup-butler.git

Kai Reinhard
07.29.2019 7325f6c31e1f7f6bd94a9e01e916de2c355bcae1
Environment variables are now built by BorgRepoConfig itself.
3 files modified
71 ■■■■ changed files
borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java 15 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepoConfig.java 43 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java 13 ●●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java
@@ -93,14 +93,11 @@
            return null;
        }
        Map<String, String> env = EnvironmentUtils.getProcEnvironment();
        addEnvironmentVariable(env, "BORG_REPO", repoConfig.getRepo());
        addEnvironmentVariable(env, "BORG_RSH", repoConfig.getRsh());
        addEnvironmentVariable(env, "BORG_PASSPHRASE", repoConfig.getPassphrase());
        String passcommand = repoConfig.getPasswordCommand();
        if (StringUtils.isNotBlank(passcommand)) {
        String[] variables = repoConfig.getEnvironmentVariables(true);
        for (String variable : variables) {
            // For MacOS BORG_PASSCOMMAND="security find-generic-password -a $USER -s borg-passphrase -w"
            passcommand = passcommand.replace("$USER", System.getProperty("user.name"));
            addEnvironmentVariable(env, "BORG_PASSCOMMAND", passcommand);
            String environmentVariable = variable.replace("$USER", System.getProperty("user.name"));
            addEnvironmentVariable(env, environmentVariable);
        }
        return env;
    }
@@ -108,6 +105,10 @@
    @Override
    public BorgJob<?> clone() {
        BorgJob<?> clone = new BorgJob<>();
        if (command != null) {
            // Needed for getting environment variables: JsonJob of borgbutler-server.
            clone.command = new BorgCommand().setRepoConfig(command.getRepoConfig());
        }
        clone.setUniqueJobNumber(getUniqueJobNumber());
        clone.setTitle(getTitle());
        clone.setExecuteStarted(isExecuteStarted());
borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepoConfig.java
@@ -1,25 +1,54 @@
package de.micromata.borgbutler.config;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.List;
public class BorgRepoConfig {
    /**
     * A name describing this config. Only used for displaying purposes.
     */
    @Getter @Setter
    @Getter
    @Setter
    private String displayName;
    @Getter @Setter
    @Getter
    @Setter
    private String repo;
    @Getter @Setter
    @Getter
    @Setter
    private String rsh;
    @Getter @Setter
    @Getter
    @Setter
    private String passphrase;
    @Getter @Setter
    @Getter
    @Setter
    private String passwordCommand;
    @Getter @Setter
    @Getter
    @Setter
    @JsonIgnore
    private String id;
    public String[] getEnvironmentVariables() {
        return getEnvironmentVariables(false);
    }
    public String[] getEnvironmentVariables(boolean showPassphrase) {
        List<String> variables = new ArrayList<>();
        addVariable(variables, "BORG_REPO", repo);
        addVariable(variables, "BORG_RSH", rsh);
        if (StringUtils.isNotBlank(passphrase)) {
            addVariable(variables, "BORG_PASSPHRASE", showPassphrase ? passphrase : "******");
        }
        addVariable(variables, "BORG_PASSCOMMAND", passwordCommand);
        return variables.toArray(new String[variables.size()]);
    }
    private void addVariable(List<String> list, String variable, String value) {
        if (StringUtils.isBlank(value)) return;
        list.add(variable + "=" + value);
    }
}
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java
@@ -141,11 +141,22 @@
    }
    /**
     *
     * @param env
     * @param variable Variable in format "variable=value".
     */
    protected void addEnvironmentVariable(Map<String, String> env, String variable) {
        if (StringUtils.isNotBlank(variable)) {
            EnvironmentUtils.addVariableToEnvironment(env, variable);
        }
    }
    /**
     * Frees the output streams.
     * Should be called after a job was done, failed or cancelled while running.
     */
    public void cleanUp() {
        log.info("Freeing resources of job: " + commandLineAsString);
        log.debug("Freeing resources of job: " + commandLineAsString);
        outputStream = null;
        errorOutputStream = null;
    }