npm package: @hugojosefson/duplicati-generate-config
Description: Generate duplicati backup configs from a flat file
Author: Hugo Josefson
Latest version: 3.0.1

# @hugojosefson/duplicati-generate-config

_Generate [duplicati](https://www.duplicati.com/) backup configs from a flat file._

[![Build Status](https://travis-ci.org/hugojosefson/duplicati-generate-config.svg?branch=master)](https://travis-ci.org/hugojosefson/duplicati-generate-config)
[![Coverage Status](https://coveralls.io/repos/github/hugojosefson/duplicati-generate-config/badge.svg?branch=master)](https://coveralls.io/github/hugojosefson/duplicati-generate-config?branch=master)
[![npm page](https://img.shields.io/npm/v/@hugojosefson/duplicati-generate-config.svg)](https://npmjs.com/package/@hugojosefson/duplicati-generate-config)
[![License MIT](https://img.shields.io/npm/l/@hugojosefson/duplicati-generate-config.svg)](https://tldrlegal.com/license/mit-license)
[![SemVer 2.0.0](https://img.shields.io/badge/SemVer-2.0.0-lightgrey.svg)](http://semver.org/spec/v2.0.0.html)
[![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)

Currently hard-coded for:

-   `TargetURL` expected to be for B2 Cloud Storage by Backblaze (`b2://...`).
-   Filter expressions based on using
      [linuxserver/duplicati](https://hub.docker.com/r/linuxserver/duplicati/) in Docker.

## Prerequisite

Node.js, at least `v13.2.0`.

Recommended to install latest via [nvm](https://github.com/creationix/nvm#readme):

```bash
nvm install stable
```

## Usage

Just have the requisite Node.js installed, then:

```bash
npx @hugojosefson/duplicati-generate-config \
  template-duplicati-config.json \
  definitions.txt
```

Will read from `definitions.txt`, outputting config files to current directory, using
`template-duplicati-config.json` as template.

See also:

```bash
# show available commands, currently only 'generate'
npx @hugojosefson/duplicati-generate-config --help

# show available options for the 'generate' command
npx @hugojosefson/duplicati-generate-config generate --help
```

### Template file format

Export an existing configuration from duplicati, and use that file.

### Definitions file format

Example `definitions.txt`:

    # 1st line of every block is name of backup set.
    # 2nd line is source directory.
    # Following lines are exclusions.
    # Empty line denotes end of block, and that backup set.

    virtual-machines/Keep to b2 backblaze
    /home/me/virtual-machines/Keep

    Videos/programming to b2 backblaze
    /home/me/Videos/Programming

    Important Downloads to b2 backblaze
    /home/me/Important Downloads

    code/old-stuff to b2 backblaze
    /home/me/code/old-stuff
    */node_modules/
    */target/

    code to b2 backblaze
    /home/me/code
    /home/me/code/old-stuff/
    */node_modules/
    */target/

    /home/me to b2 backblaze
    /home/me
    /home/me/code/
    /home/me/virtual-machines/
    /home/me/Important Downloads/
    /home/me/Downloads/
    /home/me/duplicati/backups/
    /home/me/lost+found/
    /home/me/Videos/
    /home/me/.Trash-1000/
    */node_modules/
    */target/

## Programmatic access

You can also `import` the module, and use its exported functions programmatically.

### API

<!-- Generated by documentation.js. Update this documentation by updating the source code. -->

##### Table of Contents

-   [generateWriteSpecs](#generatewritespecs)
    -   [Parameters](#parameters)
-   [readFile](#readfile)
    -   [Parameters](#parameters-1)
-   [writeFile](#writefile)
    -   [Parameters](#parameters-2)

#### generateWriteSpecs

Converts duplicati template file contents, and backup definition flat file contents, into
definitions of what to write to disk.

##### Parameters

-   `options` **[Object](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object)** 
    -   `options.template` **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;[String](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>** Promise of the contents of the duplicati template config file.
    -   `options.definitions` **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;[String](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>** Promise of the contents of the backup definitions flat file.
    -   `options.outputDir` **[String](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Where to say in the returned writeDefinition to write the files. (optional, default `"."`)
    -   `options.namePrefix` **[String](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Prepended to each backup set name the definitions, to the resulting config file. (optional, default `""`)
    -   `options.nameSuffix` **[String](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Appended to each backup set name the definitions, to the resulting config file. (optional, default `" to b2 backblaze"`)
    -   `options.sourcePathPrefix` **[String](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Prepended to each source path in the definitions, to the resulting config file. (optional, default `"/source"`)
    -   `options.outputFilenamePrefix` **[String](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Prepended to each written config filename. (optional, default `""`)
    -   `options.outputFilenameSuffix` **[String](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Appended to each written config filename. (optional, default `"-duplicati-config.json"`)

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;\[{filename, contents}]>** A Promise definitions of what to write to disk

#### readFile

Reads a file.

##### Parameters

-   `filename` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Filename to read from.

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;[String](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>** A Promise of the contents of the file.

#### writeFile

Writes to a file.

##### Parameters

-   `filename` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** Filename to write to.
-   `contents` **[string](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)** String to write.

Returns **[Promise](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;[String](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String)>** A Promise of the filename written.

### Example API usage

Implementation of the `generate` CLI command, shows how the above API is used:

[src/cli-commands/generate.mjs](src/cli-commands/generate.mjs#L56)