{"id":26414221,"url":"https://github.com/borisskert/ansible-timemachine","last_synced_at":"2026-05-10T03:09:44.646Z","repository":{"id":104037200,"uuid":"256681665","full_name":"borisskert/ansible-timemachine","owner":"borisskert","description":"Installs a timemachine server as docker container","archived":false,"fork":false,"pushed_at":"2024-12-17T09:15:25.000Z","size":79,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-17T23:58:13.264Z","etag":null,"topics":["ansible","ansible-role","docker","netatalk","systemd","systemd-unit","timemachine"],"latest_commit_sha":null,"homepage":null,"language":"Jinja","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/borisskert.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-04-18T06:04:15.000Z","updated_at":"2024-12-17T09:13:15.000Z","dependencies_parsed_at":null,"dependency_job_id":"d554f95e-43ea-468b-bc06-750fe6990ed4","html_url":"https://github.com/borisskert/ansible-timemachine","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/borisskert/ansible-timemachine","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/borisskert%2Fansible-timemachine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/borisskert%2Fansible-timemachine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/borisskert%2Fansible-timemachine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/borisskert%2Fansible-timemachine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/borisskert","download_url":"https://codeload.github.com/borisskert/ansible-timemachine/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/borisskert%2Fansible-timemachine/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260419637,"owners_count":23006321,"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":["ansible","ansible-role","docker","netatalk","systemd","systemd-unit","timemachine"],"created_at":"2025-03-17T23:58:15.746Z","updated_at":"2026-05-10T03:09:44.612Z","avatar_url":"https://github.com/borisskert.png","language":"Jinja","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ansible-timemachine\n\nInstalls a timemachine server as docker container.\n\n## System requirements\n\n* Docker\n* Systemd\n\n## Role requirements\n\n* (none so far)\n\n## What does this role\n\n* Template Dockerfile\n* Create volume paths for docker container\n* Template the initial netatalk config (including user and storage definition)\n* Setup systemd unit file\n* Start/Restart service\n\n## Role parameters\n\n### Main config\n\n| Variable                              | Type             | Mandatory? | Default             | Description                                            |\n|---------------------------------------|------------------|------------|---------------------|--------------------------------------------------------|\n| timemachine_alpine_version            | text             | no         | latest              | Your selected alpine version                           |\n| timemachine_netatalk_version          | text             | no         | latest              | Your selected netatalk version                         |\n| timemachine_image_name                | text             | no         | local/timemachine   | Docker image name                                      |\n| timemachine_force_build               | boolean          | no         | no                  | Forces to rebuild docker image                         |\n| timemachine_service_name              | text             | no         | timemachine         | The name of the systemd service                        |\n| timemachine_container_name            | text             | no         | timemachine.service | The name of the docker container                       |\n| timemachine_interface                 | ip address       | no         | 0.0.0.0             | Mapped network for web-interface ports                 |\n| timemachine_netatalk_port             | port             | no         | \u003cempty\u003e             | The default port (TCP) for netatalk is: 548            |\n| timemachine_host_name                 | text             | no         | \u003cempty\u003e             | The showed hostname by netatalk                        |\n| timemachine_config_volume             | path             | yes        | \u003cempty\u003e             | Path to config volume (which lays at /etc by default)  |\n| timemachine_storage_volume            | path             | yes        | \u003cempty\u003e             | Path to where your backups will be stored              |\n| timemachine_log_level                 | text             | no         | info                | Netatalk's configured log level (debug, info, ...)     |\n| timemachine_mimic_model               | text             | no         | \u003cempty\u003e             | Specifies the icon model that appears on clients       |\n| timemachine_default_volume_size_limit | number           | no         | 1000                | The default size limit for storage (1 GB in MiB)       |\n| timemachine_users                     | array of User    | no         | []                  | The users which will be registered to your timemachine |\n| timemachine_storages                  | array of Storage | no         | []                  | The storages for your users in your timemachine        |\n\n#### User definition\n\n| Variable        | Type    | Mandatory? | Default | Description                                       |\n|-----------------|---------|------------|---------|---------------------------------------------------|\n| username        | text    | yes        |         | The username of your user (has to be unique!)     |\n| password        | text    | yes        |         | The password of your user                         |\n| uid             | number  | yes        |         | The unix user id of your user (has to be unique!) |\n| update_password | boolean | no         | no      | Update the user's password                        |\n\n#### Storage definition\n\n| Variable   | Type   | Mandatory? | Default                                          | Description                                                  |\n|------------|--------|------------|--------------------------------------------------|--------------------------------------------------------------|\n| name       | text   | no         | Time Machine                                     | The name of the users storage                                |\n| path       | text   | yes        |                                                  | Where the storage will be located within the storages volume |\n| user       | text   | yes        |                                                  | Whom this storage belongs to                                 |\n| size_limit | number | no         | value of `timemachine_default_volume_size_limit` | The maximum size in MiB of this storage                      |\n\n## Usage\n\n### Requirements\n\n```yaml\n- name: install-timemachine\n  src: https://github.com/borisskert/ansible-timemachine.git\n  scm: git\n```\n\n### Playbook\n\n```yaml\n- hosts: test_machine\n  become: yes\n\n  roles:\n    - role: install-timemachine\n      timemachine_alpine_version: '3.11'\n      timemachine_netatalk_version: '3.1'\n      timemachine_host_name: my-ansible-timemachine\n      timemachine_storage_volume: /srv/timemachine/storage\n      timemachine_config_volume: /srv/timemachine/config\n      timemachine_interface: 0.0.0.0\n      timemachine_netatalk_port: 548\n      timemachine_log_level: error\n      timemachine_mimic_model: RackMac\n      timemachine_users:\n        - username: user1\n          password: psw1\n          uid: 2001\n        - username: user2\n          password: psw2\n          uid: 2002\n          update_password: yes\n      timemachine_storages:\n        - name: Time Machine user1\n          path: storage1\n          user: user1\n          size_limit: 256000\n        - name: Time Machine user2\n          path: storage2\n          user: user2\n          size_limit: 64000\n```\n\n## Testing\n\nRequirements:\n\n* [Vagrant](https://www.vagrantup.com/)\n* [VirtualBox](https://www.virtualbox.org/)\n* [libvirt](https://libvirt.org/)\n* [Ansible](https://docs.ansible.com/)\n* [Molecule](https://molecule.readthedocs.io/en/latest/index.html)\n* [yamllint](https://yamllint.readthedocs.io/en/stable/#)\n* [ansible-lint](https://docs.ansible.com/ansible-lint/)\n* [Docker](https://docs.docker.com/)\n\n### Run within docker\n\n```shell script\nmolecule test\nmolecule test --scenario-name all-parameters\n```\n\n### Run within Vagrant\n\n```shell script\n molecule test --scenario-name vagrant --parallel\n molecule test --scenario-name vagrant-all-parameters --parallel\n```\n\nI recommend to use [pyenv](https://github.com/pyenv/pyenv) for local testing.\nWithin the GitHub Actions pipeline I use [my own molecule action](https://github.com/borisskert/molecule-action).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fborisskert%2Fansible-timemachine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fborisskert%2Fansible-timemachine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fborisskert%2Fansible-timemachine/lists"}