{"id":13582510,"url":"https://github.com/ecadlabs/rosdump","last_synced_at":"2026-03-16T08:33:55.415Z","repository":{"id":33040876,"uuid":"150153120","full_name":"ecadlabs/rosdump","owner":"ecadlabs","description":"rosdump backups Mikrotik/RouterOS devices, and stores the backup on disk or in git","archived":false,"fork":false,"pushed_at":"2021-11-23T20:30:44.000Z","size":1829,"stargazers_count":21,"open_issues_count":7,"forks_count":5,"subscribers_count":6,"default_branch":"master","last_synced_at":"2024-11-05T22:41:38.820Z","etag":null,"topics":["backups","mikrotik","networking","routeros"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ecadlabs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-09-24T18:55:21.000Z","updated_at":"2024-06-14T12:16:40.000Z","dependencies_parsed_at":"2022-08-07T19:30:31.070Z","dependency_job_id":null,"html_url":"https://github.com/ecadlabs/rosdump","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecadlabs%2Frosdump","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecadlabs%2Frosdump/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecadlabs%2Frosdump/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ecadlabs%2Frosdump/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ecadlabs","download_url":"https://codeload.github.com/ecadlabs/rosdump/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224379943,"owners_count":17301550,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backups","mikrotik","networking","routeros"],"created_at":"2024-08-01T15:02:46.957Z","updated_at":"2026-03-16T08:33:55.369Z","avatar_url":"https://github.com/ecadlabs.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"Rosdump\n=========\n\n[![CircleCI](https://circleci.com/gh/ecadlabs/rosdump/tree/master.svg?style=svg)](https://circleci.com/gh/ecadlabs/rosdump/tree/master)\n\n\nrosdump is a tool for backing up and optionally tracking configuration of\nRouterOS devices.\n\nUse rosdump to:\n\n- Backup Mikrotik network device configurations to your local file system\n- Backup Mikrotik network device configurations to a git repository\n- Run as a daemon that backs up devices on a predefined schedule\n\n\n# Quick Start\n\nThe following example uses the docker image to backup a RouterOS device. Create\na config named `rosdump.yml` on your computer using the example below. \n\nSpecify the IP address, admin user and password of your own device.\n\n## Config example that writes backup to local filesystem\n\n```yaml\nversion: 1\n\ndevices:\n  list:\n    - host: 192.168.88.1\n  common: # Overrides per-device settings\n    driver: ssh-command\n    timeout: 30s # See https://golang.org/pkg/time/#ParseDuration\n    command: export\n    username: admin\n    password: password\n\nstorage:\n  driver: file\n  timeout: 30s\n  path: '/opt/backups/{{.host}}/{{.time.UTC.Format \"2006-01-02T15:04:05Z07:00\"}}'\n\ntimeout: 30s # Optional timeout for a whole work cycle\ninterval: 4h # Duration between backups when running as a daemon\n```\n\nAssuming your config file is named `rosdump.yaml`, and you have docker\ninstalled on your computer, run the following command:\n\n```\ndocker run --rm \\\n        -v $(realpath rosdump.yml):/etc/rosdump.yml \\\n        -v $(realpath backups):/opt/backups ecadlabs/rosdump\n```\n\nYou will now have a backup of your configuration in a directory named\n`backups/` in your present working directory.\n\n# Configuration Schema\n\n## Exporter drivers\n\n### Common options\n\n| Name    | Type                | Default     | Required | Description |\n| ------- | ------------------- | ----------- | -------- | ----------- |\n| driver  | string              | ssh-command |          | Driver name |\n| timeout | string/duration[^1] |             |          |             |\n\n### ssh-command\n\n| Name          | Type    | Default | Required | Description                       |\n| ------------- | ------- | ------- | -------- | --------------------------------- |\n| name          | string  |         |          | Optional device name              |\n| host          | string  |         | ✓        | Host address                      |\n| port          | integer | 22      |          | SSH port                          |\n| username      | string  |         | ✓        | User name                         |\n| password      | string  |         |          | Password                          |\n| identity_file | string  |         |          | SSH private key file              |\n| command       | string  | export  |          | Command to run on a remote device |\n\n## Storage drivers\n\n### Common options\n\n| Name    | Type                | Default | Required | Description |\n| ------- | ------------------- | ------- | -------- | ----------- |\n| driver  | string              |         | ✓        | Driver name |\n| timeout | string/duration[^1] |         |          |             |\n\n### file\n\n| Name     | Type            | Default | Required | Description          |\n| -------- | --------------- | ------- | -------- | -------------------- |\n| path     | string/template |         | ✓        | Destination path     |\n| compress | boolean         | false   |          | Use gzip compression |\n\n### git\n\n| Name             | Type            | Default | Required | Description                                                  |\n| ---------------- | --------------- | ------- | -------- | ------------------------------------------------------------ |\n| repository_path  | string          |         |          | Local repository path. In-memory storage will be used if not specified. |\n| url              | string          |         |          | URL to clone if the specified repository is not initialised. In-memory storage is always empty at startup so cloning will be performed anyway in this case. |\n| pull             | boolean         |         |          | Pull changes from remote repository on startup (only if cloning is not required, see above). |\n| username         | string          |         |          | User name (overrides one from URL)                           |\n| password         | string          |         |          | Password (overrides one from URL)                            |\n| identity_file    | string          |         |          | SSH private key file                                         |\n| remote_name      | string          |         |          | Name of the remote to be pulled. If empty, uses the default. |\n| reference_name   | string          |         |          | Remote branch to clone. If empty, uses HEAD.                 |\n| push             | boolean         |         |          | Push after commit                                            |\n| ref_specs        | array           |         |          | Specifies what destination ref to update with what source    |\n| destination_path | string/template |         | ✓        | Target path template relative to work tree                   |\n| name             | string          |         | ✓        | Author name                                                  |\n| email            | string          |         | ✓        | Author email                                                 |\n| commit_message   | string/template |         | ✓        | Commit message                                               |\n\n[^1]: https://golang.org/pkg/time/#ParseDuration\n\n#### Example config for git storage\n\n```yaml\nversion: 1\n\ndevices:\n  list:\n    - host: 192.168.88.1\n  common:\n    driver: ssh-command\n    timeout: 30s\n    command: export\n    username: admin\n    identity_file: /etc/rosdump/routeros_admin_private_key\n\nstorage:\n  driver: git\n  timeout: 30s\n  url: git@github.com:yourorg/networkbackups.git\n  identity_file: /etc/rosdump/git_deploy_key\n  destination_path: '{{.host}}'\n  push: true\n  name: Network Backup\n  email: networkbackup@example.net\n  commit_message: 'Rosdump backup {{.time.UTC.Format \"2006-01-02T15:04:05Z07:00\"}}'\n\ntimeout: 30s\ninterval: 4h\n```\n\n## Template data fields (transaction metadata)\n\nCurrently `ssh-command` driver exposes all its options (except password) as a transaction metadata. Additionally `time` field is set to transaction timestamp (see the description of Go `time.Time` type).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fecadlabs%2Frosdump","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fecadlabs%2Frosdump","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fecadlabs%2Frosdump/lists"}